diff --git a/src/api/gramjs/apiBuilders/messages.ts b/src/api/gramjs/apiBuilders/messages.ts index 196ee6b2d..94feb784c 100644 --- a/src/api/gramjs/apiBuilders/messages.ts +++ b/src/api/gramjs/apiBuilders/messages.ts @@ -801,6 +801,7 @@ export function buildLocalMessage( scheduledAt?: number, sendAs?: ApiPeer, story?: ApiStory | ApiStorySkipped, + isInvertedMedia?: true, ): ApiMessage { const localId = getNextLocalMessageId(lastMessageId); const media = attachment && buildUploadingMedia(attachment); @@ -835,6 +836,7 @@ export function buildLocalMessage( }), ...(scheduledAt && { isScheduled: true }), isForwardingAllowed: true, + isInvertedMedia, } satisfies ApiMessage; const emojiOnlyCount = getEmojiOnlyCountForMessage(message.content, message.groupedId); @@ -872,6 +874,7 @@ export function buildLocalForwardedMessage({ senderId, groupedId, isInAlbum, + isInvertedMedia, } = message; const isAudio = content.audio; @@ -912,6 +915,7 @@ export function buildLocalForwardedMessage({ isInAlbum, isForwardingAllowed: true, replyInfo, + isInvertedMedia, ...(toThreadId && toChat?.isForum && { isTopicReply: true }), ...(emojiOnlyCount && { emojiOnlyCount }), diff --git a/src/api/gramjs/methods/messages.ts b/src/api/gramjs/methods/messages.ts index 27e4a2efa..5730273f1 100644 --- a/src/api/gramjs/methods/messages.ts +++ b/src/api/gramjs/methods/messages.ts @@ -269,6 +269,7 @@ export function sendMessage( sendAs, shouldUpdateStickerSetOrder, wasDrafted, + isInvertedMedia, }: { chat: ApiChat; lastMessageId?: number; @@ -288,6 +289,7 @@ export function sendMessage( sendAs?: ApiPeer; shouldUpdateStickerSetOrder?: boolean; wasDrafted?: boolean; + isInvertedMedia?: true; }, onProgress?: ApiOnProgress, ) { @@ -306,6 +308,7 @@ export function sendMessage( scheduledAt, sendAs, story, + isInvertedMedia, ); onUpdate({ @@ -392,6 +395,7 @@ export function sendMessage( ...(noWebPage && { noWebpage: noWebPage }), ...(sendAs && { sendAs: buildInputPeer(sendAs.id, sendAs.accessHash) }), ...(shouldUpdateStickerSetOrder && { updateStickersetsOrder: shouldUpdateStickerSetOrder }), + ...(isInvertedMedia && { invertMedia: isInvertedMedia }), }), { shouldThrow: true, shouldIgnoreUpdates: true, @@ -585,6 +589,8 @@ export async function editMessage({ const media = attachment && buildUploadingMedia(attachment); + const isInvertedMedia = text && !attachment?.shouldSendAsFile ? message.isInvertedMedia : undefined; + const newContent = { ...(media || message.content), ...(text && { @@ -599,6 +605,7 @@ export async function editMessage({ ...message, content: newContent, emojiOnlyCount: getEmojiOnlyCountForMessage(newContent, message.groupedId), + isInvertedMedia, }; onUpdate({ @@ -624,6 +631,7 @@ export async function editMessage({ id: message.id, ...(isScheduled && { scheduleDate: message.date }), ...(noWebPage && { noWebpage: noWebPage }), + ...(isInvertedMedia && { invertMedia: isInvertedMedia }), }), { shouldThrow: true }); } catch (err) { if (DEBUG) { diff --git a/src/assets/font-icons/move-caption-down.svg b/src/assets/font-icons/move-caption-down.svg new file mode 100644 index 000000000..6cf5cc295 --- /dev/null +++ b/src/assets/font-icons/move-caption-down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/font-icons/move-caption-up.svg b/src/assets/font-icons/move-caption-up.svg new file mode 100644 index 000000000..1f615fcf8 --- /dev/null +++ b/src/assets/font-icons/move-caption-up.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/common/Composer.tsx b/src/components/common/Composer.tsx index bee36799a..f87128b65 100644 --- a/src/components/common/Composer.tsx +++ b/src/components/common/Composer.tsx @@ -887,12 +887,14 @@ const Composer: FC = ({ sendGrouped = attachmentSettings.shouldSendGrouped, isSilent, scheduledAt, + isInvertedMedia, }: { attachments: ApiAttachment[]; sendCompressed?: boolean; sendGrouped?: boolean; isSilent?: boolean; scheduledAt?: number; + isInvertedMedia?: true; }) => { if (!currentMessageList && !storyId) { return; @@ -905,6 +907,8 @@ const Composer: FC = ({ if (!validateTextLength(text, true)) return; if (!checkSlowMode()) return; + isInvertedMedia = text && sendCompressed && sendGrouped ? isInvertedMedia : undefined; + if (editingMessage) { editMessage({ messageList: currentMessageList, @@ -922,6 +926,7 @@ const Composer: FC = ({ shouldUpdateStickerSetOrder, attachments: prepareAttachmentsToSend(attachmentsToSend, sendCompressed), shouldGroupMessages: sendGrouped, + isInvertedMedia, }); } @@ -935,11 +940,25 @@ const Composer: FC = ({ }); }); + const handleSendAttachmentsFromModal = useLastCallback(( + sendCompressed: boolean, + sendGrouped: boolean, + isInvertedMedia?: true, + ) => { + sendAttachments({ + attachments, + sendCompressed, + sendGrouped, + isInvertedMedia, + }); + }); + const handleSendAttachments = useLastCallback(( sendCompressed: boolean, sendGrouped: boolean, isSilent?: boolean, scheduledAt?: number, + isInvertedMedia?: true, ) => { sendAttachments({ attachments, @@ -947,6 +966,7 @@ const Composer: FC = ({ sendGrouped, isSilent, scheduledAt, + isInvertedMedia, }); }); @@ -1059,8 +1079,8 @@ const Composer: FC = ({ if (!args || Object.keys(restArgs).length === 0) { void handleSend(Boolean(isSilent), scheduledAt); } else if (args.sendCompressed !== undefined || args.sendGrouped !== undefined) { - const { sendCompressed = false, sendGrouped = false } = args; - void handleSendAttachments(sendCompressed, sendGrouped, isSilent, scheduledAt); + const { sendCompressed = false, sendGrouped = false, isInvertedMedia } = args; + void handleSendAttachments(sendCompressed, sendGrouped, isSilent, scheduledAt, isInvertedMedia); } else { sendMessage({ ...args, @@ -1237,8 +1257,8 @@ const Composer: FC = ({ handleMessageSchedule({ ...additionalArgs, isSilent: true }, scheduledAt, currentMessageList!); }); } else if (additionalArgs && ('sendCompressed' in additionalArgs || 'sendGrouped' in additionalArgs)) { - const { sendCompressed = false, sendGrouped = false } = additionalArgs; - void handleSendAttachments(sendCompressed, sendGrouped, true); + const { sendCompressed = false, sendGrouped = false, isInvertedMedia } = additionalArgs; + void handleSendAttachments(sendCompressed, sendGrouped, true, undefined, isInvertedMedia); } else { void handleSend(true); } @@ -1490,15 +1510,19 @@ const Composer: FC = ({ handleMessageSchedule({}, SCHEDULED_WHEN_ONLINE, currentMessageList!); }); - const handleSendScheduledAttachments = useLastCallback((sendCompressed: boolean, sendGrouped: boolean) => { - requestCalendar((scheduledAt) => { - handleMessageSchedule({ sendCompressed, sendGrouped }, scheduledAt, currentMessageList!); - }); - }); + const handleSendScheduledAttachments = useLastCallback( + (sendCompressed: boolean, sendGrouped: boolean, isInvertedMedia?: true) => { + requestCalendar((scheduledAt) => { + handleMessageSchedule({ sendCompressed, sendGrouped, isInvertedMedia }, scheduledAt, currentMessageList!); + }); + }, + ); - const handleSendSilentAttachments = useLastCallback((sendCompressed: boolean, sendGrouped: boolean) => { - sendSilent({ sendCompressed, sendGrouped }); - }); + const handleSendSilentAttachments = useLastCallback( + (sendCompressed: boolean, sendGrouped: boolean, isInvertedMedia?: true) => { + sendSilent({ sendCompressed, sendGrouped, isInvertedMedia }); + }, + ); const onSend = useMemo(() => { switch (mainButtonState) { @@ -1557,7 +1581,7 @@ const Composer: FC = ({ forceDarkTheme={isInStoryViewer} onCaptionUpdate={onCaptionUpdate} onSendSilent={handleSendSilentAttachments} - onSend={handleSendAttachments} + onSend={handleSendAttachmentsFromModal} onSendScheduled={handleSendScheduledAttachments} onFileAppend={handleAppendFiles} onClear={handleClearAttachments} diff --git a/src/components/middle/composer/AttachmentModal.tsx b/src/components/middle/composer/AttachmentModal.tsx index 600265f24..c2b683db4 100644 --- a/src/components/middle/composer/AttachmentModal.tsx +++ b/src/components/middle/composer/AttachmentModal.tsx @@ -74,12 +74,12 @@ export type OwnProps = { isForCurrentMessageList?: boolean; forceDarkTheme?: boolean; onCaptionUpdate: (html: string) => void; - onSend: (sendCompressed: boolean, sendGrouped: boolean) => void; + onSend: (sendCompressed: boolean, sendGrouped: boolean, isInvertedMedia?: true) => void; onFileAppend: (files: File[], isSpoiler?: boolean) => void; onAttachmentsUpdate: (attachments: ApiAttachment[]) => void; onClear: NoneToVoidFunction; - onSendSilent: (sendCompressed: boolean, sendGrouped: boolean) => void; - onSendScheduled: (sendCompressed: boolean, sendGrouped: boolean) => void; + onSendSilent: (sendCompressed: boolean, sendGrouped: boolean, isInvertedMedia?: true) => void; + onSendScheduled: (sendCompressed: boolean, sendGrouped: boolean, isInvertedMedia?: true) => void; onCustomEmojiSelect: (emoji: ApiSticker) => void; onRemoveSymbol: VoidFunction; onEmojiSelect: (emoji: string) => void; @@ -167,6 +167,7 @@ const AttachmentModal: FC = ({ (shouldSendCompressed || shouldForceCompression || isInAlbum) && !shouldForceAsFile, ); const [shouldSendGrouped, setShouldSendGrouped] = useState(attachmentSettings.shouldSendGrouped); + const [isInvertedMedia, setIsInvertedMedia] = useState(attachmentSettings.isInvertedMedia); const { handleScroll: handleAttachmentsScroll, @@ -253,6 +254,7 @@ const AttachmentModal: FC = ({ if (isOpen) { setShouldSendCompressed(shouldSuggestCompression ?? attachmentSettings.shouldCompress); setShouldSendGrouped(attachmentSettings.shouldSendGrouped); + setIsInvertedMedia(attachmentSettings.isInvertedMedia); } }, [attachmentSettings, isOpen, shouldSuggestCompression]); @@ -273,10 +275,11 @@ const AttachmentModal: FC = ({ if (isOpen) { const send = ((shouldSchedule || shouldSendScheduled) && isForMessage && !editingMessage) ? onSendScheduled : isSilent ? onSendSilent : onSend; - send(isSendingCompressed, shouldSendGrouped); + send(isSendingCompressed, shouldSendGrouped, isInvertedMedia); updateAttachmentSettings({ shouldCompress: shouldSuggestCompression === undefined ? isSendingCompressed : undefined, shouldSendGrouped, + isInvertedMedia, }); } }); @@ -432,6 +435,14 @@ const AttachmentModal: FC = ({ const isMultiple = renderingAttachments.length > 1; + const canInvertMedia = (() => { + if (isEditing) return false; + if (!hasMedia) return false; + if (!shouldForceAsFile && !shouldForceCompression && !isSendingCompressed) return false; + if (isMultiple && shouldSendGrouped) return false; + return true; + })(); + let title = ''; if (areAllPhotos) { title = lang(isEditing ? 'EditMessageReplacePhoto' : 'PreviewSender.SendPhoto', renderingAttachments.length, 'i'); @@ -466,6 +477,19 @@ const AttachmentModal: FC = ({ )} {hasMedia && ( <> + { + canInvertMedia && (!isInvertedMedia ? ( + // eslint-disable-next-line react/jsx-no-bind + setIsInvertedMedia(true)}> + {lang('PreviewSender.MoveTextUp')} + + ) : ( + // eslint-disable-next-line react/jsx-no-bind + setIsInvertedMedia(undefined)}> + {lang(('PreviewSender.MoveTextDown'))} + + )) + } { !shouldForceAsFile && !shouldForceCompression && (isSendingCompressed ? ( // eslint-disable-next-line react/jsx-no-bind diff --git a/src/global/actions/api/messages.ts b/src/global/actions/api/messages.ts index 50c981c77..d1be24525 100644 --- a/src/global/actions/api/messages.ts +++ b/src/global/actions/api/messages.ts @@ -1407,6 +1407,7 @@ async function sendMessage(global: T, params: { groupedId?: string; wasDrafted?: boolean; lastMessageId?: number; + isInvertedMedia?: true; }) { let currentMessageKey: MessageKey | undefined; const progressCallback = params.attachment ? (progress: number, messageKey: MessageKey) => { diff --git a/src/global/actions/ui/misc.ts b/src/global/actions/ui/misc.ts index 6a978d61b..636ba1ecd 100644 --- a/src/global/actions/ui/misc.ts +++ b/src/global/actions/ui/misc.ts @@ -485,7 +485,7 @@ addActionHandler('requestConfetti', (global, actions, payload): ActionReturnType addActionHandler('updateAttachmentSettings', (global, actions, payload): ActionReturnType => { const { - shouldCompress, shouldSendGrouped, + shouldCompress, shouldSendGrouped, isInvertedMedia, } = payload; return { @@ -493,6 +493,7 @@ addActionHandler('updateAttachmentSettings', (global, actions, payload): ActionR attachmentSettings: { shouldCompress: shouldCompress ?? global.attachmentSettings.shouldCompress, shouldSendGrouped: shouldSendGrouped ?? global.attachmentSettings.shouldSendGrouped, + isInvertedMedia, }, }; }); diff --git a/src/global/initialState.ts b/src/global/initialState.ts index 91de6b242..a85be6699 100644 --- a/src/global/initialState.ts +++ b/src/global/initialState.ts @@ -132,6 +132,7 @@ export const INITIAL_GLOBAL_STATE: GlobalState = { attachmentSettings: { shouldCompress: true, shouldSendGrouped: true, + isInvertedMedia: undefined, }, scheduledMessages: { diff --git a/src/global/types.ts b/src/global/types.ts index 3989e1278..085f0f985 100644 --- a/src/global/types.ts +++ b/src/global/types.ts @@ -296,6 +296,7 @@ export type TabState = { isSilent?: boolean; sendGrouped?: boolean; sendCompressed?: boolean; + isInvertedMedia?: true; }; activeChatFolder: number; @@ -823,6 +824,7 @@ export type GlobalState = { attachmentSettings: { shouldCompress: boolean; shouldSendGrouped: boolean; + isInvertedMedia?: true; }; attachMenu: { @@ -1475,6 +1477,7 @@ export interface ActionPayloads { shouldGroupMessages?: boolean; messageList?: MessageList; isReaction?: true; // Reaction to the story are sent in the form of a message + isInvertedMedia?: true; } & WithTabId; sendInviteMessages: { chatId: string; @@ -2905,6 +2908,7 @@ export interface ActionPayloads { updateAttachmentSettings: { shouldCompress?: boolean; shouldSendGrouped?: boolean; + isInvertedMedia?: true; }; updateArchiveSettings: { diff --git a/src/lib/gramjs/tl/api.d.ts b/src/lib/gramjs/tl/api.d.ts index b2431e3e1..3c989aa80 100644 --- a/src/lib/gramjs/tl/api.d.ts +++ b/src/lib/gramjs/tl/api.d.ts @@ -14151,7 +14151,7 @@ namespace Api { clearDraft?: true; noforwards?: true; updateStickersetsOrder?: true; - invertMedia?: true; + isInvertedMedia?: true; peer: Api.TypeInputPeer; replyTo?: Api.TypeInputReplyTo; media: Api.TypeInputMedia; diff --git a/src/styles/icons.scss b/src/styles/icons.scss index cafa6744a..630f3a7af 100644 --- a/src/styles/icons.scss +++ b/src/styles/icons.scss @@ -153,119 +153,121 @@ $icons-map: ( "monospace": "\f17a", "more-circle": "\f17b", "more": "\f17c", - "mute": "\f17d", - "muted": "\f17e", - "my-notes": "\f17f", - "new-chat-filled": "\f180", - "next": "\f181", - "nochannel": "\f182", - "noise-suppression": "\f183", - "non-contacts": "\f184", - "one-filled": "\f185", - "open-in-new-tab": "\f186", - "password-off": "\f187", - "pause": "\f188", - "permissions": "\f189", - "phone-discard-outline": "\f18a", - "phone-discard": "\f18b", - "phone": "\f18c", - "photo": "\f18d", - "pin-badge": "\f18e", - "pin-list": "\f18f", - "pin": "\f190", - "pinned-chat": "\f191", - "pinned-message": "\f192", - "pip": "\f193", - "play-story": "\f194", - "play": "\f195", - "poll": "\f196", - "previous": "\f197", - "privacy-policy": "\f198", - "quote-text": "\f199", - "quote": "\f19a", - "readchats": "\f19b", - "recent": "\f19c", - "reload": "\f19d", - "remove-quote": "\f19e", - "remove": "\f19f", - "reopen-topic": "\f1a0", - "replace": "\f1a1", - "replies": "\f1a2", - "reply-filled": "\f1a3", - "reply": "\f1a4", - "revenue-split": "\f1a5", - "revote": "\f1a6", - "save-story": "\f1a7", - "saved-messages": "\f1a8", - "schedule": "\f1a9", - "search": "\f1aa", - "select": "\f1ab", - "send-outline": "\f1ac", - "send": "\f1ad", - "settings-filled": "\f1ae", - "settings": "\f1af", - "share-filled": "\f1b0", - "share-screen-outlined": "\f1b1", - "share-screen-stop": "\f1b2", - "share-screen": "\f1b3", - "show-message": "\f1b4", - "sidebar": "\f1b5", - "skip-next": "\f1b6", - "skip-previous": "\f1b7", - "smallscreen": "\f1b8", - "smile": "\f1b9", - "sort": "\f1ba", - "speaker-muted-story": "\f1bb", - "speaker-outline": "\f1bc", - "speaker-story": "\f1bd", - "speaker": "\f1be", - "spoiler-disable": "\f1bf", - "spoiler": "\f1c0", - "sport": "\f1c1", - "star": "\f1c2", - "stats": "\f1c3", - "stealth-future": "\f1c4", - "stealth-past": "\f1c5", - "stickers": "\f1c6", - "stop-raising-hand": "\f1c7", - "stop": "\f1c8", - "story-caption": "\f1c9", - "story-expired": "\f1ca", - "story-priority": "\f1cb", - "story-reply": "\f1cc", - "strikethrough": "\f1cd", - "tag-add": "\f1ce", - "tag-crossed": "\f1cf", - "tag-filter": "\f1d0", - "tag-name": "\f1d1", - "tag": "\f1d2", - "timer": "\f1d3", - "transcribe": "\f1d4", - "truck": "\f1d5", - "unarchive": "\f1d6", - "underlined": "\f1d7", - "unlock-badge": "\f1d8", - "unlock": "\f1d9", - "unmute": "\f1da", - "unpin": "\f1db", - "unread": "\f1dc", - "up": "\f1dd", - "user-filled": "\f1de", - "user-online": "\f1df", - "user": "\f1e0", - "video-outlined": "\f1e1", - "video-stop": "\f1e2", - "video": "\f1e3", - "view-once": "\f1e4", - "voice-chat": "\f1e5", - "volume-1": "\f1e6", - "volume-2": "\f1e7", - "volume-3": "\f1e8", - "web": "\f1e9", - "webapp": "\f1ea", - "word-wrap": "\f1eb", - "zoom-in": "\f1ec", - "zoom-out": "\f1ed", + "move-caption-down": "\f17d", + "move-caption-up": "\f17e", + "mute": "\f17f", + "muted": "\f180", + "my-notes": "\f181", + "new-chat-filled": "\f182", + "next": "\f183", + "nochannel": "\f184", + "noise-suppression": "\f185", + "non-contacts": "\f186", + "one-filled": "\f187", + "open-in-new-tab": "\f188", + "password-off": "\f189", + "pause": "\f18a", + "permissions": "\f18b", + "phone-discard-outline": "\f18c", + "phone-discard": "\f18d", + "phone": "\f18e", + "photo": "\f18f", + "pin-badge": "\f190", + "pin-list": "\f191", + "pin": "\f192", + "pinned-chat": "\f193", + "pinned-message": "\f194", + "pip": "\f195", + "play-story": "\f196", + "play": "\f197", + "poll": "\f198", + "previous": "\f199", + "privacy-policy": "\f19a", + "quote-text": "\f19b", + "quote": "\f19c", + "readchats": "\f19d", + "recent": "\f19e", + "reload": "\f19f", + "remove-quote": "\f1a0", + "remove": "\f1a1", + "reopen-topic": "\f1a2", + "replace": "\f1a3", + "replies": "\f1a4", + "reply-filled": "\f1a5", + "reply": "\f1a6", + "revenue-split": "\f1a7", + "revote": "\f1a8", + "save-story": "\f1a9", + "saved-messages": "\f1aa", + "schedule": "\f1ab", + "search": "\f1ac", + "select": "\f1ad", + "send-outline": "\f1ae", + "send": "\f1af", + "settings-filled": "\f1b0", + "settings": "\f1b1", + "share-filled": "\f1b2", + "share-screen-outlined": "\f1b3", + "share-screen-stop": "\f1b4", + "share-screen": "\f1b5", + "show-message": "\f1b6", + "sidebar": "\f1b7", + "skip-next": "\f1b8", + "skip-previous": "\f1b9", + "smallscreen": "\f1ba", + "smile": "\f1bb", + "sort": "\f1bc", + "speaker-muted-story": "\f1bd", + "speaker-outline": "\f1be", + "speaker-story": "\f1bf", + "speaker": "\f1c0", + "spoiler-disable": "\f1c1", + "spoiler": "\f1c2", + "sport": "\f1c3", + "star": "\f1c4", + "stats": "\f1c5", + "stealth-future": "\f1c6", + "stealth-past": "\f1c7", + "stickers": "\f1c8", + "stop-raising-hand": "\f1c9", + "stop": "\f1ca", + "story-caption": "\f1cb", + "story-expired": "\f1cc", + "story-priority": "\f1cd", + "story-reply": "\f1ce", + "strikethrough": "\f1cf", + "tag-add": "\f1d0", + "tag-crossed": "\f1d1", + "tag-filter": "\f1d2", + "tag-name": "\f1d3", + "tag": "\f1d4", + "timer": "\f1d5", + "transcribe": "\f1d6", + "truck": "\f1d7", + "unarchive": "\f1d8", + "underlined": "\f1d9", + "unlock-badge": "\f1da", + "unlock": "\f1db", + "unmute": "\f1dc", + "unpin": "\f1dd", + "unread": "\f1de", + "up": "\f1df", + "user-filled": "\f1e0", + "user-online": "\f1e1", + "user": "\f1e2", + "video-outlined": "\f1e3", + "video-stop": "\f1e4", + "video": "\f1e5", + "view-once": "\f1e6", + "voice-chat": "\f1e7", + "volume-1": "\f1e8", + "volume-2": "\f1e9", + "volume-3": "\f1ea", + "web": "\f1eb", + "webapp": "\f1ec", + "word-wrap": "\f1ed", + "zoom-in": "\f1ee", + "zoom-out": "\f1ef", ); .icon-active-sessions::before { @@ -640,6 +642,12 @@ $icons-map: ( .icon-more::before { content: map.get($icons-map, "more"); } +.icon-move-caption-down::before { + content: map.get($icons-map, "move-caption-down"); +} +.icon-move-caption-up::before { + content: map.get($icons-map, "move-caption-up"); +} .icon-mute::before { content: map.get($icons-map, "mute"); } diff --git a/src/styles/icons.woff b/src/styles/icons.woff index 918e7d860..4a475a454 100644 Binary files a/src/styles/icons.woff and b/src/styles/icons.woff differ diff --git a/src/styles/icons.woff2 b/src/styles/icons.woff2 index c93254abd..277e867ed 100644 Binary files a/src/styles/icons.woff2 and b/src/styles/icons.woff2 differ diff --git a/src/types/icons/font.ts b/src/types/icons/font.ts index ba2344d54..969a176ed 100644 --- a/src/types/icons/font.ts +++ b/src/types/icons/font.ts @@ -123,6 +123,8 @@ export type FontIconName = | 'monospace' | 'more-circle' | 'more' + | 'move-caption-down' + | 'move-caption-up' | 'mute' | 'muted' | 'my-notes'