From 3491a3b63bb643bd76035ebf583c2d2ac34e1fcb Mon Sep 17 00:00:00 2001 From: Alexander Zinchuk Date: Thu, 13 Feb 2025 14:28:01 +0100 Subject: [PATCH] Emoji Status: Support `EmojiStatusCollectible` (#5547) Co-authored-by: Alexander Zinchuk --- src/api/gramjs/apiBuilders/peers.ts | 27 +- src/api/gramjs/gramjsBuilders/index.ts | 16 +- src/api/gramjs/methods/symbols.ts | 17 + src/api/gramjs/methods/users.ts | 6 +- src/api/types/chats.ts | 4 +- src/api/types/updates.ts | 4 +- src/api/types/users.ts | 19 +- src/assets/font-icons/crown-take-off.svg | 1 + src/assets/font-icons/crown-wear.svg | 1 + src/assets/font-icons/proof-of-ownership.svg | 1 + src/assets/font-icons/radial-badge.svg | 1 + src/assets/font-icons/unique-profile.svg | 1 + src/assets/localization/fallback.strings | 13 + src/bundles/stars.ts | 1 + src/components/common/CustomEmoji.module.scss | 9 + src/components/common/CustomEmoji.tsx | 18 + src/components/common/CustomEmojiPicker.tsx | 55 ++- .../common/FullNameTitle.module.scss | 11 + src/components/common/FullNameTitle.tsx | 15 +- src/components/common/PeerChip.module.scss | 5 +- src/components/common/ProfileInfo.module.scss | 4 + src/components/common/ProfileInfo.tsx | 9 + src/components/common/Sparkles.tsx | 6 +- src/components/common/StickerButton.tsx | 7 +- src/components/common/StickerSet.tsx | 33 +- .../common/reactions/CustomEmojiEffect.tsx | 4 +- src/components/left/main/LeftMainHeader.scss | 1 + src/components/left/main/StatusButton.tsx | 19 +- src/components/main/Main.tsx | 2 + src/components/middle/MiddleHeader.scss | 4 +- src/components/middle/MiddleHeader.tsx | 13 + src/components/modals/ModalContainer.tsx | 3 + .../modals/common/TableAboutModal.module.scss | 4 + .../modals/common/TableAboutModal.tsx | 7 +- .../EmojiStatusAccessModal.tsx | 1 + .../gift/info/GiftInfoModal.module.scss | 2 +- .../modals/gift/info/GiftInfoModal.tsx | 103 +++-- .../gift/status/GiftStatusInfoModal.async.tsx | 18 + .../status/GiftStatusInfoModal.module.scss | 72 ++++ .../gift/status/GiftStatusInfoModal.tsx | 171 ++++++++ .../suggestedStatus/SuggestedStatusModal.tsx | 4 +- src/components/right/Profile.scss | 4 + src/components/ui/ListItem.scss | 7 +- src/config.ts | 1 + src/global/actions/api/symbols.ts | 25 ++ src/global/actions/api/users.ts | 6 +- src/global/actions/ui/stars.ts | 18 + src/global/types/actions.ts | 9 +- src/global/types/globalState.ts | 6 + src/global/types/tabState.ts | 5 + src/lib/gramjs/tl/apiTl.ts | 1 + src/lib/gramjs/tl/static/api.json | 1 + src/styles/icons.scss | 400 +++++++++--------- src/styles/icons.woff | Bin 31700 -> 32700 bytes src/styles/icons.woff2 | Bin 26476 -> 27324 bytes src/types/icons/font.ts | 5 + src/types/language.d.ts | 15 + 57 files changed, 925 insertions(+), 290 deletions(-) create mode 100644 src/assets/font-icons/crown-take-off.svg create mode 100644 src/assets/font-icons/crown-wear.svg create mode 100644 src/assets/font-icons/proof-of-ownership.svg create mode 100644 src/assets/font-icons/radial-badge.svg create mode 100644 src/assets/font-icons/unique-profile.svg create mode 100644 src/components/modals/gift/status/GiftStatusInfoModal.async.tsx create mode 100644 src/components/modals/gift/status/GiftStatusInfoModal.module.scss create mode 100644 src/components/modals/gift/status/GiftStatusInfoModal.tsx diff --git a/src/api/gramjs/apiBuilders/peers.ts b/src/api/gramjs/apiBuilders/peers.ts index 6dc3da250..75758363c 100644 --- a/src/api/gramjs/apiBuilders/peers.ts +++ b/src/api/gramjs/apiBuilders/peers.ts @@ -1,9 +1,10 @@ import type BigInt from 'big-integer'; import { Api as GramJs } from '../../../lib/gramjs'; -import type { ApiEmojiStatus, ApiPeerColor } from '../../types'; +import type { ApiEmojiStatusType, ApiPeerColor } from '../../types'; import { CHANNEL_ID_LENGTH } from '../../../config'; +import { numberToHexColor } from '../../../util/colors'; export function isPeerUser(peer: GramJs.TypePeer | GramJs.TypeInputPeer): peer is GramJs.PeerUser { return peer.hasOwnProperty('userId'); @@ -50,14 +51,30 @@ export function buildApiPeerColor(peerColor: GramJs.TypePeerColor): ApiPeerColor }; } -export function buildApiEmojiStatus(mtpEmojiStatus: GramJs.TypeEmojiStatus): ApiEmojiStatus | undefined { +export function buildApiEmojiStatus(mtpEmojiStatus: GramJs.TypeEmojiStatus): +ApiEmojiStatusType | undefined { if (mtpEmojiStatus instanceof GramJs.EmojiStatus) { - return { documentId: mtpEmojiStatus.documentId.toString(), until: mtpEmojiStatus.until }; + return { + type: 'regular', + documentId: mtpEmojiStatus.documentId.toString(), + until: mtpEmojiStatus.until, + }; } - // TODO: Support other parameters if (mtpEmojiStatus instanceof GramJs.EmojiStatusCollectible) { - return { documentId: mtpEmojiStatus.documentId.toString(), until: mtpEmojiStatus.until }; + return { + type: 'collectible', + collectibleId: mtpEmojiStatus.collectibleId.toString(), + documentId: mtpEmojiStatus.documentId.toString(), + title: mtpEmojiStatus.title, + slug: mtpEmojiStatus.slug, + patternDocumentId: mtpEmojiStatus.patternDocumentId.toString(), + centerColor: numberToHexColor(mtpEmojiStatus.centerColor), + edgeColor: numberToHexColor(mtpEmojiStatus.edgeColor), + patternColor: numberToHexColor(mtpEmojiStatus.patternColor), + textColor: numberToHexColor(mtpEmojiStatus.textColor), + until: mtpEmojiStatus.until, + }; } return undefined; diff --git a/src/api/gramjs/gramjsBuilders/index.ts b/src/api/gramjs/gramjsBuilders/index.ts index a64d4c23d..3c14cfcea 100644 --- a/src/api/gramjs/gramjsBuilders/index.ts +++ b/src/api/gramjs/gramjsBuilders/index.ts @@ -8,6 +8,7 @@ import type { ApiChatBannedRights, ApiChatFolder, ApiChatReactions, + ApiEmojiStatusType, ApiFormattedText, ApiGroupCall, ApiInputPrivacyRules, @@ -735,14 +736,21 @@ export function buildInputChatReactions(chatReactions?: ApiChatReactions) { return new GramJs.ChatReactionsNone(); } -export function buildInputEmojiStatus(emojiStatusId: string, expires?: number) { - if (emojiStatusId === DEFAULT_STATUS_ICON_ID) { +export function buildInputEmojiStatus(emojiStatus: ApiEmojiStatusType) { + if (emojiStatus.type === 'collectible') { + return new GramJs.InputEmojiStatusCollectible({ + collectibleId: BigInt(emojiStatus.collectibleId), + until: emojiStatus.until, + }); + } + + if (emojiStatus.documentId === DEFAULT_STATUS_ICON_ID) { return new GramJs.EmojiStatusEmpty(); } return new GramJs.EmojiStatus({ - documentId: BigInt(emojiStatusId), - until: expires, + documentId: BigInt(emojiStatus.documentId), + until: emojiStatus.until, }); } diff --git a/src/api/gramjs/methods/symbols.ts b/src/api/gramjs/methods/symbols.ts index b1adc71d0..823d2ac2d 100644 --- a/src/api/gramjs/methods/symbols.ts +++ b/src/api/gramjs/methods/symbols.ts @@ -276,6 +276,23 @@ export async function fetchDefaultStatusEmojis() { }; } +export async function fetchCollectibleEmojiStatuses({ hash = '0' }: { hash?: string }) { + const result = await invokeRequest(new GramJs.account.GetCollectibleEmojiStatuses( + { hash: BigInt(hash) }, + )); + + if (!(result instanceof GramJs.account.EmojiStatuses)) { + return undefined; + } + + const statuses = result.statuses.map(buildApiEmojiStatus).filter(Boolean); + + return { + statuses, + hash: String(result.hash), + }; +} + export async function searchStickers({ query, hash = '0' }: { query: string; hash?: string }) { const result = await invokeRequest(new GramJs.messages.SearchStickerSets({ q: query, diff --git a/src/api/gramjs/methods/users.ts b/src/api/gramjs/methods/users.ts index 2c70e3775..8cb868c43 100644 --- a/src/api/gramjs/methods/users.ts +++ b/src/api/gramjs/methods/users.ts @@ -2,7 +2,7 @@ import BigInt from 'big-integer'; import { Api as GramJs } from '../../../lib/gramjs'; import type { - ApiChat, ApiPeer, ApiUser, + ApiChat, ApiEmojiStatusType, ApiPeer, ApiUser, } from '../../types'; import { buildApiChatFromPreview } from '../apiBuilders/chats'; @@ -304,9 +304,9 @@ export function reportSpam(userOrChat: ApiPeer) { }); } -export function updateEmojiStatus(emojiStatusId: string, expires?: number) { +export function updateEmojiStatus(emojiStatus: ApiEmojiStatusType) { return invokeRequest(new GramJs.account.UpdateEmojiStatus({ - emojiStatus: buildInputEmojiStatus(emojiStatusId, expires), + emojiStatus: buildInputEmojiStatus(emojiStatus), }), { shouldReturnTrue: true, }); diff --git a/src/api/types/chats.ts b/src/api/types/chats.ts index dc9df6b5c..2139e3392 100644 --- a/src/api/types/chats.ts +++ b/src/api/types/chats.ts @@ -4,7 +4,7 @@ import type { } from './messages'; import type { ApiBotVerification, ApiChatInviteImporter } from './misc'; import type { - ApiEmojiStatus, ApiFakeType, ApiUser, ApiUsername, + ApiEmojiStatusType, ApiFakeType, ApiUser, ApiUsername, } from './users'; type ApiChatType = ( @@ -44,7 +44,7 @@ export interface ApiChat { isProtected?: boolean; fakeType?: ApiFakeType; color?: ApiPeerColor; - emojiStatus?: ApiEmojiStatus; + emojiStatus?: ApiEmojiStatusType; isForum?: boolean; isForumAsMessages?: true; boostLevel?: number; diff --git a/src/api/types/updates.ts b/src/api/types/updates.ts index 2650830c4..982d04f3a 100644 --- a/src/api/types/updates.ts +++ b/src/api/types/updates.ts @@ -40,7 +40,7 @@ import type { ApiStarsAmount } from './payments'; import type { ApiPrivacyKey, LangPackStringValue, PrivacyVisibility } from './settings'; import type { ApiStealthMode, ApiStory, ApiStorySkipped } from './stories'; import type { - ApiEmojiStatus, ApiUser, ApiUserFullInfo, ApiUserStatus, + ApiEmojiStatusType, ApiUser, ApiUserFullInfo, ApiUserStatus, } from './users'; export type ApiUpdateReady = { @@ -419,7 +419,7 @@ export type ApiUpdateUserStatus = { export type ApiUpdateUserEmojiStatus = { '@type': 'updateUserEmojiStatus'; userId: string; - emojiStatus?: ApiEmojiStatus; + emojiStatus?: ApiEmojiStatusType; }; export type ApiUpdateRecentEmojiStatuses = { diff --git a/src/api/types/users.ts b/src/api/types/users.ts index c8bfb32db..8831dd2d1 100644 --- a/src/api/types/users.ts +++ b/src/api/types/users.ts @@ -28,7 +28,7 @@ export interface ApiUser { canBeInvitedToGroup?: boolean; fakeType?: ApiFakeType; isAttachBot?: boolean; - emojiStatus?: ApiEmojiStatus; + emojiStatus?: ApiEmojiStatusType; areStoriesHidden?: boolean; hasStories?: boolean; hasUnreadStories?: boolean; @@ -132,11 +132,28 @@ export interface ApiPremiumGiftOption { botUrl: string; } +export type ApiEmojiStatusType = ApiEmojiStatus | ApiEmojiStatusCollectible; + export interface ApiEmojiStatus { + type: 'regular'; documentId: string; until?: number; } +export interface ApiEmojiStatusCollectible { + type: 'collectible'; + collectibleId: string; + documentId: string; + title: string; + slug: string; + patternDocumentId: string; + centerColor: string; + edgeColor: string; + patternColor: string; + textColor: string; + until?: number; +} + export interface ApiBirthday { day: number; month: number; diff --git a/src/assets/font-icons/crown-take-off.svg b/src/assets/font-icons/crown-take-off.svg new file mode 100644 index 000000000..67659966f --- /dev/null +++ b/src/assets/font-icons/crown-take-off.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/font-icons/crown-wear.svg b/src/assets/font-icons/crown-wear.svg new file mode 100644 index 000000000..0c43c9040 --- /dev/null +++ b/src/assets/font-icons/crown-wear.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/font-icons/proof-of-ownership.svg b/src/assets/font-icons/proof-of-ownership.svg new file mode 100644 index 000000000..e0d28c069 --- /dev/null +++ b/src/assets/font-icons/proof-of-ownership.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/font-icons/radial-badge.svg b/src/assets/font-icons/radial-badge.svg new file mode 100644 index 000000000..99e1fe77e --- /dev/null +++ b/src/assets/font-icons/radial-badge.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/font-icons/unique-profile.svg b/src/assets/font-icons/unique-profile.svg new file mode 100644 index 000000000..41bf39331 --- /dev/null +++ b/src/assets/font-icons/unique-profile.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/localization/fallback.strings b/src/assets/localization/fallback.strings index 2103b28d2..be9278104 100644 --- a/src/assets/localization/fallback.strings +++ b/src/assets/localization/fallback.strings @@ -1437,6 +1437,9 @@ "GiftInfoViewUpgraded" = "View Upgraded Gift"; "GiftInfoUpgradeBadge" = "upgrade"; "GiftInfoUpgradeForFree" = "Upgrade For Free"; +"GiftInfoWithdraw" = "Withdraw"; +"GiftInfoWear" = "Wear"; +"GiftInfoTakeOff" = "Take Off"; "GiftInfoTransfer" = "Transfer"; "GiftTransferTitle" = "Transfer"; "GiftTransferTON" = "Send via Blockchain"; @@ -1620,3 +1623,13 @@ "CheckPasswordTitle" = "Enter Password"; "CheckPasswordPlaceholder" = "Password"; "CheckPasswordDescription" = "Please enter your password to continue."; +"UniqueStatusWearTitle" = "Wear {gift}"; +"UniqueStatusBenefitsDescription" = "and get these benefits:"; +"UniqueStatusBadgeBenefitTitle" = "Radiant Badge"; +"UniqueStatusBadgeDescription" = "The glittering icon of this item will be displayed next to your name."; +"UniqueStatusProfileDesignBenefitTitle" = "Unique Profile Design"; +"UniqueStatusProfileDesignDescription" = "Your profile page will get the color and the symbol of this item."; +"UniqueStatusProofOfOwnershipBenefitTitle" = "Proof of Ownership"; +"UniqueStatusProofOfOwnershipDescription" = "Tapping the icon of this item next to your name will show its info and owner."; +"UniqueStatusWearButton" = "Start Wearing"; +"CollectibleStatusesCategory" = "Collectibles"; \ No newline at end of file diff --git a/src/bundles/stars.ts b/src/bundles/stars.ts index fdef4b332..c0f4ef467 100644 --- a/src/bundles/stars.ts +++ b/src/bundles/stars.ts @@ -9,5 +9,6 @@ export { default as GiftModal } from '../components/modals/gift/GiftModal'; export { default as GiftRecipientPicker } from '../components/modals/gift/recipient/GiftRecipientPicker'; export { default as GiftInfoModal } from '../components/modals/gift/info/GiftInfoModal'; export { default as GiftUpgradeModal } from '../components/modals/gift/upgrade/GiftUpgradeModal'; +export { default as GiftStatusInfoModal } from '../components/modals/gift/status/GiftStatusInfoModal'; export { default as GiftWithdrawModal } from '../components/modals/gift/withdraw/GiftWithdrawModal'; export { default as GiftTransferModal } from '../components/modals/gift/transfer/GiftTransferModal'; diff --git a/src/components/common/CustomEmoji.module.scss b/src/components/common/CustomEmoji.module.scss index e12a7f818..5c6c7c6de 100644 --- a/src/components/common/CustomEmoji.module.scss +++ b/src/components/common/CustomEmoji.module.scss @@ -13,6 +13,15 @@ } } +.withSparkles { + position: relative; +} + +.sparkles { + position: absolute; + inset: -0.25rem; +} + .placeholder { width: 85%; height: 85%; diff --git a/src/components/common/CustomEmoji.tsx b/src/components/common/CustomEmoji.tsx index 0a1c08338..678983a29 100644 --- a/src/components/common/CustomEmoji.tsx +++ b/src/components/common/CustomEmoji.tsx @@ -13,6 +13,7 @@ import useDynamicColorListener from '../../hooks/stickers/useDynamicColorListene import useLastCallback from '../../hooks/useLastCallback'; import useCustomEmoji from './hooks/useCustomEmoji'; +import Sparkles from './Sparkles'; import StickerView from './StickerView'; import styles from './CustomEmoji.module.scss'; @@ -41,6 +42,9 @@ type OwnProps = { observeIntersectionForPlaying?: ObserveFn; onClick?: NoneToVoidFunction; onAnimationEnd?: NoneToVoidFunction; + withSparkles?: boolean; + sparklesClassName?: string; + sparklesStyle?: string; }; const STICKER_SIZE = 20; @@ -67,6 +71,9 @@ const CustomEmoji: FC = ({ observeIntersectionForPlaying, onClick, onAnimationEnd, + withSparkles, + sparklesStyle, + sparklesClassName, }) => { // eslint-disable-next-line no-null/no-null let containerRef = useRef(null); @@ -114,6 +121,7 @@ const CustomEmoji: FC = ({ ref={containerRef} className={buildClassName( styles.root, + withSparkles && styles.withSparkles, className, 'custom-emoji', 'emoji', @@ -125,6 +133,16 @@ const CustomEmoji: FC = ({ data-alt={customEmoji?.emoji} style={style} > + {withSparkles && ( + + )} {isSelectable && ( ; recentCustomEmojiIds?: string[]; recentStatusEmojis?: ApiSticker[]; + collectibleStatuses?: ApiEmojiStatusType[]; chatEmojiSetId?: string; topReactions?: ApiReaction[]; recentReactions?: ApiReaction[]; @@ -114,6 +119,7 @@ const CustomEmojiPicker: FC = ({ recentCustomEmojiIds, selectedReactionIds, recentStatusEmojis, + collectibleStatuses, stickerSetsById, chatEmojiSetId, topReactions, @@ -160,6 +166,11 @@ const CustomEmojiPicker: FC = ({ : Object.values(pickTruthy(customEmojisById!, recentCustomEmojiIds!)); }, [customEmojisById, isStatusPicker, recentCustomEmojiIds, recentStatusEmojis]); + const collectibleStatusEmojis = useMemo(() => { + const collectibleStatusEmojiIds = collectibleStatuses?.map((status) => status.documentId); + return customEmojisById && collectibleStatusEmojiIds?.map((id) => customEmojisById[id]).filter(Boolean); + }, [customEmojisById, collectibleStatuses]); + const prefix = `${idPrefix}-custom-emoji`; const { activeSetIndex, @@ -172,7 +183,8 @@ const CustomEmojiPicker: FC = ({ const canLoadAndPlay = usePrevDuringAnimation(loadAndPlay || undefined, SLIDE_TRANSITION_DURATION); - const lang = useOldLang(); + const oldLang = useOldLang(); + const lang = useLang(); const areAddedLoaded = Boolean(addedCustomEmojiIds); @@ -184,7 +196,7 @@ const CustomEmojiPicker: FC = ({ defaultSets.push({ id: TOP_SYMBOL_SET_ID, accessHash: '', - title: lang('PremiumPreviewTags'), + title: oldLang('PremiumPreviewTags'), reactions: defaultTagReactions, count: defaultTagReactions.length, isEmoji: true, @@ -201,7 +213,7 @@ const CustomEmojiPicker: FC = ({ defaultSets.push({ id: TOP_SYMBOL_SET_ID, accessHash: '', - title: lang('Reactions'), + title: oldLang('Reactions'), reactions: topReactionsSlice, count: topReactionsSlice.length, isEmoji: true, @@ -224,7 +236,7 @@ const CustomEmojiPicker: FC = ({ defaultSets.push({ id: isPopular ? POPULAR_SYMBOL_SET_ID : RECENT_SYMBOL_SET_ID, accessHash: '', - title: lang(isPopular ? 'PopularReactions' : 'RecentStickers'), + title: oldLang(isPopular ? 'PopularReactions' : 'RecentStickers'), reactions: allRecentReactions, count: allRecentReactions.length, isEmoji: true, @@ -233,15 +245,26 @@ const CustomEmojiPicker: FC = ({ } else if (isStatusPicker) { const defaultStatusIconsPack = stickerSetsById[defaultStatusIconsId!]; if (defaultStatusIconsPack?.stickers?.length) { - const stickers = defaultStatusIconsPack.stickers + const stickers = uniqueByField(defaultStatusIconsPack.stickers .slice(0, RECENT_DEFAULT_STATUS_COUNT) - .concat(recentCustomEmojis || []); + .concat(recentCustomEmojis || []), 'id'); defaultSets.push({ ...defaultStatusIconsPack, stickers, count: stickers.length, id: RECENT_SYMBOL_SET_ID, - title: lang('RecentStickers'), + title: oldLang('RecentStickers'), + isEmoji: true, + }); + } + if (collectibleStatusEmojis?.length) { + defaultSets.push({ + id: COLLECTIBLE_STATUS_SET_ID, + accessHash: '', + count: collectibleStatusEmojis.length, + stickers: collectibleStatusEmojis, + title: lang('CollectibleStatusesCategory'), + isEmoji: true, }); } } else if (withDefaultTopicIcons) { @@ -250,14 +273,14 @@ const CustomEmojiPicker: FC = ({ defaultSets.push({ ...defaultTopicIconsPack, id: RECENT_SYMBOL_SET_ID, - title: lang('RecentStickers'), + title: oldLang('RecentStickers'), }); } } else if (recentCustomEmojis?.length) { defaultSets.push({ id: RECENT_SYMBOL_SET_ID, accessHash: '0', - title: lang('RecentStickers'), + title: oldLang('RecentStickers'), stickers: recentCustomEmojis, count: recentCustomEmojis.length, isEmoji: true, @@ -279,9 +302,9 @@ const CustomEmojiPicker: FC = ({ ]; }, [ addedCustomEmojiIds, isReactionPicker, isStatusPicker, withDefaultTopicIcons, recentCustomEmojis, - customEmojiFeaturedIds, stickerSetsById, topReactions, availableReactions, lang, recentReactions, + customEmojiFeaturedIds, stickerSetsById, topReactions, availableReactions, oldLang, recentReactions, defaultStatusIconsId, defaultTopicIconsId, isSavedMessages, defaultTagReactions, chatEmojiSetId, - isWithPaidReaction, + isWithPaidReaction, collectibleStatusEmojis, lang, ]); const noPopulatedSets = useMemo(() => ( @@ -383,7 +406,7 @@ const CustomEmojiPicker: FC = ({ return (
{noPopulatedSets ? ( -
{lang('NoStickers')}
+
{oldLang('NoStickers')}
) : ( )} @@ -487,11 +510,13 @@ export default memo(withGlobal( const isSavedMessages = Boolean(chatId && selectIsChatWithSelf(global, chatId)); const chatFullInfo = chatId ? selectChatFullInfo(global, chatId) : undefined; + const collectibleStatuses = global.collectibleEmojiStatuses?.statuses; return { - customEmojisById: !isStatusPicker ? customEmojisById : undefined, + customEmojisById, recentCustomEmojiIds: !isStatusPicker ? recentCustomEmojiIds : undefined, recentStatusEmojis: isStatusPicker ? recentStatusEmojis : undefined, + collectibleStatuses: isStatusPicker ? collectibleStatuses : undefined, stickerSetsById, addedCustomEmojiIds: global.customEmojis.added.setIds, canAnimate: selectCanPlayAnimatedEmojis(global), diff --git a/src/components/common/FullNameTitle.module.scss b/src/components/common/FullNameTitle.module.scss index c1b19747a..6bd8dafe5 100644 --- a/src/components/common/FullNameTitle.module.scss +++ b/src/components/common/FullNameTitle.module.scss @@ -6,12 +6,23 @@ :global(.custom-emoji) { color: var(--color-primary); } + + :global(.statusSparkles) { + color: var(--accent-color); + :global(.selected) & { + color: white; + } + } } .fullName { font-size: 1em; margin-bottom: 0; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + &.canCopy { pointer-events: all; } diff --git a/src/components/common/FullNameTitle.tsx b/src/components/common/FullNameTitle.tsx index 28ddc00ad..64228e484 100644 --- a/src/components/common/FullNameTitle.tsx +++ b/src/components/common/FullNameTitle.tsx @@ -18,6 +18,7 @@ import { isPeerUser, } from '../../global/helpers'; import buildClassName from '../../util/buildClassName'; +import buildStyle from '../../util/buildStyle'; import { copyTextToClipboard } from '../../util/clipboard'; import stopEvent from '../../util/stopEvent'; import renderText from './helpers/renderText'; @@ -47,6 +48,7 @@ type OwnProps = { iconElement?: React.ReactNode; onEmojiStatusClick?: NoneToVoidFunction; observeIntersection?: ObserveFn; + statusSparklesColor?: string; }; const FullNameTitle: FC = ({ @@ -63,6 +65,7 @@ const FullNameTitle: FC = ({ iconElement, onEmojiStatusClick, observeIntersection, + statusSparklesColor, }) => { const lang = useOldLang(); const { showNotification } = getActions(); @@ -72,6 +75,7 @@ const FullNameTitle: FC = ({ const title = realPeer && (isUser ? getUserFullName(realPeer) : getChatTitle(lang, realPeer)); const isPremium = isUser && realPeer.isPremium; const canShowEmojiStatus = withEmojiStatus && !isSavedMessages && realPeer; + const emojiStatus = realPeer?.emojiStatus; const handleTitleClick = useLastCallback((e) => { if (!title || !canCopyTitle) { @@ -134,17 +138,20 @@ const FullNameTitle: FC = ({ <> {!noVerified && peer?.isVerified && } {!noFake && peer?.fakeType && } - {canShowEmojiStatus && realPeer.emojiStatus && ( + {canShowEmojiStatus && emojiStatus && ( = ({ /> )} - {canShowEmojiStatus && !realPeer.emojiStatus && isPremium && } + {canShowEmojiStatus && !emojiStatus && isPremium && } )} {iconElement} diff --git a/src/components/common/PeerChip.module.scss b/src/components/common/PeerChip.module.scss index e6e2e6604..5b028dba1 100644 --- a/src/components/common/PeerChip.module.scss +++ b/src/components/common/PeerChip.module.scss @@ -3,13 +3,12 @@ align-items: center; background: var(--color-chat-hover); height: 2rem; - min-width: 2rem; margin-inline: 0.25rem; padding-right: 0.75rem; border-radius: 1rem; cursor: var(--custom-cursor, pointer); position: relative; - overflow: hidden; + min-width: 0; flex-shrink: 1; transition: background-color 0.15s ease; @@ -71,7 +70,7 @@ .name { margin-left: 0.5rem; white-space: nowrap; - overflow: hidden; + min-width: 0; text-overflow: ellipsis; :global(.emoji.emoji-small) { diff --git a/src/components/common/ProfileInfo.module.scss b/src/components/common/ProfileInfo.module.scss index 57f3e0ff9..b09247a23 100644 --- a/src/components/common/ProfileInfo.module.scss +++ b/src/components/common/ProfileInfo.module.scss @@ -144,6 +144,10 @@ justify-content: flex-end; pointer-events: none; + :global(.statusSparkles) { + color: var(--color-white) !important; + } + &:dir(rtl) { .status { text-align: right; diff --git a/src/components/common/ProfileInfo.tsx b/src/components/common/ProfileInfo.tsx index 927b3db6d..ef9ad8712 100644 --- a/src/components/common/ProfileInfo.tsx +++ b/src/components/common/ProfileInfo.tsx @@ -57,6 +57,7 @@ type StateProps = topic?: ApiTopic; messagesCount?: number; emojiStatusSticker?: ApiSticker; + emojiStatusSlug?: string; profilePhotos?: ApiPeerPhotos; }; @@ -77,6 +78,7 @@ const ProfileInfo: FC = ({ topic, messagesCount, emojiStatusSticker, + emojiStatusSlug, profilePhotos, peerId, }) => { @@ -86,6 +88,7 @@ const ProfileInfo: FC = ({ openStickerSet, openPrivacySettingsNoticeModal, loadMoreProfilePhotos, + openUniqueGiftBySlug, } = getActions(); const lang = useOldLang(); @@ -137,6 +140,10 @@ const ProfileInfo: FC = ({ }); const handleStatusClick = useLastCallback(() => { + if (emojiStatusSlug) { + openUniqueGiftBySlug({ slug: emojiStatusSlug }); + return; + } if (!peerId) { openStickerSet({ stickerSetInfo: emojiStatusSticker!.stickerSetInfo, @@ -383,6 +390,7 @@ export default memo(withGlobal( const emojiStatus = (user || chat)?.emojiStatus; const emojiStatusSticker = emojiStatus ? global.customEmojis.byId[emojiStatus.documentId] : undefined; + const emojiStatusSlug = emojiStatus?.type === 'collectible' ? emojiStatus.slug : undefined; return { user, @@ -391,6 +399,7 @@ export default memo(withGlobal( mediaIndex, avatarOwnerId, emojiStatusSticker, + emojiStatusSlug, profilePhotos, ...(topic && { topic, diff --git a/src/components/common/Sparkles.tsx b/src/components/common/Sparkles.tsx index 495b7d0d2..ec1427f2b 100644 --- a/src/components/common/Sparkles.tsx +++ b/src/components/common/Sparkles.tsx @@ -17,6 +17,7 @@ type PresetParameters = ButtonParameters | ProgressParameters; type OwnProps = { className?: string; + style?: string; } & PresetParameters; const SYMBOL = '✦'; @@ -83,11 +84,12 @@ const PROGRESS_POSITIONS = generateRandomProgressPositions(100); const Sparkles = ({ className, + style, ...presetSettings }: OwnProps) => { if (presetSettings.preset === 'button') { return ( -
+
{BUTTON_POSITIONS.map((position) => { const shiftX = Math.cos(Math.atan2(-50 + position.y, -50 + position.x)) * 100; const shiftY = Math.sin(Math.atan2(-50 + position.y, -50 + position.x)) * 100; @@ -113,7 +115,7 @@ const Sparkles = ({ if (presetSettings.preset === 'progress') { return ( -
+
{PROGRESS_POSITIONS.map((position) => { return (
= { onContextMenuClose?: NoneToVoidFunction; onContextMenuClick?: NoneToVoidFunction; isEffectEmoji?: boolean; + withSparkles?: boolean; }; const contentForStatusMenuContext = [ @@ -92,6 +94,7 @@ const StickerButton = ) => { const { openStickerSet, openPremiumModal, setEmojiStatus } = getActions(); // eslint-disable-next-line no-null/no-null @@ -198,8 +201,7 @@ const StickerButton = + {withSparkles && } {isIntesectingForShowing && ( = ({ +const StickerSet: FC = ({ stickerSet, loadAndPlay, index, @@ -114,6 +121,7 @@ const StickerSet: FC = ({ onContextMenuOpen, onContextMenuClose, onContextMenuClick, + collectibleStatuses, }) => { const { clearRecentStickers, @@ -149,6 +157,7 @@ const StickerSet: FC = ({ const emojiMarginPx = isMobile ? 8 : 10; const emojiVerticalMarginPx = isMobile ? 8 : 4; const isRecent = stickerSet.id === RECENT_SYMBOL_SET_ID; + const isStatusCollectible = stickerSet.id === COLLECTIBLE_STATUS_SET_ID; const isFavorite = stickerSet.id === FAVORITE_SYMBOL_SET_ID; const isPopular = stickerSet.id === POPULAR_SYMBOL_SET_ID; const isEmoji = stickerSet.isEmoji; @@ -255,7 +264,11 @@ const StickerSet: FC = ({ const favoriteStickerIdsSet = useMemo(() => ( favoriteStickers ? new Set(favoriteStickers.map(({ id }) => id)) : undefined ), [favoriteStickers]); - const withAddSetButton = !shouldHideHeader && !isRecent && isEmoji && !isPopular && !isChatEmojiSet + const collectibleEmojiIdsSet = useMemo(() => ( + collectibleStatuses ? new Set(collectibleStatuses.map(({ documentId }) => documentId)) : undefined + ), [collectibleStatuses]); + const withAddSetButton = !shouldHideHeader && !isRecent && !isStatusCollectible + && isEmoji && !isPopular && !isChatEmojiSet && (!isInstalled || (!isCurrentUserPremium && !isSavedMessages)); const addSetButtonText = useMemo(() => { if (isLocked) { @@ -370,6 +383,9 @@ const StickerSet: FC = ({ const reactionId = sticker.isCustomEmoji ? sticker.id : sticker.emoji; const isSelected = reactionId ? selectedReactionIds?.includes(reactionId) : undefined; + const withSparkles = sticker.id === COLLECTIBLE_STATUS_SET_ID + || collectibleEmojiIdsSet?.has(sticker.id); + return ( = ({ isEffectEmoji={stickerSet.id === EFFECT_EMOJIS_SET_ID} noShowPremium={isCurrentUserPremium && (stickerSet.id === EFFECT_STICKERS_SET_ID || stickerSet.id === EFFECT_EMOJIS_SET_ID)} + withSparkles={withSparkles} /> ); })} @@ -428,7 +445,13 @@ const StickerSet: FC = ({ ); }; -export default memo(StickerSet); +export default memo(withGlobal( + (global): StateProps => { + const collectibleStatuses = global.collectibleEmojiStatuses?.statuses; + + return { collectibleStatuses }; + }, +)(StickerSet)); function getItemsPerRowFallback(windowWidth: number): number { return windowWidth > MOBILE_WIDTH_THRESHOLD_PX diff --git a/src/components/common/reactions/CustomEmojiEffect.tsx b/src/components/common/reactions/CustomEmojiEffect.tsx index 8298a93fb..6e9da1d85 100644 --- a/src/components/common/reactions/CustomEmojiEffect.tsx +++ b/src/components/common/reactions/CustomEmojiEffect.tsx @@ -1,7 +1,7 @@ import type { FC } from '../../../lib/teact/teact'; import React, { memo, useMemo } from '../../../lib/teact/teact'; -import type { ApiEmojiStatus, ApiReactionCustomEmoji } from '../../../api/types'; +import type { ApiEmojiStatusType, ApiReactionCustomEmoji } from '../../../api/types'; import { getStickerHashById } from '../../../global/helpers'; import buildClassName from '../../../util/buildClassName'; @@ -15,7 +15,7 @@ import CustomEmoji from '../CustomEmoji'; import styles from './CustomEmojiEffect.module.scss'; type OwnProps = { - reaction: ApiReactionCustomEmoji | ApiEmojiStatus; + reaction: ApiReactionCustomEmoji | ApiEmojiStatusType; className?: string; isLottie?: boolean; particleSize?: number; diff --git a/src/components/left/main/LeftMainHeader.scss b/src/components/left/main/LeftMainHeader.scss index c9230864f..422fd5362 100644 --- a/src/components/left/main/LeftMainHeader.scss +++ b/src/components/left/main/LeftMainHeader.scss @@ -117,6 +117,7 @@ } .emoji-status { + overflow: visible; --custom-emoji-size: 1.5rem; color: var(--color-primary); } diff --git a/src/components/left/main/StatusButton.tsx b/src/components/left/main/StatusButton.tsx index ab4967c6b..3fb458d83 100644 --- a/src/components/left/main/StatusButton.tsx +++ b/src/components/left/main/StatusButton.tsx @@ -2,7 +2,7 @@ import type { FC } from '../../../lib/teact/teact'; import React, { memo, useCallback, useRef } from '../../../lib/teact/teact'; import { getActions, withGlobal } from '../../../global'; -import type { ApiEmojiStatus, ApiSticker } from '../../../api/types'; +import type { ApiEmojiStatusCollectible, ApiEmojiStatusType, ApiSticker } from '../../../api/types'; import { EMOJI_STATUS_LOOP_LIMIT } from '../../../config'; import { selectUser } from '../../../global/selectors'; @@ -20,13 +20,14 @@ import Button from '../../ui/Button'; import StatusPickerMenu from './StatusPickerMenu.async'; interface StateProps { - emojiStatus?: ApiEmojiStatus; + emojiStatus?: ApiEmojiStatusType; + collectibleStatuses?: ApiEmojiStatusType[]; } const EFFECT_DURATION_MS = 1500; const EMOJI_STATUS_SIZE = 24; -const StatusButton: FC = ({ emojiStatus }) => { +const StatusButton: FC = ({ emojiStatus, collectibleStatuses }) => { const { setEmojiStatus, loadCurrentUser } = getActions(); // eslint-disable-next-line no-null/no-null @@ -47,9 +48,14 @@ const StatusButton: FC = ({ emojiStatus }) => { }, [emojiStatus, shouldShowEffect, showEffect, unmarkShouldShowEffect]); const handleEmojiStatusSet = useCallback((sticker: ApiSticker) => { + const collectibleStatus = collectibleStatuses?.find( + ((status) => 'collectibleId' in status && status.documentId === sticker.id), + ) as ApiEmojiStatusCollectible | undefined; markShouldShowEffect(); - setEmojiStatus({ emojiStatusId: sticker.id }); - }, [markShouldShowEffect, setEmojiStatus]); + setEmojiStatus({ + emojiStatus: collectibleStatus || { type: 'regular', documentId: sticker.id }, + }); + }, [markShouldShowEffect, setEmojiStatus, collectibleStatuses]); useTimeout(hideEffect, isEffectShown ? EFFECT_DURATION_MS : undefined); @@ -81,6 +87,7 @@ const StatusButton: FC = ({ emojiStatus }) => { documentId={emojiStatus.documentId} size={EMOJI_STATUS_SIZE} loopLimit={EMOJI_STATUS_LOOP_LIMIT} + withSparkles={emojiStatus?.type === 'collectible'} /> ) : } @@ -97,8 +104,10 @@ const StatusButton: FC = ({ emojiStatus }) => { export default memo(withGlobal((global): StateProps => { const { currentUserId } = global; const currentUser = currentUserId ? selectUser(global, currentUserId) : undefined; + const collectibleStatuses = global.collectibleEmojiStatuses?.statuses; return { emojiStatus: currentUser?.emojiStatus, + collectibleStatuses, }; })(StatusButton)); diff --git a/src/components/main/Main.tsx b/src/components/main/Main.tsx index b501d6852..c5c6f86b9 100644 --- a/src/components/main/Main.tsx +++ b/src/components/main/Main.tsx @@ -230,6 +230,7 @@ const Main = ({ openThread, toggleLeftColumn, loadRecentEmojiStatuses, + loadUserCollectibleStatuses, updatePageTitle, loadTopReactions, loadRecentReactions, @@ -335,6 +336,7 @@ const Main = ({ loadTopBotApps(); loadPaidReactionPrivacy(); loadPasswordInfo(); + loadUserCollectibleStatuses(); } }, [isMasterTab, isSynced]); diff --git a/src/components/middle/MiddleHeader.scss b/src/components/middle/MiddleHeader.scss index 1ff53f4c1..43c19f4a2 100644 --- a/src/components/middle/MiddleHeader.scss +++ b/src/components/middle/MiddleHeader.scss @@ -69,7 +69,7 @@ .chat-info-wrapper { flex-grow: 1; - overflow: hidden; + min-width: 0; } .header-tools { @@ -154,7 +154,7 @@ flex-direction: column; justify-content: center; flex-grow: 1; - overflow: hidden; + min-width: 0; } .title { diff --git a/src/components/middle/MiddleHeader.tsx b/src/components/middle/MiddleHeader.tsx index af4d3ca56..10f89af76 100644 --- a/src/components/middle/MiddleHeader.tsx +++ b/src/components/middle/MiddleHeader.tsx @@ -85,6 +85,7 @@ type StateProps = { isSyncing?: boolean; isFetchingDifference?: boolean; emojiStatusSticker?: ApiSticker; + emojiStatusSlug?: string; }; const MiddleHeader: FC = ({ @@ -108,6 +109,7 @@ const MiddleHeader: FC = ({ getCurrentPinnedIndex, getLoadingPinnedId, emojiStatusSticker, + emojiStatusSlug, isSavedDialog, onFocusPinnedMessage, }) => { @@ -120,6 +122,7 @@ const MiddleHeader: FC = ({ openPremiumModal, openStickerSet, updateMiddleSearch, + openUniqueGiftBySlug, } = getActions(); const lang = useOldLang(); @@ -165,10 +168,18 @@ const MiddleHeader: FC = ({ }); const handleUserStatusClick = useLastCallback(() => { + if (emojiStatusSlug) { + openUniqueGiftBySlug({ slug: emojiStatusSlug }); + return; + } openPremiumModal({ fromUserId: chatId }); }); const handleChannelStatusClick = useLastCallback(() => { + if (emojiStatusSlug) { + openUniqueGiftBySlug({ slug: emojiStatusSlug }); + return; + } openStickerSet({ stickerSetInfo: emojiStatusSticker!.stickerSetInfo, }); @@ -388,6 +399,7 @@ export default memo(withGlobal( const emojiStatus = chat?.emojiStatus; const emojiStatusSticker = emojiStatus && global.customEmojis.byId[emojiStatus.documentId]; + const emojiStatusSlug = emojiStatus?.type === 'collectible' ? emojiStatus.slug : undefined; const isSavedDialog = getIsSavedDialog(chatId, threadId, global.currentUserId); @@ -406,6 +418,7 @@ export default memo(withGlobal( isSyncing: global.isSyncing, isFetchingDifference: global.isFetchingDifference, emojiStatusSticker, + emojiStatusSlug, isSavedDialog, }; }, diff --git a/src/components/modals/ModalContainer.tsx b/src/components/modals/ModalContainer.tsx index d5a3deafe..a834821ee 100644 --- a/src/components/modals/ModalContainer.tsx +++ b/src/components/modals/ModalContainer.tsx @@ -18,6 +18,7 @@ import EmojiStatusAccessModal from './emojiStatusAccess/EmojiStatusAccessModal.a import PremiumGiftModal from './gift/GiftModal.async'; import GiftInfoModal from './gift/info/GiftInfoModal.async'; import GiftRecipientPicker from './gift/recipient/GiftRecipientPicker.async'; +import GiftStatusInfoModal from './gift/status/GiftStatusInfoModal.async'; import GiftTransferModal from './gift/transfer/GiftTransferModal.async'; import GiftUpgradeModal from './gift/upgrade/GiftUpgradeModal.async'; import GiftWithdrawModal from './gift/withdraw/GiftWithdrawModal.async'; @@ -71,6 +72,7 @@ type ModalKey = keyof Pick; @@ -117,6 +119,7 @@ const MODALS: ModalRegistry = { giftUpgradeModal: GiftUpgradeModal, monetizationVerificationModal: VerificationMonetizationModal, giftWithdrawModal: GiftWithdrawModal, + giftStatusInfoModal: GiftStatusInfoModal, giftTransferModal: GiftTransferModal, }; const MODAL_KEYS = Object.keys(MODALS) as ModalKey[]; diff --git a/src/components/modals/common/TableAboutModal.module.scss b/src/components/modals/common/TableAboutModal.module.scss index 7d9b0b148..517c9eeea 100644 --- a/src/components/modals/common/TableAboutModal.module.scss +++ b/src/components/modals/common/TableAboutModal.module.scss @@ -28,6 +28,10 @@ margin-bottom: 1rem; } +.listItemIcon { + color: var(--accent-color) !important; +} + .content { display: flex; flex-direction: column; diff --git a/src/components/modals/common/TableAboutModal.tsx b/src/components/modals/common/TableAboutModal.tsx index 283d7e109..d7db90de0 100644 --- a/src/components/modals/common/TableAboutModal.tsx +++ b/src/components/modals/common/TableAboutModal.tsx @@ -2,6 +2,8 @@ import React, { memo, type TeactNode } from '../../../lib/teact/teact'; import type { IconName } from '../../../types/icons'; +import buildClassName from '../../../util/buildClassName'; + import Icon from '../../common/icons/Icon'; import Button from '../../ui/Button'; import ListItem from '../../ui/ListItem'; @@ -13,6 +15,7 @@ import styles from './TableAboutModal.module.scss'; export type TableAboutData = [IconName | undefined, TeactNode, TeactNode][]; type OwnProps = { + contentClassName?: string; isOpen?: boolean; listItemData?: TableAboutData; headerIconName?: IconName; @@ -36,11 +39,12 @@ const TableAboutModal = ({ withSeparator, onClose, onButtonClick, + contentClassName, }: OwnProps) => { return ( {title} {subtitle} diff --git a/src/components/modals/emojiStatusAccess/EmojiStatusAccessModal.tsx b/src/components/modals/emojiStatusAccess/EmojiStatusAccessModal.tsx index 799ee7d82..af3ea49e9 100644 --- a/src/components/modals/emojiStatusAccess/EmojiStatusAccessModal.tsx +++ b/src/components/modals/emojiStatusAccess/EmojiStatusAccessModal.tsx @@ -70,6 +70,7 @@ const EmojiStatusAccessModal: FC = ({ return { ...currentUser, emojiStatus: { + type: 'regular', documentId: stickerSet.stickers[currentStatusIndex].id, }, } satisfies ApiUser; diff --git a/src/components/modals/gift/info/GiftInfoModal.module.scss b/src/components/modals/gift/info/GiftInfoModal.module.scss index 9fb17bf4a..dc3dc4475 100644 --- a/src/components/modals/gift/info/GiftInfoModal.module.scss +++ b/src/components/modals/gift/info/GiftInfoModal.module.scss @@ -62,7 +62,7 @@ } .modalHeader { - z-index: 1; + z-index: 2; width: 100%; padding: 0.375rem; position: absolute; diff --git a/src/components/modals/gift/info/GiftInfoModal.tsx b/src/components/modals/gift/info/GiftInfoModal.tsx index 3e6a1b5ae..27471b0d4 100644 --- a/src/components/modals/gift/info/GiftInfoModal.tsx +++ b/src/components/modals/gift/info/GiftInfoModal.tsx @@ -3,14 +3,16 @@ import React, { memo, useMemo } from '../../../../lib/teact/teact'; import { getActions, getGlobal, withGlobal } from '../../../../global'; import type { + ApiEmojiStatusCollectible, + ApiEmojiStatusType, ApiPeer, } from '../../../../api/types'; import type { TabState } from '../../../../global/types'; -import { TME_LINK_PREFIX } from '../../../../config'; +import { DEFAULT_STATUS_ICON_ID, TME_LINK_PREFIX } from '../../../../config'; import { getHasAdminRight, getPeerTitle } from '../../../../global/helpers'; import { isApiPeerChat } from '../../../../global/helpers/peers'; -import { selectPeer } from '../../../../global/selectors'; +import { selectPeer, selectUser } from '../../../../global/selectors'; import buildClassName from '../../../../util/buildClassName'; import { copyTextToClipboard } from '../../../../util/clipboard'; import { formatDateTimeToString } from '../../../../util/dates/dateFormat'; @@ -51,6 +53,8 @@ type StateProps = { currentUserId?: string; starGiftMaxConvertPeriod?: number; hasAdminRights?: boolean; + currentUserEmojiStatus?: ApiEmojiStatusType; + collectibleEmojiStatuses?: ApiEmojiStatusType[]; }; const STICKER_SIZE = 120; @@ -62,6 +66,8 @@ const GiftInfoModal = ({ currentUserId, starGiftMaxConvertPeriod, hasAdminRights, + currentUserEmojiStatus, + collectibleEmojiStatuses, }: OwnProps & StateProps) => { const { closeGiftInfoModal, @@ -72,6 +78,8 @@ const GiftInfoModal = ({ openGiftUpgradeModal, showNotification, openChatWithDraft, + openGiftStatusInfoModal, + setEmojiStatus, openGiftTransferModal, } = getActions(); @@ -99,6 +107,25 @@ const GiftInfoModal = ({ const gift = isSavedGift ? typeGift.gift : typeGift; const giftSticker = gift && getStickerFromGift(gift); + const currenUniqueEmojiStatusSlug = currentUserEmojiStatus?.type === 'collectible' + ? currentUserEmojiStatus.slug : undefined; + + const starGiftUniqueSlug = gift?.type === 'starGiftUnique' ? gift.slug : undefined; + const starGiftUniqueLink = useMemo(() => { + if (!starGiftUniqueSlug) return undefined; + return `${TME_LINK_PREFIX}nft/${starGiftUniqueSlug}`; + }, [starGiftUniqueSlug]); + const userCollectibleStatus = useMemo(() => { + if (!starGiftUniqueSlug) return undefined; + return collectibleEmojiStatuses?.find(( + status, + ) => status.type === 'collectible' && status.slug === starGiftUniqueSlug) as ApiEmojiStatusCollectible | undefined; + }, [starGiftUniqueSlug, collectibleEmojiStatuses]); + + const isGiftUnique = gift && gift.type === 'starGiftUnique'; + const canTakeOff = isGiftUnique && currenUniqueEmojiStatusSlug === gift.slug; + const canWear = userCollectibleStatus && !canTakeOff; + const canFocusUpgrade = Boolean(savedGift?.upgradeMsgId); const canUpdate = !canFocusUpgrade && savedGift?.inputGift && ( isTargetChat ? hasAdminRights : renderingTargetPeer?.id === currentUserId @@ -108,12 +135,6 @@ const GiftInfoModal = ({ closeGiftInfoModal(); }); - const starGiftUniqueLink = useMemo(() => { - const slug = gift?.type === 'starGiftUnique' ? gift.slug : undefined; - if (!slug) return undefined; - return `${TME_LINK_PREFIX}nft/${slug}`; - }, [gift]); - const handleCopyLink = useLastCallback(() => { if (!starGiftUniqueLink) return; copyTextToClipboard(starGiftUniqueLink); @@ -133,6 +154,19 @@ const GiftInfoModal = ({ openGiftTransferModal({ gift: savedGift }); }); + const handleWear = useLastCallback(() => { + if (gift?.type !== 'starGiftUnique' || !userCollectibleStatus) return; + openGiftStatusInfoModal({ emojiStatus: userCollectibleStatus }); + }); + + const handleTakeOff = useLastCallback(() => { + if (canTakeOff) { + setEmojiStatus({ + emojiStatus: { type: 'regular', documentId: DEFAULT_STATUS_ICON_ID }, + }); + } + }); + const handleFocusUpgraded = useLastCallback(() => { if (!savedGift?.upgradeMsgId || !renderingTargetPeer) return; const { upgradeMsgId } = savedGift; @@ -271,37 +305,39 @@ const GiftInfoModal = ({ })(); function getTitle() { - if (gift?.type === 'starGiftUnique') return gift.title; + if (isGiftUnique) return gift.title; if (!savedGift) return lang('GiftInfoSoldOutTitle'); return canUpdate ? lang('GiftInfoReceived') : lang('GiftInfoTitle'); } - const isUniqueGift = gift.type === 'starGiftUnique'; - - const contextMenu = ( + const uniqueGiftContextMenu = ( - + {lang('CopyLink')} - + {lang('Share')} - {canUpdate && isUniqueGift && ( + {canUpdate && isGiftUnique && ( {lang('GiftInfoTransfer')} )} + {canWear && ( + + {lang('GiftInfoWear')} + + )} + {canTakeOff && ( + + {lang('GiftInfoTakeOff')} + + )} ); @@ -319,11 +355,11 @@ const GiftInfoModal = ({ > - {isOpen && contextMenu} + {isOpen && uniqueGiftContextMenu}
); - const uniqueGiftHeader = isUniqueGift && ( + const uniqueGiftHeader = isGiftUnique && (
( const targetPeer = modal?.peerId ? selectPeer(global, modal.peerId) : undefined; const chat = targetPeer && isApiPeerChat(targetPeer) ? targetPeer : undefined; const hasAdminRights = chat && getHasAdminRight(chat, 'postMessages'); + const currentUser = global.currentUserId ? selectUser(global, global.currentUserId) : undefined; + const currentUserEmojiStatus = currentUser?.emojiStatus; + const collectibleEmojiStatuses = global.collectibleEmojiStatuses?.statuses; return { fromPeer, @@ -663,6 +704,8 @@ export default memo(withGlobal( currentUserId: global.currentUserId, starGiftMaxConvertPeriod: global.appConfig?.starGiftMaxConvertPeriod, hasAdminRights, + currentUserEmojiStatus, + collectibleEmojiStatuses, }; }, )(GiftInfoModal)); diff --git a/src/components/modals/gift/status/GiftStatusInfoModal.async.tsx b/src/components/modals/gift/status/GiftStatusInfoModal.async.tsx new file mode 100644 index 000000000..8c7b803a6 --- /dev/null +++ b/src/components/modals/gift/status/GiftStatusInfoModal.async.tsx @@ -0,0 +1,18 @@ +import type { FC } from '../../../../lib/teact/teact'; +import React from '../../../../lib/teact/teact'; + +import type { OwnProps } from './GiftStatusInfoModal'; + +import { Bundles } from '../../../../util/moduleLoader'; + +import useModuleLoader from '../../../../hooks/useModuleLoader'; + +const GiftStatusInfoModalAsync: FC = (props) => { + const { modal } = props; + const GiftStatusInfoModal = useModuleLoader(Bundles.Stars, 'GiftStatusInfoModal', !modal); + + // eslint-disable-next-line react/jsx-props-no-spreading + return GiftStatusInfoModal ? : undefined; +}; + +export default GiftStatusInfoModalAsync; diff --git a/src/components/modals/gift/status/GiftStatusInfoModal.module.scss b/src/components/modals/gift/status/GiftStatusInfoModal.module.scss new file mode 100644 index 000000000..98876f8ad --- /dev/null +++ b/src/components/modals/gift/status/GiftStatusInfoModal.module.scss @@ -0,0 +1,72 @@ +.header, +.profileBlock { + display: flex; + flex-direction: column; + align-items: center; + width: 100%; +} + +.titleContainer { + padding-bottom: 0.5rem; +} + +.profileBlock { + position: relative; + margin-bottom: 0.5rem; + padding-bottom: 1rem; +} + +.radialPattern { + position: absolute; + inset-inline-start: -1.5rem; + height: calc(100% + 2rem); + top: -3rem; + width: calc(100% + 3rem); + z-index: -1; +} + +.lockIcon { + font-size: 1rem; + margin-left: 0.25rem; +} + +.avatar { + margin-top: 2rem; +} + +.userTitle { + font-size: 1.25rem; + color: white; + margin-top: auto; + width: 100%; + justify-content: center; + padding-top: 1rem; +} + +.status { + font-size: 0.875rem; + text-align: center; + padding-bottom: 1rem; +} + +.userTitle, .status { + margin-bottom: 0; + z-index: 1; +} + +.giftTitle { + font-weight: 500; + font-size: 1.5rem; + text-align: center; + padding-bottom: 0.5rem; +} + +.infoDescription { + text-align: center; +} + +.footer { + margin-top: 0.5rem; + display: flex; + align-self: stretch; +} diff --git a/src/components/modals/gift/status/GiftStatusInfoModal.tsx b/src/components/modals/gift/status/GiftStatusInfoModal.tsx new file mode 100644 index 000000000..acbce22f2 --- /dev/null +++ b/src/components/modals/gift/status/GiftStatusInfoModal.tsx @@ -0,0 +1,171 @@ +import React, { memo, useMemo } from '../../../../lib/teact/teact'; +import { getActions, withGlobal } from '../../../../global'; + +import type { + ApiUser, +} from '../../../../api/types'; +import type { TabState } from '../../../../global/types'; + +import { selectIsCurrentUserPremium, selectUser } from '../../../../global/selectors'; +import buildClassName from '../../../../util/buildClassName'; +import buildStyle from '../../../../util/buildStyle'; + +import useCurrentOrPrev from '../../../../hooks/useCurrentOrPrev'; +import useLang from '../../../../hooks/useLang'; +import useLastCallback from '../../../../hooks/useLastCallback'; +import useCustomEmoji from '../../../common/hooks/useCustomEmoji'; + +import Avatar from '../../../common/Avatar'; +import FullNameTitle from '../../../common/FullNameTitle'; +import Icon from '../../../common/icons/Icon'; +import RadialPatternBackground from '../../../common/profile/RadialPatternBackground'; +import Button from '../../../ui/Button'; +import TableAboutModal, { type TableAboutData } from '../../common/TableAboutModal'; + +import styles from './GiftStatusInfoModal.module.scss'; + +export type OwnProps = { + modal: TabState['giftStatusInfoModal']; +}; + +type StateProps = { + currentUser: ApiUser; + isCurrentUserPremium?: boolean; +}; + +const GiftStatusInfoModal = ({ + modal, + currentUser, + isCurrentUserPremium, +}: OwnProps & StateProps) => { + const { + closeGiftStatusInfoModal, + setEmojiStatus, + } = getActions(); + const lang = useLang(); + const isOpen = Boolean(modal); + const renderingModal = useCurrentOrPrev(modal); + + const { emojiStatus } = renderingModal || {}; + + const subtitleColor = emojiStatus?.textColor; + + const patternIcon = useCustomEmoji(emojiStatus?.patternDocumentId); + + const handleClose = useLastCallback(() => { + closeGiftStatusInfoModal(); + }); + + const onWearClick = useLastCallback(() => { + if (emojiStatus) { + setEmojiStatus({ emojiStatus }); + } + closeGiftStatusInfoModal(); + }); + + const radialPatternBackdrop = useMemo(() => { + if (!emojiStatus || !isOpen) return undefined; + + const backdropColors = [emojiStatus.centerColor, emojiStatus.edgeColor]; + const patternColor = emojiStatus.patternColor; + + return ( + + ); + }, [emojiStatus, isOpen, patternIcon]); + + const mockPeerWithStatus = useMemo(() => { + return { + ...currentUser, + emojiStatus, + } satisfies ApiUser; + }, [currentUser, emojiStatus]); + + const header = useMemo(() => { + return ( +
+
+ + {radialPatternBackdrop} + + +

+ {lang('Online')} +

+
+
+
{ + lang('UniqueStatusWearTitle', { + gift: mockPeerWithStatus?.emojiStatus?.title, + }) + } +
+
{ + lang('UniqueStatusBenefitsDescription') + } +
+
+
+ ); + }, [subtitleColor, radialPatternBackdrop, mockPeerWithStatus, lang]); + + const listItemData = [ + ['radial-badge', lang('UniqueStatusBadgeBenefitTitle'), lang('UniqueStatusBadgeDescription')], + ['unique-profile', lang('UniqueStatusProfileDesignBenefitTitle'), lang('UniqueStatusProfileDesignDescription')], + ['proof-of-ownership', lang('UniqueStatusProofOfOwnershipBenefitTitle'), + lang('UniqueStatusProofOfOwnershipDescription')], + ] satisfies TableAboutData; + + const footer = useMemo(() => { + if (!isOpen) return undefined; + return ( +
+ +
+ ); + }, [lang, isCurrentUserPremium, isOpen]); + + return ( + + ); +}; + +export default memo(withGlobal( + (global): StateProps => { + const currentUser = selectUser(global, global.currentUserId!)!; + const isCurrentUserPremium = selectIsCurrentUserPremium(global); + + return { + currentUser, + isCurrentUserPremium, + }; + }, +)(GiftStatusInfoModal)); diff --git a/src/components/modals/suggestedStatus/SuggestedStatusModal.tsx b/src/components/modals/suggestedStatus/SuggestedStatusModal.tsx index 0cc86ed63..6d078d640 100644 --- a/src/components/modals/suggestedStatus/SuggestedStatusModal.tsx +++ b/src/components/modals/suggestedStatus/SuggestedStatusModal.tsx @@ -45,6 +45,7 @@ const SuggestedStatusModal = ({ modal, currentUser, bot }: OwnProps & StateProps return { ...currentUser, emojiStatus: { + type: 'regular', documentId: renderingModal.customEmojiId, }, } satisfies ApiUser; @@ -93,8 +94,7 @@ const SuggestedStatusModal = ({ modal, currentUser, bot }: OwnProps & StateProps setEmojiStatus({ referrerWebAppKey: renderingModal.webAppKey, - emojiStatusId: renderingModal.customEmojiId, - expires, + emojiStatus: { type: 'regular', documentId: renderingModal.customEmojiId, until: expires }, }); closeSuggestedStatusModal(); }); diff --git a/src/components/right/Profile.scss b/src/components/right/Profile.scss index 6f00bf5fc..182db03b4 100644 --- a/src/components/right/Profile.scss +++ b/src/components/right/Profile.scss @@ -86,6 +86,10 @@ z-index: 1; } + .info .Transition { + flex-grow: 0; + } + .Transition { flex: 1; } diff --git a/src/components/ui/ListItem.scss b/src/components/ui/ListItem.scss index 40d9a844c..98cb0cb6e 100644 --- a/src/components/ui/ListItem.scss +++ b/src/components/ui/ListItem.scss @@ -104,7 +104,6 @@ text-align: initial; unicode-bidi: plaintext; text-overflow: ellipsis; - overflow: hidden; } .other-usernames { @@ -225,7 +224,7 @@ .info { flex: 1; - overflow: hidden; + min-width: 0; } .info-name-title { @@ -236,10 +235,10 @@ .info-row, .title, .subtitle { - overflow: hidden; display: flex; justify-content: flex-start; align-items: center; + min-width: 0; } .separator { @@ -287,7 +286,7 @@ display: flex; align-items: center; flex: 1; - overflow: hidden; + min-width: 0; .info { display: flex; diff --git a/src/config.ts b/src/config.ts index f780ece7b..aaf88c8ea 100644 --- a/src/config.ts +++ b/src/config.ts @@ -219,6 +219,7 @@ export const EMOJI_SIZES = 7; export const TOP_SYMBOL_SET_ID = 'top'; export const POPULAR_SYMBOL_SET_ID = 'popular'; export const RECENT_SYMBOL_SET_ID = 'recent'; +export const COLLECTIBLE_STATUS_SET_ID = 'collectibleStatus'; export const FAVORITE_SYMBOL_SET_ID = 'favorite'; export const EFFECT_STICKERS_SET_ID = 'effectStickers'; export const EFFECT_EMOJIS_SET_ID = 'effectEmojis'; diff --git a/src/global/actions/api/symbols.ts b/src/global/actions/api/symbols.ts index cf9eb22b1..b58b2830d 100644 --- a/src/global/actions/api/symbols.ts +++ b/src/global/actions/api/symbols.ts @@ -239,6 +239,31 @@ addActionHandler('loadDefaultStatusIcons', async (global): Promise => { setGlobal(global); }); +addActionHandler('loadUserCollectibleStatuses', async (global, actions): Promise => { + setGlobal(global); + + const { hash } = global.collectibleEmojiStatuses || {}; + + const result = await callApi('fetchCollectibleEmojiStatuses', { hash }); + if (!result) { + return; + } + + global = getGlobal(); + + global = { + ...global, + collectibleEmojiStatuses: { + hash: result.hash, + statuses: result.statuses, + }, + }; + setGlobal(global); + const documentIds = result.statuses.map(({ documentId }) => documentId); + + actions.loadCustomEmojis({ ids: documentIds }); +}); + addActionHandler('loadStickers', (global, actions, payload): ActionReturnType => { const { stickerSetInfo } = payload; const cachedSet = selectStickerSet(global, stickerSetInfo); diff --git a/src/global/actions/api/users.ts b/src/global/actions/api/users.ts index 9408b35d2..5d9a8a668 100644 --- a/src/global/actions/api/users.ts +++ b/src/global/actions/api/users.ts @@ -389,7 +389,7 @@ addActionHandler('reportSpam', (global, actions, payload): ActionReturnType => { addActionHandler('setEmojiStatus', async (global, actions, payload): Promise => { const { - emojiStatusId, referrerWebAppKey, expires, tabId = getCurrentTabId(), + emojiStatus, referrerWebAppKey, tabId = getCurrentTabId(), } = payload; const isCurrentUserPremium = selectIsCurrentUserPremium(global); @@ -411,7 +411,7 @@ addActionHandler('setEmojiStatus', async (global, actions, payload): Promise { + const { emojiStatus, tabId = getCurrentTabId() } = payload || {}; + + return updateTabState(global, { + giftStatusInfoModal: { + emojiStatus, + }, + }, tabId); +}); + +addActionHandler('closeGiftStatusInfoModal', (global, actions, payload): ActionReturnType => { + const { tabId = getCurrentTabId() } = payload || {}; + + return updateTabState(global, { + giftStatusInfoModal: undefined, + }, tabId); +}); + addActionHandler('clearGiftWithdrawError', (global, actions, payload): ActionReturnType => { const { tabId = getCurrentTabId() } = payload || {}; const tabState = selectTabState(global, tabId); diff --git a/src/global/types/actions.ts b/src/global/types/actions.ts index ae56d91c0..b152c08ae 100644 --- a/src/global/types/actions.ts +++ b/src/global/types/actions.ts @@ -50,6 +50,7 @@ import type { BotsPrivacyType, PrivacyVisibility, } from '../../api/types'; +import type { ApiEmojiStatusCollectible, ApiEmojiStatusType } from '../../api/types/users'; import type { ApiCredentials } from '../../components/payment/PaymentModal'; import type { FoldersActions } from '../../hooks/reducers/useFoldersReducer'; import type { ReducerAction } from '../../hooks/useReducer'; @@ -1831,6 +1832,7 @@ export interface ActionPayloads { clearRecentCustomEmoji: undefined; loadFeaturedEmojiStickers: undefined; loadDefaultStatusIcons: undefined; + loadUserCollectibleStatuses: undefined; loadRecentEmojiStatuses: undefined; // Bots @@ -2345,6 +2347,10 @@ export interface ActionPayloads { } & WithTabId; clearGiftWithdrawError: WithTabId | undefined; closeGiftWithdrawModal: WithTabId | undefined; + openGiftStatusInfoModal: { + emojiStatus: ApiEmojiStatusCollectible; + } & WithTabId; + closeGiftStatusInfoModal: WithTabId | undefined; processStarGiftWithdrawal: { gift: ApiInputSavedStarGift; password: string; @@ -2379,8 +2385,7 @@ export interface ActionPayloads { closeStarsGiftModal: WithTabId | undefined; setEmojiStatus: { - emojiStatusId: string; - expires?: number; + emojiStatus: ApiEmojiStatusType; referrerWebAppKey?: string; } & WithTabId; openSuggestedStatusModal: { diff --git a/src/global/types/globalState.ts b/src/global/types/globalState.ts index 79d78d8a8..374db0da6 100644 --- a/src/global/types/globalState.ts +++ b/src/global/types/globalState.ts @@ -11,6 +11,7 @@ import type { ApiConfig, ApiCountry, ApiCountryCode, + ApiEmojiStatusType, ApiGroupCall, ApiLanguage, ApiMessage, @@ -361,6 +362,11 @@ export type GlobalState = { premiumGifts?: ApiStickerSet; emojiKeywords: Record; + collectibleEmojiStatuses?: { + statuses: ApiEmojiStatusType[]; + hash?: string; + }; + gifs: { saved: { hash?: string; diff --git a/src/global/types/tabState.ts b/src/global/types/tabState.ts index 9a8ce804c..4dce93fd5 100644 --- a/src/global/types/tabState.ts +++ b/src/global/types/tabState.ts @@ -47,6 +47,7 @@ import type { ApiVideo, ApiWebPage, } from '../../api/types'; +import type { ApiEmojiStatusCollectible } from '../../api/types/users'; import type { FoldersActions } from '../../hooks/reducers/useFoldersReducer'; import type { ReducerAction } from '../../hooks/useReducer'; import type { @@ -737,6 +738,10 @@ export type TabState = { errorKey?: RegularLangFnParameters; }; + giftStatusInfoModal?: { + emojiStatus: ApiEmojiStatusCollectible; + }; + suggestedStatusModal?: { botId: string; webAppKey?: string; diff --git a/src/lib/gramjs/tl/apiTl.ts b/src/lib/gramjs/tl/apiTl.ts index a129b1b2f..c537264ca 100644 --- a/src/lib/gramjs/tl/apiTl.ts +++ b/src/lib/gramjs/tl/apiTl.ts @@ -1462,6 +1462,7 @@ account.reorderUsernames#ef500eab order:Vector = Bool; account.toggleUsername#58d6b376 username:string active:Bool = Bool; account.resolveBusinessChatLink#5492e5ee slug:string = account.ResolvedBusinessChatLinks; account.toggleSponsoredMessages#b9d9a38d enabled:Bool = Bool; +account.getCollectibleEmojiStatuses#2e7b4543 hash:long = account.EmojiStatuses; users.getUsers#d91a548 id:Vector = Vector; users.getFullUser#b60f5918 id:InputUser = users.UserFull; contacts.getContacts#5dd69e12 hash:long = contacts.Contacts; diff --git a/src/lib/gramjs/tl/static/api.json b/src/lib/gramjs/tl/static/api.json index 01759d0c1..6fa2c5dea 100644 --- a/src/lib/gramjs/tl/static/api.json +++ b/src/lib/gramjs/tl/static/api.json @@ -60,6 +60,7 @@ "account.toggleUsername", "account.resolveBusinessChatLink", "account.toggleSponsoredMessages", + "account.getCollectibleEmojiStatuses", "users.getUsers", "users.getFullUser", "contacts.getContacts", diff --git a/src/styles/icons.scss b/src/styles/icons.scss index 7376f860e..fd408070b 100644 --- a/src/styles/icons.scss +++ b/src/styles/icons.scss @@ -94,196 +94,201 @@ $icons-map: ( "comments": "\f139", "copy-media": "\f13a", "copy": "\f13b", - "darkmode": "\f13c", - "data": "\f13d", - "delete-filled": "\f13e", - "delete-left": "\f13f", - "delete-user": "\f140", - "delete": "\f141", - "diamond": "\f142", - "document": "\f143", - "double-badge": "\f144", - "down": "\f145", - "download": "\f146", - "eats": "\f147", - "edit": "\f148", - "email": "\f149", - "enter": "\f14a", - "expand-modal": "\f14b", - "expand": "\f14c", - "eye-closed-outline": "\f14d", - "eye-closed": "\f14e", - "eye-outline": "\f14f", - "eye": "\f150", - "favorite-filled": "\f151", - "favorite": "\f152", - "file-badge": "\f153", - "flag": "\f154", - "folder-badge": "\f155", - "folder": "\f156", - "fontsize": "\f157", - "forums": "\f158", - "forward": "\f159", - "fragment": "\f15a", - "fullscreen": "\f15b", - "gifs": "\f15c", - "gift": "\f15d", - "group-filled": "\f15e", - "group": "\f15f", - "grouped-disable": "\f160", - "grouped": "\f161", - "hand-stop": "\f162", - "hashtag": "\f163", - "heart-outline": "\f164", - "heart": "\f165", - "help": "\f166", - "info-filled": "\f167", - "info": "\f168", - "install": "\f169", - "italic": "\f16a", - "key": "\f16b", - "keyboard": "\f16c", - "lamp": "\f16d", - "language": "\f16e", - "large-pause": "\f16f", - "large-play": "\f170", - "link-badge": "\f171", - "link-broken": "\f172", - "link": "\f173", - "location": "\f174", - "lock-badge": "\f175", - "lock": "\f176", - "logout": "\f177", - "loop": "\f178", - "mention": "\f179", - "message-failed": "\f17a", - "message-pending": "\f17b", - "message-read": "\f17c", - "message-succeeded": "\f17d", - "message": "\f17e", - "microphone-alt": "\f17f", - "microphone": "\f180", - "monospace": "\f181", - "more-circle": "\f182", - "more": "\f183", - "move-caption-down": "\f184", - "move-caption-up": "\f185", - "mute": "\f186", - "muted": "\f187", - "my-notes": "\f188", - "new-chat-filled": "\f189", - "next": "\f18a", - "nochannel": "\f18b", - "noise-suppression": "\f18c", - "non-contacts": "\f18d", - "one-filled": "\f18e", - "open-in-new-tab": "\f18f", - "password-off": "\f190", - "pause": "\f191", - "permissions": "\f192", - "phone-discard-outline": "\f193", - "phone-discard": "\f194", - "phone": "\f195", - "photo": "\f196", - "pin-badge": "\f197", - "pin-list": "\f198", - "pin": "\f199", - "pinned-chat": "\f19a", - "pinned-message": "\f19b", - "pip": "\f19c", - "play-story": "\f19d", - "play": "\f19e", - "poll": "\f19f", - "previous": "\f1a0", - "privacy-policy": "\f1a1", - "quote-text": "\f1a2", - "quote": "\f1a3", - "readchats": "\f1a4", - "recent": "\f1a5", - "reload": "\f1a6", - "remove-quote": "\f1a7", - "remove": "\f1a8", - "reopen-topic": "\f1a9", - "replace": "\f1aa", - "replies": "\f1ab", - "reply-filled": "\f1ac", - "reply": "\f1ad", - "revenue-split": "\f1ae", - "revote": "\f1af", - "save-story": "\f1b0", - "saved-messages": "\f1b1", - "schedule": "\f1b2", - "search": "\f1b3", - "select": "\f1b4", - "send-outline": "\f1b5", - "send": "\f1b6", - "settings-filled": "\f1b7", - "settings": "\f1b8", - "share-filled": "\f1b9", - "share-screen-outlined": "\f1ba", - "share-screen-stop": "\f1bb", - "share-screen": "\f1bc", - "show-message": "\f1bd", - "sidebar": "\f1be", - "skip-next": "\f1bf", - "skip-previous": "\f1c0", - "smallscreen": "\f1c1", - "smile": "\f1c2", - "sort": "\f1c3", - "speaker-muted-story": "\f1c4", - "speaker-outline": "\f1c5", - "speaker-story": "\f1c6", - "speaker": "\f1c7", - "spoiler-disable": "\f1c8", - "spoiler": "\f1c9", - "sport": "\f1ca", - "star": "\f1cb", - "stars-lock": "\f1cc", - "stats": "\f1cd", - "stealth-future": "\f1ce", - "stealth-past": "\f1cf", - "stickers": "\f1d0", - "stop-raising-hand": "\f1d1", - "stop": "\f1d2", - "story-caption": "\f1d3", - "story-expired": "\f1d4", - "story-priority": "\f1d5", - "story-reply": "\f1d6", - "strikethrough": "\f1d7", - "tag-add": "\f1d8", - "tag-crossed": "\f1d9", - "tag-filter": "\f1da", - "tag-name": "\f1db", - "tag": "\f1dc", - "timer": "\f1dd", - "toncoin": "\f1de", - "trade": "\f1df", - "transcribe": "\f1e0", - "truck": "\f1e1", - "unarchive": "\f1e2", - "underlined": "\f1e3", - "unlock-badge": "\f1e4", - "unlock": "\f1e5", - "unmute": "\f1e6", - "unpin": "\f1e7", - "unread": "\f1e8", - "up": "\f1e9", - "user-filled": "\f1ea", - "user-online": "\f1eb", - "user": "\f1ec", - "video-outlined": "\f1ed", - "video-stop": "\f1ee", - "video": "\f1ef", - "view-once": "\f1f0", - "voice-chat": "\f1f1", - "volume-1": "\f1f2", - "volume-2": "\f1f3", - "volume-3": "\f1f4", - "web": "\f1f5", - "webapp": "\f1f6", - "word-wrap": "\f1f7", - "zoom-in": "\f1f8", - "zoom-out": "\f1f9", + "crown-take-off": "\f13c", + "crown-wear": "\f13d", + "darkmode": "\f13e", + "data": "\f13f", + "delete-filled": "\f140", + "delete-left": "\f141", + "delete-user": "\f142", + "delete": "\f143", + "diamond": "\f144", + "document": "\f145", + "double-badge": "\f146", + "down": "\f147", + "download": "\f148", + "eats": "\f149", + "edit": "\f14a", + "email": "\f14b", + "enter": "\f14c", + "expand-modal": "\f14d", + "expand": "\f14e", + "eye-closed-outline": "\f14f", + "eye-closed": "\f150", + "eye-outline": "\f151", + "eye": "\f152", + "favorite-filled": "\f153", + "favorite": "\f154", + "file-badge": "\f155", + "flag": "\f156", + "folder-badge": "\f157", + "folder": "\f158", + "fontsize": "\f159", + "forums": "\f15a", + "forward": "\f15b", + "fragment": "\f15c", + "fullscreen": "\f15d", + "gifs": "\f15e", + "gift": "\f15f", + "group-filled": "\f160", + "group": "\f161", + "grouped-disable": "\f162", + "grouped": "\f163", + "hand-stop": "\f164", + "hashtag": "\f165", + "heart-outline": "\f166", + "heart": "\f167", + "help": "\f168", + "info-filled": "\f169", + "info": "\f16a", + "install": "\f16b", + "italic": "\f16c", + "key": "\f16d", + "keyboard": "\f16e", + "lamp": "\f16f", + "language": "\f170", + "large-pause": "\f171", + "large-play": "\f172", + "link-badge": "\f173", + "link-broken": "\f174", + "link": "\f175", + "location": "\f176", + "lock-badge": "\f177", + "lock": "\f178", + "logout": "\f179", + "loop": "\f17a", + "mention": "\f17b", + "message-failed": "\f17c", + "message-pending": "\f17d", + "message-read": "\f17e", + "message-succeeded": "\f17f", + "message": "\f180", + "microphone-alt": "\f181", + "microphone": "\f182", + "monospace": "\f183", + "more-circle": "\f184", + "more": "\f185", + "move-caption-down": "\f186", + "move-caption-up": "\f187", + "mute": "\f188", + "muted": "\f189", + "my-notes": "\f18a", + "new-chat-filled": "\f18b", + "next": "\f18c", + "nochannel": "\f18d", + "noise-suppression": "\f18e", + "non-contacts": "\f18f", + "one-filled": "\f190", + "open-in-new-tab": "\f191", + "password-off": "\f192", + "pause": "\f193", + "permissions": "\f194", + "phone-discard-outline": "\f195", + "phone-discard": "\f196", + "phone": "\f197", + "photo": "\f198", + "pin-badge": "\f199", + "pin-list": "\f19a", + "pin": "\f19b", + "pinned-chat": "\f19c", + "pinned-message": "\f19d", + "pip": "\f19e", + "play-story": "\f19f", + "play": "\f1a0", + "poll": "\f1a1", + "previous": "\f1a2", + "privacy-policy": "\f1a3", + "proof-of-ownership": "\f1a4", + "quote-text": "\f1a5", + "quote": "\f1a6", + "radial-badge": "\f1a7", + "readchats": "\f1a8", + "recent": "\f1a9", + "reload": "\f1aa", + "remove-quote": "\f1ab", + "remove": "\f1ac", + "reopen-topic": "\f1ad", + "replace": "\f1ae", + "replies": "\f1af", + "reply-filled": "\f1b0", + "reply": "\f1b1", + "revenue-split": "\f1b2", + "revote": "\f1b3", + "save-story": "\f1b4", + "saved-messages": "\f1b5", + "schedule": "\f1b6", + "search": "\f1b7", + "select": "\f1b8", + "send-outline": "\f1b9", + "send": "\f1ba", + "settings-filled": "\f1bb", + "settings": "\f1bc", + "share-filled": "\f1bd", + "share-screen-outlined": "\f1be", + "share-screen-stop": "\f1bf", + "share-screen": "\f1c0", + "show-message": "\f1c1", + "sidebar": "\f1c2", + "skip-next": "\f1c3", + "skip-previous": "\f1c4", + "smallscreen": "\f1c5", + "smile": "\f1c6", + "sort": "\f1c7", + "speaker-muted-story": "\f1c8", + "speaker-outline": "\f1c9", + "speaker-story": "\f1ca", + "speaker": "\f1cb", + "spoiler-disable": "\f1cc", + "spoiler": "\f1cd", + "sport": "\f1ce", + "star": "\f1cf", + "stars-lock": "\f1d0", + "stats": "\f1d1", + "stealth-future": "\f1d2", + "stealth-past": "\f1d3", + "stickers": "\f1d4", + "stop-raising-hand": "\f1d5", + "stop": "\f1d6", + "story-caption": "\f1d7", + "story-expired": "\f1d8", + "story-priority": "\f1d9", + "story-reply": "\f1da", + "strikethrough": "\f1db", + "tag-add": "\f1dc", + "tag-crossed": "\f1dd", + "tag-filter": "\f1de", + "tag-name": "\f1df", + "tag": "\f1e0", + "timer": "\f1e1", + "toncoin": "\f1e2", + "trade": "\f1e3", + "transcribe": "\f1e4", + "truck": "\f1e5", + "unarchive": "\f1e6", + "underlined": "\f1e7", + "unique-profile": "\f1e8", + "unlock-badge": "\f1e9", + "unlock": "\f1ea", + "unmute": "\f1eb", + "unpin": "\f1ec", + "unread": "\f1ed", + "up": "\f1ee", + "user-filled": "\f1ef", + "user-online": "\f1f0", + "user": "\f1f1", + "video-outlined": "\f1f2", + "video-stop": "\f1f3", + "video": "\f1f4", + "view-once": "\f1f5", + "voice-chat": "\f1f6", + "volume-1": "\f1f7", + "volume-2": "\f1f8", + "volume-3": "\f1f9", + "web": "\f1fa", + "webapp": "\f1fb", + "word-wrap": "\f1fc", + "zoom-in": "\f1fd", + "zoom-out": "\f1fe", ); .icon-active-sessions::before { @@ -463,6 +468,12 @@ $icons-map: ( .icon-copy::before { content: map.get($icons-map, "copy"); } +.icon-crown-take-off::before { + content: map.get($icons-map, "crown-take-off"); +} +.icon-crown-wear::before { + content: map.get($icons-map, "crown-wear"); +} .icon-darkmode::before { content: map.get($icons-map, "darkmode"); } @@ -769,12 +780,18 @@ $icons-map: ( .icon-privacy-policy::before { content: map.get($icons-map, "privacy-policy"); } +.icon-proof-of-ownership::before { + content: map.get($icons-map, "proof-of-ownership"); +} .icon-quote-text::before { content: map.get($icons-map, "quote-text"); } .icon-quote::before { content: map.get($icons-map, "quote"); } +.icon-radial-badge::before { + content: map.get($icons-map, "radial-badge"); +} .icon-readchats::before { content: map.get($icons-map, "readchats"); } @@ -967,6 +984,9 @@ $icons-map: ( .icon-underlined::before { content: map.get($icons-map, "underlined"); } +.icon-unique-profile::before { + content: map.get($icons-map, "unique-profile"); +} .icon-unlock-badge::before { content: map.get($icons-map, "unlock-badge"); } diff --git a/src/styles/icons.woff b/src/styles/icons.woff index 2a88b40d595f8228a31888dae44d784ba45d3a8f..3509af58456f7e14a6c8077dee878bd795d9e439 100644 GIT binary patch delta 32277 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 Ab^rhX delta 31314 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

1up^m}~MD&*ZWMusXDkT&tu%9f^Dv>0|HRukdn zDl_22g?fG8kC9ut_h575<~$eh`1;&QM2-_T560tg&%^r_QOTBwoaQ0`+K*Q60CFKk z3nohD50(Dl3Kf=dx?Pr1Dqpms8~oy(B^pLF~m#xSpD4~jh`Dfq(Mb1H&t5<|7 z8l}Re%aWxMX0*YaU1lN!YW5p_h-5+AaO<&dTjrR-5g#f`?p|rgd+wy395WjimJW+aRtZ{2Z zan3WJ3lEJlVW-T!LUXC|Mr9ZZKD?f6l`!VjwL;X-(hF(bqXSjOrg&DYp`6{hTaVgk z#}<64&-t_)e|6L-GfS#508|;0`G2t#Wc~P22cacJMG9Lt;jNGo6YTDhip}!K19ya zvb{4Q)SCkSz-%K9_268Lk^`p)b$O!mfVUcGl?m|Yweg&nNuyh$+U8s-oxB~QByN2l zM&q@DUebSQUK4Pjo}$W_{(CRRd4mQ7EPf@5kp|5Z|#FN zNxd|Ah$L;%qW|CwB=W~j&e7Dr{QvJY92)~OHz1PRAG~{_2GfHuYcx1({vJ#Hz=r5H zyC-XV&0kS&S10O)SXfxTQJ(()_Y&4cct;NN+MYzSfBPeQ#GUuhlofEly|=NOCLuB( z>iK&MkTr4o|B}Zi#UA@pL~baI2{#zd?6dn#1O4PX6X%j|Ed?T$nz>nro3#~)w(w60 z?0#XjK%Tt}){8w@ZjsSN=gLYTRicMcH(HKa!I-AL{y9)*%akrcfgC2K0BN(&z8$yDn;P6 zGyFoiZnIbj#IRv9}p?R+UV2DyPeb3b*fgS2m2P=?+$?NTCwZW8yOpKR8~C|QaNXKL`7JNgD9*+DyTkdCsKm&yXWMm_CJ zq_+qW8$I79ix!Qsc_dJ6QRl<0KVdz3q_q+;a6UwWdyzIDVTu22vg?Nb_wK8=YBawD z3>*%%sJrYvvzPjQzhgboC^!FfaOb;Y469*VaO%FYJ}KM_DCA5CWDba)QSx%5MOaK6 zaY-<3Ao3{-e5znqtGZVy);Yw=-U+c7JXs$k;Whzd@NxwsapdF07#IIYTwO;)tW853 zC^_5B%x*yK7q%*KZ?JO2xm2l*4-V*uQ4ieaj%QxZt@W{?#RBucUhkeGG$_!f2;{25 zZXzeATg}Y}8ws3kDWPigwc3RlbcFQDYOAe*f3v5cCGvyEpz4%tB&m@@oNnPz?t{fd z6E<-?LjT*ljLh!J77i=J*!UU|5J@&*OkqF(B-jeBJCLljiq>EXAOiiZ_^PZAbD{{t zU0AnVD@i{H{B)0sAjkpHO6KQ411g*(0;2%Hh)<$aNlMeHqxdYLUVJZE@CT=?=tna= z)2Xo6%;$)X5JQXWAbiqAYcCX%03Zr6G1dsn4D}eOrir%8dK0Y;n6?mN=@ha76w-E) zs?x66A=d_lqS3SON-5z_VYJvgmu&}CvF1jU36FET4ckGe(e#?W%Q;IO<`~;)xn1H& zes8A@IaC#iD6;sCg|&^Ad>KG1@828E;)6EsKhW?pz*@0U1ny#;g1x-OYQ?9(4?g&X z2th}3v%1&YM96y%Ak2Xt{ZqSFqEtwN@wYtDX$NbbWiJC)HMj7MpIZQV)7SD&P$0@j z5BgY_5b}d&y;TDu(A+-Kh+y{Ny2?mx1Iv(~c9$AO|C1PP7j^n0_FkISBH2>Lz1m0% z4xT-g7TV3iFjca3!%fd%;3%md=&C_u>9Pi70o6rWuw9L?Wu?*|r2O2yuQq=>p-j@;Wf#h#6#pa8H zOYU$t@%I)rA2B|S!$WK*SA?`~JLlufYsrZvOMnB|eZu7{P{E(m`)vA%1GK1_TV4vu zRM!0Sc9qeJRJXe`sz2C@5=0fp1SNg(k}rny3jlmyxn=a#>&d~D5xLSbM+!p5&Vt`a)>Bt{zj|Ix(D~hv z<1qC)FKMnyRJ>T|nLKWXcUzc-#%o6PdTQ2;g=c8S^Qko^({oxh66=gfl?V9%pP1Y&~#; zS0BtYr$=&0=GB<9xc=8Bt@5P2btXt z`7TFN`_tAp`6w#Ttf@ zt-cor8bkbC!sz77Z|Zv$vz>n>;K>;J>UE1W{f6orR8+{yLfM?@>Fn&K&LwgrU8fa# zxyeAD=`BMqry==QVkSsLINL|Yn*T!LzGuAn`kO8jnc0_u&B5x5x5sXgUOLPIkgUT0 za?I*k50t6yHOA+X75FgQuma-MrvWNXSR}oYD6jwDMADD8^~+rS_y(mx&7?kUj@N_` zD}QBtpcewqwQT41xhMzZ6)72k$nPzf)sQPKIu!+C{g(F+GAf+7Ig*+kk(bm?E|P`g zLcagki9P~RTdO@s=Tv$Zi~(DtMP^5I>1TK0i-ry&fWvQ{<&VYl02b=JxI@&RCX?bj zP845dw08NMEPVFsHf}kJ-qVzAHlXyJfQby$O=J%DdaDyqTam%dA9pg>nx%3EW^VD~ zr*`DSj`mu1gkD*+C@WT6lq;!N4P{?k@a$u|ksLt*tKp(}jRWx?l{XzxX^cQ2I$63S zbZJ$rA6L+M)Cli+^y-usVI2n{t%k5<=@Z?Es`WCR0l@#MuF$+%~pY7j?; zzQggcfIh0qjAGmv=e*3(SB-zQ;<5Z$5z}WT)W5srG$&(1ZDN#!!Qz~(DM?qf&Hy|D+m}pB* zEl=&8)&8QePckCqko`f@-O_{Vms4GPk0DBZ*|yUdOAMKNR;{V+N0j^S5%p zdD@kc@q`qT^?sEFB0yh&PVwO^D-Z^dDPx1=Y(=cOEKbW6y6rSQeP0MCdOK@n`8~X= z8%EnKfOLNlX72|HX|I)y45Bu72UPV~tiF1dAKKqSbUUOT>P?@XFOT&I05{e6;Oerq z%HNmDe$v|t(~>Z;)}&n}Kkh48G^QKXaE_8uQj3GVD>A24KVWT5A}&Ik8Knv*JxS2( zu8wB+7MmUct^q&lAFEmGeYsY9lW0Jao1@yFqCSx27S3hx6LEs(V=kmfdaEDmEW2x2 zC7Li3PWlW*5MS+OIa}H&DwCU-UI5cJLhw2$TI?mcpz7gbwrUud)VRlTj$_k+c6-+B zAFy>(jw_zK-6cf&eiwJ-q`EboY=W?Aq(Xc8R0~c!P_4MjG{G-*eMSTx;TpTDx6y_^r?*}jhTF&2o)s4I1Y97{(# zDYN%wDH3@r>h){^kGo6VKKL$3SMTKp=&XTs7~E&n6fvckEPQyMG2g@t zIWP$o4N3(@Yo!MI=1ndreDnQuXPF(f7rm>gEV%cMEA=RUnt1xvz2ks{1n{;BB?5{T zD)vi5-w{v9yd$@}^`c~5Dv1@S!A^xCB!&c?peq{HP=`E@=Xl2^Tdk$5ow&JA(eurC z!<}biT^sZ>jC76M4LTPN%0_<0AdX73+@oUB3(wpkTA*i>rTVq1IvXrsnr zx50ki0il+1vZJv%J3(&Q9ot0-$xU{;ozW|#_L9>O=KWcFQbL!E1HZ2*RFHbNft1@gBt1Ai zTK(G!n_R~WX~j@YMmh{pVLW|Dks&SvXK3(+ZnN9@DMWFVJ1J6)w7Hk9GS*Q`RU1oi zkm#E`v{T8-uJ`YkU6Zk@Lql^n%mXlnrx{=rA~5XQ7lk2;M{726K-BIK&QBW4&7Bv( zmVZ;5zE*#|iBgyhrYxThOyB5*jyzxy@BIC7Gdn{0VRAf-`Hh2?Lzhd&bEZsq48?nj zU0rc+x?4gbRy+>bnXcTS@$!KPF{I~wU z9Wylysc|bbj@OUwb-We##j&rtyT8i%Ir7Yr4?nMt<=EIVft2h0XJY#s4QRl9_^>;G z8XEV<&iM6mQYd3>IkD=`KRhB^LLOVKTz!mWt_#=yp*XuSZR1&mW^D2pSep>crd*Rb zm$&EIdHzmeEcfli*rc}u37BFW$!5)#c8RVTa=bL2J$BsjGhUse75|15{yzs3?{^p% zIalV3d8IH$sDi4x0t_{iNrIKXqOMcFB4>#t_*So+e|zP^S+4vZL%BPG%4Se7%7k5- zG?%F?9!hBfjL|iao+ zP|I-5XdMYwWG7@L@%cNIcVBL#PqneKc7_bwGH-wXHKv)l&g=(FGjr{=gnZR|5mIsu zyjwerCbz&8oLA^uc(HUXg{^b+$7plmJecgn5d!{xp6Lw5q(T_fF-;`8CY8d0kJHC7yiOw-kuuVQ5V3Pcr6^nQ??9 zrfE%LDD__5bz{_x)(nGzAM^*-=dVAI-wE{Gg4=wqO4acODnHbWKX$FT%VGyd>>K2E*~~-@=J7BemWHHd%LlUt z$0MIEu6jGs+)EK}-{^0xen9^E4(;?46Cl4rAt@Ocm!%+sOIS7L#Tg>LWt3)R{zbVu z=?3v$7em}!*^b$S| zDTxb0ve0r-0v#XEkT>;PU?np~FQUhoc~BTyGE{0>gh!zV#_&aWjKqrmq{i8?w-G4f z2vFmm6Au*tC(j@(Wq6>#;s*m1_jm6FbrWrI!zi$``6gg~x6JJhrF<@zFBNjT%ic8u zQ$A}4QRueNP3jB1e~UHLpvs(5Mr<}K5Fazi*pip-+Y5#~LtyWHFO{$|(@H%plh%(C z`-5zTlwVhu@0GK`{lw^cNk;3zYX`TTWHfJU3d+F!R%C_nZ$bHG)eLL7-yh04rE;ou zDs@PC0=)iaOXlmf?RPG2+fZUxsyx)4Gv4qt3lqZ`A65fR#1iY`*42jqJohxL!4Vj-6gYaFavK4BI>oUr>7_+}Ax=a*0T2ko{)6{nq zi;kMI(!9? zuF@cwzX0tS!h&Xs6fhT-o>2OflVFsILK22xWUg>Jf2r^`>Ly?m=HPLreZ#2=R8$&o z$N7GF5-Upfu?aHZX2!dgGN003_tbiu@GndSV|WXU;!6H>KAX0bi8CoC>7_2fRwD-1 zWPt0>XFPwMaA)NI5Ba~_JClWtxkdJwv*ZyNX2LK>F>9v1IJeEU;KikROJ96>wicJ1 zvBm~tbR0(Hv(jDVhBml-?{^wPw&a?bj`dHgRKKXp*S#RVVBd=uapn`Ex0m4J>ZW9%uBOJb^Jb^8r?Z0FN%Iw}gPY87y0=S$w=*@cvA zI7`5)v;Yz>kZW?P$rtH{oD#-HUzR=1TxV>|^EB+KU@Ceb*{&z|0}uU*ua{Y!+!wF8 zXC4;u6|?Iyn`h&=2^^m3e(ei(ikA*&mVui$&vlj#*9`sCx%uZD=M3k7bs+oVv^mo* z&aub6<1yKKGR{?UVxT&+_B%e8edSN%U$6X(KsD8Qmc7(T z>4+WvbpHK*msCDud+KFloxz!!9zoginT=h} zi7G2lIqB%~KAT#wH&8Pe_*~mmob}ga`Q*Q{ikqe`12wu^d1klOGN8RLplO$uVytW5 zsvnAI6WYj7{ab6T45gJI8IYW=R@U5*l1@m~M#{&L5G<@jk)N2rP(te?@=emnTjzYz zCkpIJZH&d-C4$2&98LGqkwPAAVknU5SxBuW;EH#mHA$lxkHxUqRYuYuE;cW>@Z|rIE1w{=U~G-$~XE+|t zb}(kv-0v7;SeC6L#w|Cqr(IQC%$t*Ub_p#pQHdXuuttm5qF%R~7Y$*PF-=f7xb%(0q!`Kl=di7}1Q@ufi=}jc(*6K3 z?FE+wCYi9yEJxCQl=)#4r+DS7YE4=Q^WidXr>zO-@RO-%_^YfptS0p32UHCv_ zms-vh)tg4ST|5JENTF5?C^(B0Gi6dt-h$Xg-NNieCb741G9JPwd4aL|9y|oQ`f4m& zfx~>~^omKalEGCl1lFbAe5j>K8|(*LxeTQPv=(b z{;wA3JhQ2jQ~V9PD7i|nl2f}HYRbpvRU!z8YyP{NThY{@+wgWi-ll4u26FOR*fZ^h z*=gth`-~juI!;cm`h%6T`WtexvtdfrYrQ&F2eb*?bst5H{{Ip;KoN(i5tJUMYpxno zqsT>3C@`m?)HV7bCd`BoG*XYpFt7t6D2^g9zJBnjIr>pR>6n)=~A2+QmeBZWew zWP;-_o%MRqa~N*unpLGddfbc7Q6Ju$@y>brAjEkIZ$vKasI9R;|6q;g)je&0j_Inb*krB`xVLwVs?Y^B^>qV-)+5G04d{-mM%Vazm^-&E} z9X8~^QZkCq!9zI19Nv=MDkJ+y7Wd)sXDtXhkh5$^C42aYs+9%X|-RBolOWd0|}Ze>ezy}Z7;MY$XKX2A@3>Ak!6{`nc3{mDlihIjHlI4F<% zDSPt~;Yf3Rv%mJcW6x$g4j_q>mI%biJ+J>P1b!lOK7U~=9(FOgnmeCH1BKOrU=jG95c5R= zeK^9ISiGZGOjLNy%$Tp;J=51j&Zwi6A+Q0gxFoUw4@*>v7Z>BfXLgEtTMyiOE)53v zY@NQvK@3qrJa0=R=r}1cl8+}knpRHyviT%tMGy3kJqkg@P!gm*nmc9Cy=s3SrLFLS3pLKCAyW8#a0{5P(pe*`h8J9zA z3j9~NE-t{TjNM8)QMc-aG8Dt2UVw~+HQgimHY~-qyd$XKY~TC-8*T)-4)EqcoU;)~ zZ;S=Gzlz5arDW-!g_U&h2*B8&E7q2S0c%p}=@5r6O6ule`IiDFQI8$u#w`XxJe)ijIS-1E3 zCbs4qYZGl}*Cv{ear&QLDf#}fS26j~$Um&hm-8w6n{V1ve6cBZ0t|eai=3VOcUF0y zgusr-li#D*csA|qMuBSnBHBHPL+l}7J?1LrgSZA1ycU=@)vfcm(7H8{54wsy5GDE| zA;Pp+@UVe5t;WS60(udj0^BWn1d~q^=_63+Njelw0lb!|#6Gav1JULU0A=-Hz4H(RyRSUVTH9s4Wfl_|HqLDH}-ph3>u+!ab~d zSvBlt3t4Y1maYqgqv1duZDh@>^>dsGfe7ygF76EP0&X6GCiWc^&4Kht(8kHPp9ZK; zcpC#PgKy_EYw|!{dJCEFnS;#v{%7d#8PGysW_)01$A}tDR?>^?Gq{}$*u}YRjtxTb z-mSuE&uQ(IyR2Vwo4dyrnwm*>tVOkdsO3^;j*Q?=;sx~yZj42{8aQ&e^`lKW48i+2 zLYC8csb$Eo4y#lRn_6->x!RXzIa{l7RNctz=?Sa%spVWwi)k3xCq`V1oCwJglC9MT zld>f2okPT!fhIuH2P%neWD@ofvDsc2i%c*9IgFjYL{4l#32z?2>j;fBaem))#!|uH zDA;o8VU(kD%^h+htX>ju3OPBr{4m0u#__k*)yNOPW2W=9|plqvT#IR0cx8;`xUjXK8gfVEd6@qZgLpWgU zIY>Z|^ju+1aNx0x4t(de!Z_LChKZ=4(5%(!U?Di0txv`Ejrw@}oKK{mq@dtnjH+=7au{Lj^ZvDFOl`QClzmX zgQ}q&lPk9?3lP9rc*v@VUXqv=P;rBnK_Gwo9W4`YR+m2cNW+(Ai(vk(Vc<+D(j1p* z-Z^7EEt;ycvQ_t~va_m9;uF?YQy#i_*o57iF+}AA45r;zA1cyP{TcTjt(~V}n1#$J z%Ww(0H82Jdn1mV^A;B^QOfgBw$d_1@mL>AX6!WIl@p}=p@?O@(qjPmzpJaLVgWa(M zCT;$!IQlq8a*w0J+-bOcm>K&&~YJhq0AT@$YD(nz?-$$HBU zAN;Vmu=vA+5(8s!lZ9m}oyMKoUO^R7ZF(~y^lEp`)50X|D*n=^R!YiARsFmt;Xa%c zMI(&M%022gmf4hj?c52bL zb?d*Ndz42+Q(td^Bl`aPVUfTBqO7;q?GDgVVrw>OL%g1Hea#Yy4w%yM7Xt25tk%C$ z+vmw`&N21SX-1*H(0AWPH%v-Py%HXFtdCZpy*hVl2`;!2sqc$9%3XCjxqc#31AihFF8GB4uvK zw*>hyfI2sn4R&DIR*I;8%C$InEN=QRdtMKI(_2W5Ok+TU0g|@l8UrtAyn!f21f^u& z;$~>mWA(tk6L8IXv-EF)_s(9hsdafPCd}!}_c7OkB!DpYP1iZwOQ&o}w@lGdy8?)O>zAUGfg6$h@iwz$j0@?%?R3NAGwAxXC4kO*xq84!1IX&A z{nws3fn;rWTRT2`h)9E>S#FMu*5fkwJ0sIVeWL9ui!Y>dnQ)H>e>lDkzQ(n-2omZx*nYE-_`S*iq9>O`%3jOv32qv`e@m z66jILL_ArH8uGBYOn7?8?UPea!u2#j(XtU9$1XkTY~|LvWf3NQH}DE3OiXQmq+q)u zgdMx!JT8O(=Ee&cz&1U)z{X&rr_7wny2NT1STEFMtf|E`=Io!uYt%$e3Ec~puDGQm z7;m+Cs&2!+#e)b$RI(Y!560s#7cJr^uJlQiMd#x^vKA=sY?mGgy6v+Ju_MPf$=3+e z>nXUP*>n;GueT?`M1ovz zaPJhzTUZX*J4ae1OA51`5i3N^qPp+jvWJe?fJ(|AbM|I*?BKos6 zr%MwFyg$?RRVxu69^e)+J#i53hgp?_t3P?{x@V2tM_fx`%Rj1iCP;^U+tzX`GD5TZ zKz-aFb0X$k=Pvv5ht%?V%sX};HIN|qeTQ)cO5Ka!oZAo=mpjLEYu}mgv=Ehal_ctD zxEo+(=ePLmT;46ZFXyw@!U>b(#N6%5@EUbvn;cD#XzeS#INqD*;cKyu4nOwVn(#3# z$H$OaFE27a5m%mc!5H~^MKhLWKDfeg*jhenv8!71`gy#gBQTLf*jq3lH-ZzPU1A!m zW}k_QmEg;WqlsOkRchGU?bNFL&)3Yk(Wnvr9P+?X;qGC@_Vq z@dI=Hzm#QZlr%)G{Y2$u0t}RVNgrdmxNJ&_l#b8G>U#9GT}ls?JSJ;+sHPIzR^XK3NYD1;@w#%`qcXonIsF(kD;QP zNkj?56GcnSa2YK83NegZi{#MdV!I$Yo6ffibzQRHNvkjBE!AR5svVsY6~%I;Alo4X z8c2uhQauBaN+6e^e zN6r2+zVR$~56ZYbpam8c2B9YSPvF-5@(O&<`}Nuo0}t4rTyeYFo7$vpBBxJKv6Mv< zXgVra66CX!jaC|+LM6Hrm0ZJSLk|@I=EbsqMrfze`O<=sBt^o&Qx~x(cU%#%ZJ4`=r051R3qTc&W`X3{^<@>fA6ZvLE{{c+V=#hPTJ!ecjxXv& zcmHV#ifALngHzszWnNDxCHrVMq(H>ak?s_M6 z@ThHZQ@5r&OvmyGw8W|fPGLqK)G2F_YF-n(4{1|~@QfP!fuOU5Cq~nnEp2c_!!yRe z-v7YNqH4iKLqV=Wn;mlBNW{9>L%I8>Nn}Z9`TED1%)p0Ub)IA)@TWFEtcLZ~=~?ZL z%_!T<=tTEZ)MRn{q}OO7}^Iz_!bkU*Rn($NNZI_5vcZ zl)&A@wyBK;5C*!nAWwz^@41*+NEe((jW3j-(pWl~kJy~=mM)g*jB#eacJ>Mu)P;|e zlL+;iZYv=f#Q{9PAVhPH3N^Ex$}{b566ch8=k=q?y07mOjX^|ONv9&6k^aTeEcMc= zkeURJer`1iHOQ)sa?Z&(?plpOFHh{)!4n8M;jiD3o<%`lDDC9T5SZa8RRttfc%M&+ z2Y+l!S84%-nmIW5SAt5*PJEdL26+;-wly1!OP}TPCBx2cB2RpK1qQJhqhB2MAMp`L z{f-~(5O`nG>r3GX+CKUyp#q4H^WBtq4&B|qeli)3B}F*OT`kv|Z|UHye%GP)8}4E9 za=I70i96p%lbNp%=auUv6Z9}1Fh^e+RbKWABcetOB0lM}M+Y6cZ zAve5TQS46U@UDdE{l5OhORf@DnC=(!Y^CAp_s;R422v3_bIr_cGebFi9OPqC*6Kyt z=BjJb1`7pQpU(q4(b@$9^bDsW+JQWRV@FAhm428cZ%-S3#yy?ISYuCs!q3kOmWQqPn8 z9!|qR-`$~6+2eF4EKSEjHq$M-7@q8N+Uj1Yma+=;qMp53LV*rPCpo-yEomx!q9>Z} z{k+eML4aUhR06U^U{p2T@wvDGyM37ehN(1#)kEOw(+c`KL z1pl33si7(r=$3hU8-cudzF)O~(-(wm@ZpSEIuYNaHrBIXRaT`@r*%7C;HFt>{kTFS zla`PDianUyGuEsnlGvxx8fqDuVb;((uVzA3c;URfoLuey=MgAghdE5_%1j~HZ24my z4#FE4Ny=@AilGnUQ868hi|Py_-$*!xim;d_emyngFshGyzQUXjzdV?e>u`5O#|7Ay z7(AQpd7Dh(s(LTWF& zT`F}v{Y!n8vncFlMFI5Anf2;&edL#{(DPR>)5*u~+)z1KXSOdGF%DDNvCm|9q#5^r+6dT{BPRYsPvM`FD-8(74f&rDKAsVrCF zgYv=R%GB{nD$rRt&2Y9hdT=6W zIC}IxXDKOxyT`h_aA$&Jx3zn?Zi z_*xeR&)a|3h>rf0ugXA+NNJ4M-qa~>o&yr%jX7U3)PPfG84ciuAT~dRz~YwsQ+a2D z+zIy_m<>K%{xq1BW?RVTR|`^NJ{|S65*aIoZK~pxmKlO}4Kmj-jVQT_YtpM=eJDou zu1r3#&1bEXNmI%R@5PbN zp~7#0>DF2HdbZPFBI9|@!gy{4&42gF7<};>5sJ~e|AzQ(@I6$kT`XDJO?E`gk5r%% zjc1NDh?W|vn~hH4pa6eFFHb2hf5^p!dA70PfRc%Qk`JVuvSob45d&0E)mVb%viA`^ z8H|hkQn9d%OyK)&{;=}HdC`C?7B&6OB!H6pvHT>dbJYMwPXFD`ZSJP3w6~_eIlZ;n zWemb2%uPl|d)el?hGQjVPO(u#Zh=4fx>=#p|NFVhlntnHeGbcy|0TtrsGQWX%RfC? zKe;xakifsLz4W$3Fu1yLk@iZHBf4GAJx=dL>l+uBTr}s47$-22D0)ulOzVx=JJv%8 zrE$V-7LWh?3wn`8tMJpg5Q`eABE2dEh#lmtJy#2*A@GYuVB-Mo6L{L9el+V-_ zy-PHIJZ50#$7hFp1KL9mdrTN_znBir_ekaY}pwqh{?ef$w z7pz|(xLj(bltx|ybRRi(26kwh#XURxW=7LPQ5+y-jqQ(ifS)9BF1P@$1hNK>s6+P? zgA3I)iVXyr*kpQDPRJU~1vB`+g0PZk|1z`jia}FtTQURdAtB7Fd1&X4K~J`>H0RLw z1rcLV3ZFFEnm^Wbv-k22hQzeiUOOHpSw;An4<@1GrA(7TBfcYZ@R{FT%p2Sl-F8ja-x2K1 zH;vRMNaPp~%dj2B%iRMPDARNk7qaXYLd>RAX*SW^9VF}4)_D=)xP+dDnU`V@7#X3{mI8$2QtKNo6QU`MV@mdU`>lJ>SWMACA5O zotIq5_Z=`kP=ZtA=rIU=89{Tc0?tu|`*~D91nb**|*; z>`M@#q}yp*6R|i|z%Jc?AHZKAkHF>YaD zh45j7Dt?awjm3MwkY0gX6lwlXxFQ0FZ%1V$DFm@1Ygl%#4UWv6yh#7byG_dSFKYL3 zca#fA1}d4ZDAraR9ysV$c1;6w8CT}*|4isV&@YqT#^eU>x@yThliq8oT#mX@$s=Y9 zk(no>1gy-)<=%?k2Q<;Z{~AMBhZdofwAanjueTi6kZGx-S>*1wi@uD^iV0;&Vnr`lZOTokZDDWN2U}4= zR+=@rp{_6oXVnRcD)?pef?yanB!??23SRsA-_Wru2H7*7ylYLN2w)r_0Q-yyS}goI z|8du9X*bsI5m38!6*~pH$#ggv;h#@Z{W#$1)Whh7m`E>XbXk?BJQmdPlQP>MZzghagB|_%ptKkYoM1XPv4sVdk&dL?u|)f z9$_+O_FOe}OQr6Q=?ux>gt^)T@SX2P+My8WvO z7AUfG&;Q$vn4a~1x&t%JV7mlqOAYrSPEMzh<(&~Ja8YQJO-LsCEjHmjr|R~sh-(%# z%2Of1-q#~4q+^cV%s5H^Jw0W3P|>+sUMmjx`Qi%wk18Ql?F?-YceD3gv{x`(Cat3k zf1|x-S5)O@C3`bfo8N?EA=%TkT{=PQ7GJw@Hj3V+uh;P2w)oW+3C*Rk=~^}+yv<-& zuaMEE7V`FkcIC_Hh+USaZ&ezl7u>e83HBA5$b|9*s{2(qIoSM|en;&&^DCmcaa0O9x@ih*qY?&)%zT~cd1n5g)DEm%e8MFg z9sW@c=UQtiS{&e3coQ|zmjyMbGOxFO){u&Qsz<$_;M?LiE!QRJK@w^Qb3_T?NGdZN zfztan9;`475XyH;o9tMn@lb`hu}essSC-O*Nu*G|rtZAO zb$J#}6i3O3BrNM|BEyju0!eSg2aDVCnJ$st)&Qd4VR~%>*M@ z#&Y`LrqZGC1fIP*6$$?9rr`$e+%#+Wc>{d)5&8}Uj<+$-4 zCxwJD_a7$k95>)$u;^J-ub1lHxyaeAEmxb|OEaCYJ|kK&w3vs-ycOv0sxB3BDgyQo z?r~J`5TPHwn{eP;5hX|i2BuFD^XmliC2zvhvtqpehVwQ!)EKXNq2rbev)rcz%(|)@ z-bs7Rekof2@;o^mBPgv>Y3Tf;xxq$LI_JQf>LAN#m z+)v9LRH254#I|xw9j|5;(DMgnM7bh!zzp^#Tmt$beuGcR5t@!&TbOk$oamcA;Tyv( zFaro|?)iHc0;BNnJVyO#M;P1VX=0o0*+4YHsYfp>dMAbyGh`)%Ev2UFLWFCd5O}^CNjg#Ct$1 z?bCVPMKu)fK5cPP-MBjdc$flB^dnlTyLDGo!NfSUNiua1r*F*9hK|f8OOW~&q)4F8 z;e9`XX!2Us3fE|40y}>6@DsI^`CKvLIQeMuhimSry}(F;SaZR0eME&-Hp`_2e0Rqz z6!%uKywCC%PthO5oH7$RqMj0|Fvdv#po6SoE97N$QfiLygwA1-`r}YaaEFwY8Nsfv z<4s9wMWUXs!h1<>Zw59-J+|XRTX|-v z(=f=FDYt0-xF3nC9`FgnmA&Hc(sR0n>r_h{Rn#C$U{I`F*xd1 zWJkttIK%DF$!~JJ`W5>Cv&w$kw0gYyQnTFQlm^Qd*=7Qzo0QF--YP2DLMXXhIQFoU zvcS2nuafM8b3U_G_QS0I$|U%=MZFy}IB1~BlH1z_yEgt2G!lV0tUE8T`jzcLd z*u^&PXfY=fs$~5_v0~2lt5ymAiq24#3`@zlBR&u0t)l9`yA2-KM+< z>WQEDAPUS(To-2>GPJn5en`hDUM9PRIoa1Cr38$)FYgOG$P_Czxz!ux0DsT1+NzSt z*^7mos0`_W|C>ebPf?KcY0pK#M=NG_uFPRS!jt0h?A9rU70qbzXy?m0gbW@a!QfYS zOy8U$I#Ao{-;*oI46)qVYy4bbdmmG*iVO-0QOym~UxXkE_F87MAW9_8;3?)s4)1^6 zVzV2Hp4~KT?EUUsHgT)7GRoe$%0b1Zjhe(-HsejeWpzp)HEu(*{W1f9;*YsXHF1;2 zRmUaun@2@Wl^|h;pl6jz>b|=E8NUB2W36FEnINW3&dggHpq5o-wNK;fF)X0D(23|1um$f2xa}|12avutiUv2Bs*KCB{aOzs= z3=y`M;_cg#rQDj&k6k5?l>*mgr1V8@5dl*POlx$G^4XUs*MP3SXfZFnu zz34%PnwLs9g20$Eg<`lItH^@8Eud|q(}HXW=cjhAA5DevdsO5FCz`VmML&Uzshf?7 zB-_yK@7-0i>U%{%(wl1mFB zHN)J55dZll)~i#$?tnj(kj(J{W|Z$W!L3Ws(GM~-Tz+P%hT|Z?p9_t$E}&+5Mtv$- z#GR98H4=xU&mXl+sMQG)Xc5+WDr$1R5!`M6#Wd@9{x+=xQvJ;5dvfqHf4M~(8PCE; zG7845BZ51$0qF>ivzCgp1_^+(V4bW_k(B>+nYmr6lC((ecb+^z?JrK`U)bi+;duI| zi@o{Wp4OYKH`T3O!L`&MLcImtg`DJ$>(_a&>W?efciC8)5_b<}QW5ZX3Ye;~Jm1Lj zRJ~fhVA{}RGgr6m?=?58ud~lMXFk4$V!XIF7TTpiPH1yIuf1Hbb7X1`EzfOB?wog| zbk9u-C^(i&u4QHNoSy3MSn~`!auGS6AA6k&-=!mS%M0e5O{%4Sq#B3^Op2>cZpPaY zQgx`r6WHXcf*UXM?aSeNT%tI;i_;7aFj^9BHgV(Ds}s(8bts#PlBOHzT9lfGAwui6 zERRlcJCWH$*3`?ETKAupSobbf7S>iigYiX^dsp}?ORjL>8=PMW zw+Yey{Ey(CA*f65t;P`pOxD5Y)=jd~H6p~6AemMUS11dE4-<<5e z_o1%#M-97=ZDNfiT~@&w)W(KosBY=VGWp@L~{kyXotAJI(9Y;@5e{(C1ZtzdKC}tNV;g&c>bSt z$sa@ZRhT7Q7{lEf6->+3s-`SmPJmOK=m8(>BmPO(EMx>I8PCTuruQ{*I7;@6TGKB7 zU$@egLx~Bz4Z9PlnGhp#WA2ve@AaS4pWTk3;|C9Ut4R1vsOK*9P0@gm$z94HXYdlG zPJj#~8$7{?x98&xybC{N=n5n0DaC!Y_+{D5XwUl(zEs4=gvczKvX?s;Zej_7SPrPR zjre7fQ4QE55}$Km-Fh`@e642ig<~#)QFZHuiqp9x; zKiBq>dD2?~afDnNq~(w}oz8z*ouoQA6=~^S;WQZbD7bFJdZRLP`8#5}DDBR&uTAQ|d_qYw(XQL;k$~LBnyg00qlQp&I%7z?OSwFPMP^*8x!AU~BnmYAd)A{&X z-9rm>(JQI*?@Kus0n^C5f3x9sa(Ut?_ws~OJM8;UGXbHU(uHENGb!KUVu#r=gqyOY z?5N+GY*Z@e%2q(4w|^pt;)-%c_)eqd$>$7pco_4~zPol}Fo;_%X`;I6lPJQB8^~d4 zFB9uD#J*x=8KDs9NN%?8sdH5b@pwc#mu&!2KF#9#!a3TtCEgG`W9`gfl#V|c>CZhF z|CH!z*`1|OB__iv!mRk@0z?M0QlG79iWZq%Yt8Bgu{v2Bc|{~4$uR_KzGemY?l+bS zuClJ+yEDwBjCmx@VC86F3D;XIZSG7NtLY)f$P~1myhq%I4fz(>z{hJ00cE!G90JMS zOr9+g1-B}=2LR9?wWR33Pb?i^`r5nBupc$B@`8v#XH!{YjP;9QMb(mDZm*2$U5?e{ zc%7=njsUQBc?HDPM7@^!UKTTo`JL6Bm=#HPM!e7V!2ZTGRjbmiHh;bAjeB)-#P`c0 z{c_;PFJ*|Y>nSd{ki`I(A43L+fm!jUe-lcDmmNrHuU$ftp&NZ>IEU>i5B;V~G@(}Z-vgx!GE6?jLd!ADh?Kj<|`br6Ye zLp6wwIcWV37Z-zpq=0Ho0kYdjxJKnroUUw8ndl+Va2#NXy(eG4aua_)`k|Xpth^=K z81C^yxk%al$fn(0+?W0(u}|c=i$G4%_5H+T{83ZQ9Hql1Wi#V)EfaCsMD053mVd@W zgJt~dVdI0qD!6t4I%^!$jzx%LI?vtDzyDD8PK#4-PBvtMNu2*tng;9VSo#0c19}<7 zz1n+y$LE6^jIEfg?m`6Rw79R(20ee!na0$_=Y^ZA17^4xep(;#jJwEq!7ZC$I3r{q z{$T{}9-4Der8<)mu0Dn^N2jn)#WYoAx232H#x8c(Z2IS{esy1bfZlQOUn!tq48bNB z;iex#Dko#AFCs2B{okU?2g|nI=~QajS{70nSi^_iyq2rVUbggTYr^>=cvFo=C6^=o$WflxTPaRg1r&j=dzlpG7i5YiW|438 z)&X>3GvN!Xfw`@guLQ8vbYO6;V+WeS;YHz8!Pke))`f(!`!y<;R`ygumIuH%rUgfa z{P=|fF#yJxX$jRm2;&645g?Q0Mn^%7qPA>J%x+*s{QF;T6A6PEk10pELug0&y#Phl z_aj$zd50$r>&OtVjx@{g1wOCpppz^1!)7mwGqaXotm{{<@(0*&HBG=Tr*5xkooaam z2uMFKBPd(GZo1%djEk6&%PbB+<7FOrZUpIB4`EWj6THGd#y_T$h}F%rpA}l;oa-vb z#Ght3@VPf3@r{$^)(oCw)EpEogGJ@B+);mt3I=3P#QmBN)_K~tW? z*?7HURL6gqCRE3d_t2CI9kGDuEKtr}w}#17AYveJ{RqU}QBlX7%D=1zrb zZ9E2U67Sy)iqklmQI$Slz;s6C(i;_=zrMrmxSg1d(MjbFyd0jMQ+~HEH5nCD{Uv7x zwupdGf!yqC)TLMI3ZBiXPn|#v%@x|8M`8N~iQa0;Lv#5Hvad+(T97b;;!P_8>*YTi zdtgO>*Z&Ut5i$EjEkK~nSZT_KJj==UeA=&fl3^)>w||VHB8E)S0*$4d`EHR%s7?&Y zIeTo)VVBdXd4tc$o8!4S5t52-o%pSB(gA`w`O=KK;pNn$Tu$L7|GruDjzA5;UI%Tu zt}1?1b4cIvx&C;&D-GI-c{xewj0D#Ljt;tfnn-5$Tv5^)!Y-J38+mvfiei!G_Cp}}YlXRnBmT5`6~yB)HR zGMnxd&Go05n-2qh{I(6X-i7vp;Z81X8i*Guq;kkg%M{OC-ItV~Y_TKA6HDnU&-nM0 znv{j~qJO;c!q^B3CtnhzH=Qwx{skACA03_2cT=973f?M9r>tVVkmN}pGE!8=r)g8? ziJ;n78yTw_wQR|yUsl$KJ>=w7GR@YgF4u;!F))}oSXsH}SQYzZ9)G^c^k9~`BZ;%Z zz(tzgpLpoQqhbR%8q)kMG{W=h){aJ)U-`CpD)i`5$g_a{d4S literal 26476 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 X1*~kFxUdmh diff --git a/src/types/icons/font.ts b/src/types/icons/font.ts index e0ccd605d..bb767492c 100644 --- a/src/types/icons/font.ts +++ b/src/types/icons/font.ts @@ -58,6 +58,8 @@ export type FontIconName = | 'comments' | 'copy-media' | 'copy' + | 'crown-take-off' + | 'crown-wear' | 'darkmode' | 'data' | 'delete-filled' @@ -160,8 +162,10 @@ export type FontIconName = | 'poll' | 'previous' | 'privacy-policy' + | 'proof-of-ownership' | 'quote-text' | 'quote' + | 'radial-badge' | 'readchats' | 'recent' | 'reload' @@ -226,6 +230,7 @@ export type FontIconName = | 'truck' | 'unarchive' | 'underlined' + | 'unique-profile' | 'unlock-badge' | 'unlock' | 'unmute' diff --git a/src/types/language.d.ts b/src/types/language.d.ts index f5aafd356..08f9bf8c0 100644 --- a/src/types/language.d.ts +++ b/src/types/language.d.ts @@ -1197,6 +1197,9 @@ export interface LangPair { 'GiftInfoViewUpgraded': undefined; 'GiftInfoUpgradeBadge': undefined; 'GiftInfoUpgradeForFree': undefined; + 'GiftInfoWithdraw': undefined; + 'GiftInfoWear': undefined; + 'GiftInfoTakeOff': undefined; 'GiftInfoTransfer': undefined; 'GiftTransferTitle': undefined; 'GiftTransferTON': undefined; @@ -1321,6 +1324,15 @@ export interface LangPair { 'CheckPasswordTitle': undefined; 'CheckPasswordPlaceholder': undefined; 'CheckPasswordDescription': undefined; + 'UniqueStatusBenefitsDescription': undefined; + 'UniqueStatusBadgeBenefitTitle': undefined; + 'UniqueStatusBadgeDescription': undefined; + 'UniqueStatusProfileDesignBenefitTitle': undefined; + 'UniqueStatusProfileDesignDescription': undefined; + 'UniqueStatusProofOfOwnershipBenefitTitle': undefined; + 'UniqueStatusProofOfOwnershipDescription': undefined; + 'UniqueStatusWearButton': undefined; + 'CollectibleStatusesCategory': undefined; } export interface LangPairWithVariables { @@ -1835,6 +1847,9 @@ export interface LangPairWithVariables { 'MoreSimilarBotsText': { 'count': V; }; + 'UniqueStatusWearTitle': { + 'gift': V; + }; } export interface LangPairPlural {