From 6770fff85767a8df41d7fc9aff9e32536788c82a Mon Sep 17 00:00:00 2001 From: Alexander Zinchuk Date: Tue, 31 Mar 2026 11:29:24 +0200 Subject: [PATCH] Attachment Modal: Redesign (#6777) --- CLAUDE.md | 1 + src/assets/font-icons/check-bold.svg | 1 + src/assets/font-icons/new-send.svg | 1 + src/assets/localization/fallback.strings | 13 +- src/components/common/Composer.scss | 2 +- src/components/common/Document.tsx | 6 +- src/components/common/File.scss | 25 +- src/components/common/File.tsx | 12 +- src/components/common/PeerChip.module.scss | 20 +- src/components/common/PeerChip.tsx | 18 +- .../common/RecipientPicker.module.scss | 7 + src/components/common/RecipientPicker.tsx | 246 ++++++++++- .../common/helpers/mediaDimensions.ts | 30 +- .../common/pickers/ChatOrUserPicker.scss | 383 +++++++++++++++-- .../common/pickers/ChatOrUserPicker.tsx | 223 +++++++--- .../pickers/PickerRecentContacts.module.scss | 110 +++++ .../common/pickers/PickerRecentContacts.tsx | 88 ++++ src/components/left/main/ChatFolders.tsx | 4 +- src/components/left/main/LeftMain.scss | 4 +- src/components/left/search/FileResults.tsx | 2 +- src/components/left/search/LeftSearch.scss | 2 +- src/components/left/search/LeftSearch.tsx | 4 +- .../left/settings/BlockUserModal.tsx | 7 +- .../main/AttachBotRecipientPicker.tsx | 5 +- src/components/main/DraftRecipientPicker.tsx | 7 +- .../main/ForwardRecipientPicker.module.scss | 29 ++ .../main/ForwardRecipientPicker.tsx | 311 +++++++++++++- .../composer/AttachmentModal.module.scss | 76 ++-- .../middle/composer/AttachmentModal.tsx | 36 +- .../composer/AttachmentModalItem.module.scss | 45 +- .../middle/composer/AttachmentModalItem.tsx | 9 +- .../modals/gift/preview/GiftPreviewModal.tsx | 4 +- .../quickChatPicker/QuickChatPickerModal.tsx | 1 + .../SharePreparedMessageModal.tsx | 1 + .../modals/stars/StarsBalanceModal.tsx | 4 +- src/components/right/Profile.scss | 2 +- src/components/right/Profile.tsx | 6 +- src/components/right/hooks/useProfileState.ts | 6 +- .../right/hooks/useTransitionFixes.ts | 2 +- .../right/management/RemoveGroupUserModal.tsx | 7 +- .../right/statistics/BoostStatistics.tsx | 4 +- src/components/ui/Modal.scss | 15 +- src/components/ui/Modal.tsx | 14 +- .../ui/{TabList.scss => SquareTabList.scss} | 2 +- src/components/ui/SquareTabList.tsx | 111 +++++ src/components/ui/TabList.module.scss | 85 ++++ src/components/ui/TabList.tsx | 127 +++--- src/components/ui/mediaEditor/MediaEditor.tsx | 4 +- src/global/actions/api/messages.ts | 138 +++++++ src/global/selectors/messages.ts | 14 + src/global/types/actions.ts | 4 + src/hooks/useFolderTabs.ts | 2 +- src/styles/icons.css | 384 +++++++++--------- src/styles/icons.scss | 376 ++++++++--------- src/styles/icons.woff | Bin 41752 -> 41912 bytes src/styles/icons.woff2 | Bin 34736 -> 34888 bytes src/types/icons/font.ts | 2 + src/types/language.d.ts | 22 +- 58 files changed, 2342 insertions(+), 722 deletions(-) create mode 100644 src/assets/font-icons/check-bold.svg create mode 100644 src/assets/font-icons/new-send.svg create mode 100644 src/components/common/RecipientPicker.module.scss create mode 100644 src/components/common/pickers/PickerRecentContacts.module.scss create mode 100644 src/components/common/pickers/PickerRecentContacts.tsx create mode 100644 src/components/main/ForwardRecipientPicker.module.scss rename src/components/ui/{TabList.scss => SquareTabList.scss} (97%) create mode 100644 src/components/ui/SquareTabList.tsx create mode 100644 src/components/ui/TabList.module.scss diff --git a/CLAUDE.md b/CLAUDE.md index 0eac1231c..e653d22ba 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -366,6 +366,7 @@ lang('SimpleKey'); // Plurals lang('PluralKey', undefined, { pluralValue: 3 }); +lang('PluralKey', { count: 3 }, { pluralValue: 3 }); // if key has variables // String replacements lang('ReplKey', { name: 'Amy' }); diff --git a/src/assets/font-icons/check-bold.svg b/src/assets/font-icons/check-bold.svg new file mode 100644 index 000000000..314a5d4ba --- /dev/null +++ b/src/assets/font-icons/check-bold.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/font-icons/new-send.svg b/src/assets/font-icons/new-send.svg new file mode 100644 index 000000000..5c7d8e4be --- /dev/null +++ b/src/assets/font-icons/new-send.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 3221c2048..55aff40bd 100644 --- a/src/assets/localization/fallback.strings +++ b/src/assets/localization/fallback.strings @@ -302,6 +302,7 @@ "ConversationPinMessagesFor" = "Pin for me and {user}"; "ConversationPinMessageAlertPinAndNotifyMembers" = "Pin and notify all members"; "SavedMessages" = "Saved Messages"; +"SavedMessagesShort" = "Saved"; "AccDescrPrevious" = "Previous"; "ReportReasonSpam" = "Spam"; "ReportReasonViolence" = "Violence"; @@ -584,6 +585,8 @@ "ContactShare" = "Share Contact"; "OK" = "OK"; "ForwardTo" = "Forward to..."; +"ShareWith" = "Share with"; +"SelectChats" = "Select chats"; "AttachGame" = "Game"; "JumpToDate" = "Jump to Date"; "FloodWait" = "Too many attempts, please try again later."; @@ -617,6 +620,7 @@ "WebAppAddToAttachmentAdd" = "Add"; "AccActionDownload" = "Download"; "Forward" = "Forward"; +"ForwardForStars" = "Forward for {price}"; "MediaZoomOut" = "Zoom Out"; "MediaZoomIn" = "Zoom In"; "PeerInfoReportProfileVideo" = "Report Profile Photo"; @@ -2143,6 +2147,11 @@ "ConfirmationModalPaymentForMessage_other" = "{user} charges **{amount}** per incoming message. Would you like to pay **{totalAmount}** to send **{count} messages?**"; "PayForMessage_one" = "Pay for {count} message"; "PayForMessage_other" = "Pay for {count} messages"; +"ForwardPaidChatsConfirmation" = "{chatsSelected} {payConfirmation}"; +"ForwardPaidChatsSelected_one" = "You selected **{paidChatsCount}** chat that charges Stars for messages."; +"ForwardPaidChatsSelected_other" = "You selected **{paidChatsCount}** chats that charge Stars for messages."; +"ForwardPaidChatsPayConfirmation_one" = "Would you like to pay **{totalAmount}** to send **{count}** message?"; +"ForwardPaidChatsPayConfirmation_other" = "Would you like to pay **{totalAmount}** to send **{count}** messages?"; "MessageSentPaidToastTitle_one" = "Message sent!"; "MessageSentPaidToastTitle_other" = "{count} messages sent!"; "MessageSentPaidToastText" = "You paid {amount}"; @@ -2690,8 +2699,6 @@ "AttachmentSendAudio_other" = "Send {count} Audios"; "AttachmentSendFile_one" = "Send File"; "AttachmentSendFile_other" = "Send {count} Files"; -"AttachmentSendGif" = "Send GIF"; -"AttachmentReplaceGif" = "Replace GIF"; "AttachmentDragAddItems" = "Add Items"; "AttachmentCaptionPlaceholder" = "Add a caption..."; "MessageSummaryTitle" = "AI Summary"; @@ -2772,6 +2779,8 @@ "RankEditTextOwn" = "Share your role, title or how you're known in this group. Your tag is visible to all members."; "RankEditText" = "Add a short tag next to {user}'s name."; "MenuAddCaption" = "Add Caption"; +"FwdMessagesToChats_one" = "Message forwarded to {count} chat"; +"FwdMessagesToChats_other" = "Message forwarded to {count} chats"; "MenuCopyDate" = "Copy Date"; "DateCopiedToast" = "Date copied to clipboard"; "ReminderSetToast" = "You set up a reminder in **Saved Messages**"; diff --git a/src/components/common/Composer.scss b/src/components/common/Composer.scss index ae1d4de01..61298bf70 100644 --- a/src/components/common/Composer.scss +++ b/src/components/common/Composer.scss @@ -896,7 +896,7 @@ } #caption-input-text .placeholder-text { - bottom: 0.8125rem; + bottom: 0.875rem; } #story-input-text .placeholder-text { diff --git a/src/components/common/Document.tsx b/src/components/common/Document.tsx index 0dacba168..1b8538857 100644 --- a/src/components/common/Document.tsx +++ b/src/components/common/Document.tsx @@ -31,7 +31,7 @@ import File from './File'; type OwnProps = { document: ApiDocument; observeIntersection?: ObserveFn; - smaller?: boolean; + fileSize?: 'small' | 'medium' | 'large'; isSelected?: boolean; isSelectable?: boolean; canAutoLoad?: boolean; @@ -59,7 +59,7 @@ const BYTES_PER_MB = 1024 * 1024; const Document = ({ document, observeIntersection, - smaller, + fileSize, canAutoLoad, autoLoadFileMaxSizeMb, uploadProgress, @@ -201,7 +201,7 @@ const Document = ({ timestamp={datetime} thumbnailDataUri={thumbDataUri} previewData={localBlobUrl || previewData} - smaller={smaller} + previewSize={fileSize} isTransferring={isTransferring} isUploading={isUploading} transferProgress={transferProgress} diff --git a/src/components/common/File.scss b/src/components/common/File.scss index c2ad90875..1ddf1ecc8 100644 --- a/src/components/common/File.scss +++ b/src/components/common/File.scss @@ -185,7 +185,7 @@ padding-inline: 0.25rem; } - &.smaller { + &.size-small { --background-color: var(--color-background); --border-radius-messages-small: 0.3125rem; @@ -218,6 +218,29 @@ } } + &.size-large { + .action-icon, + .file-progress, + .file-icon, + .file-preview { + width: 4.5rem; + height: 4.5rem; + border-radius: 0.75rem; + } + + .file-info { + margin-top: 0; + } + + .file-subtitle { + line-height: 1rem; + } + + .file-icon-container { + margin-inline-end: 0.5rem; + } + } + &:dir(rtl), &[dir="rtl"] { .file-progress, diff --git a/src/components/common/File.tsx b/src/components/common/File.tsx index 6e584b26d..68820e4e5 100644 --- a/src/components/common/File.tsx +++ b/src/components/common/File.tsx @@ -26,6 +26,8 @@ import Icon from './icons/Icon'; import './File.scss'; +type FileSize = 'small' | 'medium' | 'large'; + type OwnProps = { ref?: ElementRef; id?: string; @@ -37,7 +39,7 @@ type OwnProps = { thumbnailDataUri?: string; previewData?: string; className?: string; - smaller?: boolean; + previewSize?: FileSize; isTransferring?: boolean; isUploading?: boolean; isSelectable?: boolean; @@ -59,7 +61,7 @@ const File = ({ thumbnailDataUri, previewData, className, - smaller, + previewSize = 'medium', isTransferring, isUploading, isSelectable, @@ -89,12 +91,12 @@ const File = ({ const color = getColorFromExtension(extension); - const { width, height } = getDocumentThumbnailDimensions(smaller); + const { width, height } = getDocumentThumbnailDimensions(previewSize); const fullClassName = buildClassName( 'File', className, - smaller && 'smaller', + previewSize !== 'medium' && `size-${previewSize}`, onClick && !isUploading && 'interactive', isSelected && 'file-is-selected', ); @@ -135,7 +137,7 @@ const File = ({
diff --git a/src/components/common/PeerChip.module.scss b/src/components/common/PeerChip.module.scss index a1ff9c09f..b1498557b 100644 --- a/src/components/common/PeerChip.module.scss +++ b/src/components/common/PeerChip.module.scss @@ -8,7 +8,7 @@ align-items: center; min-width: 0; - height: 2rem; + height: var(--chip-size, 2rem); margin-inline: 0.25rem; padding-right: 0.75rem; border-radius: 1rem; @@ -47,12 +47,17 @@ cursor: default; } + &.small { + margin-inline: 0; + border-radius: 1.4375rem; + } + .avatar, .iconWrapper { flex-shrink: 0; - width: 2rem; - height: 2rem; + width: var(--chip-size, 2rem); + height: var(--chip-size, 2rem); opacity: 1; @@ -102,8 +107,8 @@ align-items: center; justify-content: center; - width: 2rem; - height: 2rem; + width: var(--chip-size, 2rem); + height: var(--chip-size, 2rem); border-radius: 50%; font-size: 1.5rem; @@ -118,10 +123,9 @@ &.squareAvatar { --border-radius-forum-avatar: 0.625rem; - border-start-start-radius: 0.625rem; - border-end-start-radius: 0.625rem; + border-radius: 0.625rem; - &.minimized, .remove { + .remove { border-radius: 0.625rem; } } diff --git a/src/components/common/PeerChip.tsx b/src/components/common/PeerChip.tsx index c87cae219..2307c748c 100644 --- a/src/components/common/PeerChip.tsx +++ b/src/components/common/PeerChip.tsx @@ -10,6 +10,7 @@ import { getPeerTitle, isApiPeerChat } from '../../global/helpers/peers'; import { selectPeer, selectTheme, selectUser } from '../../global/selectors'; import buildClassName from '../../util/buildClassName'; import buildStyle from '../../util/buildStyle'; +import { REM } from './helpers/mediaDimensions'; import useLang from '../../hooks/useLang'; import usePeerColor from '../../hooks/usePeerColor'; @@ -20,10 +21,14 @@ import Icon from './icons/Icon'; import styles from './PeerChip.module.scss'; +const CHIP_SIZE_SMALL = 1.875 * REM; +const CHIP_SIZE_MEDIUM = 2 * REM; + +export type PeerChipSize = 'small' | 'medium'; + type OwnProps = { - peerId?: string; - + size?: PeerChipSize; forceShowSelf?: boolean; customPeer?: CustomPeer; mockPeer?: ApiPeer; @@ -33,11 +38,11 @@ type OwnProps = { canClose?: boolean; isCloseNonDestructive?: boolean; className?: string; + itemClassName?: string; withPeerColors?: boolean; withEmojiStatus?: boolean; clickArg?: T; onClick?: (arg: T) => void; - itemClassName?: string; }; type StateProps = { @@ -49,6 +54,7 @@ type StateProps = { const PeerChip = ({ icon, title, + size = 'medium', isMinimized, canClose, isCloseNonDestructive, @@ -57,10 +63,10 @@ const PeerChip = ({ mockPeer, customPeer, className, + itemClassName, isSavedMessages, withPeerColors, withEmojiStatus, - itemClassName, theme, onClick, }: OwnProps & StateProps) => { @@ -106,6 +112,7 @@ const PeerChip = ({ const fullClassName = buildClassName( styles.root, + size === 'small' && styles.small, (chat?.isForum || customPeer?.isAvatarSquare) && styles.squareAvatar, isMinimized && styles.minimized, canClose && styles.closeable, @@ -115,7 +122,10 @@ const PeerChip = ({ className, ); + const chipSize = size === 'small' ? CHIP_SIZE_SMALL : CHIP_SIZE_MEDIUM; + const style = buildStyle( + `--chip-size: ${chipSize}px`, withPeerColors && peerColorStyle, ); diff --git a/src/components/common/RecipientPicker.module.scss b/src/components/common/RecipientPicker.module.scss new file mode 100644 index 000000000..608914bb3 --- /dev/null +++ b/src/components/common/RecipientPicker.module.scss @@ -0,0 +1,7 @@ +.recentContacts { + margin-block: 1rem; + + &:last-child { + margin-bottom: 0; + } +} diff --git a/src/components/common/RecipientPicker.tsx b/src/components/common/RecipientPicker.tsx index 543b0397c..0925a10b2 100644 --- a/src/components/common/RecipientPicker.tsx +++ b/src/components/common/RecipientPicker.tsx @@ -1,4 +1,5 @@ -import { memo, useMemo, useState } from '../../lib/teact/teact'; +import type { TeactNode } from '../../lib/teact/teact'; +import { memo, useCallback, useMemo, useState } from '../../lib/teact/teact'; import { getActions, getGlobal, withGlobal } from '../../global'; import type { ApiChatFolder, ApiChatType } from '../../api/types'; @@ -7,36 +8,51 @@ import type { ThreadId } from '../../types'; import { ALL_FOLDER_ID, API_CHAT_TYPES } from '../../config'; import { getCanPostInChat, + getChatTitle, getHasAdminRight, isChatChannel, isDeletedUser, + isSystemBot, } from '../../global/helpers'; import { filterPeersByQuery } from '../../global/helpers/peers'; import { - filterChatIdsByType, selectChat, selectChatFullInfo, selectIsMonoforumAdmin, selectUser, + filterChatIdsByType, selectCanAnimateInterface, selectChat, selectChatFullInfo, selectIsMonoforumAdmin, + selectTopic, selectUser, } from '../../global/selectors'; import { selectCurrentLimit } from '../../global/selectors/limits'; +import buildClassName from '../../util/buildClassName'; import { unique } from '../../util/iteratees'; import sortChatIds from './helpers/sortChatIds'; import useCurrentOrPrev from '../../hooks/useCurrentOrPrev'; import { useFolderManagerForOrderedIds } from '../../hooks/useFolderManager'; import useFolderTabs from '../../hooks/useFolderTabs'; +import useLang from '../../hooks/useLang'; import useLastCallback from '../../hooks/useLastCallback'; +import { useStateRef } from '../../hooks/useStateRef'; import TabList from '../ui/TabList'; -import ChatOrUserPicker from './pickers/ChatOrUserPicker'; +import PeerChip from './PeerChip'; +import ChatOrUserPicker, { type SearchRowRenderProps } from './pickers/ChatOrUserPicker'; +import PickerRecentContacts from './pickers/PickerRecentContacts'; + +import styles from './RecipientPicker.module.scss'; export type OwnProps = { isOpen: boolean; + title?: string; searchPlaceholder: string; className?: string; filter?: readonly ApiChatType[]; isLowStackPriority?: boolean; isForwarding?: boolean; + isMultiSelect?: boolean; withFolders?: boolean; + footer?: TeactNode; + viewportFooter?: TeactNode; loadMore?: NoneToVoidFunction; onSelectRecipient: (peerId: string, threadId?: ThreadId) => void; + onSelectedIdsChange?: (ids: string[]) => void; onClose: NoneToVoidFunction; onCloseAnimationEnd?: NoneToVoidFunction; }; @@ -52,6 +68,8 @@ type StateProps = { maxFolders: number; }; +const RECENT_CONTACTS_LIMIT = 15; + const RecipientPicker = ({ isOpen, currentUserId, @@ -60,21 +78,34 @@ const RecipientPicker = ({ pinnedIds, contactIds, filter = API_CHAT_TYPES, + title, className, searchPlaceholder, isLowStackPriority, chatFoldersById, orderedFolderIds, isForwarding, + isMultiSelect, maxFolders, withFolders, + footer, + viewportFooter, loadMore, onSelectRecipient, + onSelectedIdsChange, onClose, onCloseAnimationEnd, }: OwnProps & StateProps) => { const { openLimitReachedModal } = getActions(); + const lang = useLang(); + const [search, setSearch] = useState(''); + const [selectedIds, setSelectedIds] = useState([]); + const [removingIds, setRemovingIds] = useState([]); + const [appearingIds, setAppearingIds] = useState([]); + const selectedIdsRef = useStateRef(selectedIds); + const removingIdsRef = useStateRef(removingIds); + const appearingIdsRef = useStateRef(appearingIds); const [activeFolderIndex, setActiveFolderIndex] = useState(0); const { displayedFolders, folderTabs } = useFolderTabs({ @@ -85,7 +116,7 @@ const RecipientPicker = ({ isReadOnly: true, }); - const shouldRenderFolders = withFolders && folderTabs?.length && !search; + const shouldRenderFolders = withFolders && folderTabs && folderTabs.length > 1 && !search; const displayedFolderId = displayedFolders?.[activeFolderIndex]?.id || ALL_FOLDER_ID; const orderedChatIds = useFolderManagerForOrderedIds(displayedFolderId); @@ -103,6 +134,57 @@ const RecipientPicker = ({ setActiveFolderIndex(index); }); + const updateSelectedIds = useLastCallback((newIds: string[], newlyAddedId?: string) => { + setSelectedIds(newIds); + onSelectedIdsChange?.(newIds); + + if (newlyAddedId && selectCanAnimateInterface(getGlobal())) { + setAppearingIds([...appearingIdsRef.current, newlyAddedId]); + setTimeout(() => { + setAppearingIds(appearingIdsRef.current.filter((id) => id !== newlyAddedId)); + }, 200); + } + }); + + const handleRemoveSelected = useLastCallback((selectionId: string) => { + if (removingIdsRef.current.includes(selectionId)) return; + + const canAnimate = selectCanAnimateInterface(getGlobal()); + if (!canAnimate) { + const newIds = selectedIdsRef.current.filter((id) => id !== selectionId); + setSelectedIds(newIds); + onSelectedIdsChange?.(newIds); + return; + } + + setRemovingIds([...removingIdsRef.current, selectionId]); + + setTimeout(() => { + setRemovingIds(removingIdsRef.current.filter((id) => id !== selectionId)); + const newIds = selectedIdsRef.current.filter((id) => id !== selectionId); + setSelectedIds(newIds); + onSelectedIdsChange?.(newIds); + }, 300); + }); + + const handleToggleSelection = useLastCallback((peerId: string, threadId?: ThreadId) => { + const selectionId = threadId ? `${peerId}:${threadId}` : peerId; + + if (selectedIds.includes(selectionId)) { + handleRemoveSelected(selectionId); + } else { + updateSelectedIds([...selectedIds, selectionId], selectionId); + } + }); + + const handleSelect = useLastCallback((peerId: string, threadId?: ThreadId) => { + if (isMultiSelect) { + handleToggleSelection(peerId, threadId); + } else { + onSelectRecipient(peerId, threadId); + } + }); + const ids = useMemo(() => { if (!isOpen) return []; @@ -120,6 +202,8 @@ const RecipientPicker = ({ ]; const peerIds = allIds.filter((id) => { + if (isSystemBot(id)) return false; + const chat = selectChat(global, id); const user = selectUser(global, id); const hasAdminRights = chat && getHasAdminRight(chat, 'postMessages'); @@ -171,16 +255,145 @@ const RecipientPicker = ({ const renderingIds = useCurrentOrPrev(ids, true); - const chatFolders = useMemo(() => { - if (!shouldRenderFolders) return undefined; + const recentContactIds = useMemo(() => { + if (!contactIds) return []; + return contactIds.slice(0, RECENT_CONTACTS_LIMIT); + }, [contactIds]); + + const hasSelectedChips = isMultiSelect && selectedIds.length > 0; + + const parseSelectionId = useLastCallback((selectionId: string): { peerId: string; topicId?: number } => { + const colonIndex = selectionId.indexOf(':'); + if (colonIndex === -1) { + return { peerId: selectionId }; + } + return { + peerId: selectionId.substring(0, colonIndex), + topicId: Number(selectionId.substring(colonIndex + 1)), + }; + }); + + const getChipTitle = useLastCallback((selectionId: string): string | undefined => { + const { peerId, topicId } = parseSelectionId(selectionId); + if (!topicId) return undefined; + + const global = getGlobal(); + const topic = selectTopic(global, peerId, topicId); + const chat = selectChat(global, peerId); + + if (!topic || !chat) return undefined; + + const chatTitle = getChatTitle(lang, chat); + return `${topic.title} • ${chatTitle}`; + }); + + const renderSearchRow = useCallback((props: SearchRowRenderProps) => { + if (!hasSelectedChips) { + return ( +
+ + +
+ ); + } + return ( - +
+
+ {selectedIds.map((selectionId) => { + const { peerId } = parseSelectionId(selectionId); + const chipTitle = getChipTitle(selectionId); + const isAppearing = appearingIds.includes(selectionId); + const isRemoving = removingIds.includes(selectionId); + + return ( +
+ +
+ ); + })} +
+ + +
+
+
); - }, [folderTabs, activeFolderIndex, shouldRenderFolders]); + }, [hasSelectedChips, selectedIds, appearingIds, removingIds]); + + const subheaderContent = useMemo(() => { + const hasRecentContacts = recentContactIds.length > 0 && !search; + const hasFolderTabs = shouldRenderFolders; + + if (!hasRecentContacts && !hasFolderTabs) return undefined; + + return ( + <> + {hasRecentContacts && ( + + )} + {Boolean(hasFolderTabs) && folderTabs && ( + + )} + + ); + }, [ + recentContactIds, + search, + shouldRenderFolders, + currentUserId, + handleSelect, + isMultiSelect, + selectedIds, + folderTabs, + activeFolderIndex, + handleSwitchFolderIndex, + ]); return ( .Transition { overflow: hidden; @@ -69,10 +211,15 @@ overflow-y: auto; height: 100%; - padding-block: 0.125rem; + margin-top: 1rem; + margin-bottom: 1rem; + padding-block: 0.375rem; padding-inline: 0.5rem; + border-radius: 1.5rem; - @include mixins.adapt-padding-to-scrollbar(0.5rem); + background-color: var(--color-background); + + @include mixins.adapt-padding-to-scrollbar(0.5rem, 0.125rem); body.is-ios &, body.is-android & { @@ -85,6 +232,14 @@ } } + &:has(.picker-footer) { + .picker-list { + margin-bottom: 3rem; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + } + } + .no-results { display: flex; align-items: center; @@ -97,8 +252,16 @@ color: var(--color-text-secondary); } - .scroll-container { - position: relative; + .picker-list-loading { + display: flex; + align-items: center; + justify-content: center; + } + + .picker-list-spacer { + position: absolute; + width: 100%; + height: 1.25rem; } .ChatOrUserPicker-item { @@ -108,6 +271,86 @@ .online { color: var(--color-primary); } + + @media (hover: hover) { + &:hover .forum-badge { + outline-color: var(--color-item-hover); + } + } + } + + .picker-avatar-wrapper { + position: relative; + } + + .forum-badge { + position: absolute; + z-index: 2; + right: -0.125rem; + bottom: -0.125rem; + + display: flex; + align-items: center; + justify-content: center; + + width: 0.875rem; + height: 0.875rem; + border-radius: 50%; + + font-size: 0.625rem; + color: var(--color-white); + + background: rgba(0, 0, 0, 0.2); + backdrop-filter: blur(50px); + /* stylelint-disable-next-line plugin/whole-pixel */ + outline: 1.5px solid var(--color-background); + } + + .picker-checkbox { + position: relative; + z-index: 1; + + display: flex; + align-items: center; + justify-content: center; + + width: 1.375rem; + height: 1.375rem; + border: 2px solid var(--color-borders-input); + border-radius: 50%; + + font-size: 1.125rem; + line-height: 1; + color: var(--color-white); + + transition: background-color 0.15s, border-color 0.15s; + + &.selected { + border-color: var(--color-primary); + background-color: var(--color-primary); + } + } + + .picker-checkbox-count { + position: absolute; + right: -0.375rem; + bottom: -0.375rem; + + display: flex; + align-items: center; + justify-content: center; + + min-width: 0.875rem; + height: 0.875rem; + border: 1px solid var(--color-white); + border-radius: 0.4375rem; + + font-size: 0.625rem; + font-weight: var(--font-weight-semibold); + line-height: 0.625rem; + color: var(--color-white); + + background-color: var(--color-primary); } .topic-icon { @@ -143,4 +386,84 @@ height: 1rem; } } + + .picker-footer { + position: absolute; + z-index: 3; + right: 1rem; + bottom: 1rem; + left: 1rem; + + padding-top: 1rem; + + background: + linear-gradient( + to top, + var(--color-background-secondary) 0%, + var(--color-background-secondary) 70%, + transparent 100% + ); + } + + .picker-caption-wrapper { + display: flex; + flex: 1; + gap: 0.5rem; + align-items: center; + + padding: 0.1875rem; + padding-inline-start: 1rem; + border-radius: 1.5rem; + + background-color: var(--color-background); + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.05); + } + + .picker-caption-input { + flex: 1; + + min-width: 0; + height: 2rem; + padding: 0; + border: none; + + font-size: 1rem; + line-height: 2rem; + + background-color: transparent; + outline: none; + + &::placeholder { + color: var(--color-placeholders); + } + } + + .picker-footer-button { + width: 100%; + border-radius: 1.5rem; + font-weight: var(--font-weight-semibold); + } + + .picker-footer-input { + display: flex; + } + + .picker-send-button { + display: flex; + flex-shrink: 0; + align-items: center; + justify-content: center; + + width: auto !important; + min-width: auto !important; + height: 2.625rem; + padding: 0 1.0625rem !important; + border-radius: 1.375rem; + + font-size: 2rem; + + &:has(.icon-star) { + font-size: 1rem; + } + } } diff --git a/src/components/common/pickers/ChatOrUserPicker.tsx b/src/components/common/pickers/ChatOrUserPicker.tsx index 52c7856f6..9bcca1e79 100644 --- a/src/components/common/pickers/ChatOrUserPicker.tsx +++ b/src/components/common/pickers/ChatOrUserPicker.tsx @@ -1,4 +1,4 @@ -import type { TeactNode } from '../../../lib/teact/teact'; +import type { ElementRef, TeactNode } from '../../../lib/teact/teact'; import { memo, useCallback, useEffect, useMemo, useRef, useState, } from '../../../lib/teact/teact'; @@ -34,14 +34,13 @@ import useLang from '../../../hooks/useLang'; import useLastCallback from '../../../hooks/useLastCallback'; import useOldLang from '../../../hooks/useOldLang'; -import Button from '../../ui/Button'; import InfiniteScroll, { type OwnProps as InfiniteScrollProps } from '../../ui/InfiniteScroll'; -import InputText from '../../ui/InputText'; import Loading from '../../ui/Loading'; import Modal from '../../ui/Modal'; import Transition from '../../ui/Transition'; import Avatar from '../Avatar'; import FullNameTitle from '../FullNameTitle'; +import Icon from '../icons/Icon'; import TopicIcon from '../TopicIcon'; import PickerItem from './PickerItem'; @@ -51,12 +50,17 @@ export type OwnProps = { currentUserId?: string; chatOrUserIds: string[]; isOpen: boolean; + title?: string; searchPlaceholder: string; search: string; className?: string; isLowStackPriority?: boolean; listActiveKey?: number; subheader?: TeactNode; + renderSearchRow?: (props: SearchRowRenderProps) => TeactNode; + footer?: TeactNode; + viewportFooter?: TeactNode; + selectedIds?: string[]; loadMore?: NoneToVoidFunction; onSearchChange: (search: string) => void; onSelectChatOrUser: (chatOrUserId: string, threadId?: ThreadId) => void; @@ -75,16 +79,29 @@ const TOPIC_ICON_SIZE = 2.75 * REM; const ITEM_CLASS_NAME = 'ChatOrUserPicker-item'; const TOPIC_ITEM_HEIGHT_PX = 56; +export type SearchRowRenderProps = { + inputRef: ElementRef; + value: string; + placeholder: string; + onChange: (e: React.ChangeEvent) => void; + onKeyDown?: React.KeyboardEventHandler; +}; + const ChatOrUserPicker = ({ isOpen, currentUserId, chatOrUserIds, + title, search, searchPlaceholder, className, isLowStackPriority, subheader, + renderSearchRow, + footer, + viewportFooter, listActiveKey, + selectedIds, animationLevel, shouldSkipHistoryAnimations, loadMore, @@ -113,13 +130,13 @@ const ChatOrUserPicker = ({ useInputFocusOnOpen(searchRef, isOpen && activeKey === CHAT_LIST_SLIDE, resetSearch); useInputFocusOnOpen(topicSearchRef, isOpen && activeKey === TOPIC_LIST_SLIDE); - const selectTopicsById = useLastCallback((global: GlobalState) => { + const selectTopicsById = useCallback((global: GlobalState) => { if (!forumId) { return undefined; } return selectTopics(global, forumId); - }); + }, [forumId]); const forumTopicsById = useSelector(selectTopicsById); @@ -190,6 +207,8 @@ const ChatOrUserPicker = ({ } }, `.${ITEM_CLASS_NAME}`, true); + const isMultiSelect = Boolean(selectedIds); + const handleClick = useLastCallback((chatId: string) => { const chatsById = getGlobal().chats.byId; const chat = chatsById?.[chatId]; @@ -214,7 +233,16 @@ const ChatOrUserPicker = ({ peer = monoforumChannel; } + const chat = global.chats.byId[id]; + const isForum = chat?.isForum; + const isSelf = peer && !isApiPeerChat(peer) ? peer.isSelf : undefined; + const isSelected = selectedIds?.includes(id); + + const selectedTopicsCount = isForum && selectedIds + ? selectedIds.filter((selId) => selId.startsWith(`${id}:`)).length + : 0; + const hasSelectedTopics = selectedTopicsCount > 0; function getSubtitle() { if (!peer) return undefined; @@ -232,6 +260,15 @@ const ChatOrUserPicker = ({ const [subtitle, subtitleClassName] = getSubtitle() || []; + const checkboxElement = selectedIds ? ( +
+ {(isSelected || hasSelectedTopics) && } + {hasSelectedTopics && ( +
{selectedTopicsCount}
+ )} +
+ ) : undefined; + return ( )} avatarElement={( - +
+ + {isForum && } +
)} + inputElement={checkboxElement} + inputPosition="end" subtitle={subtitle} subtitleClassName={subtitleClassName} ripple @@ -262,29 +304,33 @@ const ChatOrUserPicker = ({ onClick={() => handleClick(id)} /> ); - }, [currentUserId, oldLang, lang, viewportOffset]); + }, [currentUserId, oldLang, lang, viewportOffset, selectedIds]); function renderTopicList() { return ( <> -
-
-
+
+ {renderSearchRow ? renderSearchRow({ + inputRef: topicSearchRef, + value: topicSearch, + placeholder: searchPlaceholder, + onChange: handleTopicSearchChange, + onKeyDown: handleTopicKeyDown, + }) : ( +
+ + +
+ )}
{topicIds?.length ? ( - {topicIds.map((topicId, i) => ( - { + const selectionId = `${forumId}:${topicId}`; + const isTopicSelected = selectedIds?.includes(selectionId); - onClick={() => onSelectChatOrUser(forumId!, topicId)} - style={`top: ${i * TOPIC_ITEM_HEIGHT_PX}px;`} - avatarElement={( - - )} - title={renderText(topics[topicId].title)} + const topicCheckboxElement = isMultiSelect ? ( +
+ {isTopicSelected && } +
+ ) : undefined; + + return ( + onSelectChatOrUser(forumId!, topicId)} + style={`top: ${i * TOPIC_ITEM_HEIGHT_PX}px;`} + avatarElement={( +
+ +
+ )} + title={renderText(topics[topicId].title)} + inputElement={topicCheckboxElement} + inputPosition="end" + /> + ); + })} + {Boolean(viewportFooter) && ( +
- ))} + )} ) : topicIds && !topicIds.length ? (

{lang('NothingFound')}

) : ( - +
+ +
)} ); @@ -326,24 +394,28 @@ const ChatOrUserPicker = ({ function renderChatList() { return ( <> -
-
-
+
+ {renderSearchRow ? renderSearchRow({ + inputRef: searchRef, + value: search, + placeholder: searchPlaceholder, + onChange: handleSearchChange, + onKeyDown: chatKeyDownHandler, + }) : ( +
+ + +
+ )} {subheader}
{ + if (forumId) { + handleHeaderBackClick(); + } else { + onClose(); + } + }); + return ( @@ -378,6 +463,7 @@ const ChatOrUserPicker = ({ return activeKey === TOPIC_LIST_SLIDE ? renderTopicList() : renderChatList(); }} + {footer} ); }; @@ -386,6 +472,7 @@ type ChatListContentProps = { isOpen: boolean; viewportIds?: string[]; maxHeight: number; + viewportFooter?: TeactNode; onLoadMore: InfiniteScrollProps['onLoadMore']; onSelect: (index: number) => void; renderItem: (id: string, index: number) => TeactNode; @@ -396,6 +483,7 @@ function ChatListContent({ isOpen, viewportIds, maxHeight, + viewportFooter, onLoadMore, onSelect, onKeyDownHandlerUpdate, @@ -424,6 +512,9 @@ function ChatListContent({ onKeyDown={handleKeyDown} > {viewportIds.map(renderItem)} + {Boolean(viewportFooter) && ( +
+ )} ) : viewportIds && !viewportIds.length ? (

{lang('NothingFound')}

diff --git a/src/components/common/pickers/PickerRecentContacts.module.scss b/src/components/common/pickers/PickerRecentContacts.module.scss new file mode 100644 index 000000000..bc9bc3d69 --- /dev/null +++ b/src/components/common/pickers/PickerRecentContacts.module.scss @@ -0,0 +1,110 @@ +.root { + overflow: hidden; + + padding: 0.3125rem 0; + border-radius: 1.5rem; + + background-color: var(--color-background); + box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.05); +} + +.scrollContainer { + scrollbar-width: none; + + overflow-x: auto; + overflow-y: hidden; + display: flex; + gap: 1rem; + + padding-inline: 0.5625rem; + + white-space: nowrap; + + &::-webkit-scrollbar { + display: none; + } +} + +.item { + cursor: var(--custom-cursor, pointer); + + display: flex; + flex-direction: column; + align-items: center; + + min-width: 3.375rem; + padding-top: 0.5rem; + padding-bottom: 0.375rem; + padding-inline: 0.25rem; + border-radius: 0.75rem; + + transition: background-color 0.15s; + + &:hover { + background-color: var(--color-chat-hover); + } + + &:active { + background-color: var(--color-item-active); + } +} + +.avatarWrapper { + position: relative; + margin-bottom: 0.3125rem; +} + +.checkmark { + position: absolute; + z-index: 1; + right: -0.125rem; + bottom: -0.125rem; + transform: scale(0); + + display: flex; + align-items: center; + justify-content: center; + + width: 1.25rem; + height: 1.25rem; + border: 2px solid var(--color-background); + border-radius: 50%; + + font-size: 0.75rem; + color: var(--color-white); + + opacity: 0; + background-color: var(--color-primary); + + transition: transform 0.15s, opacity 0.15s, border-color 0.15s; + + .item:hover & { + border-color: var(--color-item-active); + } +} + +.name { + overflow: hidden; + + width: 100%; + + font-size: 0.75rem; + line-height: 1rem; + color: var(--color-text); + text-align: center; + text-overflow: ellipsis; + white-space: nowrap; + + transition: color 0.15s; +} + +.selected { + .name { + color: var(--color-primary); + } + + .checkmark { + transform: scale(1); + opacity: 1; + } +} diff --git a/src/components/common/pickers/PickerRecentContacts.tsx b/src/components/common/pickers/PickerRecentContacts.tsx new file mode 100644 index 000000000..8ae9fd57d --- /dev/null +++ b/src/components/common/pickers/PickerRecentContacts.tsx @@ -0,0 +1,88 @@ +import { memo, useRef } from '../../../lib/teact/teact'; +import { getGlobal } from '../../../global'; + +import { getPeerTitle } from '../../../global/helpers/peers'; +import { selectPeer } from '../../../global/selectors'; +import buildClassName from '../../../util/buildClassName'; +import renderText from '../helpers/renderText'; + +import useHorizontalScroll from '../../../hooks/useHorizontalScroll'; +import useLang from '../../../hooks/useLang'; +import useLastCallback from '../../../hooks/useLastCallback'; + +import Avatar from '../Avatar'; +import Icon from '../icons/Icon'; + +import styles from './PickerRecentContacts.module.scss'; + +type OwnProps = { + contactIds: string[]; + currentUserId?: string; + selectedIds?: string[]; + className?: string; + onSelect: (id: string) => void; +}; + +const PickerRecentContacts = ({ + contactIds, + currentUserId, + selectedIds, + className, + onSelect, +}: OwnProps) => { + const lang = useLang(); + const containerRef = useRef(); + + useHorizontalScroll(containerRef, !contactIds.length); + + const handleClick = useLastCallback((id: string) => { + onSelect(id); + }); + + // Current user (Saved Messages) goes first, then contacts + const displayIds = currentUserId + ? [currentUserId, ...contactIds.filter((id) => id !== currentUserId)] + : contactIds; + + if (!displayIds.length) { + return undefined; + } + + return ( +
+
+ {displayIds.map((peerId) => { + const global = getGlobal(); + const peer = selectPeer(global, peerId); + if (!peer) return undefined; + + const isSelf = peerId === currentUserId; + const isSelected = selectedIds?.includes(peerId); + const name = isSelf ? lang('SavedMessagesShort') : getPeerTitle(lang, peer); + + return ( +
handleClick(peerId)} + > +
+ +
+ +
+
+
{renderText(name || lang('ActionFallbackSomeone'))}
+
+ ); + })} +
+
+ ); +}; + +export default memo(PickerRecentContacts); diff --git a/src/components/left/main/ChatFolders.tsx b/src/components/left/main/ChatFolders.tsx index 1f479918b..071bfc4bd 100644 --- a/src/components/left/main/ChatFolders.tsx +++ b/src/components/left/main/ChatFolders.tsx @@ -26,7 +26,7 @@ import useScrolledState from '../../../hooks/useScrolledState'; import useShowTransition from '../../../hooks/useShowTransition'; import StoryRibbon from '../../story/StoryRibbon'; -import TabList from '../../ui/TabList'; +import SquareTabList from '../../ui/SquareTabList'; import Transition from '../../ui/Transition'; import ChatList from './ChatList'; @@ -259,7 +259,7 @@ const ChatFolders: FC = ({ > {shouldRenderStoryRibbon && } {shouldRenderFolders ? ( - = ({ document={getMessageDocument(message)!} message={message} datetime={message.date} - smaller + fileSize="small" sender={getSenderName(lang, message, chatsById, usersById)} className="scroll-item" isDownloading={getIsDownloading(activeDownloads, message.content.document!)} diff --git a/src/components/left/search/LeftSearch.scss b/src/components/left/search/LeftSearch.scss index d3634041f..7c05a3a6a 100644 --- a/src/components/left/search/LeftSearch.scss +++ b/src/components/left/search/LeftSearch.scss @@ -11,7 +11,7 @@ flex: 1; } - .TabList { + .SquareTabList { z-index: 1; } diff --git a/src/components/left/search/LeftSearch.tsx b/src/components/left/search/LeftSearch.tsx index 76d30e7c2..b028cc029 100644 --- a/src/components/left/search/LeftSearch.tsx +++ b/src/components/left/search/LeftSearch.tsx @@ -21,7 +21,7 @@ import useKeyboardListNavigation from '../../../hooks/useKeyboardListNavigation' import useLang from '../../../hooks/useLang'; import useLastCallback from '../../../hooks/useLastCallback'; -import TabList from '../../ui/TabList'; +import SquareTabList from '../../ui/SquareTabList'; import Transition from '../../ui/Transition'; import AudioResults from './AudioResults'; import BotAppResults from './BotAppResults'; @@ -122,7 +122,7 @@ const LeftSearch: FC = ({ return (
- + = ({ blockUser, } = getActions(); - const lang = useOldLang(); + const lang = useLang(); const [search, setSearch] = useState(''); useEffect(() => { @@ -76,7 +76,8 @@ const BlockUserModal: FC = ({ = ({ requestedAttachBotInChat, }) => { const { cancelAttachBotInChat, callAttachBot } = getActions(); - const lang = useOldLang(); + const lang = useLang(); const isOpen = Boolean(requestedAttachBotInChat); const [isShown, markIsShown, unmarkIsShown] = useFlag(); @@ -41,6 +41,7 @@ const AttachBotRecipientPicker: FC = ({ return ( = ({ resetOpenChatWithDraft, } = getActions(); - const lang = useOldLang(); + const lang = useLang(); const [isShown, markIsShown, unmarkIsShown] = useFlag(); useEffect(() => { @@ -54,7 +54,8 @@ const DraftRecipientPicker: FC = ({ return ( = ({ @@ -37,26 +56,80 @@ const ForwardRecipientPicker: FC = ({ isManyMessages, isStory, isForwarding, + fromChatId, + forwardMessageIds, + shouldPaidMessageAutoApprove, }) => { const { openChatOrTopicWithReplyInDraft, setForwardChatOrTopic, exitForwardMode, forwardToSavedMessages, + forwardToMultipleChats, forwardStory, showNotification, + copyMessageLink, + openStarsBalanceModal, + setPaidMessageAutoApprove, } = getActions(); - const lang = useOldLang(); + const lang = useLang(); + const oldLang = useOldLang(); const renderingIsStory = usePreviousDeprecated(isStory, true); const [isShown, markIsShown, unmarkIsShown] = useFlag(); + const [selectedIds, setSelectedIds] = useState([]); + const [caption, setCaption] = useState(''); + const [isPaymentConfirmOpen, openPaymentConfirm, closePaymentConfirm] = useFlag(); + const [shouldAutoApprove, setShouldAutoApprove] = useState(shouldPaidMessageAutoApprove); + + const isMultiSelect = isForwarding && !isStory; + const messageCount = forwardMessageIds?.length || 0; + + const paidChatsInfo = useMemo(() => { + if (!selectedIds.length) return { paidChatsCount: 0, totalStars: 0, totalMessages: 0 }; + + const global = getGlobal(); + let paidChatsCount = 0; + let totalStars = 0; + const hasCaption = caption.trim().length > 0; + const totalMessages = messageCount + (hasCaption ? 1 : 0); + + for (const chatId of selectedIds) { + const paidStars = selectPeerPaidMessagesStars(global, chatId); + if (paidStars) { + paidChatsCount++; + totalStars += paidStars * totalMessages; + } + } + + return { paidChatsCount, totalStars, totalMessages }; + }, [selectedIds, messageCount, caption]); + + const canCopyLink = useMemo(() => { + if (!fromChatId || forwardMessageIds?.length !== 1) return false; + + const global = getGlobal(); + const chatMessages = selectChatMessages(global, fromChatId); + if (!chatMessages) return false; + + const message = chatMessages[forwardMessageIds[0]]; + return message && selectCanCopyMessageLink(global, message); + }, [fromChatId, forwardMessageIds]); + useEffect(() => { if (isOpen) { markIsShown(); } }, [isOpen, markIsShown]); + useEffect(() => { + if (!isOpen) { + setSelectedIds([]); + setCaption(''); + } + }, [isOpen]); + const handleSelectRecipient = useCallback((recipientId: string, threadId?: ThreadId) => { const isSelf = recipientId === currentUserId; if (isStory) { @@ -65,8 +138,8 @@ const ForwardRecipientPicker: FC = ({ if (isUserId(recipientId)) { showNotification({ message: isSelf - ? lang('Conversation.StoryForwardTooltip.SavedMessages.One') - : lang( + ? oldLang('Conversation.StoryForwardTooltip.SavedMessages.One') + : oldLang( 'StorySharedTo', getUserFirstOrLastName(selectUser(global, recipientId)), ), @@ -76,14 +149,14 @@ const ForwardRecipientPicker: FC = ({ if (!chat) return; showNotification({ - message: lang('StorySharedTo', getChatTitle(lang, chat)), + message: oldLang('StorySharedTo', getChatTitle(oldLang, chat)), }); } return; } if (isSelf) { - const message = lang( + const message = oldLang( isManyMessages ? 'Conversation.ForwardTooltip.SavedMessages.Many' : 'Conversation.ForwardTooltip.SavedMessages.One', @@ -100,37 +173,239 @@ const ForwardRecipientPicker: FC = ({ openChatOrTopicWithReplyInDraft({ chatId, topicId }); } } - }, [currentUserId, isManyMessages, isStory, lang, isForwarding]); + }, [currentUserId, isManyMessages, isStory, oldLang, isForwarding]); const handleClose = useCallback(() => { exitForwardMode(); }, [exitForwardMode]); + const handleSelectedIdsChange = useLastCallback((ids: string[]) => { + setSelectedIds(ids); + }); + + const handleCopyLink = useLastCallback(() => { + if (!fromChatId || !forwardMessageIds?.length) return; + copyMessageLink({ + chatId: fromChatId, + messageId: forwardMessageIds[0], + }); + exitForwardMode(); + }); + + const handleForwardToMultiple = useLastCallback(() => { + if (!selectedIds.length) return; + + if (selectedIds.length === 1) { + setForwardChatOrTopic({ chatId: selectedIds[0] }); + return; + } + + if (paidChatsInfo.totalStars > 0 && !shouldPaidMessageAutoApprove) { + openPaymentConfirm(); + return; + } + + if (paidChatsInfo.totalStars > 0) { + const starsBalance = getGlobal().stars?.balance?.amount || 0; + if (paidChatsInfo.totalStars > starsBalance) { + openStarsBalanceModal({ + topup: { + balanceNeeded: paidChatsInfo.totalStars, + }, + }); + return; + } + } + + executeForward(); + }); + + const executeForward = useLastCallback(() => { + forwardToMultipleChats({ toChatIds: selectedIds, comment: caption || undefined }); + + showNotification({ + message: lang('FwdMessagesToChats', { count: selectedIds.length }, { pluralValue: selectedIds.length }), + }); + exitForwardMode(); + }); + + const handlePaymentConfirm = useLastCallback(() => { + const { totalStars } = paidChatsInfo; + const starsBalance = getGlobal().stars?.balance?.amount || 0; + + if (totalStars > starsBalance) { + openStarsBalanceModal({ + topup: { + balanceNeeded: totalStars, + }, + }); + return; + } + + closePaymentConfirm(); + if (shouldAutoApprove) { + setPaidMessageAutoApprove(); + } + executeForward(); + }); + + const viewportFooter = useMemo(() => ( +
+ ), []); + + const selectedCount = selectedIds.length; + const showComposer = selectedCount >= 2; + const { totalStars: displayedTotalStars } = useFrozenProps( + { totalStars: paidChatsInfo.totalStars }, + !showComposer, + ); + + const footerContent = useMemo(() => { + if (!isForwarding || isStory) return undefined; + + const renderButton = () => { + const isInitial = selectedCount === 0; + const singleChatStars = selectedCount === 1 ? paidChatsInfo.totalStars : 0; + + return ( + + ); + }; + + const renderComposer = () => ( +
+
+ setCaption(e.currentTarget.value)} + placeholder={lang('AttachmentCaptionPlaceholder')} + /> + +
+
+ ); + + return ( +
+
+ {renderButton()} +
+
+ {renderComposer()} +
+
+ ); + }, [isForwarding, isStory, selectedCount, showComposer, caption, canCopyLink, displayedTotalStars, + paidChatsInfo, handleForwardToMultiple, handleCopyLink, lang, oldLang]); + if (!isOpen && !isShown) { return undefined; } + const confirmPaymentMessage = paidChatsInfo.totalStars > 0 ? lang( + 'ForwardPaidChatsConfirmation', + { + chatsSelected: lang( + 'ForwardPaidChatsSelected', + { paidChatsCount: paidChatsInfo.paidChatsCount }, + { withNodes: true, withMarkdown: true, pluralValue: paidChatsInfo.paidChatsCount }, + ), + payConfirmation: lang( + 'ForwardPaidChatsPayConfirmation', + { + totalAmount: formatStarsAsText(lang, paidChatsInfo.totalStars), + count: paidChatsInfo.totalMessages, + }, + { withNodes: true, withMarkdown: true, pluralValue: paidChatsInfo.totalMessages }, + ), + }, + { withNodes: true }, + ) : undefined; + + const confirmLabel = lang('PayForMessage', { count: paidChatsInfo.totalMessages }, { + withNodes: true, + pluralValue: paidChatsInfo.totalMessages, + }); + return ( - + <> + + + {confirmPaymentMessage} + + + ); }; export default memo(withGlobal((global): Complete => { - const { messageIds, storyId } = selectTabState(global).forwardMessages; + const { messageIds, storyId, fromChatId } = selectTabState(global).forwardMessages; const isForwarding = (messageIds && messageIds.length > 0); + return { currentUserId: global.currentUserId, isManyMessages: (messageIds?.length || 0) > 1, isStory: Boolean(storyId), isForwarding, + fromChatId, + forwardMessageIds: messageIds, + shouldPaidMessageAutoApprove: global.settings.byKey.shouldPaidMessageAutoApprove, }; })(ForwardRecipientPicker)); diff --git a/src/components/middle/composer/AttachmentModal.module.scss b/src/components/middle/composer/AttachmentModal.module.scss index aa828a289..7a1c36c14 100644 --- a/src/components/middle/composer/AttachmentModal.module.scss +++ b/src/components/middle/composer/AttachmentModal.module.scss @@ -4,13 +4,15 @@ :global { .modal-dialog { max-width: 26.25rem; + border-radius: 2.5rem; + background-color: var(--color-background-secondary); @media (max-width: 600px) { max-height: 100%; } } - .modal-header-condensed { + .modal-header-condensed-wide { border-bottom: 1px solid transparent; transition: border-color 250ms ease-in-out; } @@ -32,15 +34,16 @@ flex-shrink: 0; align-self: flex-end; - width: 3.5rem !important; - height: 3.5rem !important; + width: 3rem !important; + height: 3rem !important; padding: 0 !important; background: none !important; } .symbol-menu-button, .mobile-symbol-menu-button { - margin-right: -1.75rem; + align-self: center; + margin-right: -1.5rem; margin-left: -0.25rem !important; color: var(--color-composer-button); } @@ -59,12 +62,8 @@ &.mobile :global { .modal-dialog { - align-self: end; - max-width: 100% !important; margin: 0; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; } } @@ -80,37 +79,49 @@ transform: translate3d(0, calc((var(--symbol-menu-height) - env(safe-area-inset-bottom)) * -1), 0); } } - - &.header-border :global(.modal-header-condensed) { - border-bottom-color: var(--color-borders); - } } .attachments { + scrollbar-width: none; + overflow: auto; display: flex; flex-shrink: 1; flex-wrap: wrap; - gap: 0.5rem; + gap: 0.125rem; min-height: 5rem; max-height: 26rem; - margin: 0 0.25rem; - padding: 0 0.25rem; + margin: 0 1rem; + border-radius: 1.5rem; + + &::-webkit-scrollbar { + display: none; + } + + &.asFile { + gap: 0; + padding-block: 0.5rem; + background-color: var(--color-background); + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.05); + } @media (max-width: 600px) { max-height: 80vh; } } -.attachments-bottom-padding { - padding-bottom: 0.5rem; -} - .caption-wrapper { position: relative; - padding: 0 0.5rem; - border-top: 1px solid transparent; + + margin: 1rem; + padding: 0 0.25rem; + padding-inline-start: 0.5rem; + border-radius: 1.5rem; + + background-color: var(--color-background); + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.05); + transition: border-color 250ms ease-in-out; :global { @@ -147,13 +158,14 @@ position: absolute; z-index: 2; - left: 0.5rem; + left: 1rem; overflow: visible !important; - width: calc(100% - 1rem); - height: calc(100% - 0.5rem); - padding-top: 0.5rem; + width: calc(100% - 2rem); + height: calc(100% - 1.125rem); + padding-top: 0.0625rem; + border-radius: 0.25rem; opacity: 0; background-color: var(--color-background); @@ -207,12 +219,20 @@ .send-wrapper { position: relative; - align-self: flex-end; - padding-bottom: 0.5rem; } .send { - padding: 0 1rem !important; + display: flex; + + height: 2.625rem; + padding: 0 1.0625rem !important; + border-radius: 1.375rem; + + font-size: 1rem; +} + +.sendIcon { + font-size: 2rem; } :global { diff --git a/src/components/middle/composer/AttachmentModal.tsx b/src/components/middle/composer/AttachmentModal.tsx index 3310df42d..5a14a2c66 100644 --- a/src/components/middle/composer/AttachmentModal.tsx +++ b/src/components/middle/composer/AttachmentModal.tsx @@ -9,7 +9,6 @@ import type { Signal } from '../../../util/signals'; import { BASE_EMOJI_KEYWORD_LANG, EDITABLE_INPUT_MODAL_ID, - GIF_MIME_TYPE, SUPPORTED_AUDIO_CONTENT_TYPES, SUPPORTED_PHOTO_CONTENT_TYPES, SUPPORTED_VIDEO_CONTENT_TYPES, @@ -39,7 +38,6 @@ import useLang from '../../../hooks/useLang'; import useLastCallback from '../../../hooks/useLastCallback'; import usePreviousDeprecated from '../../../hooks/usePreviousDeprecated'; import useResizeObserver from '../../../hooks/useResizeObserver'; -import useScrolledState from '../../../hooks/useScrolledState'; import useCustomEmojiTooltip from './hooks/useCustomEmojiTooltip'; import useEmojiTooltip from './hooks/useEmojiTooltip'; import useMentionTooltip from './hooks/useMentionTooltip'; @@ -197,14 +195,6 @@ const AttachmentModal = ({ ); const [renderingShouldSendInHighQuality, setRenderingShouldSendInHighQuality] = useState(shouldSendInHighQuality); - const { - handleScroll: handleAttachmentsScroll, - isAtBeginning: areAttachmentsNotScrolled, - isAtEnd: areAttachmentsScrolledToBottom, - } = useScrolledState(); - - const { handleScroll: handleCaptionScroll, isAtBeginning: isCaptionNotScrolled } = useScrolledState(); - const isOpen = Boolean(attachments.length); const renderingIsOpen = Boolean(renderingAttachments?.length); const [isHovered, markHovered, unmarkHovered] = useFlag(); @@ -520,14 +510,13 @@ const AttachmentModal = ({ const isQuickGallery = isSendingCompressed && hasOnlyMedia; const { - areAllPhotos, areAllVideos, areAllAudios, areAllGifs, hasAnyPhoto, + areAllPhotos, areAllVideos, areAllAudios, hasAnyPhoto, } = useMemo(() => { if (!isQuickGallery || !renderingAttachments) { return { areAllPhotos: false, areAllVideos: false, areAllAudios: false, - areAllGifs: false, hasAnyPhoto: false, }; } @@ -535,7 +524,6 @@ const AttachmentModal = ({ areAllPhotos: renderingAttachments.every((a) => SUPPORTED_PHOTO_CONTENT_TYPES.has(a.mimeType)), areAllVideos: renderingAttachments.every((a) => SUPPORTED_VIDEO_CONTENT_TYPES.has(a.mimeType)), areAllAudios: renderingAttachments.every((a) => SUPPORTED_AUDIO_CONTENT_TYPES.has(a.mimeType)), - areAllGifs: renderingAttachments.every((a) => a.gif || a.mimeType === GIF_MIME_TYPE), hasAnyPhoto: renderingAttachments.some((a) => SUPPORTED_PHOTO_CONTENT_TYPES.has(a.mimeType)), }; }, [renderingAttachments, isQuickGallery]); @@ -575,10 +563,7 @@ const AttachmentModal = ({ let title = ''; const attachmentsLength = renderingAttachments.length; - - if (areAllGifs) { - title = lang(isEditing ? 'AttachmentReplaceGif' : 'AttachmentSendGif'); - } else if (areAllPhotos) { + if (areAllPhotos) { title = lang( `Attachment${isEditing ? 'Replace' : 'Send'}Photo`, { count: attachmentsLength }, @@ -610,7 +595,7 @@ const AttachmentModal = ({ } return ( -
+
{canShowCustomSendMenu && ( { + const lang = useLang(); const { isMobile } = useAppLayout(); const displayType = getDisplayType(attachment, shouldDisplayCompressed); @@ -82,15 +84,16 @@ const AttachmentModalItem = ({ ); default: { const canEdit = SUPPORTED_PHOTO_CONTENT_TYPES.has(attachment.mimeType) && !isMobile; + const isPhoto = SUPPORTED_PHOTO_CONTENT_TYPES.has(attachment.mimeType); return ( <> @@ -117,7 +120,7 @@ const AttachmentModalItem = ({ ); return ( -
+
{content} { onClose={handleClose} > {renderHeader()} - = ({ <>
- {renderContent()} - +
)} diff --git a/src/components/right/hooks/useProfileState.ts b/src/components/right/hooks/useProfileState.ts index 0a058d5ed..8dacdabaa 100644 --- a/src/components/right/hooks/useProfileState.ts +++ b/src/components/right/hooks/useProfileState.ts @@ -37,7 +37,7 @@ export default function useProfileState({ useEffectWithPrevDeps(([prevTabType]) => { if ((prevTabType && prevTabType !== tabType && allowAutoScrollToTabs) || (tabType && forceScrollProfileTab)) { const container = containerRef.current!; - const tabsEl = container.querySelector('.TabList')!; + const tabsEl = container.querySelector('.SquareTabList')!; handleStopAutoScrollToTabs(); if (container.scrollTop < tabsEl.offsetTop) { onProfileStateChange(getStateFromTabType(tabType)); @@ -69,7 +69,7 @@ export default function useProfileState({ return; } - const tabListEl = container.querySelector('.TabList'); + const tabListEl = container.querySelector('.SquareTabList'); if (!tabListEl || tabListEl.offsetTop > container.scrollTop) { return; } @@ -94,7 +94,7 @@ export default function useProfileState({ return; } - const tabListEl = container.querySelector('.TabList'); + const tabListEl = container.querySelector('.SquareTabList'); if (!tabListEl) { return; } diff --git a/src/components/right/hooks/useTransitionFixes.ts b/src/components/right/hooks/useTransitionFixes.ts index 7748265ff..575aa2f0b 100644 --- a/src/components/right/hooks/useTransitionFixes.ts +++ b/src/components/right/hooks/useTransitionFixes.ts @@ -12,7 +12,7 @@ export default function useTransitionFixes( function setMinHeight() { const container = containerRef.current!; const transitionEl = container.querySelector(transitionElSelector); - const tabsEl = container.querySelector('.TabList'); + const tabsEl = container.querySelector('.SquareTabList'); if (transitionEl && tabsEl) { const newHeight = container.clientHeight - tabsEl.offsetHeight; diff --git a/src/components/right/management/RemoveGroupUserModal.tsx b/src/components/right/management/RemoveGroupUserModal.tsx index b9a1d5540..255b7b105 100644 --- a/src/components/right/management/RemoveGroupUserModal.tsx +++ b/src/components/right/management/RemoveGroupUserModal.tsx @@ -9,8 +9,8 @@ import type { ApiChat, ApiChatMember } from '../../../api/types'; import { filterPeersByQuery } from '../../../global/helpers/peers'; import { selectChatFullInfo } from '../../../global/selectors'; +import useLang from '../../../hooks/useLang'; import useLastCallback from '../../../hooks/useLastCallback'; -import useOldLang from '../../../hooks/useOldLang'; import ChatOrUserPicker from '../../common/pickers/ChatOrUserPicker'; @@ -37,7 +37,7 @@ const RemoveGroupUserModal: FC = ({ deleteChatMember, } = getActions(); - const lang = useOldLang(); + const lang = useLang(); const [search, setSearch] = useState(''); const usersId = useMemo(() => { @@ -65,7 +65,8 @@ const RemoveGroupUserModal: FC = ({ {renderContent()} - +
) : ( <> diff --git a/src/components/ui/Modal.scss b/src/components/ui/Modal.scss index 16c2de449..ba919b405 100644 --- a/src/components/ui/Modal.scss +++ b/src/components/ui/Modal.scss @@ -145,11 +145,11 @@ } } + .modal-header-condensed-wide, .modal-header-condensed { @extend %modal-header; min-height: 3.5rem; - padding: 0.375rem 0.75rem !important; .modal-action-button { width: auto; @@ -175,6 +175,19 @@ } } + .modal-header-condensed { + padding: 0.375rem 0.75rem !important; + } + + .modal-header-condensed-wide { + padding: 0.375rem 1.375rem !important; + .modal-title { + &:not(:only-child) { + margin: 0 1.375rem; + } + } + } + .modal-content { overflow-y: auto; flex-grow: 1; diff --git a/src/components/ui/Modal.tsx b/src/components/ui/Modal.tsx index 559d62092..fe9d7264f 100644 --- a/src/components/ui/Modal.tsx +++ b/src/components/ui/Modal.tsx @@ -38,6 +38,7 @@ export type OwnProps = { hasCloseButton?: boolean; hasAbsoluteCloseButton?: boolean; absoluteCloseButtonColor?: ButtonProps['color']; + isBackButton?: boolean; noBackdrop?: boolean; noBackdropClose?: boolean; children: React.ReactNode; @@ -91,6 +92,7 @@ const Modal = (props: OwnProps) => { hasCloseButton, hasAbsoluteCloseButton, absoluteCloseButtonColor = 'translucent', + isBackButton, noBackdrop, style, dialogStyle, @@ -176,16 +178,22 @@ const Modal = (props: OwnProps) => { return header; } + const closeIconClassName = buildClassName( + 'animated-close-icon', + isBackButton && 'state-back', + ); + const closeButton = withCloseButton ? ( ) : undefined; return title ? ( diff --git a/src/components/ui/TabList.scss b/src/components/ui/SquareTabList.scss similarity index 97% rename from src/components/ui/TabList.scss rename to src/components/ui/SquareTabList.scss index 957191be2..7eaeadfd0 100644 --- a/src/components/ui/TabList.scss +++ b/src/components/ui/SquareTabList.scss @@ -1,4 +1,4 @@ -.TabList { +.SquareTabList { scrollbar-color: rgba(0, 0, 0, 0); scrollbar-width: none; diff --git a/src/components/ui/SquareTabList.tsx b/src/components/ui/SquareTabList.tsx new file mode 100644 index 000000000..3f1ebe2a0 --- /dev/null +++ b/src/components/ui/SquareTabList.tsx @@ -0,0 +1,111 @@ +import type { ElementRef, TeactNode } from '../../lib/teact/teact'; +import { memo, useEffect, useRef } from '../../lib/teact/teact'; + +import type { ApiMessageEntityCustomEmoji } from '../../api/types'; +import type { MenuItemContextAction } from './ListItem'; + +import animateHorizontalScroll from '../../util/animateHorizontalScroll'; +import { IS_ANDROID, IS_IOS } from '../../util/browser/windowEnvironment'; +import buildClassName from '../../util/buildClassName'; + +import useHorizontalScroll from '../../hooks/useHorizontalScroll'; +import useLang from '../../hooks/useLang'; +import usePreviousDeprecated from '../../hooks/usePreviousDeprecated'; + +import Tab from './Tab'; + +import './SquareTabList.scss'; + +export type TabWithProperties = { + id?: number; + title: TeactNode; + badgeCount?: number; + isBlocked?: boolean; + isBadgeActive?: boolean; + contextActions?: MenuItemContextAction[]; + emoticon?: string | ApiMessageEntityCustomEmoji; + noTitleAnimations?: boolean; +}; + +type OwnProps = { + tabs: readonly TabWithProperties[]; + activeTab: number; + className?: string; + tabClassName?: string; + contextRootElementSelector?: string; + ref?: ElementRef; + onSwitchTab: (index: number) => void; +}; + +const TAB_SCROLL_THRESHOLD_PX = 16; +// Should match duration from `--slide-transition` CSS variable +const SCROLL_DURATION = IS_IOS ? 450 : IS_ANDROID ? 400 : 300; + +const SquareTabList = ({ + tabs, + activeTab, + className, + tabClassName, + contextRootElementSelector, + ref, + onSwitchTab, +}: OwnProps) => { + const internalRef = useRef(); + const containerRef = ref || internalRef; + const previousActiveTab = usePreviousDeprecated(activeTab); + + const lang = useLang(); + + useHorizontalScroll(containerRef, undefined, true); + + // Scroll container to place active tab in the center + useEffect(() => { + const container = containerRef.current!; + const { scrollWidth, offsetWidth, scrollLeft } = container; + if (scrollWidth <= offsetWidth) { + return; + } + + const activeTabElement = container.childNodes[activeTab] as HTMLElement | null; + if (!activeTabElement) { + return; + } + + const { offsetLeft: activeTabOffsetLeft, offsetWidth: activeTabOffsetWidth } = activeTabElement; + const newLeft = activeTabOffsetLeft - (offsetWidth / 2) + (activeTabOffsetWidth / 2); + + // Prevent scrolling by only a couple of pixels, which doesn't look smooth + if (Math.abs(newLeft - scrollLeft) < TAB_SCROLL_THRESHOLD_PX) { + return; + } + + animateHorizontalScroll(container, newLeft, SCROLL_DURATION); + }, [activeTab, containerRef]); + + return ( +
+ {tabs.map((tab, i) => ( + + ))} +
+ ); +}; + +export default memo(SquareTabList); diff --git a/src/components/ui/TabList.module.scss b/src/components/ui/TabList.module.scss new file mode 100644 index 000000000..9a970f259 --- /dev/null +++ b/src/components/ui/TabList.module.scss @@ -0,0 +1,85 @@ +.container, +.activeIndicator { + display: flex; + flex-shrink: 0; + flex-wrap: nowrap; + align-items: center; + + padding-block: 0.375rem; + padding-inline: 0.25rem; +} + +.container { + user-select: none; + scrollbar-width: none; + + position: relative; + + overflow-x: auto; + + border-radius: 1.5rem; + + opacity: 0; + background-color: var(--color-background); + box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.05); + + transition: opacity 150ms; + + &::-webkit-scrollbar { + display: none; + } + + &.ready { + opacity: 1; + } +} + +.activeIndicator { + will-change: clip-path; + + isolation: isolate; + position: absolute; + z-index: 1; + top: 0; + right: 0; + bottom: 0; + left: 0; + + contain: layout style paint; + overflow: hidden; + + width: fit-content; + + background-color: var(--color-primary-opacity); + + transition: clip-path var(--slide-transition); +} + +.tab { + cursor: var(--custom-cursor, pointer); + + display: flex; + flex-shrink: 0; + gap: 0.25rem; + align-items: center; + + padding: 0.375rem 1rem; + border-radius: 1.25rem; + + font-size: 1rem; + font-weight: var(--font-weight-medium); + color: var(--color-text-secondary); + white-space: nowrap; + + &:hover { + opacity: 0.85; + } + + .activeIndicator & { + color: var(--color-primary); + } +} + +.lockIcon { + font-size: 0.875rem; +} diff --git a/src/components/ui/TabList.tsx b/src/components/ui/TabList.tsx index 4652efe9e..7337bf3b5 100644 --- a/src/components/ui/TabList.tsx +++ b/src/components/ui/TabList.tsx @@ -1,111 +1,90 @@ -import type { ElementRef, TeactNode } from '../../lib/teact/teact'; -import { memo, useEffect, useRef } from '../../lib/teact/teact'; +import { memo, useEffect, useRef, useState } from '../../lib/teact/teact'; -import type { ApiMessageEntityCustomEmoji } from '../../api/types'; -import type { MenuItemContextAction } from './ListItem'; +import type { TabWithProperties } from './SquareTabList'; + +export type { TabWithProperties }; -import animateHorizontalScroll from '../../util/animateHorizontalScroll'; -import { IS_ANDROID, IS_IOS } from '../../util/browser/windowEnvironment'; import buildClassName from '../../util/buildClassName'; import useHorizontalScroll from '../../hooks/useHorizontalScroll'; -import useLang from '../../hooks/useLang'; -import usePreviousDeprecated from '../../hooks/usePreviousDeprecated'; +import useLastCallback from '../../hooks/useLastCallback'; +import useResizeObserver from '../../hooks/useResizeObserver'; -import Tab from './Tab'; +import Icon from '../common/icons/Icon'; -import './TabList.scss'; - -export type TabWithProperties = { - id?: number; - title: TeactNode; - badgeCount?: number; - isBlocked?: boolean; - isBadgeActive?: boolean; - contextActions?: MenuItemContextAction[]; - emoticon?: string | ApiMessageEntityCustomEmoji; - noTitleAnimations?: boolean; -}; +import styles from './TabList.module.scss'; type OwnProps = { tabs: readonly TabWithProperties[]; activeTab: number; className?: string; - tabClassName?: string; - contextRootElementSelector?: string; - ref?: ElementRef; onSwitchTab: (index: number) => void; }; -const TAB_SCROLL_THRESHOLD_PX = 16; -// Should match duration from `--slide-transition` CSS variable -const SCROLL_DURATION = IS_IOS ? 450 : IS_ANDROID ? 400 : 300; - const TabList = ({ tabs, activeTab, className, - tabClassName, - contextRootElementSelector, - ref, onSwitchTab, }: OwnProps) => { - let containerRef = useRef(); - if (ref) { - containerRef = ref; - } - const previousActiveTab = usePreviousDeprecated(activeTab); + const containerRef = useRef(); + const clipPathContainerRef = useRef(); + const [clipPath, setClipPath] = useState(''); - const lang = useLang(); + useHorizontalScroll(containerRef, !tabs.length, true); - useHorizontalScroll(containerRef, undefined, true); + const updateClipPath = useLastCallback(() => { + const clipPathContainer = clipPathContainerRef.current; + const activeTabEl = activeTab >= 0 && clipPathContainer?.childNodes[activeTab] as HTMLElement | undefined; + + if (clipPathContainer && activeTabEl && clipPathContainer.offsetWidth > 0) { + const { offsetLeft, offsetWidth } = activeTabEl; + const containerWidth = clipPathContainer.offsetWidth; + const left = (offsetLeft / containerWidth * 100).toFixed(1); + const right = ((containerWidth - (offsetLeft + offsetWidth)) / containerWidth * 100).toFixed(1); + + setClipPath(`inset(0.25rem ${right}% 0.25rem ${left}% round 1.25rem)`); + } + }); - // Scroll container to place active tab in the center useEffect(() => { - const container = containerRef.current!; - const { scrollWidth, offsetWidth, scrollLeft } = container; - if (scrollWidth <= offsetWidth) { - return; - } + updateClipPath(); + }, [activeTab, tabs]); - const activeTabElement = container.childNodes[activeTab] as HTMLElement | null; - if (!activeTabElement) { - return; - } + useResizeObserver(clipPathContainerRef, updateClipPath); - const { offsetLeft: activeTabOffsetLeft, offsetWidth: activeTabOffsetWidth } = activeTabElement; - const newLeft = activeTabOffsetLeft - (offsetWidth / 2) + (activeTabOffsetWidth / 2); + const handleTabClick = useLastCallback((index: number) => { + onSwitchTab(index); + }); - // Prevent scrolling by only a couple of pixels, which doesn't look smooth - if (Math.abs(newLeft - scrollLeft) < TAB_SCROLL_THRESHOLD_PX) { - return; - } + if (!tabs.length) return undefined; - animateHorizontalScroll(container, newLeft, SCROLL_DURATION); - }, [activeTab]); + const renderTab = (tab: TabWithProperties, index: number) => ( +
handleTabClick(index)} + > + {tab.title} + {tab.isBlocked && } +
+ ); return (
- {tabs.map((tab, i) => ( - - ))} + {tabs.map(renderTab)} + +
+ {tabs.map(renderTab)} +
); }; diff --git a/src/components/ui/mediaEditor/MediaEditor.tsx b/src/components/ui/mediaEditor/MediaEditor.tsx index 93f4138c6..25c0b5bda 100644 --- a/src/components/ui/mediaEditor/MediaEditor.tsx +++ b/src/components/ui/mediaEditor/MediaEditor.tsx @@ -31,7 +31,7 @@ import Icon from '../../common/icons/Icon'; import Button from '../Button'; import FloatingActionButton from '../FloatingActionButton'; import Portal from '../Portal'; -import TabList from '../TabList'; +import SquareTabList from '../SquareTabList'; import Transition from '../Transition'; import CropOverlay from './CropOverlay'; import CropPanel from './CropPanel'; @@ -807,7 +807,7 @@ const MediaEditor = ({ > {renderPanelContent()} - { + const { toChatIds, comment, tabId = getCurrentTabId() } = payload; + + const { + fromChatId, messageIds, withMyScore, noAuthors, noCaptions, + } = selectTabState(global, tabId).forwardMessages; + + const fromChat = fromChatId ? selectChat(global, fromChatId) : undefined; + const isCurrentUserPremium = selectIsCurrentUserPremium(global); + + const messages = fromChatId && messageIds + ? messageIds + .sort((a, b) => a - b) + .map((id) => selectChatMessage(global, fromChatId, id)).filter(Boolean) + : undefined; + + if (!fromChat || !messages?.length) { + return; + } + + const [realMessages, serviceMessages] = partition(messages, (m) => !isServiceNotificationMessage(m)); + const forwardableRealMessages = realMessages.filter((message) => selectCanForwardMessage(global, message)); + + if (!forwardableRealMessages.length && !serviceMessages.length) { + return; + } + + for (const toChatId of toChatIds) { + const toChat = selectChat(global, toChatId); + if (!toChat) continue; + + forwardMessagesToChat({ + global, + fromChat, + toChat, + realMessages: forwardableRealMessages, + serviceMessages, + comment, + withMyScore, + noAuthors, + noCaptions, + isCurrentUserPremium, + }); + } + + global = updateTabState(global, { + forwardMessages: {}, + isShareMessageModalShown: false, + }, tabId); + + actions.exitMessageSelectMode({ tabId }); + + return global; +}); + addActionHandler('forwardStory', (global, actions, payload): ActionReturnType => { const { toChatId, tabId = getCurrentTabId() } = payload || {}; diff --git a/src/global/selectors/messages.ts b/src/global/selectors/messages.ts index 19ece30c9..d33994c14 100644 --- a/src/global/selectors/messages.ts +++ b/src/global/selectors/messages.ts @@ -692,6 +692,20 @@ export function selectAllowedMessageActionsSlow( }; } +export function selectCanCopyMessageLink( + global: T, message: ApiMessage, +) { + const chat = selectChat(global, message.chatId); + if (!chat || selectIsChatRestricted(global, message.chatId)) return false; + + const isLocal = isMessageLocal(message); + const isAction = isActionMessage(message); + const isChannel = isChatChannel(chat); + const isSuperGroup = isChatSuperGroup(chat); + + return !isLocal && !isAction && (isChannel || isSuperGroup) && !chat.isMonoforum; +} + export function selectCanDeleteMessages( global: T, chatId: string, diff --git a/src/global/types/actions.ts b/src/global/types/actions.ts index 282c8e1ca..f813d8c15 100644 --- a/src/global/types/actions.ts +++ b/src/global/types/actions.ts @@ -2023,6 +2023,10 @@ export interface ActionPayloads { } & WithTabId; exitForwardMode: WithTabId | undefined; changeRecipient: WithTabId | undefined; + forwardToMultipleChats: { + toChatIds: string[]; + comment?: string; + } & WithTabId; forwardToSavedMessages: { scheduledAt?: number; } & WithTabId; diff --git a/src/hooks/useFolderTabs.ts b/src/hooks/useFolderTabs.ts index 36d988e14..84f38a25a 100644 --- a/src/hooks/useFolderTabs.ts +++ b/src/hooks/useFolderTabs.ts @@ -3,7 +3,7 @@ import { getActions, getGlobal } from '../global'; import type { ApiMessageEntity, ApiMessageEntityCustomEmoji } from '../api/types'; import type { MenuItemContextAction } from '../components/ui/ListItem'; -import type { TabWithProperties } from '../components/ui/TabList'; +import type { TabWithProperties } from '../components/ui/SquareTabList'; import { type ApiChatFolder, type ApiChatlistExportedInvite, ApiMessageEntityTypes } from '../api/types'; import { SettingsScreens } from '../types'; diff --git a/src/styles/icons.css b/src/styles/icons.css index 1858b9d41..c672e4dec 100644 --- a/src/styles/icons.css +++ b/src/styles/icons.css @@ -3,8 +3,8 @@ font-weight: normal; font-style: normal; font-display: block; - src: url("./icons.woff2?4ca2ae9f8c7763ea420459de680c8340") format("woff2"), -url("./icons.woff?4ca2ae9f8c7763ea420459de680c8340") format("woff"); + src: url("./icons.woff2?711696a367cfec0ddfb1ac8f13f32988") format("woff2"), +url("./icons.woff?711696a367cfec0ddfb1ac8f13f32988") format("woff"); } .icon-char::before { @@ -444,564 +444,570 @@ url("./icons.woff?4ca2ae9f8c7763ea420459de680c8340") format("woff"); .icon-next-link::before { content: "\f18d"; } -.icon-new-chat-filled::before { +.icon-new-send::before { content: "\f18e"; } -.icon-my-notes::before { +.icon-new-chat-filled::before { content: "\f18f"; } -.icon-muted::before { +.icon-my-notes::before { content: "\f190"; } -.icon-mute::before { +.icon-muted::before { content: "\f191"; } -.icon-move-caption-up::before { +.icon-mute::before { content: "\f192"; } -.icon-move-caption-down::before { +.icon-move-caption-up::before { content: "\f193"; } -.icon-more::before { +.icon-move-caption-down::before { content: "\f194"; } -.icon-more-circle::before { +.icon-more::before { content: "\f195"; } -.icon-monospace::before { +.icon-more-circle::before { content: "\f196"; } -.icon-microphone::before { +.icon-monospace::before { content: "\f197"; } -.icon-microphone-alt::before { +.icon-microphone::before { content: "\f198"; } -.icon-message::before { +.icon-microphone-alt::before { content: "\f199"; } -.icon-message-succeeded::before { +.icon-message::before { content: "\f19a"; } -.icon-message-read::before { +.icon-message-succeeded::before { content: "\f19b"; } -.icon-message-pending::before { +.icon-message-read::before { content: "\f19c"; } -.icon-message-failed::before { +.icon-message-pending::before { content: "\f19d"; } -.icon-menu::before { +.icon-message-failed::before { content: "\f19e"; } -.icon-mention::before { +.icon-menu::before { content: "\f19f"; } -.icon-loop::before { +.icon-mention::before { content: "\f1a0"; } -.icon-logout::before { +.icon-loop::before { content: "\f1a1"; } -.icon-lock::before { +.icon-logout::before { content: "\f1a2"; } -.icon-lock-badge::before { +.icon-lock::before { content: "\f1a3"; } -.icon-location::before { +.icon-lock-badge::before { content: "\f1a4"; } -.icon-link::before { +.icon-location::before { content: "\f1a5"; } -.icon-link-broken::before { +.icon-link::before { content: "\f1a6"; } -.icon-link-badge::before { +.icon-link-broken::before { content: "\f1a7"; } -.icon-large-play::before { +.icon-link-badge::before { content: "\f1a8"; } -.icon-large-pause::before { +.icon-large-play::before { content: "\f1a9"; } -.icon-language::before { +.icon-large-pause::before { content: "\f1aa"; } -.icon-lamp::before { +.icon-language::before { content: "\f1ab"; } -.icon-keyboard::before { +.icon-lamp::before { content: "\f1ac"; } -.icon-key::before { +.icon-keyboard::before { content: "\f1ad"; } -.icon-italic::before { +.icon-key::before { content: "\f1ae"; } -.icon-install::before { +.icon-italic::before { content: "\f1af"; } -.icon-info::before { +.icon-install::before { content: "\f1b0"; } -.icon-info-filled::before { +.icon-info::before { content: "\f1b1"; } -.icon-help::before { +.icon-info-filled::before { content: "\f1b2"; } -.icon-heart::before { +.icon-help::before { content: "\f1b3"; } -.icon-heart-outline::before { +.icon-heart::before { content: "\f1b4"; } -.icon-hd-photo::before { +.icon-heart-outline::before { content: "\f1b5"; } -.icon-hashtag::before { +.icon-hd-photo::before { content: "\f1b6"; } -.icon-hand-stop::before { +.icon-hashtag::before { content: "\f1b7"; } -.icon-hand-stop-filled::before { +.icon-hand-stop::before { content: "\f1b8"; } -.icon-grouped::before { +.icon-hand-stop-filled::before { content: "\f1b9"; } -.icon-grouped-disable::before { +.icon-grouped::before { content: "\f1ba"; } -.icon-group::before { +.icon-grouped-disable::before { content: "\f1bb"; } -.icon-group-filled::before { +.icon-group::before { content: "\f1bc"; } -.icon-gift::before { +.icon-group-filled::before { content: "\f1bd"; } -.icon-gift-transfer-inline::before { +.icon-gift::before { content: "\f1be"; } -.icon-gifs::before { +.icon-gift-transfer-inline::before { content: "\f1bf"; } -.icon-fullscreen::before { +.icon-gifs::before { content: "\f1c0"; } -.icon-frozen-time::before { +.icon-fullscreen::before { content: "\f1c1"; } -.icon-fragment::before { +.icon-frozen-time::before { content: "\f1c2"; } -.icon-forward::before { +.icon-fragment::before { content: "\f1c3"; } -.icon-forums::before { +.icon-forward::before { content: "\f1c4"; } -.icon-fontsize::before { +.icon-forums::before { content: "\f1c5"; } -.icon-folder::before { +.icon-fontsize::before { content: "\f1c6"; } -.icon-folder-badge::before { +.icon-folder::before { content: "\f1c7"; } -.icon-flip::before { +.icon-folder-badge::before { content: "\f1c8"; } -.icon-flag::before { +.icon-flip::before { content: "\f1c9"; } -.icon-file-badge::before { +.icon-flag::before { content: "\f1ca"; } -.icon-favorite::before { +.icon-file-badge::before { content: "\f1cb"; } -.icon-favorite-filled::before { +.icon-favorite::before { content: "\f1cc"; } -.icon-eye::before { +.icon-favorite-filled::before { content: "\f1cd"; } -.icon-eye-outline::before { +.icon-eye::before { content: "\f1ce"; } -.icon-eye-crossed::before { +.icon-eye-outline::before { content: "\f1cf"; } -.icon-eye-crossed-outline::before { +.icon-eye-crossed::before { content: "\f1d0"; } -.icon-expand::before { +.icon-eye-crossed-outline::before { content: "\f1d1"; } -.icon-expand-modal::before { +.icon-expand::before { content: "\f1d2"; } -.icon-enter::before { +.icon-expand-modal::before { content: "\f1d3"; } -.icon-email::before { +.icon-enter::before { content: "\f1d4"; } -.icon-edit::before { +.icon-email::before { content: "\f1d5"; } -.icon-eats::before { +.icon-edit::before { content: "\f1d6"; } -.icon-dropdown-arrows::before { +.icon-eats::before { content: "\f1d7"; } -.icon-download::before { +.icon-dropdown-arrows::before { content: "\f1d8"; } -.icon-down::before { +.icon-download::before { content: "\f1d9"; } -.icon-double-badge::before { +.icon-down::before { content: "\f1da"; } -.icon-document::before { +.icon-double-badge::before { content: "\f1db"; } -.icon-diamond::before { +.icon-document::before { content: "\f1dc"; } -.icon-delete::before { +.icon-diamond::before { content: "\f1dd"; } -.icon-delete-user::before { +.icon-delete::before { content: "\f1de"; } -.icon-delete-left::before { +.icon-delete-user::before { content: "\f1df"; } -.icon-delete-filled::before { +.icon-delete-left::before { content: "\f1e0"; } -.icon-data::before { +.icon-delete-filled::before { content: "\f1e1"; } -.icon-darkmode::before { +.icon-data::before { content: "\f1e2"; } -.icon-crown-wear::before { +.icon-darkmode::before { content: "\f1e3"; } -.icon-crown-wear-outline::before { +.icon-crown-wear::before { content: "\f1e4"; } -.icon-crown-take-off::before { +.icon-crown-wear-outline::before { content: "\f1e5"; } -.icon-crown-take-off-outline::before { +.icon-crown-take-off::before { content: "\f1e6"; } -.icon-crop::before { +.icon-crown-take-off-outline::before { content: "\f1e7"; } -.icon-craft::before { +.icon-crop::before { content: "\f1e8"; } -.icon-copy::before { +.icon-craft::before { content: "\f1e9"; } -.icon-copy-media::before { +.icon-copy::before { content: "\f1ea"; } -.icon-comments::before { +.icon-copy-media::before { content: "\f1eb"; } -.icon-comments-sticker::before { +.icon-comments::before { content: "\f1ec"; } -.icon-combine-craft::before { +.icon-comments-sticker::before { content: "\f1ed"; } -.icon-colorize::before { +.icon-combine-craft::before { content: "\f1ee"; } -.icon-collapse::before { +.icon-colorize::before { content: "\f1ef"; } -.icon-collapse-modal::before { +.icon-collapse::before { content: "\f1f0"; } -.icon-cloud-download::before { +.icon-collapse-modal::before { content: "\f1f1"; } -.icon-closed-gift::before { +.icon-cloud-download::before { content: "\f1f2"; } -.icon-close::before { +.icon-closed-gift::before { content: "\f1f3"; } -.icon-close-topic::before { +.icon-close::before { content: "\f1f4"; } -.icon-close-circle::before { +.icon-close-topic::before { content: "\f1f5"; } -.icon-clock::before { +.icon-close-circle::before { content: "\f1f6"; } -.icon-clock-edit::before { +.icon-clock::before { content: "\f1f7"; } -.icon-check::before { +.icon-clock-edit::before { content: "\f1f8"; } -.icon-chats-badge::before { +.icon-check::before { content: "\f1f9"; } -.icon-chat-badge::before { +.icon-check-bold::before { content: "\f1fa"; } -.icon-channelviews::before { +.icon-chats-badge::before { content: "\f1fb"; } -.icon-channel::before { +.icon-chat-badge::before { content: "\f1fc"; } -.icon-channel-filled::before { +.icon-channelviews::before { content: "\f1fd"; } -.icon-cash-circle::before { +.icon-channel::before { content: "\f1fe"; } -.icon-card::before { +.icon-channel-filled::before { content: "\f1ff"; } -.icon-car::before { +.icon-cash-circle::before { content: "\f200"; } -.icon-camera::before { +.icon-card::before { content: "\f201"; } -.icon-camera-add::before { +.icon-car::before { content: "\f202"; } -.icon-calendar::before { +.icon-camera::before { content: "\f203"; } -.icon-calendar-filter::before { +.icon-camera-add::before { content: "\f204"; } -.icon-bug::before { +.icon-calendar::before { content: "\f205"; } -.icon-brush::before { +.icon-calendar-filter::before { content: "\f206"; } -.icon-bots::before { +.icon-bug::before { content: "\f207"; } -.icon-bot-commands-filled::before { +.icon-brush::before { content: "\f208"; } -.icon-bot-command::before { +.icon-bots::before { content: "\f209"; } -.icon-boosts::before { +.icon-bot-commands-filled::before { content: "\f20a"; } -.icon-boostcircle::before { +.icon-bot-command::before { content: "\f20b"; } -.icon-boost::before { +.icon-boosts::before { content: "\f20c"; } -.icon-boost-outline::before { +.icon-boostcircle::before { content: "\f20d"; } -.icon-boost-craft-chance::before { +.icon-boost::before { content: "\f20e"; } -.icon-bold::before { +.icon-boost-outline::before { content: "\f20f"; } -.icon-avatar-saved-messages::before { +.icon-boost-craft-chance::before { content: "\f210"; } -.icon-avatar-deleted-account::before { +.icon-bold::before { content: "\f211"; } -.icon-avatar-archived-chats::before { +.icon-avatar-saved-messages::before { content: "\f212"; } -.icon-author-hidden::before { +.icon-avatar-deleted-account::before { content: "\f213"; } -.icon-auction::before { +.icon-avatar-archived-chats::before { content: "\f214"; } -.icon-auction-next-round::before { +.icon-author-hidden::before { content: "\f215"; } -.icon-auction-filled::before { +.icon-auction::before { content: "\f216"; } -.icon-auction-drop::before { +.icon-auction-next-round::before { content: "\f217"; } -.icon-attach::before { +.icon-auction-filled::before { content: "\f218"; } -.icon-ask-support::before { +.icon-auction-drop::before { content: "\f219"; } -.icon-arrow-right::before { +.icon-attach::before { content: "\f21a"; } -.icon-arrow-left::before { +.icon-ask-support::before { content: "\f21b"; } -.icon-arrow-down::before { +.icon-arrow-right::before { content: "\f21c"; } -.icon-arrow-down-circle::before { +.icon-arrow-left::before { content: "\f21d"; } -.icon-archive::before { +.icon-arrow-down::before { content: "\f21e"; } -.icon-archive-to-main::before { +.icon-arrow-down-circle::before { content: "\f21f"; } -.icon-archive-from-main::before { +.icon-archive::before { content: "\f220"; } -.icon-archive-filled::before { +.icon-archive-to-main::before { content: "\f221"; } -.icon-animations::before { +.icon-archive-from-main::before { content: "\f222"; } -.icon-animals::before { +.icon-archive-filled::before { content: "\f223"; } -.icon-allow-speak::before { +.icon-animations::before { content: "\f224"; } -.icon-allow-share::before { +.icon-animals::before { content: "\f225"; } -.icon-admin::before { +.icon-allow-speak::before { content: "\f226"; } -.icon-add::before { +.icon-allow-share::before { content: "\f227"; } -.icon-add-user::before { +.icon-admin::before { content: "\f228"; } -.icon-add-user-filled::before { +.icon-add::before { content: "\f229"; } -.icon-add-one-badge::before { +.icon-add-user::before { content: "\f22a"; } -.icon-add-filled::before { +.icon-add-user-filled::before { content: "\f22b"; } -.icon-add-caption::before { +.icon-add-one-badge::before { content: "\f22c"; } -.icon-active-sessions::before { +.icon-add-filled::before { content: "\f22d"; } -.icon-rating-icons-negative::before { +.icon-add-caption::before { content: "\f22e"; } -.icon-rating-icons-level90::before { +.icon-active-sessions::before { content: "\f22f"; } -.icon-rating-icons-level9::before { +.icon-rating-icons-negative::before { content: "\f230"; } -.icon-rating-icons-level80::before { +.icon-rating-icons-level90::before { content: "\f231"; } -.icon-rating-icons-level8::before { +.icon-rating-icons-level9::before { content: "\f232"; } -.icon-rating-icons-level70::before { +.icon-rating-icons-level80::before { content: "\f233"; } -.icon-rating-icons-level7::before { +.icon-rating-icons-level8::before { content: "\f234"; } -.icon-rating-icons-level60::before { +.icon-rating-icons-level70::before { content: "\f235"; } -.icon-rating-icons-level6::before { +.icon-rating-icons-level7::before { content: "\f236"; } -.icon-rating-icons-level50::before { +.icon-rating-icons-level60::before { content: "\f237"; } -.icon-rating-icons-level5::before { +.icon-rating-icons-level6::before { content: "\f238"; } -.icon-rating-icons-level40::before { +.icon-rating-icons-level50::before { content: "\f239"; } -.icon-rating-icons-level4::before { +.icon-rating-icons-level5::before { content: "\f23a"; } -.icon-rating-icons-level30::before { +.icon-rating-icons-level40::before { content: "\f23b"; } -.icon-rating-icons-level3::before { +.icon-rating-icons-level4::before { content: "\f23c"; } -.icon-rating-icons-level20::before { +.icon-rating-icons-level30::before { content: "\f23d"; } -.icon-rating-icons-level2::before { +.icon-rating-icons-level3::before { content: "\f23e"; } -.icon-rating-icons-level10::before { +.icon-rating-icons-level20::before { content: "\f23f"; } -.icon-rating-icons-level1::before { +.icon-rating-icons-level2::before { content: "\f240"; } -.icon-folder-tabs-user::before { +.icon-rating-icons-level10::before { content: "\f241"; } -.icon-folder-tabs-star::before { +.icon-rating-icons-level1::before { content: "\f242"; } -.icon-folder-tabs-group::before { +.icon-folder-tabs-user::before { content: "\f243"; } -.icon-folder-tabs-folder::before { +.icon-folder-tabs-star::before { content: "\f244"; } -.icon-folder-tabs-chats::before { +.icon-folder-tabs-group::before { content: "\f245"; } -.icon-folder-tabs-chat::before { +.icon-folder-tabs-folder::before { content: "\f246"; } -.icon-folder-tabs-channel::before { +.icon-folder-tabs-chats::before { content: "\f247"; } -.icon-folder-tabs-bot::before { +.icon-folder-tabs-chat::before { content: "\f248"; } +.icon-folder-tabs-channel::before { + content: "\f249"; +} +.icon-folder-tabs-bot::before { + content: "\f24a"; +} diff --git a/src/styles/icons.scss b/src/styles/icons.scss index 607781dfa..29f55cb11 100644 --- a/src/styles/icons.scss +++ b/src/styles/icons.scss @@ -157,191 +157,193 @@ $icons-map: ( "no-download": "\f18b", "next": "\f18c", "next-link": "\f18d", - "new-chat-filled": "\f18e", - "my-notes": "\f18f", - "muted": "\f190", - "mute": "\f191", - "move-caption-up": "\f192", - "move-caption-down": "\f193", - "more": "\f194", - "more-circle": "\f195", - "monospace": "\f196", - "microphone": "\f197", - "microphone-alt": "\f198", - "message": "\f199", - "message-succeeded": "\f19a", - "message-read": "\f19b", - "message-pending": "\f19c", - "message-failed": "\f19d", - "menu": "\f19e", - "mention": "\f19f", - "loop": "\f1a0", - "logout": "\f1a1", - "lock": "\f1a2", - "lock-badge": "\f1a3", - "location": "\f1a4", - "link": "\f1a5", - "link-broken": "\f1a6", - "link-badge": "\f1a7", - "large-play": "\f1a8", - "large-pause": "\f1a9", - "language": "\f1aa", - "lamp": "\f1ab", - "keyboard": "\f1ac", - "key": "\f1ad", - "italic": "\f1ae", - "install": "\f1af", - "info": "\f1b0", - "info-filled": "\f1b1", - "help": "\f1b2", - "heart": "\f1b3", - "heart-outline": "\f1b4", - "hd-photo": "\f1b5", - "hashtag": "\f1b6", - "hand-stop": "\f1b7", - "hand-stop-filled": "\f1b8", - "grouped": "\f1b9", - "grouped-disable": "\f1ba", - "group": "\f1bb", - "group-filled": "\f1bc", - "gift": "\f1bd", - "gift-transfer-inline": "\f1be", - "gifs": "\f1bf", - "fullscreen": "\f1c0", - "frozen-time": "\f1c1", - "fragment": "\f1c2", - "forward": "\f1c3", - "forums": "\f1c4", - "fontsize": "\f1c5", - "folder": "\f1c6", - "folder-badge": "\f1c7", - "flip": "\f1c8", - "flag": "\f1c9", - "file-badge": "\f1ca", - "favorite": "\f1cb", - "favorite-filled": "\f1cc", - "eye": "\f1cd", - "eye-outline": "\f1ce", - "eye-crossed": "\f1cf", - "eye-crossed-outline": "\f1d0", - "expand": "\f1d1", - "expand-modal": "\f1d2", - "enter": "\f1d3", - "email": "\f1d4", - "edit": "\f1d5", - "eats": "\f1d6", - "dropdown-arrows": "\f1d7", - "download": "\f1d8", - "down": "\f1d9", - "double-badge": "\f1da", - "document": "\f1db", - "diamond": "\f1dc", - "delete": "\f1dd", - "delete-user": "\f1de", - "delete-left": "\f1df", - "delete-filled": "\f1e0", - "data": "\f1e1", - "darkmode": "\f1e2", - "crown-wear": "\f1e3", - "crown-wear-outline": "\f1e4", - "crown-take-off": "\f1e5", - "crown-take-off-outline": "\f1e6", - "crop": "\f1e7", - "craft": "\f1e8", - "copy": "\f1e9", - "copy-media": "\f1ea", - "comments": "\f1eb", - "comments-sticker": "\f1ec", - "combine-craft": "\f1ed", - "colorize": "\f1ee", - "collapse": "\f1ef", - "collapse-modal": "\f1f0", - "cloud-download": "\f1f1", - "closed-gift": "\f1f2", - "close": "\f1f3", - "close-topic": "\f1f4", - "close-circle": "\f1f5", - "clock": "\f1f6", - "clock-edit": "\f1f7", - "check": "\f1f8", - "chats-badge": "\f1f9", - "chat-badge": "\f1fa", - "channelviews": "\f1fb", - "channel": "\f1fc", - "channel-filled": "\f1fd", - "cash-circle": "\f1fe", - "card": "\f1ff", - "car": "\f200", - "camera": "\f201", - "camera-add": "\f202", - "calendar": "\f203", - "calendar-filter": "\f204", - "bug": "\f205", - "brush": "\f206", - "bots": "\f207", - "bot-commands-filled": "\f208", - "bot-command": "\f209", - "boosts": "\f20a", - "boostcircle": "\f20b", - "boost": "\f20c", - "boost-outline": "\f20d", - "boost-craft-chance": "\f20e", - "bold": "\f20f", - "avatar-saved-messages": "\f210", - "avatar-deleted-account": "\f211", - "avatar-archived-chats": "\f212", - "author-hidden": "\f213", - "auction": "\f214", - "auction-next-round": "\f215", - "auction-filled": "\f216", - "auction-drop": "\f217", - "attach": "\f218", - "ask-support": "\f219", - "arrow-right": "\f21a", - "arrow-left": "\f21b", - "arrow-down": "\f21c", - "arrow-down-circle": "\f21d", - "archive": "\f21e", - "archive-to-main": "\f21f", - "archive-from-main": "\f220", - "archive-filled": "\f221", - "animations": "\f222", - "animals": "\f223", - "allow-speak": "\f224", - "allow-share": "\f225", - "admin": "\f226", - "add": "\f227", - "add-user": "\f228", - "add-user-filled": "\f229", - "add-one-badge": "\f22a", - "add-filled": "\f22b", - "add-caption": "\f22c", - "active-sessions": "\f22d", - "rating-icons-negative": "\f22e", - "rating-icons-level90": "\f22f", - "rating-icons-level9": "\f230", - "rating-icons-level80": "\f231", - "rating-icons-level8": "\f232", - "rating-icons-level70": "\f233", - "rating-icons-level7": "\f234", - "rating-icons-level60": "\f235", - "rating-icons-level6": "\f236", - "rating-icons-level50": "\f237", - "rating-icons-level5": "\f238", - "rating-icons-level40": "\f239", - "rating-icons-level4": "\f23a", - "rating-icons-level30": "\f23b", - "rating-icons-level3": "\f23c", - "rating-icons-level20": "\f23d", - "rating-icons-level2": "\f23e", - "rating-icons-level10": "\f23f", - "rating-icons-level1": "\f240", - "folder-tabs-user": "\f241", - "folder-tabs-star": "\f242", - "folder-tabs-group": "\f243", - "folder-tabs-folder": "\f244", - "folder-tabs-chats": "\f245", - "folder-tabs-chat": "\f246", - "folder-tabs-channel": "\f247", - "folder-tabs-bot": "\f248", + "new-send": "\f18e", + "new-chat-filled": "\f18f", + "my-notes": "\f190", + "muted": "\f191", + "mute": "\f192", + "move-caption-up": "\f193", + "move-caption-down": "\f194", + "more": "\f195", + "more-circle": "\f196", + "monospace": "\f197", + "microphone": "\f198", + "microphone-alt": "\f199", + "message": "\f19a", + "message-succeeded": "\f19b", + "message-read": "\f19c", + "message-pending": "\f19d", + "message-failed": "\f19e", + "menu": "\f19f", + "mention": "\f1a0", + "loop": "\f1a1", + "logout": "\f1a2", + "lock": "\f1a3", + "lock-badge": "\f1a4", + "location": "\f1a5", + "link": "\f1a6", + "link-broken": "\f1a7", + "link-badge": "\f1a8", + "large-play": "\f1a9", + "large-pause": "\f1aa", + "language": "\f1ab", + "lamp": "\f1ac", + "keyboard": "\f1ad", + "key": "\f1ae", + "italic": "\f1af", + "install": "\f1b0", + "info": "\f1b1", + "info-filled": "\f1b2", + "help": "\f1b3", + "heart": "\f1b4", + "heart-outline": "\f1b5", + "hd-photo": "\f1b6", + "hashtag": "\f1b7", + "hand-stop": "\f1b8", + "hand-stop-filled": "\f1b9", + "grouped": "\f1ba", + "grouped-disable": "\f1bb", + "group": "\f1bc", + "group-filled": "\f1bd", + "gift": "\f1be", + "gift-transfer-inline": "\f1bf", + "gifs": "\f1c0", + "fullscreen": "\f1c1", + "frozen-time": "\f1c2", + "fragment": "\f1c3", + "forward": "\f1c4", + "forums": "\f1c5", + "fontsize": "\f1c6", + "folder": "\f1c7", + "folder-badge": "\f1c8", + "flip": "\f1c9", + "flag": "\f1ca", + "file-badge": "\f1cb", + "favorite": "\f1cc", + "favorite-filled": "\f1cd", + "eye": "\f1ce", + "eye-outline": "\f1cf", + "eye-crossed": "\f1d0", + "eye-crossed-outline": "\f1d1", + "expand": "\f1d2", + "expand-modal": "\f1d3", + "enter": "\f1d4", + "email": "\f1d5", + "edit": "\f1d6", + "eats": "\f1d7", + "dropdown-arrows": "\f1d8", + "download": "\f1d9", + "down": "\f1da", + "double-badge": "\f1db", + "document": "\f1dc", + "diamond": "\f1dd", + "delete": "\f1de", + "delete-user": "\f1df", + "delete-left": "\f1e0", + "delete-filled": "\f1e1", + "data": "\f1e2", + "darkmode": "\f1e3", + "crown-wear": "\f1e4", + "crown-wear-outline": "\f1e5", + "crown-take-off": "\f1e6", + "crown-take-off-outline": "\f1e7", + "crop": "\f1e8", + "craft": "\f1e9", + "copy": "\f1ea", + "copy-media": "\f1eb", + "comments": "\f1ec", + "comments-sticker": "\f1ed", + "combine-craft": "\f1ee", + "colorize": "\f1ef", + "collapse": "\f1f0", + "collapse-modal": "\f1f1", + "cloud-download": "\f1f2", + "closed-gift": "\f1f3", + "close": "\f1f4", + "close-topic": "\f1f5", + "close-circle": "\f1f6", + "clock": "\f1f7", + "clock-edit": "\f1f8", + "check": "\f1f9", + "check-bold": "\f1fa", + "chats-badge": "\f1fb", + "chat-badge": "\f1fc", + "channelviews": "\f1fd", + "channel": "\f1fe", + "channel-filled": "\f1ff", + "cash-circle": "\f200", + "card": "\f201", + "car": "\f202", + "camera": "\f203", + "camera-add": "\f204", + "calendar": "\f205", + "calendar-filter": "\f206", + "bug": "\f207", + "brush": "\f208", + "bots": "\f209", + "bot-commands-filled": "\f20a", + "bot-command": "\f20b", + "boosts": "\f20c", + "boostcircle": "\f20d", + "boost": "\f20e", + "boost-outline": "\f20f", + "boost-craft-chance": "\f210", + "bold": "\f211", + "avatar-saved-messages": "\f212", + "avatar-deleted-account": "\f213", + "avatar-archived-chats": "\f214", + "author-hidden": "\f215", + "auction": "\f216", + "auction-next-round": "\f217", + "auction-filled": "\f218", + "auction-drop": "\f219", + "attach": "\f21a", + "ask-support": "\f21b", + "arrow-right": "\f21c", + "arrow-left": "\f21d", + "arrow-down": "\f21e", + "arrow-down-circle": "\f21f", + "archive": "\f220", + "archive-to-main": "\f221", + "archive-from-main": "\f222", + "archive-filled": "\f223", + "animations": "\f224", + "animals": "\f225", + "allow-speak": "\f226", + "allow-share": "\f227", + "admin": "\f228", + "add": "\f229", + "add-user": "\f22a", + "add-user-filled": "\f22b", + "add-one-badge": "\f22c", + "add-filled": "\f22d", + "add-caption": "\f22e", + "active-sessions": "\f22f", + "rating-icons-negative": "\f230", + "rating-icons-level90": "\f231", + "rating-icons-level9": "\f232", + "rating-icons-level80": "\f233", + "rating-icons-level8": "\f234", + "rating-icons-level70": "\f235", + "rating-icons-level7": "\f236", + "rating-icons-level60": "\f237", + "rating-icons-level6": "\f238", + "rating-icons-level50": "\f239", + "rating-icons-level5": "\f23a", + "rating-icons-level40": "\f23b", + "rating-icons-level4": "\f23c", + "rating-icons-level30": "\f23d", + "rating-icons-level3": "\f23e", + "rating-icons-level20": "\f23f", + "rating-icons-level2": "\f240", + "rating-icons-level10": "\f241", + "rating-icons-level1": "\f242", + "folder-tabs-user": "\f243", + "folder-tabs-star": "\f244", + "folder-tabs-group": "\f245", + "folder-tabs-folder": "\f246", + "folder-tabs-chats": "\f247", + "folder-tabs-chat": "\f248", + "folder-tabs-channel": "\f249", + "folder-tabs-bot": "\f24a", ); diff --git a/src/styles/icons.woff b/src/styles/icons.woff index b18001d4521bee01963fda00c968f5e471d3c9e9..7ad482c279e9a0b2befe90a6799e17c38d10d2ca 100644 GIT binary patch delta 40721 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 Z*>qFM(oF=ehzt*uQJT-q{U4+y-Ea57LMZ?M delta 40609 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 { 'ConversationOpenBotLinkAllowMessages': { 'bot': V; }; + 'ForwardForStars': { + 'price': V; + }; 'BlockUserTitle': { 'user': V; }; @@ -3085,6 +3089,10 @@ export interface LangPairWithVariables { 'ComposerPlaceholderPaidReply': { 'amount': V; }; + 'ForwardPaidChatsConfirmation': { + 'chatsSelected': V; + 'payConfirmation': V; + }; 'MessageSentPaidToastText': { 'amount': V; }; @@ -3910,6 +3918,13 @@ export interface LangPairPluralWithVariables { 'PayForMessage': { 'count': V; }; + 'ForwardPaidChatsSelected': { + 'paidChatsCount': V; + }; + 'ForwardPaidChatsPayConfirmation': { + 'totalAmount': V; + 'count': V; + }; 'MessageSentPaidToastTitle': { 'count': V; }; @@ -4045,6 +4060,9 @@ export interface LangPairPluralWithVariables { 'GiftPreviewCountBackdrops': { 'count': V; }; + 'FwdMessagesToChats': { + 'count': V; + }; } export type RegularLangKey = keyof LangPair; export type RegularLangKeyWithVariables = keyof LangPairWithVariables;