From 24ecc2c59a04b6fee8c95b1109cda76cc4f442a8 Mon Sep 17 00:00:00 2001 From: Emil Abramov Date: Thu, 13 Nov 2025 18:44:16 +0100 Subject: [PATCH 01/20] feat: filters as tabs pt. 1 --- apps/webapp/src/i18n/en-US.json | 10 ++++ .../ConversationSidebar.tsx | 6 ++ .../ConversationTabs/ConversationTabs.tsx | 49 +++++++++++++++ .../panels/Conversations/Conversations.tsx | 7 +++ .../panels/Conversations/helpers.tsx | 59 +++++++++++++++++++ .../panels/Conversations/useSidebarStore.ts | 5 ++ .../panels/Conversations/utils/draftUtils.ts | 12 +++- apps/webapp/src/types/i18n.d.ts | 10 ++++ 8 files changed, 156 insertions(+), 2 deletions(-) diff --git a/apps/webapp/src/i18n/en-US.json b/apps/webapp/src/i18n/en-US.json index 057cb69ad7e..da06703e863 100644 --- a/apps/webapp/src/i18n/en-US.json +++ b/apps/webapp/src/i18n/en-US.json @@ -763,9 +763,14 @@ "conversationJustNow": "Just now", "conversationLabelChannels": "Channels", "conversationLabelDirects": "1:1 Conversations", + "conversationLabelDrafts": "Drafts", "conversationLabelFavorites": "Favorites", "conversationLabelGroups": "Groups", + "conversationLabelMentions": "Mentions", "conversationLabelPeople": "People", + "conversationLabelPings": "Pings", + "conversationLabelReplies": "Replies", + "conversationLabelUnread": "Unread", "conversationLearnMoreChannels": "Learn more about channels", "conversationLikesCaptionPlural": "[bold]{firstUser}[/bold] and [bold]{secondUser}[/bold]", "conversationLikesCaptionPluralMoreThan2": "[bold]{userNames}[/bold] and [showmore]{number} more[/showmore]", @@ -1782,6 +1787,11 @@ "searchConversations": "Search conversations", "searchConversationsNoResult": "No results found", "searchConversationsNoResultConnectSuggestion": "Connect with new users or start a new conversation", + "searchDraftsConversations": "Search in drafts", + "searchMentionsConversations": "Search in mentions", + "searchPingsConversations": "Search in pings", + "searchRepliesConversations": "Search in replies", + "searchUnreadConversations": "Search in unread", "searchCreateGroup": "Create group", "searchCreateGuestRoom": "Create guest room", "searchDirectConversations": "Search 1:1 conversations", diff --git a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/ConversationSidebar/ConversationSidebar.tsx b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/ConversationSidebar/ConversationSidebar.tsx index b73ce2214a3..e84c8c41815 100644 --- a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/ConversationSidebar/ConversationSidebar.tsx +++ b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/ConversationSidebar/ConversationSidebar.tsx @@ -45,12 +45,14 @@ type ConversationSidebarProps = { isTeam: boolean; changeTab: (nextTab: SidebarTabs, folderId?: string) => void; currentTab: SidebarTabs; + conversations: Conversation[]; groupConversations: Conversation[]; channelConversations: Conversation[]; directConversations: Conversation[]; unreadConversations: Conversation[]; favoriteConversations: Conversation[]; archivedConversations: Conversation[]; + draftConversations: Conversation[]; conversationRepository: ConversationRepository; onClickPreferences: (contentState: ContentState) => void; showNotificationsBadge: boolean; @@ -65,11 +67,13 @@ export const ConversationSidebar = ({ isTeam, changeTab, currentTab, + conversations, groupConversations, directConversations, unreadConversations, favoriteConversations, archivedConversations, + draftConversations, conversationRepository, onClickPreferences, showNotificationsBadge, @@ -88,11 +92,13 @@ export const ConversationSidebar = ({ void; currentTab: SidebarTabs; @@ -78,12 +80,14 @@ interface ConversationTabsProps { } export const ConversationTabs = ({ + conversations, unreadConversations, favoriteConversations, archivedConversations, groupConversations, conversationRepository, directConversations, + draftConversations, onChangeTab, currentTab, onClickPreferences, @@ -116,6 +120,16 @@ export const ConversationTabs = ({ const channelConversationsLength = channelConversations.filter(filterUnreadAndArchivedConversations).length; const groupConversationsLength = groupConversations.filter(filterUnreadAndArchivedConversations).length; + const unreadCount = conversations.filter(conv => !conv.is_archived() && conv.hasUnread()).length; + const mentionsCount = conversations.filter( + conv => !conv.is_archived() && conv.unreadState().selfMentions.length > 0, + ).length; + const repliesCount = conversations.filter( + conv => !conv.is_archived() && conv.unreadState().selfReplies.length > 0, + ).length; + const draftsCount = draftConversations.filter(conv => !conv.is_archived()).length; + const pingsCount = conversations.filter(conv => !conv.is_archived() && conv.unreadState().pings.length > 0).length; + const conversationTabs = [ { type: SidebarTabs.RECENT, @@ -147,6 +161,41 @@ export const ConversationTabs = ({ Icon: , unreadConversations: directConversations.filter(filterUnreadAndArchivedConversations).length, }, + { + type: SidebarTabs.UNREAD, + title: t('conversationLabelUnread'), + dataUieName: 'go-unread-view', + Icon: , + unreadConversations: unreadCount, + }, + { + type: SidebarTabs.MENTIONS, + title: t('conversationLabelMentions'), + dataUieName: 'go-mentions-view', + Icon: , + unreadConversations: mentionsCount, + }, + { + type: SidebarTabs.REPLIES, + title: t('conversationLabelReplies'), + dataUieName: 'go-replies-view', + Icon: , + unreadConversations: repliesCount, + }, + { + type: SidebarTabs.DRAFTS, + title: t('conversationLabelDrafts'), + dataUieName: 'go-drafts-view', + Icon: , + unreadConversations: draftsCount, + }, + { + type: SidebarTabs.PINGS, + title: t('conversationLabelPings'), + dataUieName: 'go-pings-view', + Icon: , + unreadConversations: pingsCount, + }, { type: SidebarTabs.FOLDER, title: t('folderViewTooltip'), diff --git a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/Conversations.tsx b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/Conversations.tsx index fd1d3e7a095..b12c2e38918 100644 --- a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/Conversations.tsx +++ b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/Conversations.tsx @@ -159,6 +159,11 @@ export const Conversations = ({ SidebarTabs.GROUPS, SidebarTabs.CHANNELS, SidebarTabs.DIRECTS, + SidebarTabs.UNREAD, + SidebarTabs.MENTIONS, + SidebarTabs.REPLIES, + SidebarTabs.DRAFTS, + SidebarTabs.PINGS, SidebarTabs.ARCHIVES, ].includes(currentTab); @@ -390,11 +395,13 @@ export const Conversations = ({ isTeam={isTeam} changeTab={changeTab} currentTab={currentTab} + conversations={conversations} groupConversations={groupConversations} directConversations={directConversations} unreadConversations={unreadConversations} favoriteConversations={favoriteConversations} archivedConversations={archivedConversations} + draftConversations={draftConversations} conversationRepository={conversationRepository} onClickPreferences={onClickPreferences} showNotificationsBadge={notifications.length > 0} diff --git a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/helpers.tsx b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/helpers.tsx index f08d2447370..bac52f46f6a 100644 --- a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/helpers.tsx +++ b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/helpers.tsx @@ -169,6 +169,65 @@ export function getTabConversations({ }; } + if (currentTab === SidebarTabs.UNREAD) { + const filteredConversations = conversations + .filter(conversationArchivedFilter) + .filter(conv => conv.hasUnread()) + .filter(conversationSearchFilter); + + return { + conversations: filteredConversations, + searchInputPlaceholder: t('searchUnreadConversations'), + }; + } + + if (currentTab === SidebarTabs.MENTIONS) { + const filteredConversations = conversations + .filter(conversationArchivedFilter) + .filter(conv => conv.unreadState().selfMentions.length > 0) + .filter(conversationSearchFilter); + + return { + conversations: filteredConversations, + searchInputPlaceholder: t('searchMentionsConversations'), + }; + } + + if (currentTab === SidebarTabs.REPLIES) { + const filteredConversations = conversations + .filter(conversationArchivedFilter) + .filter(conv => conv.unreadState().selfReplies.length > 0) + .filter(conversationSearchFilter); + + return { + conversations: filteredConversations, + searchInputPlaceholder: t('searchRepliesConversations'), + }; + } + + if (currentTab === SidebarTabs.DRAFTS) { + const filteredConversations = draftConversations + .filter(conversationArchivedFilter) + .filter(conversationSearchFilter); + + return { + conversations: filteredConversations, + searchInputPlaceholder: t('searchDraftsConversations'), + }; + } + + if (currentTab === SidebarTabs.PINGS) { + const filteredConversations = conversations + .filter(conversationArchivedFilter) + .filter(conv => conv.unreadState().pings.length > 0) + .filter(conversationSearchFilter); + + return { + conversations: filteredConversations, + searchInputPlaceholder: t('searchPingsConversations'), + }; + } + return { conversations: [], searchInputPlaceholder: '', diff --git a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/useSidebarStore.ts b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/useSidebarStore.ts index 9c87fe4f3ae..dbd56f29eb9 100644 --- a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/useSidebarStore.ts +++ b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/useSidebarStore.ts @@ -27,6 +27,11 @@ export enum SidebarTabs { GROUPS, CHANNELS, DIRECTS, + UNREAD, + MENTIONS, + REPLIES, + DRAFTS, + PINGS, ARCHIVES, CONNECT, PREFERENCES, diff --git a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/utils/draftUtils.ts b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/utils/draftUtils.ts index fd07fcccc28..fd577b4ffe5 100644 --- a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/utils/draftUtils.ts +++ b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/utils/draftUtils.ts @@ -51,8 +51,16 @@ export const conversationHasDraft = (conversation: Conversation): boolean => { const amplifyData: AmplifyWrapper | DraftData = JSON.parse(draftData); // Amplify wraps the data in an object with 'data' and 'expires' properties const draft = (amplifyData as AmplifyWrapper).data || (amplifyData as DraftData); - // Check if draft has content (editorState or plainMessage) - return Boolean(draft && (draft.editorState || draft.plainMessage)); + + if (!draft) { + return false; + } + + // Check if plainMessage has actual content (not just whitespace) + const plainMessage = draft.plainMessage || ''; + const hasTextContent = plainMessage.trim().length > 0; + + return hasTextContent; } catch (error) { // Only log error type, not the actual error to avoid exposing draft content logger.warn( diff --git a/apps/webapp/src/types/i18n.d.ts b/apps/webapp/src/types/i18n.d.ts index 37a103a4166..edc34ee07c2 100644 --- a/apps/webapp/src/types/i18n.d.ts +++ b/apps/webapp/src/types/i18n.d.ts @@ -767,9 +767,14 @@ declare module 'I18n/en-US.json' { 'conversationJustNow': `Just now`; 'conversationLabelChannels': `Channels`; 'conversationLabelDirects': `1:1 Conversations`; + 'conversationLabelDrafts': `Drafts`; 'conversationLabelFavorites': `Favorites`; 'conversationLabelGroups': `Groups`; + 'conversationLabelMentions': `Mentions`; 'conversationLabelPeople': `People`; + 'conversationLabelPings': `Pings`; + 'conversationLabelReplies': `Replies`; + 'conversationLabelUnread': `Unread`; 'conversationLearnMoreChannels': `Learn more about channels`; 'conversationLikesCaptionPlural': `[bold]{firstUser}[/bold] and [bold]{secondUser}[/bold]`; 'conversationLikesCaptionPluralMoreThan2': `[bold]{userNames}[/bold] and [showmore]{number} more[/showmore]`; @@ -1786,6 +1791,11 @@ declare module 'I18n/en-US.json' { 'searchConversations': `Search conversations`; 'searchConversationsNoResult': `No results found`; 'searchConversationsNoResultConnectSuggestion': `Connect with new users or start a new conversation`; + 'searchDraftsConversations': `Search in drafts`; + 'searchMentionsConversations': `Search in mentions`; + 'searchPingsConversations': `Search in pings`; + 'searchRepliesConversations': `Search in replies`; + 'searchUnreadConversations': `Search in unread`; 'searchCreateGroup': `Create group`; 'searchCreateGuestRoom': `Create guest room`; 'searchDirectConversations': `Search 1:1 conversations`; From 583d541bc025d435efac59b262a04753d804bfc6 Mon Sep 17 00:00:00 2001 From: Emil Abramov Date: Thu, 13 Nov 2025 18:49:46 +0100 Subject: [PATCH 02/20] feat: only filter unread conversations instead all of them... --- .../ConversationTabs/ConversationTabs.tsx | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/ConversationTabs/ConversationTabs.tsx b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/ConversationTabs/ConversationTabs.tsx index ba5cd9870e3..92727cb7d78 100644 --- a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/ConversationTabs/ConversationTabs.tsx +++ b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/ConversationTabs/ConversationTabs.tsx @@ -120,15 +120,17 @@ export const ConversationTabs = ({ const channelConversationsLength = channelConversations.filter(filterUnreadAndArchivedConversations).length; const groupConversationsLength = groupConversations.filter(filterUnreadAndArchivedConversations).length; - const unreadCount = conversations.filter(conv => !conv.is_archived() && conv.hasUnread()).length; - const mentionsCount = conversations.filter( + const unreadCount = unreadConversations.filter(conv => !conv.is_archived()).length; + const mentionsCount = unreadConversations.filter( conv => !conv.is_archived() && conv.unreadState().selfMentions.length > 0, ).length; - const repliesCount = conversations.filter( + const repliesCount = unreadConversations.filter( conv => !conv.is_archived() && conv.unreadState().selfReplies.length > 0, ).length; const draftsCount = draftConversations.filter(conv => !conv.is_archived()).length; - const pingsCount = conversations.filter(conv => !conv.is_archived() && conv.unreadState().pings.length > 0).length; + const pingsCount = unreadConversations.filter( + conv => !conv.is_archived() && conv.unreadState().pings.length > 0, + ).length; const conversationTabs = [ { From bf0031fc87c2ea187fb338299278d1d86e9a81f9 Mon Sep 17 00:00:00 2001 From: Emil Abramov Date: Thu, 13 Nov 2025 19:08:52 +0100 Subject: [PATCH 03/20] fix: wrong icon? --- .../panels/Conversations/ConversationTabs/ConversationTabs.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/ConversationTabs/ConversationTabs.tsx b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/ConversationTabs/ConversationTabs.tsx index 92727cb7d78..cb74ce7de4c 100644 --- a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/ConversationTabs/ConversationTabs.tsx +++ b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/ConversationTabs/ConversationTabs.tsx @@ -167,7 +167,7 @@ export const ConversationTabs = ({ type: SidebarTabs.UNREAD, title: t('conversationLabelUnread'), dataUieName: 'go-unread-view', - Icon: , + Icon: , unreadConversations: unreadCount, }, { From 0afdfd34719f34ae012df84e6fb75400dc57f6e3 Mon Sep 17 00:00:00 2001 From: Emil Abramov Date: Mon, 19 Jan 2026 16:29:37 +0100 Subject: [PATCH 04/20] feat(tabs): removed previous conversationFilter, replaced with tabs preferences selector, removed old translation keys --- apps/webapp/src/i18n/ar-SA.json | 7 - apps/webapp/src/i18n/bn-BD.json | 7 - apps/webapp/src/i18n/bs-BA.json | 7 - apps/webapp/src/i18n/ca-ES.json | 7 - apps/webapp/src/i18n/cs-CZ.json | 7 - apps/webapp/src/i18n/da-DK.json | 7 - apps/webapp/src/i18n/de-DE.json | 118 +++++------------ apps/webapp/src/i18n/el-CY.json | 7 - apps/webapp/src/i18n/el-GR.json | 7 - apps/webapp/src/i18n/en-US.json | 8 +- apps/webapp/src/i18n/es-ES.json | 7 - apps/webapp/src/i18n/et-EE.json | 7 - apps/webapp/src/i18n/fa-IR.json | 7 - apps/webapp/src/i18n/fi-FI.json | 7 - apps/webapp/src/i18n/fr-FR.json | 7 - apps/webapp/src/i18n/ga-IE.json | 7 - apps/webapp/src/i18n/he-IL.json | 7 - apps/webapp/src/i18n/hi-IN.json | 7 - apps/webapp/src/i18n/hr-HR.json | 7 - apps/webapp/src/i18n/hu-HU.json | 7 - apps/webapp/src/i18n/id-ID.json | 7 - apps/webapp/src/i18n/is-IS.json | 7 - apps/webapp/src/i18n/it-IT.json | 7 - apps/webapp/src/i18n/ja-JP.json | 7 - apps/webapp/src/i18n/lb-LU.json | 7 - apps/webapp/src/i18n/lt-LT.json | 7 - apps/webapp/src/i18n/lv-LV.json | 7 - apps/webapp/src/i18n/me-ME.json | 7 - apps/webapp/src/i18n/mk-MK.json | 7 - apps/webapp/src/i18n/ms-MY.json | 7 - apps/webapp/src/i18n/mt-MT.json | 7 - apps/webapp/src/i18n/nl-NL.json | 7 - apps/webapp/src/i18n/no-NO.json | 7 - apps/webapp/src/i18n/pl-PL.json | 7 - apps/webapp/src/i18n/pt-BR.json | 7 - apps/webapp/src/i18n/pt-PT.json | 7 - apps/webapp/src/i18n/ro-RO.json | 7 - apps/webapp/src/i18n/ru-RU.json | 7 - apps/webapp/src/i18n/si-LK.json | 7 - apps/webapp/src/i18n/sk-SK.json | 7 - apps/webapp/src/i18n/sl-SI.json | 7 - apps/webapp/src/i18n/sq-AL.json | 7 - apps/webapp/src/i18n/sr-Cyrl-ME.json | 7 - apps/webapp/src/i18n/sr-SP.json | 7 - apps/webapp/src/i18n/sv-SE.json | 7 - apps/webapp/src/i18n/th-TH.json | 7 - apps/webapp/src/i18n/tr-CY.json | 7 - apps/webapp/src/i18n/tr-TR.json | 7 - apps/webapp/src/i18n/uk-UA.json | 7 - apps/webapp/src/i18n/uz-UZ.json | 7 - apps/webapp/src/i18n/vi-VN.json | 7 - apps/webapp/src/i18n/zh-CN.json | 7 - apps/webapp/src/i18n/zh-HK.json | 7 - apps/webapp/src/i18n/zh-TW.json | 7 - .../ConversationFilterButton.styles.ts | 34 ++--- .../ConversationFilterButton/index.ts | 2 +- .../ConversationTabs/ConversationTabs.tsx | 15 ++- .../panels/Conversations/Conversations.tsx | 2 - .../panels/Conversations/Helpers.test.tsx | 5 +- .../TabsFilterButton.styles.ts | 72 +++++++++++ .../TabsFilterButton/TabsFilterButton.tsx | 120 ++++++++++++++++++ .../Conversations/TabsFilterButton/index.ts | 20 +++ .../panels/Conversations/helpers.tsx | 45 ++----- .../panels/Conversations/useSidebarStore.ts | 52 ++++++-- apps/webapp/src/types/i18n.d.ts | 8 +- 65 files changed, 319 insertions(+), 546 deletions(-) create mode 100644 apps/webapp/src/script/page/LeftSidebar/panels/Conversations/TabsFilterButton/TabsFilterButton.styles.ts create mode 100644 apps/webapp/src/script/page/LeftSidebar/panels/Conversations/TabsFilterButton/TabsFilterButton.tsx create mode 100644 apps/webapp/src/script/page/LeftSidebar/panels/Conversations/TabsFilterButton/index.ts diff --git a/apps/webapp/src/i18n/ar-SA.json b/apps/webapp/src/i18n/ar-SA.json index 5005a6ef93a..55987203a6c 100644 --- a/apps/webapp/src/i18n/ar-SA.json +++ b/apps/webapp/src/i18n/ar-SA.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/bn-BD.json b/apps/webapp/src/i18n/bn-BD.json index 057cb69ad7e..f815ae21dd3 100644 --- a/apps/webapp/src/i18n/bn-BD.json +++ b/apps/webapp/src/i18n/bn-BD.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/bs-BA.json b/apps/webapp/src/i18n/bs-BA.json index 057cb69ad7e..f815ae21dd3 100644 --- a/apps/webapp/src/i18n/bs-BA.json +++ b/apps/webapp/src/i18n/bs-BA.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/ca-ES.json b/apps/webapp/src/i18n/ca-ES.json index 057cb69ad7e..f815ae21dd3 100644 --- a/apps/webapp/src/i18n/ca-ES.json +++ b/apps/webapp/src/i18n/ca-ES.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/cs-CZ.json b/apps/webapp/src/i18n/cs-CZ.json index 8a0287330dd..12f4056fc0a 100644 --- a/apps/webapp/src/i18n/cs-CZ.json +++ b/apps/webapp/src/i18n/cs-CZ.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/da-DK.json b/apps/webapp/src/i18n/da-DK.json index a1df82b0577..de43668edc4 100644 --- a/apps/webapp/src/i18n/da-DK.json +++ b/apps/webapp/src/i18n/da-DK.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/de-DE.json b/apps/webapp/src/i18n/de-DE.json index 4c29058d690..104e6af60f8 100644 --- a/apps/webapp/src/i18n/de-DE.json +++ b/apps/webapp/src/i18n/de-DE.json @@ -144,7 +144,6 @@ "accessibility.headings.preferencesOptions": "Einstellungen – Optionen", "accessibility.headings.sidebar": "Navigation", "accessibility.headings.sidebar.footer": "Navigation Footer", - "accessibility.logo.wire": "Wire Logo", "accessibility.messageActionsMenuEmoji": "Emoji auswählen", "accessibility.messageActionsMenuLabel": "Nachrichtenaktionen", "accessibility.messageActionsMenuLike": "Mit Herz reagieren", @@ -328,7 +327,6 @@ "backupTryAgain": "Erneut versuchen", "buttonActionError": "Ihre Antwort wurde nicht gesendet, bitte erneut versuchen.", "callAccept": "Annehmen", - "callChooseScreenCancel": "Bildschirmfreigabe schließen", "callChooseSharedScreen": "Wählen Sie einen Bildschirm aus", "callChooseSharedWindow": "Wählen Sie ein Fenster zur Freigabe aus", "callConversationAcceptOrDecline": "{conversationName} ruft an. Drücken Sie Steuerung + Eingabe, um den Anruf anzunehmen, oder drücken Sie Steuerung + Umschalt + Eingabe, um den Anruf abzulehnen.", @@ -373,14 +371,14 @@ "cameraStatusOn": "an", "cells.clearFilters.button": "Alle löschen", "cells.deleteModal.description": "Dies wird die Datei {name} für alle Teilnehmer endgültig löschen.", - "cells.deleteModal.error": "Etwas ist schief gelaufen. Bitte versuchen Sie es später noch einmal und aktualisieren Sie die Liste.", + "cells.deleteModal.error": "Something went wrong, please try again later and refresh the list.", "cells.deleteModal.heading": "Datei löschen", "cells.deletePermanentlyModal.button": "Löschen", "cells.deletePermanentlyModal.file.description": "Dies wird die Datei {name} für alle Teilnehmer dauerhaft löschen.", "cells.deletePermanentlyModal.folder.description": "Dies wird den Ordner {name} und dessen Inhalt für alle Teilnehmer dauerhaft löschen.", "cells.deletePermanentlyModal.headline": "Endgültig löschen?", "cells.emptyRecycleBin.description": "Hier finden Sie alle gelöschten Dateien und Ordner.", - "cells.emptySearchResults.description": "Versuchen Sie, Ihre Suche anzupassen.", + "cells.emptySearchResults.description": "Try adjusting your search or check for typos.", "cells.emptySearchResults.heading": "Keine Ergebnisse gefunden", "cells.error.description": "Die Liste der Dateien konnte nicht geladen werden. Bitte versuchen Sie es erneut.", "cells.error.heading": "Beim Laden ist ein Fehler aufgetreten", @@ -422,7 +420,7 @@ "cells.newItemMenuModal.secondaryAction": "Abbrechen", "cells.newItemMenuModalForm.alreadyExistsError": "Eine Datei oder ein Ordner mit diesem Namen ist bereits vorhanden", "cells.newItemMenuModalForm.genericError": "Es ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut", - "cells.newItemMenuModalForm.nameRequired": "Namen eingeben", + "cells.newItemMenuModalForm.nameRequired": "Name is required", "cells.noNodes.description": "Hier finden Sie alle Dateien und Ordner, die in dieser Unterhaltung geteilt wurden.", "cells.noNodes.global.description": "Bei Unterhaltungen mit Dateiverwaltung finden Sie hier die geteilten Dateien.", "cells.noNodes.global.heading": "Es gibt noch keine Dateien", @@ -430,22 +428,20 @@ "cells.options.delete": "Löschen", "cells.options.deletePermanently": "Endgültig löschen", "cells.options.download": "Herunterladen", - "cells.options.edit": "Bearbeiten", "cells.options.label": "Weitere Optionen", "cells.options.move": "In Ordner verschieben", "cells.options.open": "Öffnen", "cells.options.rename": "Umbenennen", "cells.options.restore": "Wiederherstellen", - "cells.options.share": "Per Link teilen", + "cells.options.share": "Teilen", "cells.options.tags": "Tags hinzufügen oder entfernen", - "cells.options.versionHistory": "Versionsverlauf", "cells.pagination.loadMoreResults": "Weitere Objekte laden", "cells.pagination.nextPage": "Nächste Seite", "cells.pagination.previousPage": "Vorherige Seite", "cells.pagination.resultsOutOf": "{start}-{end} von {total}", "cells.pagination.rowsPerPage": "Zeilen pro Seite\n", - "cells.pending.description": "Ihre Dokumente und Mediendateien werden hier verfügbar sein, sobald wir alle Dateien und Ordner hochgeladen haben.", - "cells.pending.heading": "Dateien werden geladen", + "cells.pending.description": "We're processing the files for this conversation. They’ll appear here once everything is ready.", + "cells.pending.heading": "Files are being prepared", "cells.recycleBin.breadcrumb": "Papierkorb", "cells.recycleBin.moreMenu": "Papierkorb öffnen", "cells.refreshButton": "Liste aktualisieren", @@ -455,10 +451,10 @@ "cells.renameNodeModal.headline.folder": "Ordner umbenennen", "cells.renameNodeModal.invalidCharacters": "Verwenden Sie einen Namen ohne \"/\" oder \".\"", "cells.renameNodeModal.label": "Name", - "cells.renameNodeModal.nameRequired": "Namen eingeben", + "cells.renameNodeModal.nameRequired": "Name is required", "cells.renameNodeModal.placeholder": "Namen eingeben", "cells.renameNodeModal.saveButton": "Speichern", - "cells.restore.error": "Etwas ist schief gelaufen. Bitte versuchen Sie es später noch einmal und aktualisieren Sie die Liste.", + "cells.restore.error": "Something went wrong, please try again later and refresh the list.", "cells.restoreNestedNodeModal.button": "Übergeordneten Ordner wiederherstellen", "cells.restoreNestedNodeModal.description1": "Ordner oder Dateien können nicht aus einem gelöschten Ordner wiederhergestellt werden. Um das gewünschte Element wiederzuverwenden, müssen Sie den übergeordneten Ordner wiederherstellen.", "cells.restoreNestedNodeModal.description2": "Der Ordner {name} mit all seinen Dateien wird wiederhergestellt und allen in dieser Unterhaltung zur Verfügung gestellt.", @@ -466,45 +462,34 @@ "cells.restoreNestedNodeModal.folder.headline": "Ordner wiederherstellen", "cells.restoreRootNodeModal.button": "Wiederherstellen", "cells.restoreRootNodeModal.file.description": "Diese Datei {Name} wird wiederhergestellt und ist für alle Teilnehmer dieser Unterhaltung wieder verfügbar.", - "cells.restoreRootNodeModal.file.headline": "Datei wiederherstellen", + "cells.restoreRootNodeModal.file.headline": "Restore file?", "cells.restoreRootNodeModal.folder.description": "Dieser Ordner {Name} wird mit seinem gesamten Inhalt wiederhergestellt und ist für alle Teilnehmer dieser Unterhaltung wieder verfügbar.", "cells.restoreRootNodeModal.folder.headline": "Ordner wiederherstellen", "cells.search.closeButton": "Schließen", "cells.search.failed": "Es ist ein Fehler aufgetreten. Bitte versuchen Sie es später erneut.", "cells.search.placeholder": "Dateien und Ordner suchen", - "cells.selfDeletingMessage.info": "Die Funktion ist für Unterhaltungen mit Geteiltes Drive nicht verfügbar.", + "cells.selfDeletingMessage.info": "The feature is not available for conversations with a shared Drive.", "cells.shareModal.copyLink": "Link kopieren", - "cells.shareModal.disablePublicLink": "Öffentlichen Link deaktivieren", - "cells.shareModal.disablePublicLink.description": "Öffentlichen Link deaktivieren", + "cells.shareModal.disablePublicLink": "Disable public link", + "cells.shareModal.disablePublicLink.description": "Disable public link", "cells.shareModal.enablePublicLink": "Öffentlichen Link erstellen", "cells.shareModal.enablePublicLink.file.description": "Laden Sie Ihre Datei hoch und teilen Sie sie über einen öffentlichen Link. Alle Empfänger können sie ansehen und herunterladen.", "cells.shareModal.enablePublicLink.folder.description": "Laden Sie Ihren Ordner hoch und teilen Sie ihn über einen öffentlichen Link. Alle Empfänger können den Ordner und seine Dateien ansehen und herunterladen.", "cells.shareModal.error.loadingLink": "Es ist ein Fehler aufgetreten. Bitte versuchen Sie es später erneut.", - "cells.shareModal.expiration": "Ablaufdatum", - "cells.shareModal.expiration.dateAriaLabel": "Ablaufdatum auswählen", - "cells.shareModal.expiration.description": "Link läuft an einem bestimmten Tag ab.", - "cells.shareModal.expiration.error.pastDate": "Datum in der Vergangenheit", - "cells.shareModal.expiration.expiresLabel": "Läuft ab", - "cells.shareModal.expiration.nextMonthLabel": "Nächster Monat", - "cells.shareModal.expiration.openCalendarLabel": "Kalender öffnen", - "cells.shareModal.expiration.previousMonthLabel": "Vorheriger Monat", - "cells.shareModal.expiration.timeAriaLabel": "Ablaufzeit auswählen", "cells.shareModal.generatedPublicLink": "Öffentlicher Link erstellt", "cells.shareModal.heading": "Per Link teilen", "cells.shareModal.linkCopied": "Link kopiert", - "cells.shareModal.password": "Passwort", - "cells.shareModal.password.description": "Passwort festlegen, um den Zugriff zu beschränken.", - "cells.shareModal.primaryAction": "Save", + "cells.shareModal.primaryAction": "Fertig", "cells.sidebar.heading": "Drive", - "cells.sidebar.title": "Dateien", + "cells.sidebar.title": "Files", "cells.tableRow.actions": "Weitere Optionen", "cells.tableRow.conversationName": "Unterhaltung", "cells.tableRow.created": "Erstellt", "cells.tableRow.name": "Name", "cells.tableRow.owner": "Hochgeladen von", "cells.tableRow.publicLink": "Geteilt", - "cells.tableRow.shared.falsyValue": "Nein", - "cells.tableRow.shared.truthyValue": "Ja", + "cells.tableRow.shared.falsyValue": "No", + "cells.tableRow.shared.truthyValue": "Yes", "cells.tableRow.size": "Größe", "cells.tableRow.tags": "Tags", "cells.tagsModal.apiError": "Ein Fehler ist aufgetreten", @@ -517,20 +502,9 @@ "cells.tagsModal.placeholder": "Tag eingeben oder auswählen", "cells.tagsModal.saveButton": "Speichern", "cells.tagsModal.title": "Tags hinzufügen oder entfernen", - "cells.tagsModal.validationError.comma": "Verwenden Sie ein Tag ohne Komma", + "cells.tagsModal.validationError.comma": "Tag names cannot contain commas", "cells.unavailableFile": "Datei nicht verfügbar", "cells.unavailableFilePreview": "Vorschau konnte nicht erstellt werden", - "cells.versionHistory.closeAriaLabel": "Schließen", - "cells.versionHistory.current": "Aktuell", - "cells.versionHistory.download": "Herunterladen", - "cells.versionHistory.downloadAriaLabel": "Version von {time} herunterladen", - "cells.versionHistory.restore": "Wiederherstellen", - "cells.versionHistory.restoreAriaLabel": "Version von {time} wiederherstellen", - "cells.versionHistory.restoreModal.cancel": "Abbrechen", - "cells.versionHistory.restoreModal.confirm": "Wiederherstellen", - "cells.versionHistory.restoreModal.description": "Dadurch wird die wiederhergestellte Version kopiert und als aktuelle Version festgelegt. Alle vorherigen Versionen bleiben verfügbar.", - "cells.versionHistory.restoreModal.title": "Version wiederherstellen", - "cells.versionHistory.title": "Versionsverlauf", "cellsMoveToRecycleBinModal.file.headline": "Datei löschen?", "cellsMoveToRecycleBinModal.folder.description": "Der Ordner {name} und sein Inhalt werden in den Papierkorb dieser Unterhaltung verschoben.", "cellsMoveToRecycleBinModal.folder.headline": "Ordner löschen?", @@ -540,7 +514,6 @@ "channelDetailsActionDelete": "Channel löschen", "channelDetailsActionLeave": "Channel verlassen", "channelParticipantActionLeave": "Channel verlassen…", - "channelSizeInfo": "Bis zu {count} Personen können einem Channel beitreten.", "channelsPopoverLeave": "Channel verlassen", "chooseHandle.handlePlaceholder": "Benutzername", "chooseHandle.headline": "Legen Sie Ihren Benutzernamen fest", @@ -593,11 +566,11 @@ "conversationAssetFailedDecryptDownloading": "DOWNLOAD FEHLGESCHLADEN (Datei konnte nicht entschlüsselt werden)", "conversationAssetFailedDecryptDownloadingV2": "Download fehlgeschlagen: Die Datei konnte nicht entschlüsselt werden", "conversationAssetFailedHashDownloading": "DOWNLOAD FEHLGESCHLADEN (HASH STIMMT NICHT ÜBEREIN)", - "conversationAssetFailedHashDownloadingV2": "Download fehlgeschlagen: Der Hash stimmt nicht überein", + "conversationAssetFailedHashDownloadingV2": "Download failed: the file hash does not match", "conversationAssetRestrictedAudioMessageHeadline": "Audionachricht", "conversationAssetUploadCancel": "Abbrechen", "conversationAssetUploadFailed": "Hochladen fehlgeschlagen", - "conversationAssetUploadFailedV2": "Upload fehlgeschlagen: {name}", + "conversationAssetUploadFailedV2": "Upload failed: {name}", "conversationAssetUploading": "Hochladen…", "conversationAssetUploadingV2": "Hochladen: {name}", "conversationAudioAssetCancel": "Abbrechen", @@ -607,7 +580,7 @@ "conversationAudioAssetUploadFailed": "Hochladen fehlgeschlagen: {name}", "conversationAudioAssetUploading": "Hochladen: {name}", "conversationButtonSeparator": "oder", - "conversationCellsConversationEnabled": "Geteiltes Drive aktiv", + "conversationCellsConversationEnabled": "Shared Drive is on", "conversationClassified": " Sicherheitsniveau: VS-NfD", "conversationCommonFeature1": "Bis zu [bold]{capacity}[/bold] Personen", "conversationCommonFeature2": "Videokonferenzen", @@ -649,7 +622,7 @@ "conversationDetailsActionBlock": "Blockieren", "conversationDetailsActionCancelRequest": "Anfrage abbrechen", "conversationDetailsActionCellsOption": "Dauerhaft aktiv für diese Unterhaltung.", - "conversationDetailsActionCellsTitle": "Geteiltes Drive", + "conversationDetailsActionCellsTitle": "Shared Drive", "conversationDetailsActionClear": "Unterhaltungsverlauf löschen", "conversationDetailsActionConversationParticipants": "Alle ({number}) anzeigen", "conversationDetailsActionCreateGroup": "Gruppe erstellen", @@ -690,29 +663,22 @@ "conversationFavoritesTabEmptyMessage": "Wählen Sie Ihre Lieblingsunterhaltungen aus und Sie werden sie hier finden 👍", "conversationFederationIndicator": "Föderiert", "conversationFileAssetRestricted": "Empfang von Dateien ist verboten", - "conversationFileImagePreviewLabel": "Vorschau der Bilddatei für: {src}", + "conversationFileImagePreviewLabel": "Image file preview for: {src}", "conversationFilePreviewDeleteButtonLabel": "Datei löschen", "conversationFilePreviewErrorMoreOptions": "Weitere Optionen", "conversationFilePreviewErrorRemove": "Entfernen", "conversationFilePreviewErrorRetry": "Wiederholen", "conversationFileUploadFailedHeading": "Hochladen der Datei fehlgeschlagen", - "conversationFileUploadFailedMessage": "Beim Hochladen ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut.", - "conversationFileUploadFailedTooLargeFilesAndImagesMessage": "Bitte wählen Sie Dateien kleiner als {maxImageSize}MB und Bilder kleiner als {maxFileSize}MB aus.", - "conversationFileUploadFailedTooLargeFilesHeading": "Datei zu groß", - "conversationFileUploadFailedTooLargeFilesMessage": "Bitte wählen Sie Dateien kleiner als {maxSize}MB aus.", - "conversationFileUploadFailedTooLargeImagesMessage": "Bitte wählen Sie die Bilder kleiner als {maxSize}MB.", + "conversationFileUploadFailedMessage": "Error occurred in the upload. Please try again.", + "conversationFileUploadFailedTooLargeFilesAndImagesMessage": "Please select files smaller than {maxImageSize}MB and images smaller than {maxFileSize}MB.", + "conversationFileUploadFailedTooLargeFilesHeading": "Files too large", + "conversationFileUploadFailedTooLargeFilesMessage": "Please select files smaller than {maxSize}MB.", + "conversationFileUploadFailedTooLargeImagesMessage": "Please select images smaller than {maxSize}MB.", "conversationFileUploadFailedTooManyFilesHeading": "Zu viele Dateien", - "conversationFileUploadFailedTooManyFilesMessage": "Bitte wählen Sie ein Maximum an {maxFiles} Dateien.", + "conversationFileUploadFailedTooManyFilesMessage": "Please select a maximum of {maxFiles} files.", "conversationFileUploadOverlayDescription": "Drag and Drop nutzen, um Dateien hinzuzufügen", "conversationFileUploadOverlayTitle": "Dateien hochladen", - "conversationFileVideoPreviewLabel": "Vorschau der Videodatei für: {src}", - "conversationFilterDrafts": "Entwürfe", - "conversationFilterMentions": "Erwähnungen", - "conversationFilterNone": "Kein Filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Antworten", - "conversationFilterTooltip": "Unterhaltungen filtern", - "conversationFilterUnread": "Ungelesen", + "conversationFileVideoPreviewLabel": "Video file preview for: {src}", "conversationFoldersEmptyText": "Fügen Sie Ihre Unterhaltungen Ordnern hinzu, um organisiert zu bleiben.", "conversationFoldersEmptyTextLearnMore": "Mehr erfahren", "conversationFooterArchive": "Archiv", @@ -942,7 +908,6 @@ "customEnvRedirect.redirectHeadline": "Weiterleitung...", "customEnvRedirect.redirectTo": "Sie werden zu Ihrem speziellen Unternehmensservice weitergeleitet.", "dataSharingModalAgree": "Zustimmen", - "dataSharingModalCloseBtnTitle": "Fenster 'Einwilligung zum Teilen von Nutzungsdaten' schließen", "dataSharingModalDecline": "Ablehnen", "dataSharingModalDescription": "Helfen Sie mit, Wire zu verbessern, indem Sie Ihre Nutzungsdaten über eine pseudonyme ID mit uns teilen. Die Daten werden weder mit Ihren persönlichen Informationen verknüpft noch an Dritte außer der Wire Gruppe weitergegeben. Sie beinhalten zum Beispiel, wann Sie eine Funktion nutzen, Ihre App-Version, den Gerätetyp oder Ihr Betriebssystem. Diese Daten werden spätestens nach 365 Tagen gelöscht.
Weitere Einzelheiten finden Sie in unserer [link]Datenschutzerklärung[/link]. Sie können Ihre Zustimmung jederzeit widerrufen.", "dataSharingModalTitle": "Einwilligung zum Teilen von Nutzungsdaten", @@ -1007,16 +972,9 @@ "federationConnectionRemove": "Backends [bold]{backendUrlOne}[/bold] und [bold]{backendUrlTwo}[/bold] sind nicht mehr verbunden.", "federationDelete": "[bold]Ihr Backend[/bold] ist nicht mehr mit [bold]{backendUrl}.[/bold] verbunden.", "fileCardDefaultCloseButtonLabel": "Schließen", - "fileFullscreenModal.editor.error": "Vorschau kann nicht geladen werden", - "fileFullscreenModal.editor.iframeTitle": "Dokument-Editor", "fileFullscreenModal.noPreviewAvailable.callToAction": "Datei herunterladen", "fileFullscreenModal.noPreviewAvailable.description": "Für diese Datei ist keine Vorschau verfügbar. Laden Sie stattdessen die Datei herunter.", "fileFullscreenModal.noPreviewAvailable.title": "Datei ohne Vorschau", - "fileHistoryModal.failedToLoadVersions": "Versionen können nicht geladen werden", - "fileHistoryModal.failedToRestore": "Dateiversion kann nicht wiederhergestellt werden", - "fileHistoryModal.invalidNodeData": "Ungültige Datei-Daten", - "fileHistoryModal.today": "Heute", - "fileHistoryModal.yesterday": "Gestern", "fileTypeRestrictedIncoming": "Datei von [bold]{name}[/bold] kann nicht geöffnet werden", "fileTypeRestrictedOutgoing": "Das Senden und Empfangen von Dateien mit der Endung {fileExt} ist in Ihrer Organisation nicht erlaubt", "folderViewTooltip": "Ordner", @@ -1120,7 +1078,6 @@ "guestRoomToggleInfoExtended": "Öffnen Sie diese Unterhaltung für Personen außerhalb Ihres Teams. Diese Einstellung kann später jederzeit geändert werden.", "guestRoomToggleInfoHead": "Gäste-Links", "guestRoomToggleName": "Gäste zulassen", - "hideTogglePasswordLabel": "Passwort ausblenden", "historyInfo.learnMore": "Mehr erfahren", "historyInfo.noHistoryHeadline": "Sie nutzen {brandName} zum ersten Mal auf diesem Gerät.", "historyInfo.noHistoryInfo": "Aus Datenschutzgründen wird der bisherige Gesprächsverlauf nicht angezeigt.", @@ -1412,8 +1369,8 @@ "modalCreateFolderHeadline": "Neuen Ordner anlegen", "modalCreateFolderMessage": "Unterhaltung in einen neuen Ordner verschieben.", "modalCreateFolderPlaceholder": "Ordnername", - "modalCreateGroupCellsToggleHeading": "Geteiltes Drive", - "modalCreateGroupCellsToggleInfo": "Ermöglichen Sie den Teilnehmern, ihre Dokumente und Mediendateien in Geteiltes Drive zu verwalten. Dieser Vorgang kann nicht rückgängig gemacht werden.", + "modalCreateGroupCellsToggleHeading": "Shared Drive", + "modalCreateGroupCellsToggleInfo": "Enable participants to manage their documents and media files in a shared Drive. This can’t be undone.", "modalCreateGroupProtocolHeading": "Protokoll", "modalCreateGroupProtocolInfo": "Wählen Sie MLS, um eine Gruppenunterhaltung unter Verwendung des Messaging-Layer-Security-Protokolls zu erstellen.", "modalCreateGroupProtocolSelect.default": " (Standard)", @@ -1666,7 +1623,7 @@ "preferencesOptionsBackupHeader": "Gesprächsverlauf", "preferencesOptionsBackupImportCrossPlatformSecondary": "Der vorhandene Gesprächsverlauf auf diesem Gerät bleibt erhalten und wird durch das neue Backup ergänzt. Sie können den Verlauf von all Ihren Geräten und verschiedenen Plattformen wiederherstellen, aber nicht von einem anderen Benutzerkonto.", "preferencesOptionsBackupImportHeadline": "Wiederherstellen", - "preferencesOptionsBackupImportSecondary": "Der vorhandene Gesprächsverlauf auf diesem Gerät bleibt erhalten und wird durch das neue Backup ergänzt. Sie können den Verlauf von all Ihren Geräten und verschiedenen Plattformen wiederherstellen, aber nicht von einem anderen Benutzerkonto.", + "preferencesOptionsBackupImportSecondary": "Es können nur Backup-Dateien derselben Plattform wiederhergestellt werden. Der Inhalt der Backup-Datei ersetzt den Gesprächsverlauf auf diesem Gerät.", "preferencesOptionsBackupTryAgain": "Erneut versuchen", "preferencesOptionsCall": "Anrufe", "preferencesOptionsCallLogs": "Fehlerbehebung", @@ -1760,9 +1717,9 @@ "richTextFormatStrikethrough": "Durchgestrichen", "richTextFormatUnorderedList": "Stichpunktliste", "richTextLinkDialogCancelButton": "Abbrechen", - "richTextLinkDialogEditButton": "Link aktualisieren", + "richTextLinkDialogEditButton": "Update link", "richTextLinkDialogEditTitle": "Link bearbeiten", - "richTextLinkDialogLinkError": "Geben Sie eine gültige URL ein", + "richTextLinkDialogLinkError": "Insert a valid URL", "richTextLinkDialogLinkLabel": "Link", "richTextLinkDialogNewButton": "Link einfügen", "richTextLinkDialogNewTitle": "Link hinzufügen", @@ -1852,7 +1809,6 @@ "setPassword.button": "Passwort festlegen", "setPassword.headline": "Passwort festlegen", "setPassword.passwordPlaceholder": "Passwort", - "showTogglePasswordLabel": "Passwort anzeigen", "ssoLogin.codeInputPlaceholder": "SSO-Code", "ssoLogin.codeOrMailInputPlaceholder": "E-Mail-Adresse oder SSO-Code", "ssoLogin.headline": "Anmeldung für Unternehmen", @@ -2003,8 +1959,6 @@ "userRemainingTimeHours": "{time}h verbleibend", "userRemainingTimeMinutes": "Weniger als {time}m verbleibend", "verify.changeEmail": "E-Mail-Adresse ändern", - "verify.codeLabel": "Sechsstelliger Code", - "verify.codePlaceholder": "Eingabefeld, Ziffer eingeben", "verify.headline": "Posteingang prüfen", "verify.resendCode": "Code erneut senden", "verify.subhead": "Geben Sie den sechsstelligen Bestätigungscode ein, den wir an {newline}{email} gesendet haben.", @@ -2017,20 +1971,16 @@ "videoCallMenuMoreRaiseHand": "Hand heben", "videoCallMenuMoreSeeParticipants": "Teilnehmerliste anzeigen", "videoCallMenuMoreVideoSettings": "Video-Einstellungen", - "videoCallNoCameraAvailable": "Keine Optionen", "videoCallOverlayCamera": "Kamera", "videoCallOverlayChangeViewMode": "Ansicht wechseln", "videoCallOverlayCloseFullScreen": "Zurück zur minimierten Ansicht", - "videoCallOverlayCloseOptions": "Optionen schließen", "videoCallOverlayConversations": "Unterhaltungen", "videoCallOverlayFitVideoLabel": "Doppelklicken, um Vollbildmodus anzuzeigen", "videoCallOverlayFitVideoLabelGoBack": "Doppelklicken, um alle Teilnehmer anzuzeigen", "videoCallOverlayHangUp": "Auflegen", "videoCallOverlayHideParticipantsList": "Teilnehmerliste ausblenden", "videoCallOverlayMicrophone": "Mikrofon", - "videoCallOverlayOpenCameraOptions": "Kameraoptionen öffnen", "videoCallOverlayOpenFullScreen": "Anruf im Vollbildmodus öffnen", - "videoCallOverlayOpenMicrophoneAndSpeakerOptions": "Mikrofon- und Lautsprecheroptionen öffnen", "videoCallOverlayOpenPopupWindow": "In neuem Fenster öffnen", "videoCallOverlayParticipantsListCloseButton": "Teilnehmerliste ausblenden", "videoCallOverlayParticipantsListLabel": "Teilnehmer ({count})", diff --git a/apps/webapp/src/i18n/el-CY.json b/apps/webapp/src/i18n/el-CY.json index 057cb69ad7e..f815ae21dd3 100644 --- a/apps/webapp/src/i18n/el-CY.json +++ b/apps/webapp/src/i18n/el-CY.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/el-GR.json b/apps/webapp/src/i18n/el-GR.json index 73ebd19f1fc..020b5f5edca 100644 --- a/apps/webapp/src/i18n/el-GR.json +++ b/apps/webapp/src/i18n/el-GR.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/en-US.json b/apps/webapp/src/i18n/en-US.json index da06703e863..e71266f7c46 100644 --- a/apps/webapp/src/i18n/en-US.json +++ b/apps/webapp/src/i18n/en-US.json @@ -706,13 +706,7 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", + "tabsFilterTooltip": "Customize visible tabs", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/es-ES.json b/apps/webapp/src/i18n/es-ES.json index db236c5ab36..b2ed8c4996b 100644 --- a/apps/webapp/src/i18n/es-ES.json +++ b/apps/webapp/src/i18n/es-ES.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/et-EE.json b/apps/webapp/src/i18n/et-EE.json index df0d30b5da5..e9e802350ff 100644 --- a/apps/webapp/src/i18n/et-EE.json +++ b/apps/webapp/src/i18n/et-EE.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/fa-IR.json b/apps/webapp/src/i18n/fa-IR.json index 3a929b5086c..106c7ce020f 100644 --- a/apps/webapp/src/i18n/fa-IR.json +++ b/apps/webapp/src/i18n/fa-IR.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/fi-FI.json b/apps/webapp/src/i18n/fi-FI.json index 4cbbe7b94dc..846a52d2892 100644 --- a/apps/webapp/src/i18n/fi-FI.json +++ b/apps/webapp/src/i18n/fi-FI.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/fr-FR.json b/apps/webapp/src/i18n/fr-FR.json index 125108814b6..18c343d083f 100644 --- a/apps/webapp/src/i18n/fr-FR.json +++ b/apps/webapp/src/i18n/fr-FR.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Ajoutez vos conversations à des dossiers pour rester organisé.", "conversationFoldersEmptyTextLearnMore": "En savoir plus", "conversationFooterArchive": "Archiver", diff --git a/apps/webapp/src/i18n/ga-IE.json b/apps/webapp/src/i18n/ga-IE.json index 057cb69ad7e..f815ae21dd3 100644 --- a/apps/webapp/src/i18n/ga-IE.json +++ b/apps/webapp/src/i18n/ga-IE.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/he-IL.json b/apps/webapp/src/i18n/he-IL.json index 057cb69ad7e..f815ae21dd3 100644 --- a/apps/webapp/src/i18n/he-IL.json +++ b/apps/webapp/src/i18n/he-IL.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/hi-IN.json b/apps/webapp/src/i18n/hi-IN.json index 4a2eff5e43d..5f7f0e5de72 100644 --- a/apps/webapp/src/i18n/hi-IN.json +++ b/apps/webapp/src/i18n/hi-IN.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/hr-HR.json b/apps/webapp/src/i18n/hr-HR.json index 1ec9afc3d5f..6efa9c518d0 100644 --- a/apps/webapp/src/i18n/hr-HR.json +++ b/apps/webapp/src/i18n/hr-HR.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/hu-HU.json b/apps/webapp/src/i18n/hu-HU.json index bee421909ca..5d72707ad45 100644 --- a/apps/webapp/src/i18n/hu-HU.json +++ b/apps/webapp/src/i18n/hu-HU.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/id-ID.json b/apps/webapp/src/i18n/id-ID.json index 1cea7dde01d..901e24c7def 100644 --- a/apps/webapp/src/i18n/id-ID.json +++ b/apps/webapp/src/i18n/id-ID.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/is-IS.json b/apps/webapp/src/i18n/is-IS.json index 057cb69ad7e..f815ae21dd3 100644 --- a/apps/webapp/src/i18n/is-IS.json +++ b/apps/webapp/src/i18n/is-IS.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/it-IT.json b/apps/webapp/src/i18n/it-IT.json index f922dcca8ec..084c0671a06 100644 --- a/apps/webapp/src/i18n/it-IT.json +++ b/apps/webapp/src/i18n/it-IT.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/ja-JP.json b/apps/webapp/src/i18n/ja-JP.json index afd863283cb..d245bac6e2f 100644 --- a/apps/webapp/src/i18n/ja-JP.json +++ b/apps/webapp/src/i18n/ja-JP.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/lb-LU.json b/apps/webapp/src/i18n/lb-LU.json index 057cb69ad7e..f815ae21dd3 100644 --- a/apps/webapp/src/i18n/lb-LU.json +++ b/apps/webapp/src/i18n/lb-LU.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/lt-LT.json b/apps/webapp/src/i18n/lt-LT.json index 3439c2c9494..ce4bc6a1159 100644 --- a/apps/webapp/src/i18n/lt-LT.json +++ b/apps/webapp/src/i18n/lt-LT.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/lv-LV.json b/apps/webapp/src/i18n/lv-LV.json index 6374d8f89b3..f75aeb3490b 100644 --- a/apps/webapp/src/i18n/lv-LV.json +++ b/apps/webapp/src/i18n/lv-LV.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/me-ME.json b/apps/webapp/src/i18n/me-ME.json index 057cb69ad7e..f815ae21dd3 100644 --- a/apps/webapp/src/i18n/me-ME.json +++ b/apps/webapp/src/i18n/me-ME.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/mk-MK.json b/apps/webapp/src/i18n/mk-MK.json index 057cb69ad7e..f815ae21dd3 100644 --- a/apps/webapp/src/i18n/mk-MK.json +++ b/apps/webapp/src/i18n/mk-MK.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/ms-MY.json b/apps/webapp/src/i18n/ms-MY.json index 057cb69ad7e..f815ae21dd3 100644 --- a/apps/webapp/src/i18n/ms-MY.json +++ b/apps/webapp/src/i18n/ms-MY.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/mt-MT.json b/apps/webapp/src/i18n/mt-MT.json index 057cb69ad7e..f815ae21dd3 100644 --- a/apps/webapp/src/i18n/mt-MT.json +++ b/apps/webapp/src/i18n/mt-MT.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/nl-NL.json b/apps/webapp/src/i18n/nl-NL.json index dd52c1659b8..f8e79c1d96f 100644 --- a/apps/webapp/src/i18n/nl-NL.json +++ b/apps/webapp/src/i18n/nl-NL.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/no-NO.json b/apps/webapp/src/i18n/no-NO.json index 7508ef3e18f..a133681e62f 100644 --- a/apps/webapp/src/i18n/no-NO.json +++ b/apps/webapp/src/i18n/no-NO.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/pl-PL.json b/apps/webapp/src/i18n/pl-PL.json index fe0b98d67e9..98de2102fb1 100644 --- a/apps/webapp/src/i18n/pl-PL.json +++ b/apps/webapp/src/i18n/pl-PL.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/pt-BR.json b/apps/webapp/src/i18n/pt-BR.json index 0a1275fe7b5..d94f6595f56 100644 --- a/apps/webapp/src/i18n/pt-BR.json +++ b/apps/webapp/src/i18n/pt-BR.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Arquivar", diff --git a/apps/webapp/src/i18n/pt-PT.json b/apps/webapp/src/i18n/pt-PT.json index c60dac5cf1f..86badc11907 100644 --- a/apps/webapp/src/i18n/pt-PT.json +++ b/apps/webapp/src/i18n/pt-PT.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/ro-RO.json b/apps/webapp/src/i18n/ro-RO.json index ad3e418eae8..753f22c8bcc 100644 --- a/apps/webapp/src/i18n/ro-RO.json +++ b/apps/webapp/src/i18n/ro-RO.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/ru-RU.json b/apps/webapp/src/i18n/ru-RU.json index 8adda374036..fcef17a6b2a 100644 --- a/apps/webapp/src/i18n/ru-RU.json +++ b/apps/webapp/src/i18n/ru-RU.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Перетаскивайте и добавляйте файлы", "conversationFileUploadOverlayTitle": "Загрузить файлы", "conversationFileVideoPreviewLabel": "Предпросмотр видео для: {src}", - "conversationFilterDrafts": "Черновики", - "conversationFilterMentions": "Упоминания", - "conversationFilterNone": "Без фильтра", - "conversationFilterPings": "Пинги", - "conversationFilterReplies": "Ответы", - "conversationFilterTooltip": "Отфильтровать беседы", - "conversationFilterUnread": "Непрочитано", "conversationFoldersEmptyText": "Добавляйте беседы в папки, чтобы сохранять их упорядоченность.", "conversationFoldersEmptyTextLearnMore": "Подробнее", "conversationFooterArchive": "Архив", diff --git a/apps/webapp/src/i18n/si-LK.json b/apps/webapp/src/i18n/si-LK.json index f27a29f8fc1..c76b2a4469e 100644 --- a/apps/webapp/src/i18n/si-LK.json +++ b/apps/webapp/src/i18n/si-LK.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "සංරක්‍ෂණය", diff --git a/apps/webapp/src/i18n/sk-SK.json b/apps/webapp/src/i18n/sk-SK.json index 871f2a658f3..43c5fe3c019 100644 --- a/apps/webapp/src/i18n/sk-SK.json +++ b/apps/webapp/src/i18n/sk-SK.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/sl-SI.json b/apps/webapp/src/i18n/sl-SI.json index 4ebf9455dec..5ede5aefc9b 100644 --- a/apps/webapp/src/i18n/sl-SI.json +++ b/apps/webapp/src/i18n/sl-SI.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/sq-AL.json b/apps/webapp/src/i18n/sq-AL.json index 057cb69ad7e..f815ae21dd3 100644 --- a/apps/webapp/src/i18n/sq-AL.json +++ b/apps/webapp/src/i18n/sq-AL.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/sr-Cyrl-ME.json b/apps/webapp/src/i18n/sr-Cyrl-ME.json index 057cb69ad7e..f815ae21dd3 100644 --- a/apps/webapp/src/i18n/sr-Cyrl-ME.json +++ b/apps/webapp/src/i18n/sr-Cyrl-ME.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/sr-SP.json b/apps/webapp/src/i18n/sr-SP.json index ce8552a0665..7913a7e0456 100644 --- a/apps/webapp/src/i18n/sr-SP.json +++ b/apps/webapp/src/i18n/sr-SP.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/sv-SE.json b/apps/webapp/src/i18n/sv-SE.json index 72294d339ea..94f37680a39 100644 --- a/apps/webapp/src/i18n/sv-SE.json +++ b/apps/webapp/src/i18n/sv-SE.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Läs mer", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/th-TH.json b/apps/webapp/src/i18n/th-TH.json index 057cb69ad7e..f815ae21dd3 100644 --- a/apps/webapp/src/i18n/th-TH.json +++ b/apps/webapp/src/i18n/th-TH.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/tr-CY.json b/apps/webapp/src/i18n/tr-CY.json index 057cb69ad7e..f815ae21dd3 100644 --- a/apps/webapp/src/i18n/tr-CY.json +++ b/apps/webapp/src/i18n/tr-CY.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/tr-TR.json b/apps/webapp/src/i18n/tr-TR.json index cba939bc6e9..26803d5e053 100644 --- a/apps/webapp/src/i18n/tr-TR.json +++ b/apps/webapp/src/i18n/tr-TR.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/uk-UA.json b/apps/webapp/src/i18n/uk-UA.json index 7436a2a0516..093eb79db13 100644 --- a/apps/webapp/src/i18n/uk-UA.json +++ b/apps/webapp/src/i18n/uk-UA.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/uz-UZ.json b/apps/webapp/src/i18n/uz-UZ.json index 057cb69ad7e..f815ae21dd3 100644 --- a/apps/webapp/src/i18n/uz-UZ.json +++ b/apps/webapp/src/i18n/uz-UZ.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/vi-VN.json b/apps/webapp/src/i18n/vi-VN.json index 057cb69ad7e..f815ae21dd3 100644 --- a/apps/webapp/src/i18n/vi-VN.json +++ b/apps/webapp/src/i18n/vi-VN.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/zh-CN.json b/apps/webapp/src/i18n/zh-CN.json index 7be656976ca..ce69c04eead 100644 --- a/apps/webapp/src/i18n/zh-CN.json +++ b/apps/webapp/src/i18n/zh-CN.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/zh-HK.json b/apps/webapp/src/i18n/zh-HK.json index 057cb69ad7e..f815ae21dd3 100644 --- a/apps/webapp/src/i18n/zh-HK.json +++ b/apps/webapp/src/i18n/zh-HK.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/i18n/zh-TW.json b/apps/webapp/src/i18n/zh-TW.json index 5fed35a5c94..03e5591f1af 100644 --- a/apps/webapp/src/i18n/zh-TW.json +++ b/apps/webapp/src/i18n/zh-TW.json @@ -706,13 +706,6 @@ "conversationFileUploadOverlayDescription": "Drag & drop to add files", "conversationFileUploadOverlayTitle": "Upload files", "conversationFileVideoPreviewLabel": "Video file preview for: {src}", - "conversationFilterDrafts": "Drafts", - "conversationFilterMentions": "Mentions", - "conversationFilterNone": "No filter", - "conversationFilterPings": "Pings", - "conversationFilterReplies": "Replies", - "conversationFilterTooltip": "Filter conversations", - "conversationFilterUnread": "Unread", "conversationFoldersEmptyText": "Add your conversations to folders to stay organized.", "conversationFoldersEmptyTextLearnMore": "Learn more", "conversationFooterArchive": "Archive", diff --git a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/ConversationFilterButton/ConversationFilterButton.styles.ts b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/ConversationFilterButton/ConversationFilterButton.styles.ts index 739be1e029c..1eaf1978b56 100644 --- a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/ConversationFilterButton/ConversationFilterButton.styles.ts +++ b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/ConversationFilterButton/ConversationFilterButton.styles.ts @@ -45,38 +45,28 @@ export const dropdown: CSSObject = { top: '100%', right: 0, marginTop: '4px', - minWidth: '200px', - backgroundColor: 'var(--app-bg)', - border: '1px solid var(--border-color)', - borderRadius: '8px', - boxShadow: '0 4px 16px rgba(0, 0, 0, 0.1)', + width: 'max-content', + padding: '8px 0', + backgroundColor: 'var(--dropdown-menu-bg)', + borderRadius: '12px', + boxShadow: '0 0 1px 0 rgba(0, 0, 0, 0.08), 0 8px 24px 0 rgba(0, 0, 0, 0.16)', zIndex: 10, overflow: 'hidden', }; -export const dropdownItem: CSSObject = { - display: 'block', - width: '100%', - padding: '12px 16px', - textAlign: 'left', - border: 'none', - backgroundColor: 'transparent', - color: 'var(--foreground)', - fontSize: '14px', +export const dropdownCheckboxItem: CSSObject = { + display: 'flex', + alignItems: 'center', + height: '30px', + padding: '0 24px', cursor: 'pointer', transition: 'background-color 0.15s ease', + whiteSpace: 'nowrap', '&:hover': { - backgroundColor: 'var(--background-fade-8)', + backgroundColor: 'var(--foreground-fade-16)', }, }; -export const activeDropdownItem: CSSObject = { - ...dropdownItem, - backgroundColor: 'var(--background-fade-16)', - color: 'var(--accent-color)', - fontWeight: 600, -}; - export const filterButtonWrapper: CSSObject = { position: 'relative', }; diff --git a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/ConversationFilterButton/index.ts b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/ConversationFilterButton/index.ts index bc4a01b302f..0f64d2bbcf9 100644 --- a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/ConversationFilterButton/index.ts +++ b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/ConversationFilterButton/index.ts @@ -17,4 +17,4 @@ * */ -export * from './ConversationFilterButton'; +export {TabsFilterButton} from './TabsFilterButton'; diff --git a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/ConversationTabs/ConversationTabs.tsx b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/ConversationTabs/ConversationTabs.tsx index cb74ce7de4c..8699550ae44 100644 --- a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/ConversationTabs/ConversationTabs.tsx +++ b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/ConversationTabs/ConversationTabs.tsx @@ -39,7 +39,7 @@ import {TeamState} from 'Repositories/team/TeamState'; import {FEATURES, hasAccessToFeature} from 'Repositories/user/UserPermission'; import {getManageTeamUrl} from 'src/script/externalRoute'; import {ConversationFolderTab} from 'src/script/page/LeftSidebar/panels/Conversations/ConversationTab/ConversationFolderTab'; -import {SidebarTabs} from 'src/script/page/LeftSidebar/panels/Conversations/useSidebarStore'; +import {SidebarTabs, useSidebarStore} from 'src/script/page/LeftSidebar/panels/Conversations/useSidebarStore'; import {Core} from 'src/script/service/CoreSingleton'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; import {isDataDogEnabled} from 'Util/DataDog'; @@ -59,8 +59,8 @@ import {TeamCreationBanner} from './TeamCreation/TeamCreationBanner'; import {Config} from '../../../../../Config'; import {ContentState} from '../../../../useAppState'; -import {ConversationFilterButton} from '../ConversationFilterButton'; import {ConversationTab} from '../ConversationTab'; +import {TabsFilterButton} from '../TabsFilterButton'; interface ConversationTabsProps { conversations: Conversation[]; @@ -95,6 +95,7 @@ export const ConversationTabs = ({ selfUser, channelConversations, }: ConversationTabsProps) => { + const {visibleTabs} = useSidebarStore(); const {isChannelsEnabled, isChannelsFeatureEnabled} = useChannelsFeatureFlag(); const core = container.resolve(Core); const teamState = container.resolve(TeamState); @@ -224,6 +225,12 @@ export const ConversationTabs = ({ unreadConversations: channelConversationsLength, }); } + + // filter tabs based on visibility prefs (RECENT should always bevisible) + const visibleConversationTabs = conversationTabs.filter( + tab => tab.type === SidebarTabs.RECENT || visibleTabs.includes(tab.type), + ); + const manageTeamUrl = getManageTeamUrl(); const replaceWireLink = replaceLink('https://app.wire.com', '', ''); @@ -239,10 +246,10 @@ export const ConversationTabs = ({ >
{t('videoCallOverlayConversations')} - +
- {conversationTabs.map((conversationTab, index) => { + {visibleConversationTabs.map((conversationTab, index) => { if (conversationTab.type === SidebarTabs.FOLDER) { return ( state)); const {isChannelsEnabled} = useChannelsFeatureFlag(); const [conversationsFilter, setConversationsFilter] = useState(''); @@ -200,7 +199,6 @@ export const Conversations = ({ channelConversations, isChannelsEnabled, channelAndGroupConversations, - conversationFilter, draftConversations, }); diff --git a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/Helpers.test.tsx b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/Helpers.test.tsx index 641540c6da5..c6aeaf1f8aa 100644 --- a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/Helpers.test.tsx +++ b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/Helpers.test.tsx @@ -21,7 +21,7 @@ import {Conversation} from 'Repositories/entity/Conversation'; import {getTabConversations} from 'src/script/page/LeftSidebar/panels/Conversations/helpers'; import {generateConversation} from 'test/helper/ConversationGenerator'; -import {SidebarTabs, ConversationFilter} from './useSidebarStore'; +import {SidebarTabs} from './useSidebarStore'; describe('getTabConversations', () => { let conversations: Conversation[]; @@ -56,7 +56,6 @@ describe('getTabConversations', () => { channelAndGroupConversations: groupConversations, channelConversations: [], isChannelsEnabled: false, - conversationFilter: ConversationFilter.NONE, draftConversations: [], }); }; @@ -123,7 +122,6 @@ describe('getTabConversations', () => { channelAndGroupConversations: newGroupConversations, channelConversations: [], isChannelsEnabled: false, - conversationFilter: ConversationFilter.NONE, draftConversations: [], }); @@ -138,7 +136,6 @@ describe('getTabConversations', () => { channelAndGroupConversations: groupConversations, channelConversations: [], isChannelsEnabled: false, - conversationFilter: ConversationFilter.NONE, draftConversations: [], }); diff --git a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/TabsFilterButton/TabsFilterButton.styles.ts b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/TabsFilterButton/TabsFilterButton.styles.ts new file mode 100644 index 00000000000..1eaf1978b56 --- /dev/null +++ b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/TabsFilterButton/TabsFilterButton.styles.ts @@ -0,0 +1,72 @@ +/* + * Wire + * Copyright (C) 2025 Wire Swiss GmbH + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see http://www.gnu.org/licenses/. + * + */ + +import {CSSObject} from '@emotion/react'; + +export const filterButton = (isActive: boolean): CSSObject => ({ + background: 'none', + border: 'none', + padding: '4px', + cursor: 'pointer', + color: isActive ? 'var(--accent-color)' : 'var(--foreground)', + transition: 'color 0.15s ease', + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + '&:hover': { + color: 'var(--accent-color)', + }, + '&:focus': { + outline: 'none', + }, + '& svg': { + fill: 'currentColor', + }, +}); + +export const dropdown: CSSObject = { + position: 'absolute', + top: '100%', + right: 0, + marginTop: '4px', + width: 'max-content', + padding: '8px 0', + backgroundColor: 'var(--dropdown-menu-bg)', + borderRadius: '12px', + boxShadow: '0 0 1px 0 rgba(0, 0, 0, 0.08), 0 8px 24px 0 rgba(0, 0, 0, 0.16)', + zIndex: 10, + overflow: 'hidden', +}; + +export const dropdownCheckboxItem: CSSObject = { + display: 'flex', + alignItems: 'center', + height: '30px', + padding: '0 24px', + cursor: 'pointer', + transition: 'background-color 0.15s ease', + whiteSpace: 'nowrap', + '&:hover': { + backgroundColor: 'var(--foreground-fade-16)', + }, +}; + +export const filterButtonWrapper: CSSObject = { + position: 'relative', +}; diff --git a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/TabsFilterButton/TabsFilterButton.tsx b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/TabsFilterButton/TabsFilterButton.tsx new file mode 100644 index 00000000000..700f94c4e74 --- /dev/null +++ b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/TabsFilterButton/TabsFilterButton.tsx @@ -0,0 +1,120 @@ +/* + * Wire + * Copyright (C) 2025 Wire Swiss GmbH + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see http://www.gnu.org/licenses/. + * + */ + +import {useState, useRef, useEffect} from 'react'; + +import {container} from 'tsyringe'; + +import {Checkbox, CheckboxLabel} from '@wireapp/react-ui-kit'; + +import * as Icon from 'Components/Icon'; +import {TeamState} from 'Repositories/team/TeamState'; +import {Config} from 'src/script/Config'; +import {SidebarTabs, useSidebarStore} from 'src/script/page/LeftSidebar/panels/Conversations/useSidebarStore'; +import {useKoSubscribableChildren} from 'Util/ComponentUtil'; +import {t} from 'Util/LocalizerUtil'; +import {useChannelsFeatureFlag} from 'Util/useChannelsFeatureFlag'; + +import {dropdown, dropdownCheckboxItem, filterButton, filterButtonWrapper} from './TabsFilterButton.styles'; + +export const TabsFilterButton = () => { + const {visibleTabs, toggleTabVisibility} = useSidebarStore(); + const [isOpen, setIsOpen] = useState(false); + const dropdownRef = useRef(null); + const buttonRef = useRef(null); + + const {isChannelsEnabled} = useChannelsFeatureFlag(); + const teamState = container.resolve(TeamState); + const {isCellsEnabled: isCellsEnabledForTeam} = useKoSubscribableChildren(teamState, ['isCellsEnabled']); + + useEffect(() => { + const handleClickOutside = (event: MouseEvent) => { + if ( + dropdownRef.current && + !dropdownRef.current.contains(event.target as Node) && + buttonRef.current && + !buttonRef.current.contains(event.target as Node) + ) { + setIsOpen(false); + } + }; + + if (isOpen) { + document.addEventListener('mousedown', handleClickOutside); + } + + return () => { + document.removeEventListener('mousedown', handleClickOutside); + }; + }, [isOpen]); + + if (!Config.getConfig().FEATURE.ENABLE_ADVANCED_FILTERS) { + return null; + } + + const showCells = Config.getConfig().FEATURE.ENABLE_CELLS && isCellsEnabledForTeam; + + const availableTabs = [ + {type: SidebarTabs.FAVORITES, label: t('conversationLabelFavorites')}, + {type: SidebarTabs.GROUPS, label: t('conversationLabelGroups')}, + {type: SidebarTabs.DIRECTS, label: t('conversationLabelDirects')}, + {type: SidebarTabs.FOLDER, label: t('folderViewTooltip')}, + {type: SidebarTabs.ARCHIVES, label: t('conversationFooterArchive')}, + {type: SidebarTabs.UNREAD, label: t('conversationLabelUnread')}, + {type: SidebarTabs.MENTIONS, label: t('conversationLabelMentions')}, + {type: SidebarTabs.REPLIES, label: t('conversationLabelReplies')}, + {type: SidebarTabs.DRAFTS, label: t('conversationLabelDrafts')}, + {type: SidebarTabs.PINGS, label: t('conversationLabelPings')}, + ]; + + if (isChannelsEnabled) { + availableTabs.splice(2, 0, {type: SidebarTabs.CHANNELS, label: t('conversationLabelChannels')}); + } + + if (showCells) { + availableTabs.push({type: SidebarTabs.CELLS, label: t('cells.sidebar.title')}); + } + + return ( +
+ + + {isOpen && ( +
+ {availableTabs.map(tab => ( +
+ toggleTabVisibility(tab.type)}> + {tab.label} + +
+ ))} +
+ )} +
+ ); +}; diff --git a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/TabsFilterButton/index.ts b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/TabsFilterButton/index.ts new file mode 100644 index 00000000000..0f64d2bbcf9 --- /dev/null +++ b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/TabsFilterButton/index.ts @@ -0,0 +1,20 @@ +/* + * Wire + * Copyright (C) 2025 Wire Swiss GmbH + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see http://www.gnu.org/licenses/. + * + */ + +export {TabsFilterButton} from './TabsFilterButton'; diff --git a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/helpers.tsx b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/helpers.tsx index bac52f46f6a..5ae2dcb7107 100644 --- a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/helpers.tsx +++ b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/helpers.tsx @@ -21,7 +21,7 @@ import {Conversation} from 'Repositories/entity/Conversation'; import {t} from 'Util/LocalizerUtil'; import {replaceAccents} from 'Util/StringUtil'; -import {ConversationFilter, SidebarTabs} from './useSidebarStore'; +import {SidebarTabs} from './useSidebarStore'; interface GetTabConversationsProps { currentTab: SidebarTabs; @@ -35,7 +35,6 @@ interface GetTabConversationsProps { channelAndGroupConversations: Conversation[]; conversationsFilter: string; isChannelsEnabled: boolean; - conversationFilter: ConversationFilter; draftConversations: Conversation[]; } @@ -44,33 +43,6 @@ type GetTabConversations = { searchInputPlaceholder: string; }; -const applyAdvancedFilter = ( - conversations: Conversation[], - filter: ConversationFilter, - draftConversations: Conversation[], -): Conversation[] => { - if (filter === ConversationFilter.NONE) { - return conversations; - } - - return conversations.filter(conversation => { - switch (filter) { - case ConversationFilter.UNREAD: - return conversation.hasUnread(); - case ConversationFilter.MENTIONS: - return conversation.unreadState().selfMentions.length > 0; - case ConversationFilter.REPLIES: - return conversation.unreadState().selfReplies.length > 0; - case ConversationFilter.DRAFTS: - return draftConversations.some(draftConv => draftConv.id === conversation.id); - case ConversationFilter.PINGS: - return conversation.unreadState().pings.length > 0; - default: - return true; - } - }); -}; - export function getTabConversations({ currentTab, conversations, @@ -82,7 +54,6 @@ export function getTabConversations({ channelConversations, isChannelsEnabled, channelAndGroupConversations, - conversationFilter, draftConversations, }: GetTabConversationsProps): GetTabConversations { const conversationSearchFilter = (conversation: Conversation) => { @@ -97,7 +68,7 @@ export function getTabConversations({ if ([SidebarTabs.FOLDER, SidebarTabs.RECENT].includes(currentTab)) { if (!conversationsFilter) { return { - conversations: applyAdvancedFilter(conversations, conversationFilter, draftConversations), + conversations: conversations, searchInputPlaceholder: t('searchConversations'), }; } @@ -114,7 +85,7 @@ export function getTabConversations({ const combinedConversations = [...filteredConversations, ...filteredGroupConversations]; return { - conversations: applyAdvancedFilter(combinedConversations, conversationFilter, draftConversations), + conversations: combinedConversations, searchInputPlaceholder: t('searchConversations'), }; } @@ -124,7 +95,7 @@ export function getTabConversations({ const filteredConversations = conversations.filter(conversationArchivedFilter).filter(conversationSearchFilter); return { - conversations: applyAdvancedFilter(filteredConversations, conversationFilter, draftConversations), + conversations: filteredConversations, searchInputPlaceholder: t('searchGroupConversations'), }; } @@ -135,7 +106,7 @@ export function getTabConversations({ .filter(conversationSearchFilter); return { - conversations: applyAdvancedFilter(filteredConversations, conversationFilter, draftConversations), + conversations: filteredConversations, searchInputPlaceholder: t('searchChannelConversations'), }; } @@ -146,7 +117,7 @@ export function getTabConversations({ .filter(conversationSearchFilter); return { - conversations: applyAdvancedFilter(filteredConversations, conversationFilter, draftConversations), + conversations: filteredConversations, searchInputPlaceholder: t('searchDirectConversations'), }; } @@ -155,7 +126,7 @@ export function getTabConversations({ const filteredConversations = favoriteConversations.filter(conversationSearchFilter); return { - conversations: applyAdvancedFilter(filteredConversations, conversationFilter, draftConversations), + conversations: filteredConversations, searchInputPlaceholder: t('searchFavoriteConversations'), }; } @@ -164,7 +135,7 @@ export function getTabConversations({ const filteredConversations = archivedConversations.filter(conversationSearchFilter); return { - conversations: applyAdvancedFilter(filteredConversations, conversationFilter, draftConversations), + conversations: filteredConversations, searchInputPlaceholder: t('searchArchivedConversations'), }; } diff --git a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/useSidebarStore.ts b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/useSidebarStore.ts index dbd56f29eb9..aa8e11bd219 100644 --- a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/useSidebarStore.ts +++ b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/useSidebarStore.ts @@ -38,15 +38,6 @@ export enum SidebarTabs { CELLS, } -export enum ConversationFilter { - NONE = 'NONE', - UNREAD = 'UNREAD', - MENTIONS = 'MENTIONS', - REPLIES = 'REPLIES', - DRAFTS = 'DRAFTS', - PINGS = 'PINGS', -} - export const SidebarStatus = { OPEN: 'OPEN', CLOSED: 'CLOSED', @@ -59,8 +50,9 @@ export interface SidebarStore { setStatus: (status: SidebarStatus) => void; currentTab: SidebarTabs; setCurrentTab: (tab: SidebarTabs) => void; - conversationFilter: ConversationFilter; - setConversationFilter: (filter: ConversationFilter) => void; + visibleTabs: SidebarTabs[]; + setVisibleTabs: (tabs: SidebarTabs[]) => void; + toggleTabVisibility: (tab: SidebarTabs) => void; } const useSidebarStore = create()( @@ -72,8 +64,40 @@ const useSidebarStore = create()( }, status: SidebarStatus.OPEN, setStatus: status => set({status: status}), - conversationFilter: ConversationFilter.NONE, - setConversationFilter: (filter: ConversationFilter) => set({conversationFilter: filter}), + visibleTabs: [ + SidebarTabs.RECENT, + SidebarTabs.FOLDER, + SidebarTabs.FAVORITES, + SidebarTabs.GROUPS, + SidebarTabs.CHANNELS, + SidebarTabs.DIRECTS, + SidebarTabs.UNREAD, + SidebarTabs.MENTIONS, + SidebarTabs.REPLIES, + SidebarTabs.DRAFTS, + SidebarTabs.PINGS, + SidebarTabs.ARCHIVES, + ], + setVisibleTabs: (tabs: SidebarTabs[]) => set({visibleTabs: tabs}), + toggleTabVisibility: (tab: SidebarTabs) => { + set(state => { + const isCurrentlyVisible = state.visibleTabs.includes(tab); + const isActiveTab = state.currentTab === tab; + + if (isCurrentlyVisible && isActiveTab) { + return { + currentTab: SidebarTabs.RECENT, + visibleTabs: state.visibleTabs.filter(visibleTab => visibleTab !== tab), + }; + } + + const newVisibleTabs = isCurrentlyVisible + ? state.visibleTabs.filter(visibleTab => visibleTab !== tab) + : [...state.visibleTabs, tab]; + + return {visibleTabs: newVisibleTabs}; + }); + }, }), { name: 'sidebar-store', @@ -83,7 +107,7 @@ const useSidebarStore = create()( currentTab: [SidebarTabs.PREFERENCES, SidebarTabs.CONNECT, SidebarTabs.CELLS].includes(state.currentTab) ? SidebarTabs.RECENT : state.currentTab, - conversationFilter: state.conversationFilter, + visibleTabs: state.visibleTabs, }), }, ), diff --git a/apps/webapp/src/types/i18n.d.ts b/apps/webapp/src/types/i18n.d.ts index edc34ee07c2..32a3b45f1dd 100644 --- a/apps/webapp/src/types/i18n.d.ts +++ b/apps/webapp/src/types/i18n.d.ts @@ -710,13 +710,7 @@ declare module 'I18n/en-US.json' { 'conversationFileUploadOverlayDescription': `Drag & drop to add files`; 'conversationFileUploadOverlayTitle': `Upload files`; 'conversationFileVideoPreviewLabel': `Video file preview for: {src}`; - 'conversationFilterDrafts': `Drafts`; - 'conversationFilterMentions': `Mentions`; - 'conversationFilterNone': `No filter`; - 'conversationFilterPings': `Pings`; - 'conversationFilterReplies': `Replies`; - 'conversationFilterTooltip': `Filter conversations`; - 'conversationFilterUnread': `Unread`; + 'tabsFilterTooltip': `Customize visible tabs`; 'conversationFoldersEmptyText': `Add your conversations to folders to stay organized.`; 'conversationFoldersEmptyTextLearnMore': `Learn more`; 'conversationFooterArchive': `Archive`; From bb2d11b222baccb36f450ef96fad43c219c7bbd5 Mon Sep 17 00:00:00 2001 From: Emil Abramov Date: Thu, 13 Nov 2025 23:08:02 +0100 Subject: [PATCH 05/20] chore(tabs): linter warnings & typo --- .../panels/Conversations/Conversations.tsx | 65 +++++++++++-------- 1 file changed, 38 insertions(+), 27 deletions(-) diff --git a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/Conversations.tsx b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/Conversations.tsx index e9e9f75aaae..3214233e24f 100644 --- a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/Conversations.tsx +++ b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/Conversations.tsx @@ -225,12 +225,12 @@ export const Conversations = ({ const showConnectionRequests = [SidebarTabs.RECENT, SidebarTabs.DIRECTS].includes(currentTab); const hasVisibleConnectionRequests = connectRequests.length > 0 && showConnectionRequests; const hasVisibleConversations = currentTabConversations.length > 0; - const hasNoVisbleConversations = !hasVisibleConversations && !hasVisibleConnectionRequests; + const hasNoVisibleConversations = !hasVisibleConversations && !hasVisibleConnectionRequests; const hasEmptyConversationsList = !isGroupParticipantsVisible && - ((showSearchInput && hasNoVisbleConversations) || - (hasNoVisbleConversations && currentTab !== SidebarTabs.ARCHIVES)); + ((showSearchInput && hasNoVisibleConversations) || + (hasNoVisibleConversations && currentTab !== SidebarTabs.ARCHIVES)); const toggleSidebar = useCallback(() => { if (isFoldersTabOpen) { @@ -256,7 +256,7 @@ export const Conversations = ({ setCurrentTab(SidebarTabs.RECENT); } }); - }, [currentTabConversations]); + }, [currentTabConversations, setCurrentTab]); useEffect(() => { if (activeConversation && !conversationState.isVisible(activeConversation)) { @@ -275,15 +275,7 @@ export const Conversations = ({ return () => { amplify.unsubscribe(WebAppEvents.CONTENT.EXPAND_FOLDER, openFolder); }; - }, [activeConversation]); - - useEffect(() => { - const openFavorites = () => changeTab(SidebarTabs.FAVORITES); - conversationLabelRepository.addEventListener('conversation-favorited', openFavorites); - return () => { - conversationLabelRepository.removeEventListener('conversation-favorited', openFavorites); - }; - }, []); + }, [activeConversation, openFolder]); const clearConversationFilter = useCallback(() => setConversationsFilter(''), []); @@ -294,7 +286,7 @@ export const Conversations = ({ setCurrentView(ViewType.MOBILE_LEFT_SIDEBAR); switchList(ListState.CONVERSATIONS); switchContent(ContentState.CONVERSATION); - }, []); + }, [setCurrentView, switchList, switchContent]); const changeTab = useCallback( (nextTab: SidebarTabs, folderId?: string) => { @@ -319,20 +311,39 @@ export const Conversations = ({ clearConversationFilter(); setCurrentTab(nextTab); }, - [conversationRepository], + [ + conversationRepository, + closeFolder, + onExitPreferences, + switchList, + switchContent, + clearConversationFilter, + setCurrentTab, + ], ); - const onClickPreferences = useCallback((itemId: ContentState) => { - switchList(ListState.PREFERENCES); - setCurrentView(ViewType.MOBILE_CENTRAL_COLUMN); - switchContent(itemId); - - setTimeout(() => { - const centerColumn = document.getElementById('center-column'); - const nextElementToFocus = centerColumn?.querySelector("[tabindex='0']") as HTMLElement | null; - nextElementToFocus?.focus(); - }, ANIMATED_PAGE_TRANSITION_DURATION + 1); - }, []); + useEffect(() => { + const openFavorites = () => changeTab(SidebarTabs.FAVORITES); + conversationLabelRepository.addEventListener('conversation-favorited', openFavorites); + return () => { + conversationLabelRepository.removeEventListener('conversation-favorited', openFavorites); + }; + }, [changeTab, conversationLabelRepository]); + + const onClickPreferences = useCallback( + (itemId: ContentState) => { + switchList(ListState.PREFERENCES); + setCurrentView(ViewType.MOBILE_CENTRAL_COLUMN); + switchContent(itemId); + + setTimeout(() => { + const centerColumn = document.getElementById('center-column'); + const nextElementToFocus = centerColumn?.querySelector("[tabindex='0']") as HTMLElement | null; + nextElementToFocus?.focus(); + }, ANIMATED_PAGE_TRANSITION_DURATION + 1); + }, + [switchList, setCurrentView, switchContent], + ); const handleEnterSearchClick = useCallback( (event: ReactKeyBoardEvent) => { @@ -358,7 +369,7 @@ export const Conversations = ({ const jumpToRecentSearch = useCallback(() => { switchList(ListState.CONVERSATIONS); setCurrentTab(SidebarTabs.RECENT); - }, []); + }, [switchList, setCurrentTab]); return (
From 68ef0ef3f6fee8aa07e6d0c4f0726473a439febf Mon Sep 17 00:00:00 2001 From: Emil Abramov Date: Thu, 13 Nov 2025 23:28:17 +0100 Subject: [PATCH 06/20] chore(tabs): no need to duplicate stuff --- .../ConversationTabs/ConversationTabs.tsx | 13 +++++++------ .../LeftSidebar/panels/Conversations/helpers.tsx | 16 ++++++++++++---- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/ConversationTabs/ConversationTabs.tsx b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/ConversationTabs/ConversationTabs.tsx index 8699550ae44..b67c401bda3 100644 --- a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/ConversationTabs/ConversationTabs.tsx +++ b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/ConversationTabs/ConversationTabs.tsx @@ -60,6 +60,7 @@ import {TeamCreationBanner} from './TeamCreation/TeamCreationBanner'; import {Config} from '../../../../../Config'; import {ContentState} from '../../../../useAppState'; import {ConversationTab} from '../ConversationTab'; +import {conversationFilters} from '../helpers'; import {TabsFilterButton} from '../TabsFilterButton'; interface ConversationTabsProps { @@ -112,7 +113,7 @@ export const ConversationTabs = ({ ).length; const filterUnreadAndArchivedConversations = (conversation: Conversation) => - !conversation.is_archived() && conversation.hasUnread(); + conversationFilters.notArchived(conversation) && conversationFilters.hasUnread(conversation); const isTeamCreationEnabled = Config.getConfig().FEATURE.ENABLE_TEAM_CREATION && @@ -121,16 +122,16 @@ export const ConversationTabs = ({ const channelConversationsLength = channelConversations.filter(filterUnreadAndArchivedConversations).length; const groupConversationsLength = groupConversations.filter(filterUnreadAndArchivedConversations).length; - const unreadCount = unreadConversations.filter(conv => !conv.is_archived()).length; + const unreadCount = unreadConversations.filter(conversationFilters.notArchived).length; const mentionsCount = unreadConversations.filter( - conv => !conv.is_archived() && conv.unreadState().selfMentions.length > 0, + conv => conversationFilters.notArchived(conv) && conversationFilters.hasMentions(conv), ).length; const repliesCount = unreadConversations.filter( - conv => !conv.is_archived() && conv.unreadState().selfReplies.length > 0, + conv => conversationFilters.notArchived(conv) && conversationFilters.hasReplies(conv), ).length; - const draftsCount = draftConversations.filter(conv => !conv.is_archived()).length; + const draftsCount = draftConversations.filter(conversationFilters.notArchived).length; const pingsCount = unreadConversations.filter( - conv => !conv.is_archived() && conv.unreadState().pings.length > 0, + conv => conversationFilters.notArchived(conv) && conversationFilters.hasPings(conv), ).length; const conversationTabs = [ diff --git a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/helpers.tsx b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/helpers.tsx index 5ae2dcb7107..6663bc021f9 100644 --- a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/helpers.tsx +++ b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/helpers.tsx @@ -23,6 +23,14 @@ import {replaceAccents} from 'Util/StringUtil'; import {SidebarTabs} from './useSidebarStore'; +export const conversationFilters = { + hasUnread: (conv: Conversation) => conv.hasUnread(), + hasMentions: (conv: Conversation) => conv.unreadState().selfMentions.length > 0, + hasReplies: (conv: Conversation) => conv.unreadState().selfReplies.length > 0, + hasPings: (conv: Conversation) => conv.unreadState().pings.length > 0, + notArchived: (conv: Conversation) => !conv.is_archived(), +}; + interface GetTabConversationsProps { currentTab: SidebarTabs; @@ -143,7 +151,7 @@ export function getTabConversations({ if (currentTab === SidebarTabs.UNREAD) { const filteredConversations = conversations .filter(conversationArchivedFilter) - .filter(conv => conv.hasUnread()) + .filter(conversationFilters.hasUnread) .filter(conversationSearchFilter); return { @@ -155,7 +163,7 @@ export function getTabConversations({ if (currentTab === SidebarTabs.MENTIONS) { const filteredConversations = conversations .filter(conversationArchivedFilter) - .filter(conv => conv.unreadState().selfMentions.length > 0) + .filter(conversationFilters.hasMentions) .filter(conversationSearchFilter); return { @@ -167,7 +175,7 @@ export function getTabConversations({ if (currentTab === SidebarTabs.REPLIES) { const filteredConversations = conversations .filter(conversationArchivedFilter) - .filter(conv => conv.unreadState().selfReplies.length > 0) + .filter(conversationFilters.hasReplies) .filter(conversationSearchFilter); return { @@ -190,7 +198,7 @@ export function getTabConversations({ if (currentTab === SidebarTabs.PINGS) { const filteredConversations = conversations .filter(conversationArchivedFilter) - .filter(conv => conv.unreadState().pings.length > 0) + .filter(conversationFilters.hasPings) .filter(conversationSearchFilter); return { From 5d447beea50d42f58d87955cbee3cf6a238b3c99 Mon Sep 17 00:00:00 2001 From: Emil Abramov Date: Thu, 13 Nov 2025 23:49:15 +0100 Subject: [PATCH 07/20] chore(tabs): get rid of polling, use amplify instead --- .../InputBar/common/draftState/draftState.ts | 7 ++++++ .../hooks/useDraftConversations.ts | 23 +++++++++++++++---- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/apps/webapp/src/script/components/InputBar/common/draftState/draftState.ts b/apps/webapp/src/script/components/InputBar/common/draftState/draftState.ts index ff63cae9d4f..73a87b772af 100644 --- a/apps/webapp/src/script/components/InputBar/common/draftState/draftState.ts +++ b/apps/webapp/src/script/components/InputBar/common/draftState/draftState.ts @@ -17,11 +17,15 @@ * */ +import {amplify} from 'amplify'; + import {MessageRepository} from 'Repositories/conversation/MessageRepository'; import {Conversation} from 'Repositories/entity/Conversation'; import {ContentMessage} from 'Repositories/entity/message/ContentMessage'; import {StorageKey, StorageRepository} from 'Repositories/storage'; +export const DRAFT_STATE_CHANGED_EVENT = 'conversation.draft-changed'; + export interface DraftState { editorState: string | null; messageReply?: ContentMessage; @@ -60,6 +64,9 @@ export const saveDraftState = async ({ replyId, editedMessageId, }); + + // Emit event to notify listeners of draft change + amplify.publish(DRAFT_STATE_CHANGED_EVENT, conversation.id); }; export const loadDraftState = async ( diff --git a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/hooks/useDraftConversations.ts b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/hooks/useDraftConversations.ts index 05adb660f8b..6ed941d2f5c 100644 --- a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/hooks/useDraftConversations.ts +++ b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/hooks/useDraftConversations.ts @@ -19,8 +19,10 @@ import {useEffect, useState, useRef, useCallback} from 'react'; +import {amplify} from 'amplify'; import {useDebouncedCallback} from 'use-debounce'; +import {DRAFT_STATE_CHANGED_EVENT} from 'Components/InputBar/common/draftState/draftState'; import {Conversation} from 'Repositories/entity/Conversation'; import {StorageKey} from 'Repositories/storage'; @@ -73,22 +75,33 @@ export const useDraftConversations = (conversations: Conversation[]): Conversati // Initial check checkForDrafts(); + // Listen for draft changes in the current tab + const handleDraftChange = () => { + debouncedCheck(); + }; + // Listen for storage changes from other tabs const handleStorageChange = (event: StorageEvent) => { if (event.key?.includes(StorageKey.CONVERSATION.INPUT)) { - checkForDrafts(); + debouncedCheck(); } }; - // Check periodically but less frequently - // This matches the draft save debounce of 800ms - const interval = setInterval(debouncedCheck, 1000); + // Listen for visibility changes to check when tab becomes active + const handleVisibilityChange = () => { + if (document.visibilityState === 'visible') { + checkForDrafts(); + } + }; + amplify.subscribe(DRAFT_STATE_CHANGED_EVENT, handleDraftChange); window.addEventListener('storage', handleStorageChange); + document.addEventListener('visibilitychange', handleVisibilityChange); return () => { + amplify.unsubscribe(DRAFT_STATE_CHANGED_EVENT, handleDraftChange); window.removeEventListener('storage', handleStorageChange); - clearInterval(interval); + document.removeEventListener('visibilitychange', handleVisibilityChange); debouncedCheck.cancel(); }; }, [checkForDrafts, debouncedCheck]); From eebc3f1d93525b9f41c6a141a8f5734f9bf45a69 Mon Sep 17 00:00:00 2001 From: Emil Abramov Date: Fri, 14 Nov 2025 00:00:53 +0100 Subject: [PATCH 08/20] chore(tabs): clarify why recents should always be visible --- .../ConversationTabs/ConversationTabs.tsx | 12 +++++++----- .../panels/Conversations/useSidebarStore.ts | 11 +++++++++++ 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/ConversationTabs/ConversationTabs.tsx b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/ConversationTabs/ConversationTabs.tsx index b67c401bda3..ad7500faa66 100644 --- a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/ConversationTabs/ConversationTabs.tsx +++ b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/ConversationTabs/ConversationTabs.tsx @@ -39,7 +39,11 @@ import {TeamState} from 'Repositories/team/TeamState'; import {FEATURES, hasAccessToFeature} from 'Repositories/user/UserPermission'; import {getManageTeamUrl} from 'src/script/externalRoute'; import {ConversationFolderTab} from 'src/script/page/LeftSidebar/panels/Conversations/ConversationTab/ConversationFolderTab'; -import {SidebarTabs, useSidebarStore} from 'src/script/page/LeftSidebar/panels/Conversations/useSidebarStore'; +import { + SidebarTabs, + useSidebarStore, + isTabVisible, +} from 'src/script/page/LeftSidebar/panels/Conversations/useSidebarStore'; import {Core} from 'src/script/service/CoreSingleton'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; import {isDataDogEnabled} from 'Util/DataDog'; @@ -227,10 +231,8 @@ export const ConversationTabs = ({ }); } - // filter tabs based on visibility prefs (RECENT should always bevisible) - const visibleConversationTabs = conversationTabs.filter( - tab => tab.type === SidebarTabs.RECENT || visibleTabs.includes(tab.type), - ); + // Filter tabs based on visibility preferences + const visibleConversationTabs = conversationTabs.filter(tab => isTabVisible(tab.type, visibleTabs)); const manageTeamUrl = getManageTeamUrl(); const replaceWireLink = replaceLink('https://app.wire.com', '', ''); diff --git a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/useSidebarStore.ts b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/useSidebarStore.ts index aa8e11bd219..3d986effbfb 100644 --- a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/useSidebarStore.ts +++ b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/useSidebarStore.ts @@ -38,6 +38,17 @@ export enum SidebarTabs { CELLS, } +/** + * Tabs that are always visible and cannot be hidden by the user. + * RECENT tab serves as the default view and fallback when users (accidentally) + * hide their currently active tab. + */ +export const ALWAYS_VISIBLE_TABS: readonly SidebarTabs[] = [SidebarTabs.RECENT]; + +export const isTabVisible = (tab: SidebarTabs, visibleTabs: SidebarTabs[]): boolean => { + return ALWAYS_VISIBLE_TABS.includes(tab) || visibleTabs.includes(tab); +}; + export const SidebarStatus = { OPEN: 'OPEN', CLOSED: 'CLOSED', From 35f2d57fff78e62616e913a490fa99806b195c1a Mon Sep 17 00:00:00 2001 From: Emil Abramov Date: Fri, 14 Nov 2025 00:31:23 +0100 Subject: [PATCH 09/20] feat(tabs): accessibility stuffs --- .../ConversationFilterButton.styles.ts | 4 ++ .../TabsFilterButton/TabsFilterButton.tsx | 43 +++++++++++++++++-- 2 files changed, 43 insertions(+), 4 deletions(-) diff --git a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/ConversationFilterButton/ConversationFilterButton.styles.ts b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/ConversationFilterButton/ConversationFilterButton.styles.ts index 1eaf1978b56..2dbcba084b7 100644 --- a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/ConversationFilterButton/ConversationFilterButton.styles.ts +++ b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/ConversationFilterButton/ConversationFilterButton.styles.ts @@ -35,6 +35,10 @@ export const filterButton = (isActive: boolean): CSSObject => ({ '&:focus': { outline: 'none', }, + '&:focus-visible': { + outline: '2px solid var(--accent-color-focus)', + outlineOffset: '2px', + }, '& svg': { fill: 'currentColor', }, diff --git a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/TabsFilterButton/TabsFilterButton.tsx b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/TabsFilterButton/TabsFilterButton.tsx index 700f94c4e74..ab718d30765 100644 --- a/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/TabsFilterButton/TabsFilterButton.tsx +++ b/apps/webapp/src/script/page/LeftSidebar/panels/Conversations/TabsFilterButton/TabsFilterButton.tsx @@ -17,7 +17,7 @@ * */ -import {useState, useRef, useEffect} from 'react'; +import {useState, useRef, useEffect, useId} from 'react'; import {container} from 'tsyringe'; @@ -28,6 +28,7 @@ import {TeamState} from 'Repositories/team/TeamState'; import {Config} from 'src/script/Config'; import {SidebarTabs, useSidebarStore} from 'src/script/page/LeftSidebar/panels/Conversations/useSidebarStore'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; +import {handleEscDown} from 'Util/KeyboardUtil'; import {t} from 'Util/LocalizerUtil'; import {useChannelsFeatureFlag} from 'Util/useChannelsFeatureFlag'; @@ -38,6 +39,7 @@ export const TabsFilterButton = () => { const [isOpen, setIsOpen] = useState(false); const dropdownRef = useRef(null); const buttonRef = useRef(null); + const menuId = useId(); const {isChannelsEnabled} = useChannelsFeatureFlag(); const teamState = container.resolve(TeamState); @@ -64,6 +66,23 @@ export const TabsFilterButton = () => { }; }, [isOpen]); + useEffect(() => { + const handleKeyDown = (event: KeyboardEvent) => { + handleEscDown(event, () => { + setIsOpen(false); + buttonRef.current?.focus(); + }); + }; + + if (isOpen) { + document.addEventListener('keydown', handleKeyDown); + } + + return () => { + document.removeEventListener('keydown', handleKeyDown); + }; + }, [isOpen]); + if (!Config.getConfig().FEATURE.ENABLE_ADVANCED_FILTERS) { return null; } @@ -98,16 +117,32 @@ export const TabsFilterButton = () => { onClick={() => setIsOpen(!isOpen)} data-uie-name="tabs-filter-button" title={t('tabsFilterTooltip')} - css={filterButton(false)} + css={filterButton(isOpen)} type="button" + aria-label={t('tabsFilterTooltip')} + aria-expanded={isOpen} + aria-haspopup="menu" + aria-controls={menuId} > {isOpen && ( -
+