chore(license): relicense artwork and move non-free media out (#3173)
@@ -1,4 +1,5 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later AND MIT
|
||||
// SPDX-FileCopyrightText: 2022 adryd
|
||||
|
||||
import styles from '@app/features/accessibility/components/NekoSprite.module.css';
|
||||
import Accessibility from '@app/features/accessibility/state/Accessibility';
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
export function hostedImageUrl(name: string): string {
|
||||
return `https://fluxer.app/static/img/${name}`;
|
||||
}
|
||||
@@ -7,9 +7,13 @@
|
||||
}
|
||||
|
||||
.video {
|
||||
display: block;
|
||||
width: 100%;
|
||||
max-width: 25rem;
|
||||
height: auto;
|
||||
aspect-ratio: 2 / 1;
|
||||
margin-bottom: 1rem;
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
.sectionTitle {
|
||||
|
||||
@@ -4,6 +4,7 @@ import Accessibility from '@app/features/accessibility/state/Accessibility';
|
||||
import * as Modal from '@app/features/app/components/dialogs/Modal';
|
||||
import {useAnimatedMediaVideoPlayback} from '@app/features/app/hooks/useAnimatedMediaPlayback';
|
||||
import {useSaveData} from '@app/features/app/hooks/useSaveData';
|
||||
import RuntimeConfig from '@app/features/app/state/RuntimeConfig';
|
||||
import * as GuildCommands from '@app/features/guild/commands/GuildCommands';
|
||||
import {
|
||||
CUSTOM_ELLIPSIS_DESCRIPTOR,
|
||||
@@ -16,6 +17,7 @@ import {
|
||||
import {showModerationErrorModal} from '@app/features/moderation/components/alerts/ModerationErrorModalUtils';
|
||||
import styles from '@app/features/moderation/components/modals/BanMemberModal.module.css';
|
||||
import {BAN_DELETE_MESSAGE_OPTIONS} from '@app/features/moderation/constants/BanDeleteMessageOptions';
|
||||
import {BANNED_MP4, BANNED_POSTER, BANNED_WEBM} from '@app/features/moderation/constants/BanModalMedia';
|
||||
import {Logger} from '@app/features/platform/utils/AppLogger';
|
||||
import {Button} from '@app/features/ui/button/Button';
|
||||
import * as ModalCommands from '@app/features/ui/commands/ModalCommands';
|
||||
@@ -25,9 +27,6 @@ import {Input} from '@app/features/ui/components/form/FormInput';
|
||||
import {RadioGroup} from '@app/features/ui/radio_group/RadioGroup';
|
||||
import type {User} from '@app/features/user/models/User';
|
||||
import * as DisplayNameUtils from '@app/features/user/utils/DisplayNameUtils';
|
||||
import bannedMp4 from '@app/media/videos/banned.mp4';
|
||||
import bannedWebm from '@app/media/videos/banned.webm';
|
||||
import bannedPoster from '@app/media/videos/banned.webp';
|
||||
import {MAX_TEMP_BAN_DURATION_SECONDS, MIN_TEMP_BAN_DURATION_SECONDS} from '@fluxer/constants/src/LimitConstants';
|
||||
import {msg} from '@lingui/core/macro';
|
||||
import {Trans, useLingui} from '@lingui/react/macro';
|
||||
@@ -101,7 +100,8 @@ export const BanMemberModal: React.FC<{guildId: string; targetUser: User}> = obs
|
||||
const {i18n} = useLingui();
|
||||
const videoRef = useRef<HTMLVideoElement>(null);
|
||||
const dataSaverOn = useSaveData();
|
||||
const motionArtworkAllowed = !Accessibility.useReducedMotion && !dataSaverOn;
|
||||
const showArtwork = !RuntimeConfig.isSelfHosted();
|
||||
const motionArtworkAllowed = showArtwork && !Accessibility.useReducedMotion && !dataSaverOn;
|
||||
const videoPlaybackAllowed = useAnimatedMediaVideoPlayback(videoRef, {enabled: motionArtworkAllowed});
|
||||
const [reason, setReason] = useState('');
|
||||
const [deleteMessageSeconds, setDeleteMessageSeconds] = useState<number>(60 * 60 * 24);
|
||||
@@ -160,22 +160,26 @@ export const BanMemberModal: React.FC<{guildId: string; targetUser: User}> = obs
|
||||
loop
|
||||
muted
|
||||
playsInline
|
||||
poster={bannedPoster}
|
||||
poster={BANNED_POSTER}
|
||||
width={480}
|
||||
height={240}
|
||||
className={styles.video}
|
||||
data-flx="moderation.ban-member-modal.video"
|
||||
>
|
||||
<source src={bannedWebm} type="video/webm" data-flx="moderation.ban-member-modal.source.video-webm" />
|
||||
<source src={bannedMp4} type="video/mp4" data-flx="moderation.ban-member-modal.source.video-mp4" />
|
||||
<source src={BANNED_WEBM} type="video/webm" data-flx="moderation.ban-member-modal.source.video-webm" />
|
||||
<source src={BANNED_MP4} type="video/mp4" data-flx="moderation.ban-member-modal.source.video-mp4" />
|
||||
</video>
|
||||
) : (
|
||||
) : showArtwork ? (
|
||||
<img
|
||||
src={bannedPoster}
|
||||
src={BANNED_POSTER}
|
||||
alt=""
|
||||
width={480}
|
||||
height={240}
|
||||
aria-hidden={true}
|
||||
className={styles.video}
|
||||
data-flx="moderation.ban-member-modal.video-still"
|
||||
/>
|
||||
)}
|
||||
) : null}
|
||||
<div data-flx="moderation.ban-member-modal.div">
|
||||
<FormCombobox<number>
|
||||
label={i18n._(BAN_DURATION_DESCRIPTOR)}
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {hostedImageUrl} from '@app/features/app/config/HostedMedia';
|
||||
|
||||
export const BANNED_MP4 = hostedImageUrl('app-banned.57f4a7f02835e746.mp4');
|
||||
export const BANNED_WEBM = hostedImageUrl('app-banned.7b2a4c17603fbe1c.webm');
|
||||
export const BANNED_POSTER = hostedImageUrl('app-banned.da3d66d03a7c4962.webp');
|
||||
@@ -778,6 +778,11 @@
|
||||
.perkRowFlipped {
|
||||
grid-template-columns: 5fr 7fr;
|
||||
}
|
||||
|
||||
.perkRowTextOnly {
|
||||
grid-template-columns: minmax(0, 1fr);
|
||||
padding-block: 2.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
.perkArtColumn {
|
||||
|
||||
@@ -30,6 +30,7 @@ import {
|
||||
resolveUploadSizes,
|
||||
} from '@app/features/premium/components/plutonium_page/PlutoniumPageComparison';
|
||||
import {PlutoniumPageIcon} from '@app/features/premium/components/plutonium_page/PlutoniumPageIcons';
|
||||
import {CROWN_AVIF, CROWN_WEBP} from '@app/features/premium/components/plutonium_page/PlutoniumPageMedia';
|
||||
import {
|
||||
BACK_DESCRIPTOR,
|
||||
CLOSING_BODY_DESCRIPTOR,
|
||||
@@ -74,8 +75,6 @@ import FocusRing from '@app/features/ui/focus_ring/FocusRing';
|
||||
import MobileLayout from '@app/features/ui/state/MobileLayout';
|
||||
import Users from '@app/features/user/state/Users';
|
||||
import * as LocaleUtils from '@app/features/user/utils/LocaleUtils';
|
||||
import crownAvif from '@app/media/images/plutonium/plutonium-crown.avif';
|
||||
import crownWebp from '@app/media/images/plutonium/plutonium-crown.webp';
|
||||
import {GuildFeatures} from '@fluxer/constants/src/GuildConstants';
|
||||
import {getFormattedLongDate} from '@fluxer/date_utils/src/DateFormatting';
|
||||
import {Trans, useLingui} from '@lingui/react/macro';
|
||||
@@ -451,22 +450,24 @@ export const PlutoniumPage = observer(function PlutoniumPage() {
|
||||
)}
|
||||
<section className={styles.hero} data-flx="premium.plutonium-page.hero">
|
||||
<div className={styles.heroInner}>
|
||||
<div className={styles.crownWrap}>
|
||||
<picture>
|
||||
<source type="image/avif" srcSet={crownAvif} />
|
||||
<img
|
||||
draggable={false}
|
||||
className={styles.crown}
|
||||
src={crownWebp}
|
||||
width={480}
|
||||
height={395}
|
||||
alt=""
|
||||
decoding="sync"
|
||||
fetchPriority="high"
|
||||
data-flx="premium.plutonium-page.hero.crown"
|
||||
/>
|
||||
</picture>
|
||||
</div>
|
||||
{!RuntimeConfig.isSelfHosted() && (
|
||||
<div className={styles.crownWrap}>
|
||||
<picture>
|
||||
<source type="image/avif" srcSet={CROWN_AVIF} />
|
||||
<img
|
||||
draggable={false}
|
||||
className={styles.crown}
|
||||
src={CROWN_WEBP}
|
||||
width={480}
|
||||
height={395}
|
||||
alt=""
|
||||
decoding="sync"
|
||||
fetchPriority="high"
|
||||
data-flx="premium.plutonium-page.hero.crown"
|
||||
/>
|
||||
</picture>
|
||||
</div>
|
||||
)}
|
||||
<h1 className={styles.displayHeading} data-flx="premium.plutonium-page.hero.title">
|
||||
{PREMIUM_PRODUCT_FULL_NAME}
|
||||
</h1>
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {hostedImageUrl} from '@app/features/app/config/HostedMedia';
|
||||
|
||||
export const CROWN_AVIF = hostedImageUrl('perks-plutonium-crown.4d0b72644330bf10.avif');
|
||||
export const CROWN_WEBP = hostedImageUrl('perks-plutonium-crown.3265aa6b4147b19b.webp');
|
||||
|
||||
export const AVATAR_LSF = hostedImageUrl('perks-avatar-lsf.0800cc17b7d31b5e.webp');
|
||||
export const BANNER_LSF = hostedImageUrl('perks-banner-lsf.05f2565afc72a167.webp');
|
||||
export const EMOJI_CATVIBE = hostedImageUrl('perks-emoji-catvibe.28e83552cc9a26c2.webp');
|
||||
export const EMOJI_CATWAVE = hostedImageUrl('perks-emoji-catwave.663abebab1c327fb.webp');
|
||||
export const STICKER_FEEL_THAT = hostedImageUrl('perks-sticker-feel-that.3eae385d2d9cc99a.webp');
|
||||
|
||||
type ShotSet = [string, string, string];
|
||||
|
||||
export interface ShotFamily {
|
||||
avif: ShotSet;
|
||||
webp: ShotSet;
|
||||
}
|
||||
|
||||
function hostedShotSet([small, medium, large]: ShotSet): ShotSet {
|
||||
return [hostedImageUrl(small), hostedImageUrl(medium), hostedImageUrl(large)];
|
||||
}
|
||||
|
||||
function shotFamily(avif: ShotSet, webp: ShotSet): ShotFamily {
|
||||
return {avif: hostedShotSet(avif), webp: hostedShotSet(webp)};
|
||||
}
|
||||
|
||||
export const EXPRESSIONS_SHOTS = shotFamily(
|
||||
[
|
||||
'screenshots-feature-perk-expressions-640w.481d53f29ebbe154.avif',
|
||||
'screenshots-feature-perk-expressions-1120w.609f056dd55a176f.avif',
|
||||
'screenshots-feature-perk-expressions-1600w.35a92d3fc43fa858.avif',
|
||||
],
|
||||
[
|
||||
'screenshots-feature-perk-expressions-640w.74bde0805e3452eb.webp',
|
||||
'screenshots-feature-perk-expressions-1120w.f52ad1f714185faa.webp',
|
||||
'screenshots-feature-perk-expressions-1600w.192c0d18c4a3d705.webp',
|
||||
],
|
||||
);
|
||||
|
||||
export const PROFILE_SHOTS = shotFamily(
|
||||
[
|
||||
'screenshots-feature-perk-profile-640w.0df90fc828ae1bb4.avif',
|
||||
'screenshots-feature-perk-profile-1120w.ca5e8d03c4f7eac7.avif',
|
||||
'screenshots-feature-perk-profile-1600w.c790612e9d3295f7.avif',
|
||||
],
|
||||
[
|
||||
'screenshots-feature-perk-profile-640w.76efd2d804dc3c32.webp',
|
||||
'screenshots-feature-perk-profile-1120w.799d04fb886684b2.webp',
|
||||
'screenshots-feature-perk-profile-1600w.7459898617b3aa74.webp',
|
||||
],
|
||||
);
|
||||
|
||||
export const STREAM_SHOTS = shotFamily(
|
||||
[
|
||||
'screenshots-feature-perk-stream-640w.d0567b22ca4d9910.avif',
|
||||
'screenshots-feature-perk-stream-1120w.07ea4f292b8953a5.avif',
|
||||
'screenshots-feature-perk-stream-1600w.c9697ce430b0773e.avif',
|
||||
],
|
||||
[
|
||||
'screenshots-feature-perk-stream-640w.2848435d90d0afa5.webp',
|
||||
'screenshots-feature-perk-stream-1120w.a2076637a71b99bd.webp',
|
||||
'screenshots-feature-perk-stream-1600w.745d8f0f60d30672.webp',
|
||||
],
|
||||
);
|
||||
|
||||
export const UPLOAD_SHOTS = shotFamily(
|
||||
[
|
||||
'screenshots-feature-perk-upload-640w.455d1bdceab21b42.avif',
|
||||
'screenshots-feature-perk-upload-1120w.392656a9b0f21585.avif',
|
||||
'screenshots-feature-perk-upload-1600w.1aa744f6f0122c3f.avif',
|
||||
],
|
||||
[
|
||||
'screenshots-feature-perk-upload-640w.5b80c11e2a6dfe63.webp',
|
||||
'screenshots-feature-perk-upload-1120w.156d068948c832fb.webp',
|
||||
'screenshots-feature-perk-upload-1600w.bc3223b318081269.webp',
|
||||
],
|
||||
);
|
||||
@@ -1,6 +1,19 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import RuntimeConfig from '@app/features/app/state/RuntimeConfig';
|
||||
import styles from '@app/features/premium/components/plutonium_page/PlutoniumPage.module.css';
|
||||
import {
|
||||
AVATAR_LSF,
|
||||
BANNER_LSF,
|
||||
EMOJI_CATVIBE,
|
||||
EMOJI_CATWAVE,
|
||||
EXPRESSIONS_SHOTS,
|
||||
PROFILE_SHOTS,
|
||||
type ShotFamily,
|
||||
STICKER_FEEL_THAT,
|
||||
STREAM_SHOTS,
|
||||
UPLOAD_SHOTS,
|
||||
} from '@app/features/premium/components/plutonium_page/PlutoniumPageMedia';
|
||||
import {
|
||||
SHOWCASE_EXPRESSIONS_BODY_DESCRIPTOR,
|
||||
SHOWCASE_EXPRESSIONS_TITLE_DESCRIPTOR,
|
||||
@@ -13,35 +26,6 @@ import {
|
||||
TAG_FOOTNOTE_MARKER_DESCRIPTOR,
|
||||
} from '@app/features/premium/components/plutonium_page/PlutoniumPageMessages';
|
||||
import FocusRing from '@app/features/ui/focus_ring/FocusRing';
|
||||
import avatarLsf from '@app/media/images/plutonium/avatar-lsf.webp';
|
||||
import bannerLsf from '@app/media/images/plutonium/banner-lsf.webp';
|
||||
import emojiCatvibe from '@app/media/images/plutonium/emoji-catvibe.webp';
|
||||
import emojiCatwave from '@app/media/images/plutonium/emoji-catwave.webp';
|
||||
import expressions640Avif from '@app/media/images/plutonium/feature-perk-expressions-640w.avif';
|
||||
import expressions640Webp from '@app/media/images/plutonium/feature-perk-expressions-640w.webp';
|
||||
import expressions1120Avif from '@app/media/images/plutonium/feature-perk-expressions-1120w.avif';
|
||||
import expressions1120Webp from '@app/media/images/plutonium/feature-perk-expressions-1120w.webp';
|
||||
import expressions1600Avif from '@app/media/images/plutonium/feature-perk-expressions-1600w.avif';
|
||||
import expressions1600Webp from '@app/media/images/plutonium/feature-perk-expressions-1600w.webp';
|
||||
import profile640Avif from '@app/media/images/plutonium/feature-perk-profile-640w.avif';
|
||||
import profile640Webp from '@app/media/images/plutonium/feature-perk-profile-640w.webp';
|
||||
import profile1120Avif from '@app/media/images/plutonium/feature-perk-profile-1120w.avif';
|
||||
import profile1120Webp from '@app/media/images/plutonium/feature-perk-profile-1120w.webp';
|
||||
import profile1600Avif from '@app/media/images/plutonium/feature-perk-profile-1600w.avif';
|
||||
import profile1600Webp from '@app/media/images/plutonium/feature-perk-profile-1600w.webp';
|
||||
import stream640Avif from '@app/media/images/plutonium/feature-perk-stream-640w.avif';
|
||||
import stream640Webp from '@app/media/images/plutonium/feature-perk-stream-640w.webp';
|
||||
import stream1120Avif from '@app/media/images/plutonium/feature-perk-stream-1120w.avif';
|
||||
import stream1120Webp from '@app/media/images/plutonium/feature-perk-stream-1120w.webp';
|
||||
import stream1600Avif from '@app/media/images/plutonium/feature-perk-stream-1600w.avif';
|
||||
import stream1600Webp from '@app/media/images/plutonium/feature-perk-stream-1600w.webp';
|
||||
import upload640Avif from '@app/media/images/plutonium/feature-perk-upload-640w.avif';
|
||||
import upload640Webp from '@app/media/images/plutonium/feature-perk-upload-640w.webp';
|
||||
import upload1120Avif from '@app/media/images/plutonium/feature-perk-upload-1120w.avif';
|
||||
import upload1120Webp from '@app/media/images/plutonium/feature-perk-upload-1120w.webp';
|
||||
import upload1600Avif from '@app/media/images/plutonium/feature-perk-upload-1600w.avif';
|
||||
import upload1600Webp from '@app/media/images/plutonium/feature-perk-upload-1600w.webp';
|
||||
import stickerFeelThat from '@app/media/images/plutonium/sticker-feel-that.webp';
|
||||
import type {MessageDescriptor} from '@lingui/core';
|
||||
import {useLingui} from '@lingui/react/macro';
|
||||
import {clsx} from 'clsx';
|
||||
@@ -50,11 +34,6 @@ import type React from 'react';
|
||||
const PERK_SHOT_SIZES = '(min-width: 48rem) 50vw, calc(100vw - 5rem)';
|
||||
const CHAT_SURFACE = 'rgb(30, 29, 35)';
|
||||
|
||||
interface ShotFamily {
|
||||
avif: [string, string, string];
|
||||
webp: [string, string, string];
|
||||
}
|
||||
|
||||
interface PerkOverlay {
|
||||
src: string;
|
||||
left: number;
|
||||
@@ -78,9 +57,9 @@ interface PerkCard {
|
||||
const SHOT_WIDTHS = [640, 1120, 1600] as const;
|
||||
|
||||
const EXPRESSIONS_OVERLAYS: ReadonlyArray<PerkOverlay> = [
|
||||
{src: emojiCatvibe, left: 65.22, top: 11.241, width: 4.372, height: 5.128, backdrop: CHAT_SURFACE},
|
||||
{src: emojiCatwave, left: 14.936, top: 31.197, width: 8.743, height: 10.256, backdrop: CHAT_SURFACE},
|
||||
{src: stickerFeelThat, left: 14.936, top: 52.35, width: 29.144, height: 34.188},
|
||||
{src: EMOJI_CATVIBE, left: 65.22, top: 11.241, width: 4.372, height: 5.128, backdrop: CHAT_SURFACE},
|
||||
{src: EMOJI_CATWAVE, left: 14.936, top: 31.197, width: 8.743, height: 10.256, backdrop: CHAT_SURFACE},
|
||||
{src: STICKER_FEEL_THAT, left: 14.936, top: 52.35, width: 29.144, height: 34.188},
|
||||
];
|
||||
|
||||
const PERK_CARDS: ReadonlyArray<PerkCard> = [
|
||||
@@ -88,10 +67,7 @@ const PERK_CARDS: ReadonlyArray<PerkCard> = [
|
||||
id: 'expressions',
|
||||
title: SHOWCASE_EXPRESSIONS_TITLE_DESCRIPTOR,
|
||||
body: SHOWCASE_EXPRESSIONS_BODY_DESCRIPTOR,
|
||||
shots: {
|
||||
avif: [expressions640Avif, expressions1120Avif, expressions1600Avif],
|
||||
webp: [expressions640Webp, expressions1120Webp, expressions1600Webp],
|
||||
},
|
||||
shots: EXPRESSIONS_SHOTS,
|
||||
width: 549,
|
||||
height: 468,
|
||||
overlays: EXPRESSIONS_OVERLAYS,
|
||||
@@ -100,10 +76,7 @@ const PERK_CARDS: ReadonlyArray<PerkCard> = [
|
||||
id: 'profile',
|
||||
title: SHOWCASE_PROFILE_TITLE_DESCRIPTOR,
|
||||
body: SHOWCASE_PROFILE_BODY_DESCRIPTOR,
|
||||
shots: {
|
||||
avif: [profile640Avif, profile1120Avif, profile1600Avif],
|
||||
webp: [profile640Webp, profile1120Webp, profile1600Webp],
|
||||
},
|
||||
shots: PROFILE_SHOTS,
|
||||
width: 662,
|
||||
height: 407,
|
||||
overlays: [],
|
||||
@@ -113,10 +86,7 @@ const PERK_CARDS: ReadonlyArray<PerkCard> = [
|
||||
id: 'stream',
|
||||
title: SHOWCASE_STREAM_TITLE_DESCRIPTOR,
|
||||
body: SHOWCASE_STREAM_BODY_DESCRIPTOR,
|
||||
shots: {
|
||||
avif: [stream640Avif, stream1120Avif, stream1600Avif],
|
||||
webp: [stream640Webp, stream1120Webp, stream1600Webp],
|
||||
},
|
||||
shots: STREAM_SHOTS,
|
||||
width: 588,
|
||||
height: 343,
|
||||
overlays: [],
|
||||
@@ -125,10 +95,7 @@ const PERK_CARDS: ReadonlyArray<PerkCard> = [
|
||||
id: 'upload',
|
||||
title: SHOWCASE_UPLOAD_TITLE_DESCRIPTOR,
|
||||
body: SHOWCASE_UPLOAD_BODY_DESCRIPTOR,
|
||||
shots: {
|
||||
avif: [upload640Avif, upload1120Avif, upload1600Avif],
|
||||
webp: [upload640Webp, upload1120Webp, upload1600Webp],
|
||||
},
|
||||
shots: UPLOAD_SHOTS,
|
||||
width: 549,
|
||||
height: 362,
|
||||
overlays: [],
|
||||
@@ -161,7 +128,7 @@ function ProfileOverlay() {
|
||||
<g clipPath="url(#plutonium-perk-banner-clip)">
|
||||
<g mask="url(#plutonium-perk-banner-bite)">
|
||||
<image
|
||||
href={bannerLsf}
|
||||
href={BANNER_LSF}
|
||||
x="345.333"
|
||||
y="16.333"
|
||||
width="300.333"
|
||||
@@ -172,7 +139,7 @@ function ProfileOverlay() {
|
||||
<circle cx="398.333" cy="114.333" r="41.6" fill="none" stroke="#0c0b0e" strokeWidth="3.2" />
|
||||
</g>
|
||||
<g clipPath="url(#plutonium-perk-avatar-clip)" mask="url(#plutonium-perk-avatar-notch)">
|
||||
<image href={avatarLsf} x="358.333" y="74.333" width="80" height="80" preserveAspectRatio="xMidYMid slice" />
|
||||
<image href={AVATAR_LSF} x="358.333" y="74.333" width="80" height="80" preserveAspectRatio="xMidYMid slice" />
|
||||
</g>
|
||||
</svg>
|
||||
);
|
||||
@@ -238,6 +205,7 @@ export function PlutoniumPageShowcase({
|
||||
onFootnoteClick,
|
||||
}: PlutoniumPageShowcaseProps) {
|
||||
const {i18n} = useLingui();
|
||||
const showArt = !RuntimeConfig.isSelfHosted();
|
||||
return (
|
||||
<>
|
||||
{PERK_CARDS.map((card, index) => {
|
||||
@@ -254,12 +222,14 @@ export function PlutoniumPageShowcase({
|
||||
return (
|
||||
<article
|
||||
key={card.id}
|
||||
className={clsx(styles.perkRow, flipped && styles.perkRowFlipped)}
|
||||
className={clsx(styles.perkRow, showArt ? flipped && styles.perkRowFlipped : styles.perkRowTextOnly)}
|
||||
data-flx={`premium.plutonium-page.perk-row.${card.id}`}
|
||||
>
|
||||
<div className={styles.perkArtColumn} data-flx="premium.plutonium-page.perk-row.art-column">
|
||||
<PerkArt card={card} eager={index === 0} />
|
||||
</div>
|
||||
{showArt && (
|
||||
<div className={styles.perkArtColumn} data-flx="premium.plutonium-page.perk-row.art-column">
|
||||
<PerkArt card={card} eager={index === 0} />
|
||||
</div>
|
||||
)}
|
||||
<div className={styles.perkTextColumn} data-flx="premium.plutonium-page.perk-row.text-column">
|
||||
<h2 className={styles.perkTitle} data-flx="premium.plutonium-page.perk-row.title">
|
||||
{i18n._(card.title, {size: uploadSize})}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later AND Apache-2.0
|
||||
// SPDX-FileCopyrightText: Google LLC
|
||||
|
||||
import {remFromPx} from '@app/features/theme/layout/RemFromPx';
|
||||
import type {IconProps} from '@phosphor-icons/react';
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!-- SPDX-License-Identifier: AGPL-3.0-or-later -->
|
||||
<!-- SPDX-License-Identifier: CC-BY-SA-4.0 -->
|
||||
<!-- SPDX-FileCopyrightText: Fluxer Platform AB -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 512 512">
|
||||
<path fill="#4641D9" d="M512 256C512 114.615 397.385 0 256 0S0 114.615 0 256s114.615 256 256 256 256-114.615 256-256Z"/>
|
||||
<path fill="#fff" d="M121.272 233.143c-13.443 0-24.6738-10.866-23.0194-24.208 1.7884-14.418 5.4904-26.692 11.1064-36.821 8.685-15.39 19.962-26.59 33.828-33.6 14.019-7.009 28.8-10.514 44.343-10.514 15.543 0 29.638 3.505 42.286 10.514 12.8 6.857 27.657 17.372 44.571 31.543 11.429 9.6 20.419 16.457 26.972 20.572 6.704 3.961 14.171 5.942 22.4 5.942 13.257 0 23.695-4.723 31.314-14.171 3.633-4.505 6.348-10.015 8.145-16.53 3.686-13.366 14.025-25.07 27.889-25.07 13.392 0 24.638 10.739 23.095 24.042-1.681 14.49-5.391 26.819-11.129 36.987-8.686 15.39-20.038 26.59-34.057 33.6-14.019 7.009-28.8 10.514-44.343 10.514-15.543 0-29.714-3.276-42.514-9.829-12.8-6.704-27.581-17.447-44.343-32.228-10.972-9.6-19.886-16.381-26.743-20.343-6.857-4.114-14.4-6.172-22.629-6.172-12.343 0-22.552 4.267-30.628 12.8-4.204 4.442-7.252 10.452-9.143 18.031-3.337 13.367-13.623 24.941-27.401 24.941Zm0 138.057c-13.443 0-24.6738-10.866-23.0194-24.207 1.7884-14.419 5.4904-26.693 11.1064-36.822 8.685-15.39 19.962-26.59 33.828-33.6 14.019-7.009 28.8-10.514 44.343-10.514 15.543 0 29.638 3.505 42.286 10.514 12.8 6.858 27.657 17.372 44.571 31.543 11.429 9.6 20.419 16.457 26.972 20.572 6.704 3.962 14.171 5.943 22.4 5.943 13.257 0 23.695-4.724 31.314-14.172 3.633-4.505 6.348-10.015 8.145-16.53 3.686-13.366 14.025-25.07 27.889-25.07 13.392 0 24.638 10.74 23.095 24.042-1.681 14.49-5.391 26.819-11.129 36.987-8.686 15.39-20.038 26.59-34.057 33.6-14.019 7.009-28.8 10.514-44.343 10.514-15.543 0-29.714-3.276-42.514-9.829-12.8-6.704-27.581-17.447-44.343-32.228-10.972-9.6-19.886-16.381-26.743-20.343-6.857-4.114-14.4-6.171-22.629-6.171-12.343 0-22.552 4.266-30.628 12.8-4.204 4.441-7.252 10.451-9.143 18.03-3.337 13.367-13.623 24.941-27.401 24.941Z"/>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 2.0 KiB |
@@ -1,4 +1,5 @@
|
||||
<!-- SPDX-License-Identifier: AGPL-3.0-or-later -->
|
||||
<!-- SPDX-License-Identifier: CC-BY-SA-4.0 -->
|
||||
<!-- SPDX-FileCopyrightText: Fluxer Platform AB -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 512 512">
|
||||
<path fill="currentColor" d="M256 0c141.385 0 256 114.615 256 256S397.385 512 256 512 0 397.385 0 256 114.615 0 256 0Zm-68.47 266.057c-15.543 0-30.324 3.505-44.343 10.514-13.866 7.01-25.143 18.21-33.828 33.6-5.616 10.129-9.318 22.403-11.1061 36.822-1.6543 13.341 9.5761 24.207 23.0181 24.207 13.778 0 24.065-11.574 27.402-24.941 1.891-7.579 4.939-13.589 9.142-18.03 8.076-8.534 18.286-12.8 30.629-12.8 8.229 0 15.772 2.057 22.629 6.171 6.857 3.962 15.771 10.743 26.742 20.343 16.762 14.781 31.544 25.524 44.344 32.228 12.8 6.553 26.971 9.829 42.514 9.829 15.543 0 30.324-3.505 44.343-10.514 14.019-7.01 25.371-18.21 34.057-33.6 5.738-10.168 9.448-22.497 11.129-36.987 1.543-13.302-9.704-24.042-23.096-24.042-13.863.001-24.202 11.704-27.888 25.07-1.797 6.515-4.512 12.025-8.145 16.53-7.619 9.448-18.057 14.172-31.314 14.172-8.229 0-15.696-1.982-22.4-5.943-6.553-4.115-15.543-10.972-26.972-20.572-16.914-14.171-31.772-24.685-44.572-31.543-12.647-7.009-26.742-10.514-42.285-10.514Zm0-138.057c-15.543 0-30.324 3.505-44.343 10.514-13.866 7.01-25.143 18.21-33.828 33.6-5.616 10.129-9.318 22.403-11.1061 36.821-1.6544 13.341 9.5761 24.207 23.0181 24.208 13.778 0 24.065-11.574 27.402-24.941 1.891-7.579 4.939-13.589 9.142-18.031 8.076-8.533 18.286-12.8 30.629-12.8 8.229 0 15.772 2.058 22.629 6.172 6.857 3.962 15.771 10.743 26.742 20.343 16.762 14.781 31.544 25.524 44.344 32.228 12.8 6.553 26.971 9.829 42.514 9.829 15.543 0 30.324-3.505 44.343-10.514 14.019-7.01 25.371-18.21 34.057-33.6 5.738-10.168 9.448-22.497 11.129-36.987 1.543-13.303-9.704-24.042-23.096-24.042-13.863 0-24.202 11.704-27.888 25.07-1.797 6.515-4.512 12.025-8.145 16.53-7.619 9.448-18.057 14.171-31.314 14.171-8.229 0-15.696-1.981-22.4-5.942-6.553-4.115-15.543-10.972-26.972-20.572-16.914-14.171-31.772-24.686-44.572-31.543C217.168 131.505 203.073 128 187.53 128Z"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 2.0 KiB |
@@ -1,4 +1,5 @@
|
||||
<!-- SPDX-License-Identifier: AGPL-3.0-or-later -->
|
||||
<!-- SPDX-License-Identifier: CC-BY-SA-4.0 -->
|
||||
<!-- SPDX-FileCopyrightText: Fluxer Platform AB -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 1959 512">
|
||||
<path fill="currentColor" d="M585 431.4V93.48h82.944V431.4H585Zm41.472-120.32v-67.584h172.032v67.584H626.472Zm0-148.48V93.48h189.44v69.12h-189.44ZM843.951 431.4V73h82.944v358.4h-82.944ZM1047.92 438.568c-29.35 0-51.2-10.24-65.536-30.72-13.995-20.48-20.992-51.883-20.992-94.208V161.064h82.948v151.552c0 19.797 2.73 33.621 8.19 41.472 5.8 7.851 13.99 11.776 24.57 11.776 7.51 0 14.34-1.877 20.48-5.632 6.49-4.096 12.12-10.069 16.9-17.92 4.78-8.192 8.36-18.603 10.75-31.232 2.73-12.629 4.1-27.819 4.1-45.568V161.064h82.94V431.4h-70.65V325.928h-3.59c-2.05 26.283-6.65 47.787-13.82 64.512-7.17 16.384-17.07 28.501-29.7 36.352-12.63 7.851-28.16 11.776-46.59 11.776ZM1232.57 431.4l84.99-135.68-83.97-134.656h96.26l39.42 87.552h2.56l38.4-87.552h95.23l-81.4 134.656 82.43 135.68h-97.79l-37.38-86.016h-2.05L1327.8 431.4h-95.23Z"/>
|
||||
<path fill="currentColor" d="M1630.96 438.568c-25.6 0-47.1-3.584-64.51-10.752-17.06-7.509-30.89-17.579-41.47-30.208-10.58-12.971-18.26-27.648-23.04-44.032-4.44-16.384-6.66-33.621-6.66-51.712 0-19.456 2.39-38.059 7.17-55.808 5.12-17.749 12.8-33.451 23.04-47.104 10.58-13.995 24.07-24.917 40.45-32.768 16.73-8.192 36.69-12.288 59.9-12.288s43.01 4.096 59.4 12.288c16.72 7.851 30.03 18.944 39.93 33.28 9.9 14.336 16.22 30.891 18.95 49.664 3.07 18.773 2.73 39.083-1.03 60.928L1547 313.128v-45.056l132.6-2.56-10.75 26.112c2.05-15.701 1.71-28.843-1.02-39.424-2.39-10.923-7-19.115-13.83-24.576-6.82-5.803-16.21-8.704-28.16-8.704-12.63 0-22.69 3.243-30.2 9.728-7.51 6.485-12.8 15.701-15.88 27.648-3.07 11.605-4.6 25.429-4.6 41.472 0 27.648 4.6 47.787 13.82 60.416 9.22 12.629 23.38 18.944 42.5 18.944 8.19 0 15.01-1.024 20.48-3.072 5.46-2.048 9.89-4.949 13.31-8.704 3.41-4.096 5.8-8.875 7.17-14.336 1.36-5.803 1.87-12.288 1.53-19.456l75.78 4.096c1.02 11.264-.17 22.869-3.59 34.816-3.07 11.947-9.04 23.04-17.92 33.28-8.87 10.24-21.33 18.603-37.37 25.088-15.7 6.485-35.67 9.728-59.91 9.728ZM1778.45 431.4V161.064h71.68v107.52h4.1c2.05-28.672 5.97-51.2 11.77-67.584 6.15-16.725 13.66-28.501 22.53-35.328 9.22-7.168 19.46-10.752 30.72-10.752 6.15 0 12.46.853 18.95 2.56 6.82 1.707 13.48 4.437 19.96 8.192l-4.09 92.16c-7.51-4.437-14.85-7.68-22.02-9.728-7.17-2.389-13.99-3.584-20.48-3.584-10.92 0-20.14 3.072-27.65 9.216-7.51 6.144-13.31 15.189-17.4 27.136-3.76 11.947-5.64 26.453-5.64 43.52V431.4h-82.43ZM256 0c141.385 0 256 114.615 256 256S397.385 512 256 512 0 397.385 0 256 114.615 0 256 0Zm-68.47 266.057c-15.543 0-30.324 3.505-44.343 10.514-13.866 7.01-25.143 18.21-33.828 33.6-5.616 10.129-9.318 22.403-11.1061 36.822-1.6543 13.341 9.5761 24.207 23.0181 24.207 13.778 0 24.065-11.574 27.402-24.941 1.891-7.579 4.939-13.589 9.142-18.03 8.076-8.534 18.286-12.8 30.629-12.8 8.229 0 15.772 2.057 22.629 6.171 6.857 3.962 15.771 10.743 26.742 20.343 16.762 14.781 31.544 25.524 44.344 32.228 12.8 6.553 26.971 9.829 42.514 9.829 15.543 0 30.324-3.505 44.343-10.514 14.019-7.01 25.371-18.21 34.057-33.6 5.738-10.168 9.448-22.497 11.129-36.987 1.543-13.302-9.704-24.042-23.096-24.042-13.863.001-24.202 11.704-27.888 25.07-1.797 6.515-4.512 12.025-8.145 16.53-7.619 9.448-18.057 14.172-31.314 14.172-8.229 0-15.696-1.982-22.4-5.943-6.553-4.115-15.543-10.972-26.972-20.572-16.914-14.171-31.772-24.685-44.572-31.543-12.647-7.009-26.742-10.514-42.285-10.514Zm0-138.057c-15.543 0-30.324 3.505-44.343 10.514-13.866 7.01-25.143 18.21-33.828 33.6-5.616 10.129-9.318 22.403-11.1061 36.821-1.6544 13.341 9.5761 24.207 23.0181 24.208 13.778 0 24.065-11.574 27.402-24.941 1.891-7.579 4.939-13.589 9.142-18.031 8.076-8.533 18.286-12.8 30.629-12.8 8.229 0 15.772 2.058 22.629 6.172 6.857 3.962 15.771 10.743 26.742 20.343 16.762 14.781 31.544 25.524 44.344 32.228 12.8 6.553 26.971 9.829 42.514 9.829 15.543 0 30.324-3.505 44.343-10.514 14.019-7.01 25.371-18.21 34.057-33.6 5.738-10.168 9.448-22.497 11.129-36.987 1.543-13.303-9.704-24.042-23.096-24.042-13.863 0-24.202 11.704-27.888 25.07-1.797 6.515-4.512 12.025-8.145 16.53-7.619 9.448-18.057 14.171-31.314 14.171-8.229 0-15.696-1.981-22.4-5.942-6.553-4.115-15.543-10.972-26.972-20.572-16.914-14.171-31.772-24.686-44.572-31.543C217.168 131.505 203.073 128 187.53 128Z"/>
|
||||
|
||||
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.2 KiB |
@@ -1,4 +1,5 @@
|
||||
<!-- SPDX-License-Identifier: AGPL-3.0-or-later -->
|
||||
<!-- SPDX-License-Identifier: CC-BY-SA-4.0 -->
|
||||
<!-- SPDX-FileCopyrightText: Fluxer Platform AB -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 1374 366">
|
||||
<path fill="currentColor" d="M0 358.4V20.48h82.944V358.4H0Zm41.472-120.32v-67.584h172.032v67.584H41.472Zm0-148.48V20.48h189.44V89.6H41.472ZM258.951 358.4V0h82.944v358.4h-82.944ZM462.92 365.568c-29.35 0-51.2-10.24-65.536-30.72-13.995-20.48-20.992-51.883-20.992-94.208V88.064h82.948v151.552c0 19.797 2.73 33.621 8.19 41.472 5.8 7.851 13.99 11.776 24.57 11.776 7.51 0 14.34-1.877 20.48-5.632 6.49-4.096 12.12-10.069 16.9-17.92 4.78-8.192 8.36-18.603 10.75-31.232 2.73-12.629 4.1-27.819 4.1-45.568V88.064h82.94V358.4h-70.65V252.928h-3.59c-2.05 26.283-6.65 47.787-13.82 64.512-7.17 16.384-17.07 28.501-29.7 36.352-12.63 7.851-28.16 11.776-46.59 11.776ZM647.569 358.4l84.99-135.68-83.97-134.656h96.26l39.42 87.552h2.56l38.4-87.552h95.23l-81.4 134.656 82.43 135.68h-97.79l-37.38-86.016h-2.05l-41.47 86.016h-95.23Z"/>
|
||||
<path fill="currentColor" d="M1045.96 365.568c-25.6 0-47.101-3.584-64.511-10.752-17.06-7.509-30.89-17.579-41.47-30.208-10.58-12.971-18.26-27.648-23.04-44.032-4.44-16.384-6.66-33.621-6.66-51.712 0-19.456 2.39-38.059 7.17-55.808 5.12-17.749 12.8-33.451 23.04-47.104 10.58-13.995 24.07-24.917 40.45-32.768 16.73-8.192 36.691-12.288 59.901-12.288s43.01 4.096 59.4 12.288c16.72 7.851 30.03 18.944 39.93 33.28 9.9 14.336 16.22 30.891 18.95 49.664 3.07 18.773 2.73 39.083-1.03 60.928l-196.091 3.072v-45.056l132.601-2.56-10.75 26.112c2.05-15.701 1.71-28.843-1.02-39.424-2.39-10.923-7-19.115-13.83-24.576-6.82-5.803-16.21-8.704-28.16-8.704-12.63 0-22.69 3.243-30.2 9.728-7.51 6.485-12.801 15.701-15.881 27.648-3.07 11.605-4.6 25.429-4.6 41.472 0 27.648 4.6 47.787 13.821 60.416 9.22 12.629 23.38 18.944 42.5 18.944 8.19 0 15.01-1.024 20.48-3.072 5.46-2.048 9.89-4.949 13.31-8.704 3.41-4.096 5.8-8.875 7.17-14.336 1.36-5.803 1.87-12.288 1.53-19.456l75.78 4.096c1.02 11.264-.17 22.869-3.59 34.816-3.07 11.947-9.04 23.04-17.92 33.28-8.87 10.24-21.33 18.603-37.37 25.088-15.7 6.485-35.67 9.728-59.91 9.728ZM1193.45 358.4V88.0639h71.68V195.584h4.1c2.05-28.672 5.97-51.2 11.77-67.584 6.15-16.725 13.66-28.5011 22.53-35.3281 9.22-7.168 19.46-10.752 30.72-10.752 6.15 0 12.46.853 18.95 2.56 6.82 1.707 13.48 4.437 19.96 8.192l-4.09 92.1601c-7.51-4.437-14.85-7.68-22.02-9.728-7.17-2.389-13.99-3.584-20.48-3.584-10.92 0-20.14 3.072-27.65 9.216-7.51 6.144-13.31 15.189-17.4 27.136-3.76 11.947-5.64 26.453-5.64 43.52V358.4h-82.43Z"/>
|
||||
|
||||
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 9.7 KiB After Width: | Height: | Size: 9.7 KiB |
@@ -0,0 +1,12 @@
|
||||
SPDX-License-Identifier: MIT
|
||||
SPDX-FileCopyrightText: 2022 adryd
|
||||
|
||||
Source: https://github.com/adryd325/oneko.js (oneko.gif)
|
||||
|
||||
Copyright © 2022 adryd
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
Before Width: | Height: | Size: 122 KiB |
|
Before Width: | Height: | Size: 587 KiB |
|
Before Width: | Height: | Size: 116 KiB |
|
Before Width: | Height: | Size: 3.7 KiB |
|
Before Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 66 KiB |
|
Before Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 65 KiB |
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 63 KiB |
|
Before Width: | Height: | Size: 91 KiB |
|
Before Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 98 KiB |
|
Before Width: | Height: | Size: 154 KiB |
|
Before Width: | Height: | Size: 172 KiB |
|
Before Width: | Height: | Size: 281 KiB |
|
Before Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 408 KiB |
|
Before Width: | Height: | Size: 5.6 KiB |