From 61684b42d9ef3d34bf08fc83b467ba37136c6e6c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 9 Oct 2024 15:00:20 +0000 Subject: [PATCH 001/329] chore(deps): bump wire-web-config-default-master in /app-config (#18132) Bumps [wire-web-config-default-master](https://github.com/wireapp/wire-web-config-wire) from v0.31.34 to v0.31.35. - [Commits](https://github.com/wireapp/wire-web-config-wire/compare/v0.31.34...85cc4aae1608a193f7718139eeab0852dae8c612) --- updated-dependencies: - dependency-name: wire-web-config-default-master dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app-config/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app-config/package.json b/app-config/package.json index 8c3ea3cb262..2a8a9bde672 100644 --- a/app-config/package.json +++ b/app-config/package.json @@ -1,6 +1,6 @@ { "dependencies": { - "wire-web-config-default-master": "https://github.com/wireapp/wire-web-config-wire#v0.31.34", + "wire-web-config-default-master": "https://github.com/wireapp/wire-web-config-wire#v0.31.35", "wire-web-config-default-staging": "https://github.com/wireapp/wire-web-config-default#v0.31.33" } } From 738791a6cb9830395430f08fdea07acbfd111a25 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 9 Oct 2024 15:05:15 +0000 Subject: [PATCH 002/329] chore(deps): bump wire-web-config-default-staging in /app-config (#18133) Bumps [wire-web-config-default-staging](https://github.com/wireapp/wire-web-config-default) from v0.31.33 to v0.31.34. - [Commits](https://github.com/wireapp/wire-web-config-default/compare/v0.31.33...a4bc6d4c02fe4ea4a0b15acec28453d3327d2ee5) --- updated-dependencies: - dependency-name: wire-web-config-default-staging dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app-config/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app-config/package.json b/app-config/package.json index 2a8a9bde672..94f61545aa3 100644 --- a/app-config/package.json +++ b/app-config/package.json @@ -1,6 +1,6 @@ { "dependencies": { "wire-web-config-default-master": "https://github.com/wireapp/wire-web-config-wire#v0.31.35", - "wire-web-config-default-staging": "https://github.com/wireapp/wire-web-config-default#v0.31.33" + "wire-web-config-default-staging": "https://github.com/wireapp/wire-web-config-default#v0.31.34" } } From 8d8359e0831e6b20bb685e6fa4c87015a912f339 Mon Sep 17 00:00:00 2001 From: Olaf Sulich Date: Thu, 10 Oct 2024 07:13:33 +0200 Subject: [PATCH 003/329] fix(ConversationDetails): the block user button text [WPB-11005] (#18129) * fix(ConversationDetails): stale conversation's user blocked state * refactor(ConversationDetails/getConversationActions): accept params as an object, remove typescript warnings * refactor(ConversationDetails): mark firstParticipant as non nullable to fix typescript errors --- .../ConversationDetails.tsx | 15 +++--- .../utils/getConversationActions.ts | 52 ++++++++++++++----- 2 files changed, 48 insertions(+), 19 deletions(-) diff --git a/src/script/page/RightSidebar/ConversationDetails/ConversationDetails.tsx b/src/script/page/RightSidebar/ConversationDetails/ConversationDetails.tsx index 2774b35b5d3..7335e201dc1 100644 --- a/src/script/page/RightSidebar/ConversationDetails/ConversationDetails.tsx +++ b/src/script/page/RightSidebar/ConversationDetails/ConversationDetails.tsx @@ -224,7 +224,7 @@ const ConversationDetails = forwardRef const toggleMute = () => actionsViewModel.toggleMuteConversation(activeConversation); - const openParticipantDevices = () => togglePanel(PanelState.PARTICIPANT_DEVICES, firstParticipant, false, 'left'); + const openParticipantDevices = () => togglePanel(PanelState.PARTICIPANT_DEVICES, firstParticipant!, false, 'left'); const updateConversationName = (conversationName: string) => conversationRepository.renameConversation(activeConversation, conversationName); @@ -250,7 +250,7 @@ const ConversationDetails = forwardRef const isSingleUserMode = is1to1 || isRequest; - const isServiceMode = isSingleUserMode && firstParticipant.isService; + const isServiceMode = isSingleUserMode && firstParticipant!.isService; const getService = useCallback(async () => { if (firstParticipant) { @@ -263,14 +263,17 @@ const ConversationDetails = forwardRef } }, [firstParticipant]); - const conversationActions = getConversationActions( - activeConversation, + const {isBlocked: isParticipantBlocked} = useKoSubscribableChildren(firstParticipant!, ['isBlocked']); + + const conversationActions = getConversationActions({ + conversationEntity: activeConversation, actionsViewModel, conversationRepository, teamRole, isServiceMode, isTeam, - ); + isParticipantBlocked, + }); useEffect(() => { conversationRepository.refreshUnavailableParticipants(activeConversation); @@ -278,7 +281,7 @@ const ConversationDetails = forwardRef useEffect(() => { if (team.id && isSingleUserMode) { - teamRepository.updateTeamMembersByIds(team.id, [firstParticipant.id], true); + teamRepository.updateTeamMembersByIds(team.id, [firstParticipant!.id], true); } }, [firstParticipant, isSingleUserMode, team, teamRepository]); diff --git a/src/script/page/RightSidebar/ConversationDetails/utils/getConversationActions.ts b/src/script/page/RightSidebar/ConversationDetails/utils/getConversationActions.ts index 190d3e47aa4..641ac873d0c 100644 --- a/src/script/page/RightSidebar/ConversationDetails/utils/getConversationActions.ts +++ b/src/script/page/RightSidebar/ConversationDetails/utils/getConversationActions.ts @@ -30,14 +30,25 @@ import {Conversation} from '../../../../entity/Conversation'; import * as UserPermission from '../../../../user/UserPermission'; import {ActionsViewModel} from '../../../../view_model/ActionsViewModel'; -const getConversationActions = ( - conversationEntity: Conversation, - actionsViewModel: ActionsViewModel, - conversationRepository: ConversationRepository, - teamRole: UserPermission.ROLE, - isServiceMode: boolean = false, - isTeam: boolean = false, -): MenuItem[] => { +interface GetConversationActionsParams { + conversationEntity: Conversation; + actionsViewModel: ActionsViewModel; + conversationRepository: ConversationRepository; + teamRole: UserPermission.ROLE; + isServiceMode?: boolean; + isTeam?: boolean; + isParticipantBlocked?: boolean; +} + +const getConversationActions = ({ + conversationEntity, + actionsViewModel, + conversationRepository, + teamRole, + isServiceMode = false, + isTeam = false, + isParticipantBlocked = false, +}: GetConversationActionsParams): MenuItem[] => { if (!conversationEntity) { return []; } @@ -82,7 +93,12 @@ const getConversationActions = ( { condition: conversationEntity.isRequest(), item: { - click: async () => actionsViewModel.cancelConnectionRequest(userEntity, true, getNextConversation()), + click: async () => { + if (!userEntity) { + return; + } + void actionsViewModel.cancelConnectionRequest(userEntity, true, getNextConversation()); + }, Icon: Icon.CloseIcon, identifier: 'do-cancel-request', label: t('conversationDetailsActionCancelRequest'), @@ -98,18 +114,28 @@ const getConversationActions = ( }, }, { - condition: isSingleUser && (userEntity?.isConnected() || userEntity?.isRequest()), + condition: isSingleUser && Boolean(userEntity?.isConnected() || userEntity?.isRequest()), item: { - click: () => actionsViewModel.blockUser(userEntity), + click: () => { + if (!userEntity) { + return; + } + void actionsViewModel.blockUser(userEntity); + }, Icon: Icon.BlockIcon, identifier: 'do-block', label: t('conversationDetailsActionBlock'), }, }, { - condition: isSingleUser && userEntity?.isBlocked(), + condition: isSingleUser && isParticipantBlocked, item: { - click: () => actionsViewModel.unblockUser(userEntity), + click: () => { + if (!userEntity) { + return; + } + void actionsViewModel.unblockUser(userEntity); + }, Icon: Icon.BlockIcon, identifier: 'do-unblock', label: t('conversationDetailsActionUnblock'), From 0757a97ffd2038cf9674c7af2583906cb0037b87 Mon Sep 17 00:00:00 2001 From: Olaf Sulich Date: Thu, 10 Oct 2024 08:09:32 +0200 Subject: [PATCH 004/329] fix: input autocomplete background [WPB-9764] (#18134) --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 1696a6b682c..c0a4fe8cd0f 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "@wireapp/avs": "9.9.3", "@wireapp/commons": "5.2.10", "@wireapp/core": "46.4.0", - "@wireapp/react-ui-kit": "9.23.5", + "@wireapp/react-ui-kit": "9.23.6", "@wireapp/store-engine-dexie": "2.1.12", "@wireapp/webapp-events": "0.24.0", "amplify": "https://github.com/wireapp/amplify#head=master", diff --git a/yarn.lock b/yarn.lock index daee8e5696f..8acc5be00c5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6135,9 +6135,9 @@ __metadata: languageName: node linkType: hard -"@wireapp/react-ui-kit@npm:9.23.5": - version: 9.23.5 - resolution: "@wireapp/react-ui-kit@npm:9.23.5" +"@wireapp/react-ui-kit@npm:9.23.6": + version: 9.23.6 + resolution: "@wireapp/react-ui-kit@npm:9.23.6" dependencies: "@types/color": "npm:3.0.6" color: "npm:4.2.3" @@ -6152,7 +6152,7 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 10/d5ca64c81371eb9623959e25b6c9ff84863b26a378f8f9af317f5a2607f4ee7327042966f08c98c9b4f3deadb848de728b8f7ede3c05f15f5e2972cdf21ba70e + checksum: 10/7b02af6bf9b852c72e90c44b44d45838e26d665f72cd4b85ee9382018f04618800b87cd37a2002e35c612161ceecdc3dc56de02480707cd3f4dd5a130a48e15f languageName: node linkType: hard @@ -18618,7 +18618,7 @@ __metadata: "@wireapp/core": "npm:46.4.0" "@wireapp/eslint-config": "npm:3.0.7" "@wireapp/prettier-config": "npm:0.6.4" - "@wireapp/react-ui-kit": "npm:9.23.5" + "@wireapp/react-ui-kit": "npm:9.23.6" "@wireapp/store-engine": "npm:5.1.8" "@wireapp/store-engine-dexie": "npm:2.1.12" "@wireapp/webapp-events": "npm:0.24.0" From 6369f9769132bfdd68d70d4012437e2d6964716c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20J=C3=B3=C5=BAwik?= Date: Thu, 10 Oct 2024 12:40:35 +0200 Subject: [PATCH 005/329] feat: Improvement for datadog logs for decryption error (#18135) * feat: Improvement for datadog logs for decryption error * feat: Improvement for datadog logs for decryption error --- src/script/event/EventRepository.ts | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/script/event/EventRepository.ts b/src/script/event/EventRepository.ts index 7e5700e47b9..3d76189ffa1 100644 --- a/src/script/event/EventRepository.ts +++ b/src/script/event/EventRepository.ts @@ -399,22 +399,34 @@ export class EventRepository { {decryptedData, decryptionError}: Pick, ): Promise { if (decryptionError) { - this.logger.warn(`Decryption Error: (${decryptionError.code}) ${decryptionError.message}`, decryptionError); + this.logger.warn(`Decryption Error: '${event.type}'`, { + decryptionError: { + event, + code: decryptionError.code, + message: decryptionError.message, + }, + }); + const ignoredCodes = [ 208, // Outated event decyption error (see https://github.com/wireapp/wire-web-core/blob/5c8c56097eadfa55e79856cd6745087f0fd12e24/packages/proteus/README.md#decryption-errors) 209, // Duplicate event decryption error (see https://github.com/wireapp/wire-web-core/blob/5c8c56097eadfa55e79856cd6745087f0fd12e24/packages/proteus/README.md#decryption-errors) ]; + if (decryptionError.code && ignoredCodes.includes(decryptionError.code)) { return undefined; } + amplify.publish(WebAppEvents.ANALYTICS.EVENT, EventName.E2EE.FAILED_MESSAGE_DECRYPTION, { cause: decryptionError.code, }); + return EventBuilder.buildUnableToDecrypt(event, decryptionError); } + if (decryptedData) { return await new CryptographyMapper().mapGenericMessage(decryptedData, event); } + return undefined; } From bf2f86d52102fe94f2c0b26a12b2d88541726e1f Mon Sep 17 00:00:00 2001 From: Amir Ghezelbash Date: Thu, 10 Oct 2024 16:45:14 +0330 Subject: [PATCH 006/329] chore: Bump avs to 9.9.6 (#18137) --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index c0a4fe8cd0f..9d15fd454f0 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "@lexical/history": "0.18.0", "@lexical/react": "0.18.0", "@mediapipe/tasks-vision": "0.10.17", - "@wireapp/avs": "9.9.3", + "@wireapp/avs": "9.9.6", "@wireapp/commons": "5.2.10", "@wireapp/core": "46.4.0", "@wireapp/react-ui-kit": "9.23.6", diff --git a/yarn.lock b/yarn.lock index 8acc5be00c5..b85f6b8d8ba 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5949,10 +5949,10 @@ __metadata: languageName: node linkType: hard -"@wireapp/avs@npm:9.9.3": - version: 9.9.3 - resolution: "@wireapp/avs@npm:9.9.3" - checksum: 10/dda8cc90a61b95793820bd66c57eda7effc56ed156c8ebb85594af8e09eaceedce0ff38c92a88d722359263831c88c970feaf3d9fd5cfda91141b00fbfb200cd +"@wireapp/avs@npm:9.9.6": + version: 9.9.6 + resolution: "@wireapp/avs@npm:9.9.6" + checksum: 10/ce66183cdd98e74d1cebe19f58d55be38b3635789811c958d2b36447c9b629942e9f1724723f7f9a610309011e6cddbae535ad5a5a1720074397422da4eb0450 languageName: node linkType: hard @@ -18612,7 +18612,7 @@ __metadata: "@types/uuid": "npm:^10.0.0" "@types/webpack-env": "npm:1.18.5" "@types/wicg-file-system-access": "npm:^2023.10.5" - "@wireapp/avs": "npm:9.9.3" + "@wireapp/avs": "npm:9.9.6" "@wireapp/commons": "npm:5.2.10" "@wireapp/copy-config": "npm:2.2.7" "@wireapp/core": "npm:46.4.0" From 1c3fa7447cddc12194d337caa4befc2115a4994a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20J=C3=B3=C5=BAwik?= Date: Thu, 10 Oct 2024 22:48:22 +0200 Subject: [PATCH 007/329] fix: Remove event data from decryption logs (#18138) * hotfix: Remove event data from decryption logs * hotfix: Remove event data from decryption logs --- src/script/event/EventRepository.ts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/script/event/EventRepository.ts b/src/script/event/EventRepository.ts index 3d76189ffa1..ad04d3fab50 100644 --- a/src/script/event/EventRepository.ts +++ b/src/script/event/EventRepository.ts @@ -400,11 +400,10 @@ export class EventRepository { ): Promise { if (decryptionError) { this.logger.warn(`Decryption Error: '${event.type}'`, { - decryptionError: { - event, - code: decryptionError.code, - message: decryptionError.message, - }, + eventType: event.type, + date: event.time, + code: decryptionError.code, + message: decryptionError.message, }); const ignoredCodes = [ From 654d577f7f7f511eda87b2a94ad4950d573efede Mon Sep 17 00:00:00 2001 From: Olaf Sulich Date: Fri, 11 Oct 2024 07:24:52 +0200 Subject: [PATCH 008/329] fix(CallingHeader): popout button styles [WPB-9780] (#18136) * fix(CallingHeader): open pop up window button styles * chore(en-US): improve videoCallOverlayOpenPopupWindow text --- src/i18n/en-US.json | 2 +- .../CallingCell/CallingHeader/CallingHeader.tsx | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/i18n/en-US.json b/src/i18n/en-US.json index 23be4001ec7..d92dfcc9061 100644 --- a/src/i18n/en-US.json +++ b/src/i18n/en-US.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/script/components/calling/CallingCell/CallingHeader/CallingHeader.tsx b/src/script/components/calling/CallingCell/CallingHeader/CallingHeader.tsx index 09d7595de05..92c3bbd6743 100644 --- a/src/script/components/calling/CallingCell/CallingHeader/CallingHeader.tsx +++ b/src/script/components/calling/CallingCell/CallingHeader/CallingHeader.tsx @@ -19,6 +19,8 @@ import {TabIndex} from '@wireapp/react-ui-kit/lib/types/enums'; +import {IconButton, IconButtonVariant} from '@wireapp/react-ui-kit'; + import {Avatar, AVATAR_SIZE, GroupAvatar} from 'Components/Avatar'; import {Duration} from 'Components/calling/Duration'; import * as Icon from 'Components/Icon'; @@ -148,9 +150,14 @@ export const CallingHeader = ({ {isDetachedCallingFeatureEnabled() && isOngoing && (
- +
)} From 6a69dc9c6402b4af45c941c735b2822bc1fddd1f Mon Sep 17 00:00:00 2001 From: Otto the Bot Date: Fri, 11 Oct 2024 07:30:38 +0200 Subject: [PATCH 009/329] chore: Update translations (#18139) --- src/i18n/ar-SA.json | 2 +- src/i18n/bn-BD.json | 2 +- src/i18n/ca-ES.json | 2 +- src/i18n/cs-CZ.json | 2 +- src/i18n/da-DK.json | 2 +- src/i18n/de-DE.json | 2 +- src/i18n/el-GR.json | 2 +- src/i18n/es-ES.json | 2 +- src/i18n/et-EE.json | 2 +- src/i18n/fa-IR.json | 2 +- src/i18n/fi-FI.json | 2 +- src/i18n/fr-FR.json | 2 +- src/i18n/ga-IE.json | 2 +- src/i18n/he-IL.json | 2 +- src/i18n/hi-IN.json | 2 +- src/i18n/hr-HR.json | 2 +- src/i18n/hu-HU.json | 2 +- src/i18n/id-ID.json | 2 +- src/i18n/is-IS.json | 2 +- src/i18n/it-IT.json | 2 +- src/i18n/ja-JP.json | 2 +- src/i18n/lt-LT.json | 2 +- src/i18n/lv-LV.json | 2 +- src/i18n/ms-MY.json | 2 +- src/i18n/nl-NL.json | 2 +- src/i18n/no-NO.json | 2 +- src/i18n/pl-PL.json | 2 +- src/i18n/pt-BR.json | 2 +- src/i18n/pt-PT.json | 2 +- src/i18n/ro-RO.json | 2 +- src/i18n/ru-RU.json | 2 +- src/i18n/si-LK.json | 2 +- src/i18n/sk-SK.json | 2 +- src/i18n/sl-SI.json | 2 +- src/i18n/sr-SP.json | 2 +- src/i18n/sv-SE.json | 2 +- src/i18n/th-TH.json | 2 +- src/i18n/tr-TR.json | 2 +- src/i18n/uk-UA.json | 2 +- src/i18n/uz-UZ.json | 2 +- src/i18n/vi-VN.json | 2 +- src/i18n/zh-CN.json | 2 +- src/i18n/zh-HK.json | 2 +- src/i18n/zh-TW.json | 2 +- 44 files changed, 44 insertions(+), 44 deletions(-) diff --git a/src/i18n/ar-SA.json b/src/i18n/ar-SA.json index 3a93a143f1d..d58530f0e14 100644 --- a/src/i18n/ar-SA.json +++ b/src/i18n/ar-SA.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "مشاركه الشاشه", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/i18n/bn-BD.json b/src/i18n/bn-BD.json index 23be4001ec7..d92dfcc9061 100644 --- a/src/i18n/bn-BD.json +++ b/src/i18n/bn-BD.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/i18n/ca-ES.json b/src/i18n/ca-ES.json index 23be4001ec7..d92dfcc9061 100644 --- a/src/i18n/ca-ES.json +++ b/src/i18n/ca-ES.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/i18n/cs-CZ.json b/src/i18n/cs-CZ.json index 33537fc49a4..a96e35bf5f4 100644 --- a/src/i18n/cs-CZ.json +++ b/src/i18n/cs-CZ.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/i18n/da-DK.json b/src/i18n/da-DK.json index fcf9ee9b9b3..8610e73e1a4 100644 --- a/src/i18n/da-DK.json +++ b/src/i18n/da-DK.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/i18n/de-DE.json b/src/i18n/de-DE.json index c8717e5da1d..f0f58481c14 100644 --- a/src/i18n/de-DE.json +++ b/src/i18n/de-DE.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Teilnehmerliste ausblenden", "videoCallOverlayMicrophone": "Mikrofon", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "In neuem Fenster öffnen", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Teilnehmer ({{count}})", "videoCallOverlayShareScreen": "Bildschirm teilen", "videoCallOverlayShowParticipantsList": "Teilnehmerliste anzeigen", diff --git a/src/i18n/el-GR.json b/src/i18n/el-GR.json index 71fa331b230..43c862e498c 100644 --- a/src/i18n/el-GR.json +++ b/src/i18n/el-GR.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/i18n/es-ES.json b/src/i18n/es-ES.json index 322614b3fe9..273c4b0251e 100644 --- a/src/i18n/es-ES.json +++ b/src/i18n/es-ES.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "Compartir pantalla", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/i18n/et-EE.json b/src/i18n/et-EE.json index c73f085e534..28a782b54b3 100644 --- a/src/i18n/et-EE.json +++ b/src/i18n/et-EE.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "Jaga ekraani", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/i18n/fa-IR.json b/src/i18n/fa-IR.json index 120fd2c1e00..1f05490107c 100644 --- a/src/i18n/fa-IR.json +++ b/src/i18n/fa-IR.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/i18n/fi-FI.json b/src/i18n/fi-FI.json index 668a74d7aec..5f300e7e185 100644 --- a/src/i18n/fi-FI.json +++ b/src/i18n/fi-FI.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/i18n/fr-FR.json b/src/i18n/fr-FR.json index 498c3b4b916..0a8345d672b 100644 --- a/src/i18n/fr-FR.json +++ b/src/i18n/fr-FR.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "Partager l’Écran", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/i18n/ga-IE.json b/src/i18n/ga-IE.json index 23be4001ec7..d92dfcc9061 100644 --- a/src/i18n/ga-IE.json +++ b/src/i18n/ga-IE.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/i18n/he-IL.json b/src/i18n/he-IL.json index 23be4001ec7..d92dfcc9061 100644 --- a/src/i18n/he-IL.json +++ b/src/i18n/he-IL.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/i18n/hi-IN.json b/src/i18n/hi-IN.json index d16e10e66bf..1af006bc38f 100644 --- a/src/i18n/hi-IN.json +++ b/src/i18n/hi-IN.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/i18n/hr-HR.json b/src/i18n/hr-HR.json index bc8a26c0e9a..d675023ee09 100644 --- a/src/i18n/hr-HR.json +++ b/src/i18n/hr-HR.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "Dijeljenje ekrana", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/i18n/hu-HU.json b/src/i18n/hu-HU.json index 25fa92e7932..d54107c3097 100644 --- a/src/i18n/hu-HU.json +++ b/src/i18n/hu-HU.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "Képernyő megosztása", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/i18n/id-ID.json b/src/i18n/id-ID.json index cf0ff804453..1d1cb389cb8 100644 --- a/src/i18n/id-ID.json +++ b/src/i18n/id-ID.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/i18n/is-IS.json b/src/i18n/is-IS.json index 23be4001ec7..d92dfcc9061 100644 --- a/src/i18n/is-IS.json +++ b/src/i18n/is-IS.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/i18n/it-IT.json b/src/i18n/it-IT.json index ad5fe6cd717..af9c039a01a 100644 --- a/src/i18n/it-IT.json +++ b/src/i18n/it-IT.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "Condividi schermo", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/i18n/ja-JP.json b/src/i18n/ja-JP.json index 7793e2d0b5d..6041ed141fd 100644 --- a/src/i18n/ja-JP.json +++ b/src/i18n/ja-JP.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "画面共有", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/i18n/lt-LT.json b/src/i18n/lt-LT.json index 2fbfa11ac80..cb15153cf65 100644 --- a/src/i18n/lt-LT.json +++ b/src/i18n/lt-LT.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "Siųsti ekrano vaizdą", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/i18n/lv-LV.json b/src/i18n/lv-LV.json index bc76242846e..678dc510db7 100644 --- a/src/i18n/lv-LV.json +++ b/src/i18n/lv-LV.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/i18n/ms-MY.json b/src/i18n/ms-MY.json index 23be4001ec7..d92dfcc9061 100644 --- a/src/i18n/ms-MY.json +++ b/src/i18n/ms-MY.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/i18n/nl-NL.json b/src/i18n/nl-NL.json index b2941a485e1..1438e3bd53c 100644 --- a/src/i18n/nl-NL.json +++ b/src/i18n/nl-NL.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/i18n/no-NO.json b/src/i18n/no-NO.json index 51f49ae4ca6..4ab0e7caae3 100644 --- a/src/i18n/no-NO.json +++ b/src/i18n/no-NO.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "Del skjerm", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/i18n/pl-PL.json b/src/i18n/pl-PL.json index ad6e03d3235..d8fb5160eb7 100644 --- a/src/i18n/pl-PL.json +++ b/src/i18n/pl-PL.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/i18n/pt-BR.json b/src/i18n/pt-BR.json index 778e6d0dd98..d52c321d11f 100644 --- a/src/i18n/pt-BR.json +++ b/src/i18n/pt-BR.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microfone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "Compartilhar tela", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/i18n/pt-PT.json b/src/i18n/pt-PT.json index 42eabbf8f99..f52d1b30798 100644 --- a/src/i18n/pt-PT.json +++ b/src/i18n/pt-PT.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/i18n/ro-RO.json b/src/i18n/ro-RO.json index 5852b47046c..0f3a946ceef 100644 --- a/src/i18n/ro-RO.json +++ b/src/i18n/ro-RO.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/i18n/ru-RU.json b/src/i18n/ru-RU.json index e499821a80f..4229559d782 100644 --- a/src/i18n/ru-RU.json +++ b/src/i18n/ru-RU.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Скрыть список участников", "videoCallOverlayMicrophone": "Микрофон", "videoCallOverlayOpenFullScreen": "Открыть вызов в полноэкранном режиме", - "videoCallOverlayOpenPopupWindow": "Открыть в новом окне", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Участники ({{count}})", "videoCallOverlayShareScreen": "Поделиться экраном", "videoCallOverlayShowParticipantsList": "Показать список участников", diff --git a/src/i18n/si-LK.json b/src/i18n/si-LK.json index 8781d3f3d2b..5159afdd963 100644 --- a/src/i18n/si-LK.json +++ b/src/i18n/si-LK.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "ශබ්දවාහිනිය", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "තිරය බෙදාගන්න", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/i18n/sk-SK.json b/src/i18n/sk-SK.json index 8cfd959e8f0..66d293b86c6 100644 --- a/src/i18n/sk-SK.json +++ b/src/i18n/sk-SK.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/i18n/sl-SI.json b/src/i18n/sl-SI.json index 1920034bb64..74607992ec0 100644 --- a/src/i18n/sl-SI.json +++ b/src/i18n/sl-SI.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/i18n/sr-SP.json b/src/i18n/sr-SP.json index 9195e7159f8..b8425eee7c2 100644 --- a/src/i18n/sr-SP.json +++ b/src/i18n/sr-SP.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "Подели екран", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/i18n/sv-SE.json b/src/i18n/sv-SE.json index 38e0fca9057..5d458f8cf9c 100644 --- a/src/i18n/sv-SE.json +++ b/src/i18n/sv-SE.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "Dela skärm", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/i18n/th-TH.json b/src/i18n/th-TH.json index 23be4001ec7..d92dfcc9061 100644 --- a/src/i18n/th-TH.json +++ b/src/i18n/th-TH.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/i18n/tr-TR.json b/src/i18n/tr-TR.json index 239f6db7287..f8c0bf82816 100644 --- a/src/i18n/tr-TR.json +++ b/src/i18n/tr-TR.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "Ekran Paylaşımı", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/i18n/uk-UA.json b/src/i18n/uk-UA.json index 45ca5faee77..cb418cc4dea 100644 --- a/src/i18n/uk-UA.json +++ b/src/i18n/uk-UA.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "Показати свій екран", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/i18n/uz-UZ.json b/src/i18n/uz-UZ.json index 23be4001ec7..d92dfcc9061 100644 --- a/src/i18n/uz-UZ.json +++ b/src/i18n/uz-UZ.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/i18n/vi-VN.json b/src/i18n/vi-VN.json index 23be4001ec7..d92dfcc9061 100644 --- a/src/i18n/vi-VN.json +++ b/src/i18n/vi-VN.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/i18n/zh-CN.json b/src/i18n/zh-CN.json index 750227d7a9b..28ccfc2a3ae 100644 --- a/src/i18n/zh-CN.json +++ b/src/i18n/zh-CN.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "分享屏幕", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/i18n/zh-HK.json b/src/i18n/zh-HK.json index 23be4001ec7..d92dfcc9061 100644 --- a/src/i18n/zh-HK.json +++ b/src/i18n/zh-HK.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", diff --git a/src/i18n/zh-TW.json b/src/i18n/zh-TW.json index 6dacd4b9cf3..ae4000dd34c 100644 --- a/src/i18n/zh-TW.json +++ b/src/i18n/zh-TW.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Hide participants list", "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in new window", + "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({{count}})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", From 3da3b8e3b2e501ad2de8be5a5a2270a2ac992b1c Mon Sep 17 00:00:00 2001 From: Otto the Bot Date: Fri, 11 Oct 2024 10:05:58 +0200 Subject: [PATCH 010/329] chore: Update translations (#18140) --- src/i18n/de-DE.json | 2 +- src/i18n/ru-RU.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/i18n/de-DE.json b/src/i18n/de-DE.json index f0f58481c14..c8717e5da1d 100644 --- a/src/i18n/de-DE.json +++ b/src/i18n/de-DE.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Teilnehmerliste ausblenden", "videoCallOverlayMicrophone": "Mikrofon", "videoCallOverlayOpenFullScreen": "Open the call in full screen", - "videoCallOverlayOpenPopupWindow": "Open in a new window", + "videoCallOverlayOpenPopupWindow": "In neuem Fenster öffnen", "videoCallOverlayParticipantsListLabel": "Teilnehmer ({{count}})", "videoCallOverlayShareScreen": "Bildschirm teilen", "videoCallOverlayShowParticipantsList": "Teilnehmerliste anzeigen", diff --git a/src/i18n/ru-RU.json b/src/i18n/ru-RU.json index 4229559d782..e499821a80f 100644 --- a/src/i18n/ru-RU.json +++ b/src/i18n/ru-RU.json @@ -1539,7 +1539,7 @@ "videoCallOverlayHideParticipantsList": "Скрыть список участников", "videoCallOverlayMicrophone": "Микрофон", "videoCallOverlayOpenFullScreen": "Открыть вызов в полноэкранном режиме", - "videoCallOverlayOpenPopupWindow": "Open in a new window", + "videoCallOverlayOpenPopupWindow": "Открыть в новом окне", "videoCallOverlayParticipantsListLabel": "Участники ({{count}})", "videoCallOverlayShareScreen": "Поделиться экраном", "videoCallOverlayShowParticipantsList": "Показать список участников", From f5db12704f0d2c11c7677116d6333ce5ef2645c8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 13 Oct 2024 14:06:40 +0000 Subject: [PATCH 011/329] chore(deps-dev): bump typescript from 5.6.2 to 5.6.3 in /server (#18141) Bumps [typescript](https://github.com/microsoft/TypeScript) from 5.6.2 to 5.6.3. - [Release notes](https://github.com/microsoft/TypeScript/releases) - [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release.yml) - [Commits](https://github.com/microsoft/TypeScript/compare/v5.6.2...v5.6.3) --- updated-dependencies: - dependency-name: typescript dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- server/package.json | 2 +- server/yarn.lock | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/server/package.json b/server/package.json index 12065b6a966..0688a75ecf1 100644 --- a/server/package.json +++ b/server/package.json @@ -33,7 +33,7 @@ "@types/node": "22.5.5", "jest": "29.7.0", "rimraf": "6.0.1", - "typescript": "5.6.2" + "typescript": "5.6.3" }, "engines": { "node": ">= 20.14.0" diff --git a/server/yarn.lock b/server/yarn.lock index afdc84d29bf..3f02c943175 100644 --- a/server/yarn.lock +++ b/server/yarn.lock @@ -5478,23 +5478,23 @@ __metadata: languageName: node linkType: hard -"typescript@npm:5.6.2": - version: 5.6.2 - resolution: "typescript@npm:5.6.2" +"typescript@npm:5.6.3": + version: 5.6.3 + resolution: "typescript@npm:5.6.3" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10/f95365d4898f357823e93d334ecda9fcade54f009b397c7d05b7621cd9e865981033cf89ccde0f3e3a7b73b1fdbae18e92bc77db237b43e912f053fef0f9a53b + checksum: 10/c328e418e124b500908781d9f7b9b93cf08b66bf5936d94332b463822eea2f4e62973bfb3b8a745fdc038785cb66cf59d1092bac3ec2ac6a3e5854687f7833f1 languageName: node linkType: hard -"typescript@patch:typescript@npm%3A5.6.2#optional!builtin": - version: 5.6.2 - resolution: "typescript@patch:typescript@npm%3A5.6.2#optional!builtin::version=5.6.2&hash=5adc0c" +"typescript@patch:typescript@npm%3A5.6.3#optional!builtin": + version: 5.6.3 + resolution: "typescript@patch:typescript@npm%3A5.6.3#optional!builtin::version=5.6.3&hash=5adc0c" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10/060a7349adf698477b411be4ace470aee6c2c1bd99917fdf5d33697c17ec55c64fe724eb10399387530b50e9913b41528dd8bfcca0a5fc8f8bac63fbb4580a2e + checksum: 10/dc4bec403cd33a204b655b1152a096a08e7bad2c931cb59ef8ff26b6f2aa541bf98f09fc157958a60c921b1983a8dde9a85b692f9de60fa8f574fd131e3ae4dd languageName: node linkType: hard @@ -5696,7 +5696,7 @@ __metadata: opn: "npm:6.0.0" pm2: "npm:5.4.2" rimraf: "npm:6.0.1" - typescript: "npm:5.6.2" + typescript: "npm:5.6.3" languageName: unknown linkType: soft From 66edad439e7e7fb2056d96e6a07cc71a306f64bd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 13 Oct 2024 14:07:41 +0000 Subject: [PATCH 012/329] chore(deps): bump express from 4.21.0 to 4.21.1 in /server (#18143) Bumps [express](https://github.com/expressjs/express) from 4.21.0 to 4.21.1. - [Release notes](https://github.com/expressjs/express/releases) - [Changelog](https://github.com/expressjs/express/blob/4.21.1/History.md) - [Commits](https://github.com/expressjs/express/compare/4.21.0...4.21.1) --- updated-dependencies: - dependency-name: express dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- server/package.json | 2 +- server/yarn.lock | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/server/package.json b/server/package.json index 0688a75ecf1..9f143578659 100644 --- a/server/package.json +++ b/server/package.json @@ -7,7 +7,7 @@ "@wireapp/commons": "5.2.10", "dotenv": "16.4.5", "dotenv-extended": "2.9.0", - "express": "4.21.0", + "express": "4.21.1", "express-sitemap-xml": "3.1.0", "express-useragent": "1.0.15", "fs-extra": "11.2.0", diff --git a/server/yarn.lock b/server/yarn.lock index 3f02c943175..2a5462d333e 100644 --- a/server/yarn.lock +++ b/server/yarn.lock @@ -1832,10 +1832,10 @@ __metadata: languageName: node linkType: hard -"cookie@npm:0.6.0": - version: 0.6.0 - resolution: "cookie@npm:0.6.0" - checksum: 10/c1f8f2ea7d443b9331680598b0ae4e6af18a618c37606d1bbdc75bec8361cce09fe93e727059a673f2ba24467131a9fb5a4eec76bb1b149c1b3e1ccb268dc583 +"cookie@npm:0.7.1": + version: 0.7.1 + resolution: "cookie@npm:0.7.1" + checksum: 10/aec6a6aa0781761bf55d60447d6be08861d381136a0fe94aa084fddd4f0300faa2b064df490c6798adfa1ebaef9e0af9b08a189c823e0811b8b313b3d9a03380 languageName: node linkType: hard @@ -2334,16 +2334,16 @@ __metadata: languageName: node linkType: hard -"express@npm:4.21.0": - version: 4.21.0 - resolution: "express@npm:4.21.0" +"express@npm:4.21.1": + version: 4.21.1 + resolution: "express@npm:4.21.1" dependencies: accepts: "npm:~1.3.8" array-flatten: "npm:1.1.1" body-parser: "npm:1.20.3" content-disposition: "npm:0.5.4" content-type: "npm:~1.0.4" - cookie: "npm:0.6.0" + cookie: "npm:0.7.1" cookie-signature: "npm:1.0.6" debug: "npm:2.6.9" depd: "npm:2.0.0" @@ -2369,7 +2369,7 @@ __metadata: type-is: "npm:~1.6.18" utils-merge: "npm:1.0.1" vary: "npm:~1.1.2" - checksum: 10/3b1ee5bc5b1bd996f688702519cebc9b63a24e506965f6e1773268238cfa2c24ffdb38cc3fcb4fde66f77de1c0bebd9ee058dad06bb9c6f084b525f3c09164d3 + checksum: 10/5d4a36dd03c1d1cce93172e9b185b5cd13a978d29ee03adc51cd278be7b4a514ae2b63e2fdaec0c00fdc95c6cfb396d9dd1da147917ffd337d6cd0778e08c9bc languageName: node linkType: hard @@ -5680,7 +5680,7 @@ __metadata: "@wireapp/commons": "npm:5.2.10" dotenv: "npm:16.4.5" dotenv-extended: "npm:2.9.0" - express: "npm:4.21.0" + express: "npm:4.21.1" express-sitemap-xml: "npm:3.1.0" express-useragent: "npm:1.0.15" fs-extra: "npm:11.2.0" From 527503d6a07e5f8151d01e94f085ffd845853cda Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 13 Oct 2024 14:07:58 +0000 Subject: [PATCH 013/329] chore(deps): bump http-proxy-middleware from 3.0.2 to 3.0.3 in /server (#18142) Bumps [http-proxy-middleware](https://github.com/chimurai/http-proxy-middleware) from 3.0.2 to 3.0.3. - [Release notes](https://github.com/chimurai/http-proxy-middleware/releases) - [Changelog](https://github.com/chimurai/http-proxy-middleware/blob/master/CHANGELOG.md) - [Commits](https://github.com/chimurai/http-proxy-middleware/compare/v3.0.2...v3.0.3) --- updated-dependencies: - dependency-name: http-proxy-middleware dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- server/package.json | 2 +- server/yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/server/package.json b/server/package.json index 9f143578659..b190806c808 100644 --- a/server/package.json +++ b/server/package.json @@ -14,7 +14,7 @@ "geolite2": "1.3.0", "hbs": "4.2.0", "helmet": "8.0.0", - "http-proxy-middleware": "3.0.2", + "http-proxy-middleware": "3.0.3", "http-status-codes": "2.3.0", "logdown": "3.3.1", "maxmind": "4.3.10", diff --git a/server/yarn.lock b/server/yarn.lock index 2a5462d333e..16aee818659 100644 --- a/server/yarn.lock +++ b/server/yarn.lock @@ -2897,9 +2897,9 @@ __metadata: languageName: node linkType: hard -"http-proxy-middleware@npm:3.0.2": - version: 3.0.2 - resolution: "http-proxy-middleware@npm:3.0.2" +"http-proxy-middleware@npm:3.0.3": + version: 3.0.3 + resolution: "http-proxy-middleware@npm:3.0.3" dependencies: "@types/http-proxy": "npm:^1.17.15" debug: "npm:^4.3.6" @@ -2907,7 +2907,7 @@ __metadata: is-glob: "npm:^4.0.3" is-plain-object: "npm:^5.0.0" micromatch: "npm:^4.0.8" - checksum: 10/59be307aca2e0a8ba016bc8356e8a87cbfd53d65db5386edc65acd867ebd0a4683ff9be2e0eea12388cac13dffe387f0d374d35b01e625c98aee30c8f3023e72 + checksum: 10/32f58c29288ca63e109909fb998bd0f6f50eb15a98dec9487eac07dfc4f09d8507dbfa00b44442d868bafa904bd633c8bbd55686bb13b4d4af4f5c5b3bbca430 languageName: node linkType: hard @@ -5687,7 +5687,7 @@ __metadata: geolite2: "npm:1.3.0" hbs: "npm:4.2.0" helmet: "npm:8.0.0" - http-proxy-middleware: "npm:3.0.2" + http-proxy-middleware: "npm:3.0.3" http-status-codes: "npm:2.3.0" jest: "npm:29.7.0" logdown: "npm:3.3.1" From 38b8bc41eca0475c521a5bc4cf29444c6a597841 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 13 Oct 2024 14:28:46 +0000 Subject: [PATCH 014/329] chore(deps): bump the datadog group with 2 updates (#18144) Bumps the datadog group with 2 updates: [@datadog/browser-logs](https://github.com/DataDog/browser-sdk/tree/HEAD/packages/logs) and [@datadog/browser-rum](https://github.com/DataDog/browser-sdk/tree/HEAD/packages/rum). Updates `@datadog/browser-logs` from 5.28.0 to 5.28.1 - [Changelog](https://github.com/DataDog/browser-sdk/blob/main/CHANGELOG.md) - [Commits](https://github.com/DataDog/browser-sdk/commits/v5.28.1/packages/logs) Updates `@datadog/browser-rum` from 5.28.0 to 5.28.1 - [Changelog](https://github.com/DataDog/browser-sdk/blob/main/CHANGELOG.md) - [Commits](https://github.com/DataDog/browser-sdk/commits/v5.28.1/packages/rum) --- updated-dependencies: - dependency-name: "@datadog/browser-logs" dependency-type: direct:production update-type: version-update:semver-patch dependency-group: datadog - dependency-name: "@datadog/browser-rum" dependency-type: direct:production update-type: version-update:semver-patch dependency-group: datadog ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 4 ++-- yarn.lock | 48 ++++++++++++++++++++++++------------------------ 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/package.json b/package.json index 9d15fd454f0..3a7f82327c2 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "dependencies": { - "@datadog/browser-logs": "5.28.0", - "@datadog/browser-rum": "5.28.0", + "@datadog/browser-logs": "5.28.1", + "@datadog/browser-rum": "5.28.1", "@emotion/react": "11.11.4", "@lexical/history": "0.18.0", "@lexical/react": "0.18.0", diff --git a/yarn.lock b/yarn.lock index b85f6b8d8ba..4c3d29b2a95 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3103,48 +3103,48 @@ __metadata: languageName: node linkType: hard -"@datadog/browser-core@npm:5.28.0": - version: 5.28.0 - resolution: "@datadog/browser-core@npm:5.28.0" - checksum: 10/2be35065d3d045f0191d7ce813e3d667216badff9615f684e3faed71920308082fc65aebdf567f23fa3bf1c33ad9a3aaf5b58e173b5bf540b94010995c957063 +"@datadog/browser-core@npm:5.28.1": + version: 5.28.1 + resolution: "@datadog/browser-core@npm:5.28.1" + checksum: 10/0e55b3234115dd4fa574fc912628f2c52a6d117a33a67e135d430fda7b714f3c93180193585cd45082bf478586a2fbacba38b5493ded441a58dd97daf98f4e72 languageName: node linkType: hard -"@datadog/browser-logs@npm:5.28.0": - version: 5.28.0 - resolution: "@datadog/browser-logs@npm:5.28.0" +"@datadog/browser-logs@npm:5.28.1": + version: 5.28.1 + resolution: "@datadog/browser-logs@npm:5.28.1" dependencies: - "@datadog/browser-core": "npm:5.28.0" + "@datadog/browser-core": "npm:5.28.1" peerDependencies: - "@datadog/browser-rum": 5.28.0 + "@datadog/browser-rum": 5.28.1 peerDependenciesMeta: "@datadog/browser-rum": optional: true - checksum: 10/1c0702a7cf34df4e5981fde0d518be50f4218461c63a2d15bdae99b951a2012ef36a3a1a0e1bb7d82393ee684a65ed01e01d59ebba8ebf366994cef68ed43733 + checksum: 10/4e187965b7893c569061f853f4a796668af1a3b4d6d51017baa028aaf641da3c50c54a67147a1b3c554a4f9d5429c0c65ff4cfb0b436788653002ba0b88bb70c languageName: node linkType: hard -"@datadog/browser-rum-core@npm:5.28.0": - version: 5.28.0 - resolution: "@datadog/browser-rum-core@npm:5.28.0" +"@datadog/browser-rum-core@npm:5.28.1": + version: 5.28.1 + resolution: "@datadog/browser-rum-core@npm:5.28.1" dependencies: - "@datadog/browser-core": "npm:5.28.0" - checksum: 10/97464c90d2427034f0c381ffbd95d0aa4ed2cece0e9eb867f893e4d691f974eb2133a4bd4e653da0efbe612127d5da3c63f441c9bb12e1656b7d01d8c93c74e8 + "@datadog/browser-core": "npm:5.28.1" + checksum: 10/a2da83c14b593baf0d9249a83e3cc2dad54067834529ffc50e2521886daf90a16f5c5cffd20a0c2fa275764434475314e579a9af1bde6987a5d0993b4b8d62d5 languageName: node linkType: hard -"@datadog/browser-rum@npm:5.28.0": - version: 5.28.0 - resolution: "@datadog/browser-rum@npm:5.28.0" +"@datadog/browser-rum@npm:5.28.1": + version: 5.28.1 + resolution: "@datadog/browser-rum@npm:5.28.1" dependencies: - "@datadog/browser-core": "npm:5.28.0" - "@datadog/browser-rum-core": "npm:5.28.0" + "@datadog/browser-core": "npm:5.28.1" + "@datadog/browser-rum-core": "npm:5.28.1" peerDependencies: - "@datadog/browser-logs": 5.28.0 + "@datadog/browser-logs": 5.28.1 peerDependenciesMeta: "@datadog/browser-logs": optional: true - checksum: 10/9078565d4fb469d73eca84e8e624855490c4db02a88cccf27f0f5f1b440d5081bad7b31e832b235468cdf586e54d463f86afc9fe663906c4542a5bd9fce3891c + checksum: 10/941f3e8e50c09ae0dc585439bc6f41021faaaa2d4a95310625be328df20648ed9e75f1af438bf1aed197de177d3483bbb45c0848f0bbc4bf6627b88847dce064 languageName: node linkType: hard @@ -18575,8 +18575,8 @@ __metadata: "@babel/preset-env": "npm:7.25.7" "@babel/preset-react": "npm:7.25.7" "@babel/preset-typescript": "npm:7.25.7" - "@datadog/browser-logs": "npm:5.28.0" - "@datadog/browser-rum": "npm:5.28.0" + "@datadog/browser-logs": "npm:5.28.1" + "@datadog/browser-rum": "npm:5.28.1" "@emotion/eslint-plugin": "npm:11.11.0" "@emotion/react": "npm:11.11.4" "@faker-js/faker": "npm:9.0.3" From 29cb3ae2a3b2b2f76a50fad7befb3b3c8e3ce323 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 13 Oct 2024 14:29:30 +0000 Subject: [PATCH 015/329] chore(deps-dev): bump @babel/preset-env from 7.25.7 to 7.25.8 (#18145) Bumps [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) from 7.25.7 to 7.25.8. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.25.8/packages/babel-preset-env) --- updated-dependencies: - dependency-name: "@babel/preset-env" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 169 ++++++++++++++++++++++++--------------------------- 2 files changed, 82 insertions(+), 89 deletions(-) diff --git a/package.json b/package.json index 3a7f82327c2..ab3ce3395d7 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "devDependencies": { "@babel/core": "7.25.7", "@babel/plugin-proposal-decorators": "7.25.7", - "@babel/preset-env": "7.25.7", + "@babel/preset-env": "7.25.8", "@babel/preset-react": "7.25.7", "@babel/preset-typescript": "7.25.7", "@emotion/eslint-plugin": "11.11.0", diff --git a/yarn.lock b/yarn.lock index 4c3d29b2a95..626e232de07 100644 --- a/yarn.lock +++ b/yarn.lock @@ -69,6 +69,13 @@ __metadata: languageName: node linkType: hard +"@babel/compat-data@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/compat-data@npm:7.25.8" + checksum: 10/269fcb0d89e02e36c8a11e0c1b960a6b4204e88f59f20c374d28f8e318f4cd5ded42dfedc4b54162065e6a10f71c0de651f5ed3f9b45d3a4b52240196df85726 + languageName: node + linkType: hard + "@babel/core@npm:7.25.7": version: 7.25.7 resolution: "@babel/core@npm:7.25.7" @@ -1106,17 +1113,16 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-async-generator-functions@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-async-generator-functions@npm:7.25.7" +"@babel/plugin-transform-async-generator-functions@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.25.8" dependencies: "@babel/helper-plugin-utils": "npm:^7.25.7" "@babel/helper-remap-async-to-generator": "npm:^7.25.7" - "@babel/plugin-syntax-async-generators": "npm:^7.8.4" "@babel/traverse": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/f5e14796bcb04db7f045833d695e49bb1178162c74754f67f25fd6934ebbd0e57a59784d76a23b3f472bbd3e5a0c33d433ab60e7c6a5c7ca240b54d8ca231baa + checksum: 10/ab3f74664fc03af357e8450711de60ec77149be668059dbc0c0d616d85253117aec0e5ffb2eccda3449d0099d5fba5ef32f0e6e12a52af5f72fbca437372ece5 languageName: node linkType: hard @@ -1227,16 +1233,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-class-static-block@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-class-static-block@npm:7.25.7" +"@babel/plugin-transform-class-static-block@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/plugin-transform-class-static-block@npm:7.25.8" dependencies: "@babel/helper-create-class-features-plugin": "npm:^7.25.7" "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" peerDependencies: "@babel/core": ^7.12.0 - checksum: 10/d6fa7132071860d4b6e58baa43c8efdd241d5b4ff3d31b0b6593390c7b39bf17ab549e427c08db550c84b0fb02eaad41fc96c2d299fbee4c0a6030315b0a5296 + checksum: 10/160d5f9d1dbe4dc12c2998227b51b1ccfe9f4d11b1031d0698f34403961d5b9bb995cc86acf1855102b9be365370c97d8cea243802b73c7ba7b2b18b2ac3aae9 languageName: node linkType: hard @@ -1390,15 +1395,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-dynamic-import@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-dynamic-import@npm:7.25.7" +"@babel/plugin-transform-dynamic-import@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/plugin-transform-dynamic-import@npm:7.25.8" dependencies: "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-dynamic-import": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/a153f2a8b10a733f884a0ba0e680387d0ba643d40774885c26cceef90cc61b8e2f946a64e1764605189498a9a04e1d4da4e886c3e26a850e7c4e5ea5fb4b3f50 + checksum: 10/cf2c105143461876f418d21893ac8f7f2b0a3c3cefb4374c3cd6338a19d3a0deed3565049f7436b94452c6471622958ef9248c7bdfeb34d2917710ac74431203 languageName: node linkType: hard @@ -1438,15 +1442,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-export-namespace-from@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-export-namespace-from@npm:7.25.7" +"@babel/plugin-transform-export-namespace-from@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/plugin-transform-export-namespace-from@npm:7.25.8" dependencies: "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-export-namespace-from": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/e3ec589906380d1daa3349c358f8a56c9adc1c5003b4069321172e1e8160f2a497e9ae112ad1ac68e26dce33eb19019932cf938ad411493441ad202db0e72c2b + checksum: 10/439aac4ca1c7dbb63f021142e7abcd746049bf0d44cc5d2eb469ae3b75d90e076a43ff77190b74d8139402b53eea625b08c68651d3ce1d0a0915f5643450b3de languageName: node linkType: hard @@ -1512,15 +1515,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-json-strings@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-json-strings@npm:7.25.7" +"@babel/plugin-transform-json-strings@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/plugin-transform-json-strings@npm:7.25.8" dependencies: "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-json-strings": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/99e7b19d5b8f0df78eb2eaef2c1c8734e634b08910b47d5c2f61e43e75bd94a9f8e51c8baf2d2fa181bf0a7424c08b0aee29a95ae5f9e59f50e51e188dc943a1 + checksum: 10/adbc6a5a77b96db0f7e168c5fd2e56941df649808ce960f12447c1ba5d3893e9d458e7e14e3a5bd725ac5f3432ac1b3cf62b7413bbf7168a7c656dce51db711a languageName: node linkType: hard @@ -1558,15 +1560,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-logical-assignment-operators@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.25.7" +"@babel/plugin-transform-logical-assignment-operators@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.25.8" dependencies: "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/28d00bae5637564243585e4fa044b9bc1da4b5c2ac2859e848e2db5f1c11c24dbc1ecc690755a00f593815a40d9cd99df2b31110ab68626840b22598ecf08d93 + checksum: 10/7af0e4ad63c1a59f24894b64330040966204963b75287752a2d56703c7924d3a883a3c2497e1f03c4b1792f8664e0650cf6687010dc5483444c077de1daae9f5 languageName: node linkType: hard @@ -1752,15 +1753,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.25.7" +"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.25.8" dependencies: "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/af4d2d17eb0bdfa4a0414eb02a402f65226363ea3cc6d781028fd0051893918eeb3cf13aaceef8ef58ef35b36362dbcc25cd018e0c24b5b441226e086bf3b58f + checksum: 10/d742fedc1abf404d7f40065cdff9afc521236607f0d06c48d1e471f43d3a7471010d1651ba4758d80c73347a39dc278d86c43a9c814382ded4e9c7c519ace021 languageName: node linkType: hard @@ -1776,15 +1776,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-numeric-separator@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-numeric-separator@npm:7.25.7" +"@babel/plugin-transform-numeric-separator@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/plugin-transform-numeric-separator@npm:7.25.8" dependencies: "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/963ff47d27b7e61e0b346a29e2ff86ccf4fb779f7069b54c09e93376e6ed769523d81b9ef4ef60ae2d8fe35f3411a25d4b2e8d0a23850afa821f47f33c7b510c + checksum: 10/e27779a309dbc5fdba71d7eae0eac5506547632b0cbf8f0add8215797bbda4f4e61595750236fee3292600cc2d13892f133beccc52b2998534e0b10c668db857 languageName: node linkType: hard @@ -1802,17 +1801,16 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-object-rest-spread@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-object-rest-spread@npm:7.25.7" +"@babel/plugin-transform-object-rest-spread@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/plugin-transform-object-rest-spread@npm:7.25.8" dependencies: "@babel/helper-compilation-targets": "npm:^7.25.7" "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" "@babel/plugin-transform-parameters": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/b831c56921cb4818956941fd6eb54ba75fa51e5e5c1dc00466d70c79fea2a73d166a6ff02e8a27d63e40238de49f966af2bd243a8b6d281f784672f1a285d47c + checksum: 10/38f0fab8321a0b1e44784b7371f8bd5601eb885a7e9d88d7904dedda33a72f500d84792758c47e1541336c1b7592b6d956a85c2fd8e2e294f34c0303cc73442c languageName: node linkType: hard @@ -1852,15 +1850,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-optional-catch-binding@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.25.7" +"@babel/plugin-transform-optional-catch-binding@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.25.8" dependencies: "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/b195680e047bd2e0e36debfb75e5649f0fd8c88185e33c627c5418c68f9990cb4d96faccfbf47a2fdf9ff848a9e013ca077647616aa9dc1f78fa250ef1521437 + checksum: 10/9ecf32accc5b12b83ce2f6537c9eac87f2b0f89abfe91a8a8c87ea5ece05820988415271d0fdaf7f565e2c0c837afb24fc644779029b98b1401782d9c0d73642 languageName: node linkType: hard @@ -1890,6 +1887,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-optional-chaining@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/plugin-transform-optional-chaining@npm:7.25.8" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10/ffb5d81e6dbb28907d5346c8e12a1ed1ea0e30170fbe609d48d0466cdbc9d11b5774c8781682693f7cf7bd39da6111980e54813af96c6b3086dc769369c67d28 + languageName: node + linkType: hard + "@babel/plugin-transform-parameters@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-parameters@npm:7.24.7" @@ -1950,17 +1959,16 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-private-property-in-object@npm:^7.25.7": - version: 7.25.7 - resolution: "@babel/plugin-transform-private-property-in-object@npm:7.25.7" +"@babel/plugin-transform-private-property-in-object@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/plugin-transform-private-property-in-object@npm:7.25.8" dependencies: "@babel/helper-annotate-as-pure": "npm:^7.25.7" "@babel/helper-create-class-features-plugin": "npm:^7.25.7" "@babel/helper-plugin-utils": "npm:^7.25.7" - "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/c23786b9c123cceb0f69ab074377236825d76db090413db0b92d1a412b0e488e7ebde3e6155883ddbce6616114c54693485274a5d2b8a9a280b40781f80bd343 + checksum: 10/c612023879930c951e3a993104bbc3b78169aef6c38233758ee3358a7ab76954b41880bca67635df218dc6893aabad138f3783d508dc715419e62c8d1fad9088 languageName: node linkType: hard @@ -2302,11 +2310,11 @@ __metadata: languageName: node linkType: hard -"@babel/preset-env@npm:7.25.7": - version: 7.25.7 - resolution: "@babel/preset-env@npm:7.25.7" +"@babel/preset-env@npm:7.25.8": + version: 7.25.8 + resolution: "@babel/preset-env@npm:7.25.8" dependencies: - "@babel/compat-data": "npm:^7.25.7" + "@babel/compat-data": "npm:^7.25.8" "@babel/helper-compilation-targets": "npm:^7.25.7" "@babel/helper-plugin-utils": "npm:^7.25.7" "@babel/helper-validator-option": "npm:^7.25.7" @@ -2316,45 +2324,30 @@ __metadata: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.25.7" "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.25.7" "@babel/plugin-proposal-private-property-in-object": "npm:7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-async-generators": "npm:^7.8.4" - "@babel/plugin-syntax-class-properties": "npm:^7.12.13" - "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" - "@babel/plugin-syntax-dynamic-import": "npm:^7.8.3" - "@babel/plugin-syntax-export-namespace-from": "npm:^7.8.3" "@babel/plugin-syntax-import-assertions": "npm:^7.25.7" "@babel/plugin-syntax-import-attributes": "npm:^7.25.7" - "@babel/plugin-syntax-import-meta": "npm:^7.10.4" - "@babel/plugin-syntax-json-strings": "npm:^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" - "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4" - "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" - "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" - "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" - "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" - "@babel/plugin-syntax-top-level-await": "npm:^7.14.5" "@babel/plugin-syntax-unicode-sets-regex": "npm:^7.18.6" "@babel/plugin-transform-arrow-functions": "npm:^7.25.7" - "@babel/plugin-transform-async-generator-functions": "npm:^7.25.7" + "@babel/plugin-transform-async-generator-functions": "npm:^7.25.8" "@babel/plugin-transform-async-to-generator": "npm:^7.25.7" "@babel/plugin-transform-block-scoped-functions": "npm:^7.25.7" "@babel/plugin-transform-block-scoping": "npm:^7.25.7" "@babel/plugin-transform-class-properties": "npm:^7.25.7" - "@babel/plugin-transform-class-static-block": "npm:^7.25.7" + "@babel/plugin-transform-class-static-block": "npm:^7.25.8" "@babel/plugin-transform-classes": "npm:^7.25.7" "@babel/plugin-transform-computed-properties": "npm:^7.25.7" "@babel/plugin-transform-destructuring": "npm:^7.25.7" "@babel/plugin-transform-dotall-regex": "npm:^7.25.7" "@babel/plugin-transform-duplicate-keys": "npm:^7.25.7" "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "npm:^7.25.7" - "@babel/plugin-transform-dynamic-import": "npm:^7.25.7" + "@babel/plugin-transform-dynamic-import": "npm:^7.25.8" "@babel/plugin-transform-exponentiation-operator": "npm:^7.25.7" - "@babel/plugin-transform-export-namespace-from": "npm:^7.25.7" + "@babel/plugin-transform-export-namespace-from": "npm:^7.25.8" "@babel/plugin-transform-for-of": "npm:^7.25.7" "@babel/plugin-transform-function-name": "npm:^7.25.7" - "@babel/plugin-transform-json-strings": "npm:^7.25.7" + "@babel/plugin-transform-json-strings": "npm:^7.25.8" "@babel/plugin-transform-literals": "npm:^7.25.7" - "@babel/plugin-transform-logical-assignment-operators": "npm:^7.25.7" + "@babel/plugin-transform-logical-assignment-operators": "npm:^7.25.8" "@babel/plugin-transform-member-expression-literals": "npm:^7.25.7" "@babel/plugin-transform-modules-amd": "npm:^7.25.7" "@babel/plugin-transform-modules-commonjs": "npm:^7.25.7" @@ -2362,15 +2355,15 @@ __metadata: "@babel/plugin-transform-modules-umd": "npm:^7.25.7" "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.25.7" "@babel/plugin-transform-new-target": "npm:^7.25.7" - "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.25.7" - "@babel/plugin-transform-numeric-separator": "npm:^7.25.7" - "@babel/plugin-transform-object-rest-spread": "npm:^7.25.7" + "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.25.8" + "@babel/plugin-transform-numeric-separator": "npm:^7.25.8" + "@babel/plugin-transform-object-rest-spread": "npm:^7.25.8" "@babel/plugin-transform-object-super": "npm:^7.25.7" - "@babel/plugin-transform-optional-catch-binding": "npm:^7.25.7" - "@babel/plugin-transform-optional-chaining": "npm:^7.25.7" + "@babel/plugin-transform-optional-catch-binding": "npm:^7.25.8" + "@babel/plugin-transform-optional-chaining": "npm:^7.25.8" "@babel/plugin-transform-parameters": "npm:^7.25.7" "@babel/plugin-transform-private-methods": "npm:^7.25.7" - "@babel/plugin-transform-private-property-in-object": "npm:^7.25.7" + "@babel/plugin-transform-private-property-in-object": "npm:^7.25.8" "@babel/plugin-transform-property-literals": "npm:^7.25.7" "@babel/plugin-transform-regenerator": "npm:^7.25.7" "@babel/plugin-transform-reserved-words": "npm:^7.25.7" @@ -2391,7 +2384,7 @@ __metadata: semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/2d09aa2cb765a9a1c8a7566e22948e69d69de6b9b763322790bd72ec0bd5bcadf7b02abbc6ad1bab917e1f6d60b1a7f4606778d88cc7d7e1388cc52d292db97d + checksum: 10/501d78f56df8bf6f98a42da5db475db183048c4280b3292cf988b6baf01843915161f3b341ed525e2fcafcc47726798532b0e1dc7eb80aa29cc88c9d6f94ee6e languageName: node linkType: hard @@ -18572,7 +18565,7 @@ __metadata: dependencies: "@babel/core": "npm:7.25.7" "@babel/plugin-proposal-decorators": "npm:7.25.7" - "@babel/preset-env": "npm:7.25.7" + "@babel/preset-env": "npm:7.25.8" "@babel/preset-react": "npm:7.25.7" "@babel/preset-typescript": "npm:7.25.7" "@datadog/browser-logs": "npm:5.28.1" From d86a9901a346a657354cffa93bd7c02558ec9fc6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 13 Oct 2024 14:29:58 +0000 Subject: [PATCH 016/329] chore(deps-dev): bump @types/react-dom from 18.3.0 to 18.3.1 (#18146) Bumps [@types/react-dom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-dom) from 18.3.0 to 18.3.1. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react-dom) --- updated-dependencies: - dependency-name: "@types/react-dom" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index ab3ce3395d7..f820e84ae9c 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "@types/open-graph": "0.2.5", "@types/platform": "1.3.6", "@types/react": "18.3.3", - "@types/react-dom": "18.3.0", + "@types/react-dom": "18.3.1", "@types/react-transition-group": "4.4.11", "@types/redux-mock-store": "1.0.6", "@types/seedrandom": "3.0.8", diff --git a/yarn.lock b/yarn.lock index 626e232de07..509ac9c9c32 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5375,12 +5375,12 @@ __metadata: languageName: node linkType: hard -"@types/react-dom@npm:18.3.0": - version: 18.3.0 - resolution: "@types/react-dom@npm:18.3.0" +"@types/react-dom@npm:18.3.1": + version: 18.3.1 + resolution: "@types/react-dom@npm:18.3.1" dependencies: "@types/react": "npm:*" - checksum: 10/6ff53f5a7b7fba952a68e114d3b542ebdc1e87a794234785ebab0bcd9bde7fb4885f21ebaf93d26dc0a1b5b93287f42cad68b78ae04dddf6b20da7aceff0beaf + checksum: 10/33f9ba79b26641ddf00a8699c30066b7e3573ab254e97475bf08f82fab83a6d3ce8d4ebad86afeb49bb8df3374390a9ba93125cece33badc4b3e8f7eac3c84d8 languageName: node linkType: hard @@ -18595,7 +18595,7 @@ __metadata: "@types/open-graph": "npm:0.2.5" "@types/platform": "npm:1.3.6" "@types/react": "npm:18.3.3" - "@types/react-dom": "npm:18.3.0" + "@types/react-dom": "npm:18.3.1" "@types/react-transition-group": "npm:4.4.11" "@types/redux-mock-store": "npm:1.0.6" "@types/seedrandom": "npm:3.0.8" From a682f80b5b0a2bca8b832129b0912afcf92fd00a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 13 Oct 2024 14:31:17 +0000 Subject: [PATCH 017/329] chore(deps): bump react-router from 6.26.2 to 6.27.0 (#18148) Bumps [react-router](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router) from 6.26.2 to 6.27.0. - [Release notes](https://github.com/remix-run/react-router/releases) - [Changelog](https://github.com/remix-run/react-router/blob/react-router@6.27.0/packages/react-router/CHANGELOG.md) - [Commits](https://github.com/remix-run/react-router/commits/react-router@6.27.0/packages/react-router) --- updated-dependencies: - dependency-name: react-router dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 20 +++++++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index f820e84ae9c..f636c7711fb 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "react-error-boundary": "4.0.13", "react-intl": "6.7.0", "react-redux": "9.1.2", - "react-router": "6.26.2", + "react-router": "6.27.0", "react-router-dom": "6.26.2", "react-transition-group": "4.4.5", "redux": "5.0.1", diff --git a/yarn.lock b/yarn.lock index 509ac9c9c32..b5929a964d6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4666,6 +4666,13 @@ __metadata: languageName: node linkType: hard +"@remix-run/router@npm:1.20.0": + version: 1.20.0 + resolution: "@remix-run/router@npm:1.20.0" + checksum: 10/e1d2420db94a1855b97f1784898d0ae389cf3b77129b8f419e51d4833b77ca2c92ac09e2cb558015324d64580a138fd6faa31e52fcc3ba90e3cc382a1a324d4a + languageName: node + linkType: hard + "@roamhq/wrtc-darwin-arm64@npm:0.8.0": version: 0.8.0 resolution: "@roamhq/wrtc-darwin-arm64@npm:0.8.0" @@ -15664,6 +15671,17 @@ __metadata: languageName: node linkType: hard +"react-router@npm:6.27.0": + version: 6.27.0 + resolution: "react-router@npm:6.27.0" + dependencies: + "@remix-run/router": "npm:1.20.0" + peerDependencies: + react: ">=16.8" + checksum: 10/352e3af2075cdccf9d114b7e06d94a1b46a2147ba9d6e8643787a92464f5fd9ead950252a98d551f99f21860288bcf3a4f088cb5f46b28d1274a4e2ba24cc0f9 + languageName: node + linkType: hard + "react-select@npm:5.7.7": version: 5.7.7 resolution: "react-select@npm:5.7.7" @@ -18682,7 +18700,7 @@ __metadata: react-error-boundary: "npm:4.0.13" react-intl: "npm:6.7.0" react-redux: "npm:9.1.2" - react-router: "npm:6.26.2" + react-router: "npm:6.27.0" react-router-dom: "npm:6.26.2" react-transition-group: "npm:4.4.5" redux: "npm:5.0.1" From 6ca36d691c49ebfc6432ee1a908d8116925b21a2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 13 Oct 2024 14:31:48 +0000 Subject: [PATCH 018/329] chore(deps-dev): bump stylelint from 16.9.0 to 16.10.0 (#18149) Bumps [stylelint](https://github.com/stylelint/stylelint) from 16.9.0 to 16.10.0. - [Release notes](https://github.com/stylelint/stylelint/releases) - [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md) - [Commits](https://github.com/stylelint/stylelint/compare/16.9.0...16.10.0) --- updated-dependencies: - dependency-name: stylelint dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 103 ++++++++++++++++++++++++++++++--------------------- 2 files changed, 61 insertions(+), 44 deletions(-) diff --git a/package.json b/package.json index f636c7711fb..8680e2b3b04 100644 --- a/package.json +++ b/package.json @@ -140,7 +140,7 @@ "simple-git": "3.27.0", "sinon": "18.0.0", "style-loader": "4.0.0", - "stylelint": "16.9.0", + "stylelint": "16.10.0", "stylelint-config-idiomatic-order": "10.0.0", "svg-inline-loader": "0.8.2", "text-encoding": "0.7.0", diff --git a/yarn.lock b/yarn.lock index b5929a964d6..ee95ee4a932 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7998,10 +7998,10 @@ __metadata: languageName: node linkType: hard -"css-functions-list@npm:^3.2.2": - version: 3.2.2 - resolution: "css-functions-list@npm:3.2.2" - checksum: 10/b8a564118b93b87b63236a57132a3ef581416896a70c1d0df73360a9ec43dc582f7c2a586b578feb8476179518e557c6657570a8b6185b16300c7232a84d43e3 +"css-functions-list@npm:^3.2.3": + version: 3.2.3 + resolution: "css-functions-list@npm:3.2.3" + checksum: 10/25f12fb0ef1384b1cf45a6e7e0afd596a19bee90b90316d9e50f7820888f4a8f265be7a6a96b10a5c81e403bd7a5ff8010fa936144f84959d9d91c9350cda0d4 languageName: node linkType: hard @@ -8087,6 +8087,16 @@ __metadata: languageName: node linkType: hard +"css-tree@npm:^3.0.0": + version: 3.0.0 + resolution: "css-tree@npm:3.0.0" + dependencies: + mdn-data: "npm:2.10.0" + source-map-js: "npm:^1.0.1" + checksum: 10/ab56b8cd1953c3270e95b63540462037b48dc120c4d6f686eeb054bb99acf3bb0a40bff306bb4fc2e077f8d95f5b518067205d577029ab84ba279d75867c4f37 + languageName: node + linkType: hard + "css-tree@npm:~2.2.0": version: 2.2.1 resolution: "css-tree@npm:2.2.1" @@ -8273,7 +8283,19 @@ __metadata: languageName: node linkType: hard -"debug@npm:^4.3.6, debug@npm:~4.3.6": +"debug@npm:^4.3.7": + version: 4.3.7 + resolution: "debug@npm:4.3.7" + dependencies: + ms: "npm:^2.1.3" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10/71168908b9a78227ab29d5d25fe03c5867750e31ce24bf2c44a86efc5af041758bb56569b0a3d48a9b5344c00a24a777e6f4100ed6dfd9534a42c1dde285125a + languageName: node + linkType: hard + +"debug@npm:~4.3.6": version: 4.3.6 resolution: "debug@npm:4.3.6" dependencies: @@ -9789,12 +9811,12 @@ __metadata: languageName: node linkType: hard -"file-entry-cache@npm:^9.0.0": - version: 9.0.0 - resolution: "file-entry-cache@npm:9.0.0" +"file-entry-cache@npm:^9.1.0": + version: 9.1.0 + resolution: "file-entry-cache@npm:9.1.0" dependencies: flat-cache: "npm:^5.0.0" - checksum: 10/6b0ddc88e087e758fbc9c75e7f5f07982f02a8fc555c70561faff37ddce9f03e7273f62844beb5a0ee84685f6c62b036429227718687219a35fea57f3331f1aa + checksum: 10/fd67a9552f272ac4a1731c545e1350bd135e208659144cc5311baac6b8bbf55da7c8c3a0bf25c71ed78eff2bdd26d2a3a8f9ba3d8bec968fe8d1eeba6ab14a96 languageName: node linkType: hard @@ -10849,10 +10871,10 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^5.3.2": - version: 5.3.2 - resolution: "ignore@npm:5.3.2" - checksum: 10/cceb6a457000f8f6a50e1196429750d782afce5680dd878aa4221bd79972d68b3a55b4b1458fc682be978f4d3c6a249046aa0880637367216444ab7b014cfc98 +"ignore@npm:^6.0.2": + version: 6.0.2 + resolution: "ignore@npm:6.0.2" + checksum: 10/af39e49996cd989763920e445eff897d0ae1e36b5f27b0e09e14a4fd2df89b362f92e720ecf06ef729056842366527db8561d310e904718810b92ffbcd23056d languageName: node linkType: hard @@ -13263,6 +13285,13 @@ __metadata: languageName: node linkType: hard +"mdn-data@npm:2.10.0": + version: 2.10.0 + resolution: "mdn-data@npm:2.10.0" + checksum: 10/41b6dde00681dc8a45a907836b10735a9bef1731c5d9269dd05e6c25749ec5d0383e4055b71acd8b1905fcb428e4c43235a2601558df361ae42c3e4c6a9aa6ed + languageName: node + linkType: hard + "mdurl@npm:^1.0.1": version: 1.0.1 resolution: "mdurl@npm:1.0.1" @@ -13566,7 +13595,7 @@ __metadata: languageName: node linkType: hard -"ms@npm:^2.0.0, ms@npm:^2.1.1": +"ms@npm:^2.0.0, ms@npm:^2.1.1, ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: 10/aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d @@ -15150,12 +15179,12 @@ __metadata: languageName: node linkType: hard -"postcss-safe-parser@npm:^7.0.0": - version: 7.0.0 - resolution: "postcss-safe-parser@npm:7.0.0" +"postcss-safe-parser@npm:^7.0.1": + version: 7.0.1 + resolution: "postcss-safe-parser@npm:7.0.1" peerDependencies: postcss: ^8.4.31 - checksum: 10/dba4d782393e6f07339c24bdb8b41166e483d5e7b8f34174c35c64065aef36aadef94b53e0501d7a630d42f51bbd824671e8fb1c2b417333b08b71c9b0066c76 + checksum: 10/285f30877f3ef5d43586432394ef4fcab904cd5bcfff5c26f586eb630fbee490abf2ac6d81e64fa212fb64d03630d12c2f3c5196f5637bec5ba3d043562ddf30 languageName: node linkType: hard @@ -15238,7 +15267,7 @@ __metadata: languageName: node linkType: hard -"postcss@npm:8.4.47": +"postcss@npm:8.4.47, postcss@npm:^8.4.47": version: 8.4.47 resolution: "postcss@npm:8.4.47" dependencies: @@ -15270,17 +15299,6 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.4.41": - version: 8.4.41 - resolution: "postcss@npm:8.4.41" - dependencies: - nanoid: "npm:^3.3.7" - picocolors: "npm:^1.0.1" - source-map-js: "npm:^1.2.0" - checksum: 10/6e6176c2407eff60493ca60a706c6b7def20a722c3adda94ea1ece38345eb99964191336fd62b62652279cec6938e79e0b1e1d477142c8d3516e7a725a74ee37 - languageName: node - linkType: hard - "prelude-ls@npm:^1.2.1": version: 1.2.1 resolution: "prelude-ls@npm:1.2.1" @@ -17064,9 +17082,9 @@ __metadata: languageName: node linkType: hard -"stylelint@npm:16.9.0": - version: 16.9.0 - resolution: "stylelint@npm:16.9.0" +"stylelint@npm:16.10.0": + version: 16.10.0 + resolution: "stylelint@npm:16.10.0" dependencies: "@csstools/css-parser-algorithms": "npm:^3.0.1" "@csstools/css-tokenizer": "npm:^3.0.1" @@ -17076,17 +17094,17 @@ __metadata: balanced-match: "npm:^2.0.0" colord: "npm:^2.9.3" cosmiconfig: "npm:^9.0.0" - css-functions-list: "npm:^3.2.2" - css-tree: "npm:^2.3.1" - debug: "npm:^4.3.6" + css-functions-list: "npm:^3.2.3" + css-tree: "npm:^3.0.0" + debug: "npm:^4.3.7" fast-glob: "npm:^3.3.2" fastest-levenshtein: "npm:^1.0.16" - file-entry-cache: "npm:^9.0.0" + file-entry-cache: "npm:^9.1.0" global-modules: "npm:^2.0.0" globby: "npm:^11.1.0" globjoin: "npm:^0.1.4" html-tags: "npm:^3.3.1" - ignore: "npm:^5.3.2" + ignore: "npm:^6.0.2" imurmurhash: "npm:^0.1.4" is-plain-object: "npm:^5.0.0" known-css-properties: "npm:^0.34.0" @@ -17095,21 +17113,20 @@ __metadata: micromatch: "npm:^4.0.8" normalize-path: "npm:^3.0.0" picocolors: "npm:^1.0.1" - postcss: "npm:^8.4.41" + postcss: "npm:^8.4.47" postcss-resolve-nested-selector: "npm:^0.1.6" - postcss-safe-parser: "npm:^7.0.0" + postcss-safe-parser: "npm:^7.0.1" postcss-selector-parser: "npm:^6.1.2" postcss-value-parser: "npm:^4.2.0" resolve-from: "npm:^5.0.0" string-width: "npm:^4.2.3" - strip-ansi: "npm:^7.1.0" supports-hyperlinks: "npm:^3.1.0" svg-tags: "npm:^1.0.0" table: "npm:^6.8.2" write-file-atomic: "npm:^5.0.1" bin: stylelint: bin/stylelint.mjs - checksum: 10/0a7a697b066af36047fd02c952d59d5b26ac5db7f5772b75481310734c0e722970abb830d60460ea95afb618c51520cc09363dd9b83ae237afb0767b55fb0331 + checksum: 10/2bc1627e2681414d9c61a96e8298ca7697ce8bc78bb9ffe1c3e370e064ca81cd4d131493a3f315334195b1f039ff99ea0c900e264ca4516c93ee5c36d2e4490d languageName: node linkType: hard @@ -18712,7 +18729,7 @@ __metadata: sinon: "npm:18.0.0" speakingurl: "npm:14.0.1" style-loader: "npm:4.0.0" - stylelint: "npm:16.9.0" + stylelint: "npm:16.10.0" stylelint-config-idiomatic-order: "npm:10.0.0" svg-inline-loader: "npm:0.8.2" switch-path: "npm:1.2.0" From 91bd6c824f696554f80ca3370ea11b14d8640092 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 13 Oct 2024 14:32:53 +0000 Subject: [PATCH 019/329] chore(deps-dev): bump @formatjs/cli from 6.2.12 to 6.2.15 (#18150) Bumps [@formatjs/cli](https://github.com/formatjs/formatjs) from 6.2.12 to 6.2.15. - [Release notes](https://github.com/formatjs/formatjs/releases) - [Commits](https://github.com/formatjs/formatjs/compare/@formatjs/cli@6.2.12...@formatjs/cli@6.2.15) --- updated-dependencies: - dependency-name: "@formatjs/cli" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 8680e2b3b04..7c1bc91e56f 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "@babel/preset-typescript": "7.25.7", "@emotion/eslint-plugin": "11.11.0", "@faker-js/faker": "9.0.3", - "@formatjs/cli": "6.2.12", + "@formatjs/cli": "6.2.15", "@roamhq/wrtc": "0.8.0", "@testing-library/dom": "^10.4.0", "@testing-library/react": "16.0.1", diff --git a/yarn.lock b/yarn.lock index ee95ee4a932..6b15d9cee51 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3367,9 +3367,9 @@ __metadata: languageName: node linkType: hard -"@formatjs/cli@npm:6.2.12": - version: 6.2.12 - resolution: "@formatjs/cli@npm:6.2.12" +"@formatjs/cli@npm:6.2.15": + version: 6.2.15 + resolution: "@formatjs/cli@npm:6.2.15" peerDependencies: "@glimmer/env": ^0.1.7 "@glimmer/reference": ^0.91.1 || ^0.92.0 @@ -3398,7 +3398,7 @@ __metadata: optional: true bin: formatjs: bin/formatjs - checksum: 10/468123112ddd3c26ae2c11cead5ab684b1c7712c841c976e42cc3d9ab7aa10fa6ea02208b2beeaabfd3872fab16a10fa44eb3e9d611c716f7d80dfaf6f420962 + checksum: 10/0fe06fd111ccf896ea156ab0f85cb19febbff7500e6333f071aea92900bd8f790a1ef83a1f8b8390498f8f49a68de01ead4a4edf7820e3311040746cf66c52c6 languageName: node linkType: hard @@ -18608,7 +18608,7 @@ __metadata: "@emotion/eslint-plugin": "npm:11.11.0" "@emotion/react": "npm:11.11.4" "@faker-js/faker": "npm:9.0.3" - "@formatjs/cli": "npm:6.2.12" + "@formatjs/cli": "npm:6.2.15" "@lexical/history": "npm:0.18.0" "@lexical/react": "npm:0.18.0" "@mediapipe/tasks-vision": "npm:0.10.17" From 4cc94f0a50efc15726b82a398224ba8451e3db33 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 13 Oct 2024 14:34:53 +0000 Subject: [PATCH 020/329] chore(deps-dev): bump @types/node from 22.7.4 to 22.7.5 (#18153) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.7.4 to 22.7.5. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 7c1bc91e56f..e37cc2412f5 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,7 @@ "@types/libsodium-wrappers": "0", "@types/linkify-it": "5.0.0", "@types/markdown-it": "14.1.1", - "@types/node": "22.7.4", + "@types/node": "22.7.5", "@types/open-graph": "0.2.5", "@types/platform": "1.3.6", "@types/react": "18.3.3", diff --git a/yarn.lock b/yarn.lock index 6b15d9cee51..cd41245c932 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5327,12 +5327,12 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:22.7.4": - version: 22.7.4 - resolution: "@types/node@npm:22.7.4" +"@types/node@npm:22.7.5": + version: 22.7.5 + resolution: "@types/node@npm:22.7.5" dependencies: undici-types: "npm:~6.19.2" - checksum: 10/19ddab80c4eba2253c855ed67c9bbc47417183049d01e59010a738bd80d47338bab79fd1f44ae51516bd63a1db4bf21ddb38b16bf6401a2e93252068ec52e88b + checksum: 10/e8ba102f8c1aa7623787d625389be68d64e54fcbb76d41f6c2c64e8cf4c9f4a2370e7ef5e5f1732f3c57529d3d26afdcb2edc0101c5e413a79081449825c57ac languageName: node linkType: hard @@ -18626,7 +18626,7 @@ __metadata: "@types/libsodium-wrappers": "npm:0" "@types/linkify-it": "npm:5.0.0" "@types/markdown-it": "npm:14.1.1" - "@types/node": "npm:22.7.4" + "@types/node": "npm:22.7.5" "@types/open-graph": "npm:0.2.5" "@types/platform": "npm:1.3.6" "@types/react": "npm:18.3.3" From 9773d416d912bc80767e7bd91cc69da116ae4277 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 13 Oct 2024 14:36:03 +0000 Subject: [PATCH 021/329] chore(deps-dev): bump postcss-preset-env from 10.0.6 to 10.0.7 (#18155) Bumps [postcss-preset-env](https://github.com/csstools/postcss-plugins/tree/HEAD/plugin-packs/postcss-preset-env) from 10.0.6 to 10.0.7. - [Changelog](https://github.com/csstools/postcss-plugins/blob/main/plugin-packs/postcss-preset-env/CHANGELOG.md) - [Commits](https://github.com/csstools/postcss-plugins/commits/HEAD/plugin-packs/postcss-preset-env) --- updated-dependencies: - dependency-name: postcss-preset-env dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 390 +++++++++++++++++++++++++++------------------------ 2 files changed, 209 insertions(+), 183 deletions(-) diff --git a/package.json b/package.json index e37cc2412f5..c3ee0612ae0 100644 --- a/package.json +++ b/package.json @@ -131,7 +131,7 @@ "postcss-import": "16.1.0", "postcss-less": "6.0.0", "postcss-loader": "8.1.1", - "postcss-preset-env": "10.0.6", + "postcss-preset-env": "10.0.7", "postcss-scss": "4.0.9", "prettier": "3.3.2", "raw-loader": "4.0.2", diff --git a/yarn.lock b/yarn.lock index cd41245c932..6a25868caf2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2632,13 +2632,13 @@ __metadata: languageName: node linkType: hard -"@csstools/cascade-layer-name-parser@npm:^2.0.1": - version: 2.0.1 - resolution: "@csstools/cascade-layer-name-parser@npm:2.0.1" +"@csstools/cascade-layer-name-parser@npm:^2.0.2": + version: 2.0.2 + resolution: "@csstools/cascade-layer-name-parser@npm:2.0.2" peerDependencies: - "@csstools/css-parser-algorithms": ^3.0.1 - "@csstools/css-tokenizer": ^3.0.1 - checksum: 10/627bbd95ef5c61637281fd244b01833ea1c89226cca187fa36cdb82864e35f16c719659dcf24d28c644037772b2b4717b85b2580af85294f5fba1c7907a766d8 + "@csstools/css-parser-algorithms": ^3.0.2 + "@csstools/css-tokenizer": ^3.0.2 + checksum: 10/f0f9bc75e9080d7243279fd3e583f056abb3a122f6e54d98ed2f5feb234672770b71dddb0da985d6fb7bee4c314e81f204355e300c544a921e6097fcd8b08b2b languageName: node linkType: hard @@ -2649,26 +2649,26 @@ __metadata: languageName: node linkType: hard -"@csstools/css-calc@npm:^2.0.1": - version: 2.0.1 - resolution: "@csstools/css-calc@npm:2.0.1" +"@csstools/css-calc@npm:^2.0.2": + version: 2.0.2 + resolution: "@csstools/css-calc@npm:2.0.2" peerDependencies: - "@csstools/css-parser-algorithms": ^3.0.1 - "@csstools/css-tokenizer": ^3.0.1 - checksum: 10/2c11e8dcab2d7b1ee3173f6d7d3391a8c2ed06d526feadc4e51b4e7620684fd6ba0fd73f3c575d81f24a68b64c249c9b09e3f8c160223f7097d79605077bc553 + "@csstools/css-parser-algorithms": ^3.0.2 + "@csstools/css-tokenizer": ^3.0.2 + checksum: 10/3c2a48afc08db3bc00ce64efe3fde8bed9f9c05783532ddca92954d5caf17111f4ae0d8ba9a55a534e54b4d1997df0b414d88b3cdb4bc931cd4a1bd2cdf5c321 languageName: node linkType: hard -"@csstools/css-color-parser@npm:^3.0.2": - version: 3.0.2 - resolution: "@csstools/css-color-parser@npm:3.0.2" +"@csstools/css-color-parser@npm:^3.0.3": + version: 3.0.3 + resolution: "@csstools/css-color-parser@npm:3.0.3" dependencies: "@csstools/color-helpers": "npm:^5.0.1" - "@csstools/css-calc": "npm:^2.0.1" + "@csstools/css-calc": "npm:^2.0.2" peerDependencies: - "@csstools/css-parser-algorithms": ^3.0.1 - "@csstools/css-tokenizer": ^3.0.1 - checksum: 10/756af70cd3eb0156f551c0d513545ad42231760ae5b285686913ba425ea9059e6ea08b2d9cd6653ebe31489b67b840283e57cf8bb0cff250c070cd408a65d246 + "@csstools/css-parser-algorithms": ^3.0.2 + "@csstools/css-tokenizer": ^3.0.2 + checksum: 10/5e17fb4bd8539eb9f407e1b6ced9b5f27b90f0dbec2dd2cbfdf9d00711453ecd0bb6deba3d5d842c946b7405cd0006c02d5211e2f0a97cdf4e215ecbe71603ae languageName: node linkType: hard @@ -2681,6 +2681,15 @@ __metadata: languageName: node linkType: hard +"@csstools/css-parser-algorithms@npm:^3.0.2": + version: 3.0.2 + resolution: "@csstools/css-parser-algorithms@npm:3.0.2" + peerDependencies: + "@csstools/css-tokenizer": ^3.0.2 + checksum: 10/ecc8ad77304606e59ce5b1d34b97e879f2b3745fe8cf26649faceb881ee1d47183dd7d1c07778ac58ffac5991365c43eebc3a015db9f872b3a08f8f1c03240f5 + languageName: node + linkType: hard + "@csstools/css-tokenizer@npm:^3.0.1": version: 3.0.1 resolution: "@csstools/css-tokenizer@npm:3.0.1" @@ -2688,6 +2697,13 @@ __metadata: languageName: node linkType: hard +"@csstools/css-tokenizer@npm:^3.0.2": + version: 3.0.2 + resolution: "@csstools/css-tokenizer@npm:3.0.2" + checksum: 10/6453982ede998dbd8c222cdc5efa11375c1e7c9ad66c55b077ec23f2ecec1080aa0631818cdea191c36f0b8e1fd607408d13664a898299c2a594d93ef6fa62e9 + languageName: node + linkType: hard + "@csstools/media-query-list-parser@npm:^3.0.1": version: 3.0.1 resolution: "@csstools/media-query-list-parser@npm:3.0.1" @@ -2698,6 +2714,16 @@ __metadata: languageName: node linkType: hard +"@csstools/media-query-list-parser@npm:^4.0.0": + version: 4.0.0 + resolution: "@csstools/media-query-list-parser@npm:4.0.0" + peerDependencies: + "@csstools/css-parser-algorithms": ^3.0.2 + "@csstools/css-tokenizer": ^3.0.2 + checksum: 10/d6e350c270a18a7280d6342b2a8c29b59b80b34d7e346af77d167ca3dc003dfff415776e2834982b399dd494a7ba24bfa2918477628febfbb5a48d8cb8e08bbe + languageName: node + linkType: hard + "@csstools/postcss-cascade-layers@npm:^5.0.0": version: 5.0.0 resolution: "@csstools/postcss-cascade-layers@npm:5.0.0" @@ -2710,60 +2736,60 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-color-function@npm:^4.0.2": - version: 4.0.2 - resolution: "@csstools/postcss-color-function@npm:4.0.2" +"@csstools/postcss-color-function@npm:^4.0.3": + version: 4.0.3 + resolution: "@csstools/postcss-color-function@npm:4.0.3" dependencies: - "@csstools/css-color-parser": "npm:^3.0.2" - "@csstools/css-parser-algorithms": "npm:^3.0.1" - "@csstools/css-tokenizer": "npm:^3.0.1" + "@csstools/css-color-parser": "npm:^3.0.3" + "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-tokenizer": "npm:^3.0.2" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10/703340ce9bf3734b9b9217d146a0b628ab0ed11ad4358e642efb869dba0fa58b3f741a3c2267c02d6808444d82c00b5764a1873a467aad7b54f670a8a990a0bd + checksum: 10/64013bf4bf9a2c0fa44215f3cba54b653b1e75f58ffbdd68b58e15704befdad50de941ca2a85a1236a0a6332986f5e6c1a8f8f1c762ba4886bc1101f5ae42f75 languageName: node linkType: hard -"@csstools/postcss-color-mix-function@npm:^3.0.2": - version: 3.0.2 - resolution: "@csstools/postcss-color-mix-function@npm:3.0.2" +"@csstools/postcss-color-mix-function@npm:^3.0.3": + version: 3.0.3 + resolution: "@csstools/postcss-color-mix-function@npm:3.0.3" dependencies: - "@csstools/css-color-parser": "npm:^3.0.2" - "@csstools/css-parser-algorithms": "npm:^3.0.1" - "@csstools/css-tokenizer": "npm:^3.0.1" + "@csstools/css-color-parser": "npm:^3.0.3" + "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-tokenizer": "npm:^3.0.2" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10/e81760b2b18cf94e09bffdd8964b542b0633821def428165a47d1f4133ddb5aa562b39169975b75e4e99dbcb87e5fe49af28339c7091312e23129825cd99cf08 + checksum: 10/bc22fb0a1b9263bc499b2fc7147ddd5d9e4d547da2307be1546087e27df79c5a45a28e911a0afb9124f90164f2d0930738b8e0a169d6c2dd830a7ba9ab6374df languageName: node linkType: hard -"@csstools/postcss-content-alt-text@npm:^2.0.1": - version: 2.0.1 - resolution: "@csstools/postcss-content-alt-text@npm:2.0.1" +"@csstools/postcss-content-alt-text@npm:^2.0.2": + version: 2.0.2 + resolution: "@csstools/postcss-content-alt-text@npm:2.0.2" dependencies: - "@csstools/css-parser-algorithms": "npm:^3.0.1" - "@csstools/css-tokenizer": "npm:^3.0.1" + "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-tokenizer": "npm:^3.0.2" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10/f3687ded28967ede2904cee1cf145ebcf9e8cdb0a9828188b8a97f247f996fa6478a93a2db5ce17549c53b9e9632e227c7dd360676c15b37eb1cdf69f5f1bbcc + checksum: 10/b33fce0adab2062cabcf779b550092b38cfb72a186b7ae00c38a29941f3da2a666468a24e08e55e3853303525d2d13e11de2a7932eb1ee67395529a17467730a languageName: node linkType: hard -"@csstools/postcss-exponential-functions@npm:^2.0.1": - version: 2.0.1 - resolution: "@csstools/postcss-exponential-functions@npm:2.0.1" +"@csstools/postcss-exponential-functions@npm:^2.0.2": + version: 2.0.2 + resolution: "@csstools/postcss-exponential-functions@npm:2.0.2" dependencies: - "@csstools/css-calc": "npm:^2.0.1" - "@csstools/css-parser-algorithms": "npm:^3.0.1" - "@csstools/css-tokenizer": "npm:^3.0.1" + "@csstools/css-calc": "npm:^2.0.2" + "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-tokenizer": "npm:^3.0.2" peerDependencies: postcss: ^8.4 - checksum: 10/05015b7fb8d365982e38601d36e64ebcde600aaec1097b5eeb9f42e1368784dfb874e7a582bec9d44c979a341f97f611b7c852eab5bbdd7c5c3d50a35b7d659e + checksum: 10/07da3770a1c5eef9fffa60959b1860f507f89d1170641680e3b2dd1dd91a6ca2c2d612e5383ab8b2ffd231cb1eb04bbc028efeac0a80a5b1f2ecc952e5c3011c languageName: node linkType: hard @@ -2779,46 +2805,46 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-gamut-mapping@npm:^2.0.2": - version: 2.0.2 - resolution: "@csstools/postcss-gamut-mapping@npm:2.0.2" +"@csstools/postcss-gamut-mapping@npm:^2.0.3": + version: 2.0.3 + resolution: "@csstools/postcss-gamut-mapping@npm:2.0.3" dependencies: - "@csstools/css-color-parser": "npm:^3.0.2" - "@csstools/css-parser-algorithms": "npm:^3.0.1" - "@csstools/css-tokenizer": "npm:^3.0.1" + "@csstools/css-color-parser": "npm:^3.0.3" + "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-tokenizer": "npm:^3.0.2" peerDependencies: postcss: ^8.4 - checksum: 10/2fc0892c088211cf7c497165897d5341e62b91075fd2c38beba51b510d82c4edfccd7aaa5e95f58b24569aa30bc0a6208e2cad675fdb563628919dc6aa3d69c8 + checksum: 10/aefd7996125e276defc7649f8367be7fe70601da416e66e009776bc91e193e32065995c7639ecb8d99842bf92477b74a0090af503a1894ed9413bae715208d4f languageName: node linkType: hard -"@csstools/postcss-gradients-interpolation-method@npm:^5.0.2": - version: 5.0.2 - resolution: "@csstools/postcss-gradients-interpolation-method@npm:5.0.2" +"@csstools/postcss-gradients-interpolation-method@npm:^5.0.3": + version: 5.0.3 + resolution: "@csstools/postcss-gradients-interpolation-method@npm:5.0.3" dependencies: - "@csstools/css-color-parser": "npm:^3.0.2" - "@csstools/css-parser-algorithms": "npm:^3.0.1" - "@csstools/css-tokenizer": "npm:^3.0.1" + "@csstools/css-color-parser": "npm:^3.0.3" + "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-tokenizer": "npm:^3.0.2" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10/bf1ed4f8e01a2c90703266c776e9ce69e5390758c70d694c596b59f51e66be81f61ed8c2829084b408859c79604cf92e0cd03328cc19e4323dd5ba9bf858982e + checksum: 10/652bc4431a4ea7b72783607c564fda3f396c4eefabfd7d6737129e48fbc2e11c93792228c070461989cad317c57da011e5e5e479f3c122b5e84ee23248829940 languageName: node linkType: hard -"@csstools/postcss-hwb-function@npm:^4.0.2": - version: 4.0.2 - resolution: "@csstools/postcss-hwb-function@npm:4.0.2" +"@csstools/postcss-hwb-function@npm:^4.0.3": + version: 4.0.3 + resolution: "@csstools/postcss-hwb-function@npm:4.0.3" dependencies: - "@csstools/css-color-parser": "npm:^3.0.2" - "@csstools/css-parser-algorithms": "npm:^3.0.1" - "@csstools/css-tokenizer": "npm:^3.0.1" + "@csstools/css-color-parser": "npm:^3.0.3" + "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-tokenizer": "npm:^3.0.2" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10/d47eabc7d0f4d0e34ccb08713fc06d43d73b53ed48f7a4b3d33b9bc8723a50f87f72c803d16ec1fdab7458b1fba68f8f592fbedd65ae18206a06123f30b63595 + checksum: 10/3ee5c53f11fdbb1111024625b414b2c3475700267a84f91f54539ae40f0e5401144d94b665f53f20927083a7ad5102750982fcb6de0448c61f61e58463a5d052 languageName: node linkType: hard @@ -2856,17 +2882,17 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-light-dark-function@npm:^2.0.4": - version: 2.0.4 - resolution: "@csstools/postcss-light-dark-function@npm:2.0.4" +"@csstools/postcss-light-dark-function@npm:^2.0.5": + version: 2.0.5 + resolution: "@csstools/postcss-light-dark-function@npm:2.0.5" dependencies: - "@csstools/css-parser-algorithms": "npm:^3.0.1" - "@csstools/css-tokenizer": "npm:^3.0.1" + "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-tokenizer": "npm:^3.0.2" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10/ef16fdc5389cbd05909af00f18e9736bf3ebbc5b40f917f98c62d9aa129a7f457dcede74ba6c41532247e7dbb29d2d13bdc7d1295cf4659d3bd44e66c93965af + checksum: 10/385fc023c575acd6131709ae3d58b05591ee91c61dc9ed59d9bce70a73639648713c2062f8d681ada5d986ca8de491a2b43721edc0269fd58144b2f5a872261c languageName: node linkType: hard @@ -2908,42 +2934,42 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-logical-viewport-units@npm:^3.0.1": - version: 3.0.1 - resolution: "@csstools/postcss-logical-viewport-units@npm:3.0.1" +"@csstools/postcss-logical-viewport-units@npm:^3.0.2": + version: 3.0.2 + resolution: "@csstools/postcss-logical-viewport-units@npm:3.0.2" dependencies: - "@csstools/css-tokenizer": "npm:^3.0.1" + "@csstools/css-tokenizer": "npm:^3.0.2" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10/d92e6f4626e6088a68b7d5153b9281548f1ed04453e8a053c5ac98466ae86b7df9e882d1c848798a793488ed20a79e90b3da0718969c5fb36897afdc1d207651 + checksum: 10/f9b7e36f806f7c0d6f04ec890fc0c89ea6d4d19d623fcfa8db507eca8db2dc5d28398bcc743e040d1ae5ef9a75a2ed11e71953d67cdbc4920ae81784aac920f2 languageName: node linkType: hard -"@csstools/postcss-media-minmax@npm:^2.0.1": - version: 2.0.1 - resolution: "@csstools/postcss-media-minmax@npm:2.0.1" +"@csstools/postcss-media-minmax@npm:^2.0.2": + version: 2.0.2 + resolution: "@csstools/postcss-media-minmax@npm:2.0.2" dependencies: - "@csstools/css-calc": "npm:^2.0.1" - "@csstools/css-parser-algorithms": "npm:^3.0.1" - "@csstools/css-tokenizer": "npm:^3.0.1" - "@csstools/media-query-list-parser": "npm:^3.0.1" + "@csstools/css-calc": "npm:^2.0.2" + "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-tokenizer": "npm:^3.0.2" + "@csstools/media-query-list-parser": "npm:^4.0.0" peerDependencies: postcss: ^8.4 - checksum: 10/16b429e05c399bd996bf66bb5df65401572bcf4b1d3931a18a6deaef08c02938a9b255c6b457a7e4cffdebb35cc5aa21c30b40da4cbbb75d4a37b03b0de69ff4 + checksum: 10/c9f0ebc3b66db55da4298b874e6318626172a34da4a357f36667ccd0f5ccb611aa7e035193ee9bd74ebb9aa03f6ef70a89cf42cbf4ffeb5ae14c2c2db1e5b6ba languageName: node linkType: hard -"@csstools/postcss-media-queries-aspect-ratio-number-values@npm:^3.0.1": - version: 3.0.1 - resolution: "@csstools/postcss-media-queries-aspect-ratio-number-values@npm:3.0.1" +"@csstools/postcss-media-queries-aspect-ratio-number-values@npm:^3.0.2": + version: 3.0.2 + resolution: "@csstools/postcss-media-queries-aspect-ratio-number-values@npm:3.0.2" dependencies: - "@csstools/css-parser-algorithms": "npm:^3.0.1" - "@csstools/css-tokenizer": "npm:^3.0.1" - "@csstools/media-query-list-parser": "npm:^3.0.1" + "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-tokenizer": "npm:^3.0.2" + "@csstools/media-query-list-parser": "npm:^4.0.0" peerDependencies: postcss: ^8.4 - checksum: 10/757949b51271a8ef83b0ee9a59ac0bda3dee69e9024a294ba9d8996e523832bafc659c188926ef293de719ff97e22431f8dd3b1ecd29e61c32ae0d6c62734184 + checksum: 10/e463b107685cacc0397a0e46fd0c6e53ab1d59955e6bd807a2b4acd8964e5f454f0ee0cea6af03cdda61aaef55f15a590fac30475764c80a1623d8eefe4d35ee languageName: node linkType: hard @@ -2970,18 +2996,18 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-oklab-function@npm:^4.0.2": - version: 4.0.2 - resolution: "@csstools/postcss-oklab-function@npm:4.0.2" +"@csstools/postcss-oklab-function@npm:^4.0.3": + version: 4.0.3 + resolution: "@csstools/postcss-oklab-function@npm:4.0.3" dependencies: - "@csstools/css-color-parser": "npm:^3.0.2" - "@csstools/css-parser-algorithms": "npm:^3.0.1" - "@csstools/css-tokenizer": "npm:^3.0.1" + "@csstools/css-color-parser": "npm:^3.0.3" + "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-tokenizer": "npm:^3.0.2" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10/e0077b59e03a330e7c163807490ced6cfbfb7ce1e2d623f5ae6ba068452f78290da7b8e7d182c8e82f473774a42dac2248dbbac2548005248f8c626f2dd47e29 + checksum: 10/25981e08921b9bde805bbaabfad84d64b559fb42a674c7e8bd17bbcf08d7dccb2aa987893a4e4f97b8dab8890cbd36a4aa614dd87168da47ee227104d6ac1f3c languageName: node linkType: hard @@ -2996,18 +3022,18 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-relative-color-syntax@npm:^3.0.2": - version: 3.0.2 - resolution: "@csstools/postcss-relative-color-syntax@npm:3.0.2" +"@csstools/postcss-relative-color-syntax@npm:^3.0.3": + version: 3.0.3 + resolution: "@csstools/postcss-relative-color-syntax@npm:3.0.3" dependencies: - "@csstools/css-color-parser": "npm:^3.0.2" - "@csstools/css-parser-algorithms": "npm:^3.0.1" - "@csstools/css-tokenizer": "npm:^3.0.1" + "@csstools/css-color-parser": "npm:^3.0.3" + "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-tokenizer": "npm:^3.0.2" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10/073f4196ebe58ead52e9db6ba1a7b69140e125c8f29408c542d6421c9b855159d3b768716434322132bb23bb64017b7633921c7b4646bdaa74fa3de0b28fd2c0 + checksum: 10/1aa045d3c4e705af24512152f0385c7ca332dde43ebd39c87c496f3f1ff22df19d3d554d1a8bcc6fa4846122b255a36aed7fc34ee367f0111d31a1df21273fd5 languageName: node linkType: hard @@ -3022,16 +3048,16 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-stepped-value-functions@npm:^4.0.1": - version: 4.0.1 - resolution: "@csstools/postcss-stepped-value-functions@npm:4.0.1" +"@csstools/postcss-stepped-value-functions@npm:^4.0.2": + version: 4.0.2 + resolution: "@csstools/postcss-stepped-value-functions@npm:4.0.2" dependencies: - "@csstools/css-calc": "npm:^2.0.1" - "@csstools/css-parser-algorithms": "npm:^3.0.1" - "@csstools/css-tokenizer": "npm:^3.0.1" + "@csstools/css-calc": "npm:^2.0.2" + "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-tokenizer": "npm:^3.0.2" peerDependencies: postcss: ^8.4 - checksum: 10/f9b754236812bd1136fd63b038e3aa410b98a87abbbe4fd4ce1e324adba83249944eee749b7756a481c6d47183f84900c6ff1f20d036197524b79924e264be2b + checksum: 10/f30f0e8e8c6cdec251ba1a08354f40f014b5ed09060842511a1eae2dccfb97e86ccf716a1dc0ffc423e503449b3a76e15f9f5534f504325aea3b8bf3b1fa822b languageName: node linkType: hard @@ -3047,16 +3073,16 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-trigonometric-functions@npm:^4.0.1": - version: 4.0.1 - resolution: "@csstools/postcss-trigonometric-functions@npm:4.0.1" +"@csstools/postcss-trigonometric-functions@npm:^4.0.2": + version: 4.0.2 + resolution: "@csstools/postcss-trigonometric-functions@npm:4.0.2" dependencies: - "@csstools/css-calc": "npm:^2.0.1" - "@csstools/css-parser-algorithms": "npm:^3.0.1" - "@csstools/css-tokenizer": "npm:^3.0.1" + "@csstools/css-calc": "npm:^2.0.2" + "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-tokenizer": "npm:^3.0.2" peerDependencies: postcss: ^8.4 - checksum: 10/5f26516ce443463ea033c6e89707755a43466aabc99feab34061a587a70a06591ca520e98ebb419d75384b3466e935c29b95551b19278b8b3e3b60dcd7ccc235 + checksum: 10/facff6925a3b4b68f5b88756f86d974313163e79670f9bd963514b3618b392c8348e9a419f66bbfbf83af3cead0cd901dd2af144b155a354439c1b067f7dfa38 languageName: node linkType: hard @@ -14486,18 +14512,18 @@ __metadata: languageName: node linkType: hard -"postcss-color-functional-notation@npm:^7.0.2": - version: 7.0.2 - resolution: "postcss-color-functional-notation@npm:7.0.2" +"postcss-color-functional-notation@npm:^7.0.3": + version: 7.0.3 + resolution: "postcss-color-functional-notation@npm:7.0.3" dependencies: - "@csstools/css-color-parser": "npm:^3.0.2" - "@csstools/css-parser-algorithms": "npm:^3.0.1" - "@csstools/css-tokenizer": "npm:^3.0.1" + "@csstools/css-color-parser": "npm:^3.0.3" + "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-tokenizer": "npm:^3.0.2" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10/4a1e99c3794b56cc63fe6bcd6b3a00e1b47e80bd65f3fb993f249d83fe96d715975d7d168cefb8bb95f91d443c24c85e53c38cbda4ca8175dfa4fd916d9bc537 + checksum: 10/c2ffae8d1518439f9f2ccae592bc9585e813a81f66c7a5f18c9b7c617428d1002430b834a87cab80cc7fd37bd19fa6f980e680764961e81fd87f13a474a092c8 languageName: node linkType: hard @@ -14551,46 +14577,46 @@ __metadata: languageName: node linkType: hard -"postcss-custom-media@npm:^11.0.2": - version: 11.0.2 - resolution: "postcss-custom-media@npm:11.0.2" +"postcss-custom-media@npm:^11.0.3": + version: 11.0.3 + resolution: "postcss-custom-media@npm:11.0.3" dependencies: - "@csstools/cascade-layer-name-parser": "npm:^2.0.1" - "@csstools/css-parser-algorithms": "npm:^3.0.1" - "@csstools/css-tokenizer": "npm:^3.0.1" - "@csstools/media-query-list-parser": "npm:^3.0.1" + "@csstools/cascade-layer-name-parser": "npm:^2.0.2" + "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-tokenizer": "npm:^3.0.2" + "@csstools/media-query-list-parser": "npm:^4.0.0" peerDependencies: postcss: ^8.4 - checksum: 10/8f3fa74c6a38acc8d875881a3a220e41f189a6e6e947e5c970b05db6fcba7e4eb431f43261d924ee26ad09ea2a5ed7eda00792249c70a45536f03fabaabf99db + checksum: 10/c763b1e4ebfff6cf24007eb7e183abd0b79bda2c4ab9414156ddcee9e92c81ccc8c91ea31e18f5032ad525a9ef505cd856958313308c38c9a26c2ad4946a8813 languageName: node linkType: hard -"postcss-custom-properties@npm:^14.0.1": - version: 14.0.1 - resolution: "postcss-custom-properties@npm:14.0.1" +"postcss-custom-properties@npm:^14.0.2": + version: 14.0.2 + resolution: "postcss-custom-properties@npm:14.0.2" dependencies: - "@csstools/cascade-layer-name-parser": "npm:^2.0.1" - "@csstools/css-parser-algorithms": "npm:^3.0.1" - "@csstools/css-tokenizer": "npm:^3.0.1" + "@csstools/cascade-layer-name-parser": "npm:^2.0.2" + "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-tokenizer": "npm:^3.0.2" "@csstools/utilities": "npm:^2.0.0" postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.4 - checksum: 10/85a764cbcaa1a884caeb8720e6e1dad9b752de2af6a7d33ca1b922b800add4eebc613f560812679c0b7e3a86fa5134c38007e25f47037294bd27cc8c0559b494 + checksum: 10/9a785dc4ab293aa1d6def3be25f7eb3396042b7849a0253a5158567405bef7e9568f3197d86f573aa8d88ae5f246d5367422998fbcee0d4677bf47b4e5b65c87 languageName: node linkType: hard -"postcss-custom-selectors@npm:^8.0.1": - version: 8.0.1 - resolution: "postcss-custom-selectors@npm:8.0.1" +"postcss-custom-selectors@npm:^8.0.2": + version: 8.0.2 + resolution: "postcss-custom-selectors@npm:8.0.2" dependencies: - "@csstools/cascade-layer-name-parser": "npm:^2.0.1" - "@csstools/css-parser-algorithms": "npm:^3.0.1" - "@csstools/css-tokenizer": "npm:^3.0.1" + "@csstools/cascade-layer-name-parser": "npm:^2.0.2" + "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-tokenizer": "npm:^3.0.2" postcss-selector-parser: "npm:^6.1.0" peerDependencies: postcss: ^8.4 - checksum: 10/5888af8beaf0ac671aad25841d6a996134b13121808d20e2bee340cd39b3e1261c7b8682730c855e50edd81ce9b59df9fdac9b57fe9f5a7228854b01468882a2 + checksum: 10/46ee6a7391176b945ee0f912ba9f6f658dead4c76cee8be8016aa74230828168a675acbced3a06a9bc864802f77e6ca91475680a26ed3c2e5607195b9da68c15 languageName: node linkType: hard @@ -14721,18 +14747,18 @@ __metadata: languageName: node linkType: hard -"postcss-lab-function@npm:^7.0.2": - version: 7.0.2 - resolution: "postcss-lab-function@npm:7.0.2" +"postcss-lab-function@npm:^7.0.3": + version: 7.0.3 + resolution: "postcss-lab-function@npm:7.0.3" dependencies: - "@csstools/css-color-parser": "npm:^3.0.2" - "@csstools/css-parser-algorithms": "npm:^3.0.1" - "@csstools/css-tokenizer": "npm:^3.0.1" + "@csstools/css-color-parser": "npm:^3.0.3" + "@csstools/css-parser-algorithms": "npm:^3.0.2" + "@csstools/css-tokenizer": "npm:^3.0.2" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10/ab74ab5d6cae5f5d5aa32f3d87a99dad550160043b2d3b7e76004fa3ca2e8fda19bf74719dc9c962ed446fc678b3a6f0dca1d0990e617d06a5d3ef9551d4a393 + checksum: 10/2d1de9fa8122ff239f254255a1763b4ba56ac10f638cac9cabd47d24c540034ff4a937802568aa8e80f086b1caa62584cbb932cace10a9a6841a1b13789db81b languageName: node linkType: hard @@ -15058,39 +15084,39 @@ __metadata: languageName: node linkType: hard -"postcss-preset-env@npm:10.0.6": - version: 10.0.6 - resolution: "postcss-preset-env@npm:10.0.6" +"postcss-preset-env@npm:10.0.7": + version: 10.0.7 + resolution: "postcss-preset-env@npm:10.0.7" dependencies: "@csstools/postcss-cascade-layers": "npm:^5.0.0" - "@csstools/postcss-color-function": "npm:^4.0.2" - "@csstools/postcss-color-mix-function": "npm:^3.0.2" - "@csstools/postcss-content-alt-text": "npm:^2.0.1" - "@csstools/postcss-exponential-functions": "npm:^2.0.1" + "@csstools/postcss-color-function": "npm:^4.0.3" + "@csstools/postcss-color-mix-function": "npm:^3.0.3" + "@csstools/postcss-content-alt-text": "npm:^2.0.2" + "@csstools/postcss-exponential-functions": "npm:^2.0.2" "@csstools/postcss-font-format-keywords": "npm:^4.0.0" - "@csstools/postcss-gamut-mapping": "npm:^2.0.2" - "@csstools/postcss-gradients-interpolation-method": "npm:^5.0.2" - "@csstools/postcss-hwb-function": "npm:^4.0.2" + "@csstools/postcss-gamut-mapping": "npm:^2.0.3" + "@csstools/postcss-gradients-interpolation-method": "npm:^5.0.3" + "@csstools/postcss-hwb-function": "npm:^4.0.3" "@csstools/postcss-ic-unit": "npm:^4.0.0" "@csstools/postcss-initial": "npm:^2.0.0" "@csstools/postcss-is-pseudo-class": "npm:^5.0.0" - "@csstools/postcss-light-dark-function": "npm:^2.0.4" + "@csstools/postcss-light-dark-function": "npm:^2.0.5" "@csstools/postcss-logical-float-and-clear": "npm:^3.0.0" "@csstools/postcss-logical-overflow": "npm:^2.0.0" "@csstools/postcss-logical-overscroll-behavior": "npm:^2.0.0" "@csstools/postcss-logical-resize": "npm:^3.0.0" - "@csstools/postcss-logical-viewport-units": "npm:^3.0.1" - "@csstools/postcss-media-minmax": "npm:^2.0.1" - "@csstools/postcss-media-queries-aspect-ratio-number-values": "npm:^3.0.1" + "@csstools/postcss-logical-viewport-units": "npm:^3.0.2" + "@csstools/postcss-media-minmax": "npm:^2.0.2" + "@csstools/postcss-media-queries-aspect-ratio-number-values": "npm:^3.0.2" "@csstools/postcss-nested-calc": "npm:^4.0.0" "@csstools/postcss-normalize-display-values": "npm:^4.0.0" - "@csstools/postcss-oklab-function": "npm:^4.0.2" + "@csstools/postcss-oklab-function": "npm:^4.0.3" "@csstools/postcss-progressive-custom-properties": "npm:^4.0.0" - "@csstools/postcss-relative-color-syntax": "npm:^3.0.2" + "@csstools/postcss-relative-color-syntax": "npm:^3.0.3" "@csstools/postcss-scope-pseudo-class": "npm:^4.0.0" - "@csstools/postcss-stepped-value-functions": "npm:^4.0.1" + "@csstools/postcss-stepped-value-functions": "npm:^4.0.2" "@csstools/postcss-text-decoration-shorthand": "npm:^4.0.1" - "@csstools/postcss-trigonometric-functions": "npm:^4.0.1" + "@csstools/postcss-trigonometric-functions": "npm:^4.0.2" "@csstools/postcss-unset-value": "npm:^4.0.0" autoprefixer: "npm:^10.4.19" browserslist: "npm:^4.23.1" @@ -15100,12 +15126,12 @@ __metadata: cssdb: "npm:^8.1.1" postcss-attribute-case-insensitive: "npm:^7.0.0" postcss-clamp: "npm:^4.1.0" - postcss-color-functional-notation: "npm:^7.0.2" + postcss-color-functional-notation: "npm:^7.0.3" postcss-color-hex-alpha: "npm:^10.0.0" postcss-color-rebeccapurple: "npm:^10.0.0" - postcss-custom-media: "npm:^11.0.2" - postcss-custom-properties: "npm:^14.0.1" - postcss-custom-selectors: "npm:^8.0.1" + postcss-custom-media: "npm:^11.0.3" + postcss-custom-properties: "npm:^14.0.2" + postcss-custom-selectors: "npm:^8.0.2" postcss-dir-pseudo-class: "npm:^9.0.0" postcss-double-position-gradients: "npm:^6.0.0" postcss-focus-visible: "npm:^10.0.0" @@ -15113,7 +15139,7 @@ __metadata: postcss-font-variant: "npm:^5.0.0" postcss-gap-properties: "npm:^6.0.0" postcss-image-set-function: "npm:^7.0.0" - postcss-lab-function: "npm:^7.0.2" + postcss-lab-function: "npm:^7.0.3" postcss-logical: "npm:^8.0.0" postcss-nesting: "npm:^13.0.0" postcss-opacity-percentage: "npm:^3.0.0" @@ -15125,7 +15151,7 @@ __metadata: postcss-selector-not: "npm:^8.0.0" peerDependencies: postcss: ^8.4 - checksum: 10/5b62ea5ff635a759c9ee2815fef13cc41ccaeeb0acc95235f02aa6ac86ada14e41bb24ec417689b442eff579c7768a3dbcf6eefebf5af58ebf49ff3eeef003c8 + checksum: 10/4ab413e6d43dd33f65adde06c14d7399f60a72ba91e487ab93c6328d0bd9e26a77c495b13114296b4c05208b5c6cdaac9b59c2b16fff0a638e371758e0903b6d languageName: node linkType: hard @@ -18708,7 +18734,7 @@ __metadata: postcss-import: "npm:16.1.0" postcss-less: "npm:6.0.0" postcss-loader: "npm:8.1.1" - postcss-preset-env: "npm:10.0.6" + postcss-preset-env: "npm:10.0.7" postcss-scss: "npm:4.0.9" prettier: "npm:3.3.2" raw-loader: "npm:4.0.2" From 4025cb4ea61439b852ef33165e9a96e4d9ae44cf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 13 Oct 2024 14:36:38 +0000 Subject: [PATCH 022/329] chore(deps): bump react-router-dom from 6.26.2 to 6.27.0 (#18151) Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.26.2 to 6.27.0. - [Release notes](https://github.com/remix-run/react-router/releases) - [Changelog](https://github.com/remix-run/react-router/blob/react-router-dom@6.27.0/packages/react-router-dom/CHANGELOG.md) - [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.27.0/packages/react-router-dom) --- updated-dependencies: - dependency-name: react-router-dom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 32 +++++++------------------------- 2 files changed, 8 insertions(+), 26 deletions(-) diff --git a/package.json b/package.json index c3ee0612ae0..f72974e4bc2 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "react-intl": "6.7.0", "react-redux": "9.1.2", "react-router": "6.27.0", - "react-router-dom": "6.26.2", + "react-router-dom": "6.27.0", "react-transition-group": "4.4.5", "redux": "5.0.1", "redux-logdown": "1.0.4", diff --git a/yarn.lock b/yarn.lock index 6a25868caf2..dccfb11f48a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4685,13 +4685,6 @@ __metadata: languageName: node linkType: hard -"@remix-run/router@npm:1.19.2": - version: 1.19.2 - resolution: "@remix-run/router@npm:1.19.2" - checksum: 10/31b62b66ea68bd62018189047de7b262700113438f62407df019f81a9856a08a705b2b77454be9293518e2f5f3bbf3f8b858ac19f48cb7d89f8ab56b7b630c19 - languageName: node - linkType: hard - "@remix-run/router@npm:1.20.0": version: 1.20.0 resolution: "@remix-run/router@npm:1.20.0" @@ -15691,27 +15684,16 @@ __metadata: languageName: node linkType: hard -"react-router-dom@npm:6.26.2": - version: 6.26.2 - resolution: "react-router-dom@npm:6.26.2" +"react-router-dom@npm:6.27.0": + version: 6.27.0 + resolution: "react-router-dom@npm:6.27.0" dependencies: - "@remix-run/router": "npm:1.19.2" - react-router: "npm:6.26.2" + "@remix-run/router": "npm:1.20.0" + react-router: "npm:6.27.0" peerDependencies: react: ">=16.8" react-dom: ">=16.8" - checksum: 10/4eee37839bd1a660807c090b4d272e4aa9b95d8a9a932cdcdf7c5b10735f39b6db73bad79b08a3012386a7e225ff6bf60435e2741fb7c68e137ac5a6295d4308 - languageName: node - linkType: hard - -"react-router@npm:6.26.2": - version: 6.26.2 - resolution: "react-router@npm:6.26.2" - dependencies: - "@remix-run/router": "npm:1.19.2" - peerDependencies: - react: ">=16.8" - checksum: 10/496e855b53e61066c1791e354f5d79eab56a128d9722fdc6486c3ecd3b3a0bf9968e927028f429893b157f3cc10fc09e890a055847723ee242663e7995fedc9d + checksum: 10/cfbcbc1d387d3341a335e3a075e487cc09dcbb62f1b83bc827fc3eec937523d5647a2c4488c804dc61581e65561823d0166d17b5dbc8579998c25b5a0bcabad6 languageName: node linkType: hard @@ -18744,7 +18726,7 @@ __metadata: react-intl: "npm:6.7.0" react-redux: "npm:9.1.2" react-router: "npm:6.27.0" - react-router-dom: "npm:6.26.2" + react-router-dom: "npm:6.27.0" react-transition-group: "npm:4.4.5" redux: "npm:5.0.1" redux-logdown: "npm:1.0.4" From 5f37ac109b16fa794b789b1c1c584560ab11307e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 13 Oct 2024 14:39:18 +0000 Subject: [PATCH 023/329] chore(deps-dev): bump @babel/core from 7.25.7 to 7.25.8 (#18154) Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.25.7 to 7.25.8. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.25.8/packages/babel-core) --- updated-dependencies: - dependency-name: "@babel/core" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 36 +++++++++++++++++++++++++++++------- 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index f72974e4bc2..2b35f4da792 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ "zustand": "4.5.5" }, "devDependencies": { - "@babel/core": "7.25.7", + "@babel/core": "7.25.8", "@babel/plugin-proposal-decorators": "7.25.7", "@babel/preset-env": "7.25.8", "@babel/preset-react": "7.25.7", diff --git a/yarn.lock b/yarn.lock index dccfb11f48a..c3938cffcfc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -76,9 +76,9 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:7.25.7": - version: 7.25.7 - resolution: "@babel/core@npm:7.25.7" +"@babel/core@npm:7.25.8": + version: 7.25.8 + resolution: "@babel/core@npm:7.25.8" dependencies: "@ampproject/remapping": "npm:^2.2.0" "@babel/code-frame": "npm:^7.25.7" @@ -86,16 +86,16 @@ __metadata: "@babel/helper-compilation-targets": "npm:^7.25.7" "@babel/helper-module-transforms": "npm:^7.25.7" "@babel/helpers": "npm:^7.25.7" - "@babel/parser": "npm:^7.25.7" + "@babel/parser": "npm:^7.25.8" "@babel/template": "npm:^7.25.7" "@babel/traverse": "npm:^7.25.7" - "@babel/types": "npm:^7.25.7" + "@babel/types": "npm:^7.25.8" convert-source-map: "npm:^2.0.0" debug: "npm:^4.1.0" gensync: "npm:^1.0.0-beta.2" json5: "npm:^2.2.3" semver: "npm:^6.3.1" - checksum: 10/f5fb7fb1e3ce357485cb33fe7984051a2d416472370b33144ae809df86a4663192b58cf0d828d40674d30f485790f3dd5aaf72eb659487673a4dc4be47cb3575 + checksum: 10/31eb1a8ca1a3cc0026060720eb290e68205d95c5c00fbd831e69ddc0810f5920b8eb2749db1889ac0a0312b6eddbf321d18a996a88858f3b75c9582bef9ec1e4 languageName: node linkType: hard @@ -661,6 +661,17 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/parser@npm:7.25.8" + dependencies: + "@babel/types": "npm:^7.25.8" + bin: + parser: ./bin/babel-parser.js + checksum: 10/0396eb71e379903cedb43862f84ebb1bec809c41e82b4894d2e6e83b8e8bc636ba6eff45382e615baefdb2399ede76ca82247ecc3a9877ac16eb3140074a3276 + languageName: node + linkType: hard + "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.24.7" @@ -2616,6 +2627,17 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.25.8": + version: 7.25.8 + resolution: "@babel/types@npm:7.25.8" + dependencies: + "@babel/helper-string-parser": "npm:^7.25.7" + "@babel/helper-validator-identifier": "npm:^7.25.7" + to-fast-properties: "npm:^2.0.0" + checksum: 10/973108dbb189916bb87360f2beff43ae97f1b08f1c071bc6499d363cce48b3c71674bf3b59dfd617f8c5062d1c76dc2a64232bc07b6ccef831fd0c06162d44d9 + languageName: node + linkType: hard + "@bcoe/v8-coverage@npm:^0.2.3": version: 0.2.3 resolution: "@bcoe/v8-coverage@npm:0.2.3" @@ -18606,7 +18628,7 @@ __metadata: version: 0.0.0-use.local resolution: "wire-webapp@workspace:." dependencies: - "@babel/core": "npm:7.25.7" + "@babel/core": "npm:7.25.8" "@babel/plugin-proposal-decorators": "npm:7.25.7" "@babel/preset-env": "npm:7.25.8" "@babel/preset-react": "npm:7.25.7" From e7fa1808def497b2954b069ed2c0e5cb60801bfe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 13 Oct 2024 14:41:43 +0000 Subject: [PATCH 024/329] chore(deps): bump react-intl from 6.7.0 to 6.8.0 (#18152) Bumps [react-intl](https://github.com/formatjs/formatjs) from 6.7.0 to 6.8.0. - [Release notes](https://github.com/formatjs/formatjs/releases) - [Commits](https://github.com/formatjs/formatjs/compare/react-intl@6.7.0...react-intl@6.8.0) --- updated-dependencies: - dependency-name: react-intl dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 170 ++++++++++++++++++++++++++++----------------------- 2 files changed, 95 insertions(+), 77 deletions(-) diff --git a/package.json b/package.json index 2b35f4da792..45a2a86ac9a 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "react": "18.3.1", "react-dom": "18.3.1", "react-error-boundary": "4.0.13", - "react-intl": "6.7.0", + "react-intl": "6.8.0", "react-redux": "9.1.2", "react-router": "6.27.0", "react-router-dom": "6.27.0", diff --git a/yarn.lock b/yarn.lock index c3938cffcfc..ed7ee362f02 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3450,94 +3450,95 @@ __metadata: languageName: node linkType: hard -"@formatjs/ecma402-abstract@npm:2.0.0": - version: 2.0.0 - resolution: "@formatjs/ecma402-abstract@npm:2.0.0" +"@formatjs/ecma402-abstract@npm:2.2.0": + version: 2.2.0 + resolution: "@formatjs/ecma402-abstract@npm:2.2.0" dependencies: - "@formatjs/intl-localematcher": "npm:0.5.4" - tslib: "npm:^2.4.0" - checksum: 10/41543ba509ea3c7d6530d57b888115f7ca242f13462a951fae4d1d1f28bae10c999f4dea28a71d2f08366d4889a3f5276cae3a16c6f6417b841a84fd314c2234 + "@formatjs/fast-memoize": "npm:2.2.1" + "@formatjs/intl-localematcher": "npm:0.5.5" + tslib: "npm:^2.7.0" + checksum: 10/f836dfa8787c8d0d2022f7c77fd15025a402ee519f9cb6e68dfce2b937956059e4f96b6059c40506c7260d93bdfd0517001b568cdbea8db08b439ce5d21f437e languageName: node linkType: hard -"@formatjs/fast-memoize@npm:2.2.0": - version: 2.2.0 - resolution: "@formatjs/fast-memoize@npm:2.2.0" +"@formatjs/fast-memoize@npm:2.2.1": + version: 2.2.1 + resolution: "@formatjs/fast-memoize@npm:2.2.1" dependencies: - tslib: "npm:^2.4.0" - checksum: 10/8697fe72a7ece252d600a7d08105f2a2f758e2dd96f54ac0a4c508b1205a559fc08835635e1f8e5ca9dcc3ee61ce1fca4a0e7047b402f29fc96051e293a280ff + tslib: "npm:^2.7.0" + checksum: 10/7bb12904d4c93cfae17006388b26d97cc0e32fef5af510f80974437382cd13a88b439b4407d96b6646af1806977cf34113f3dc8f1c96b28f73856700ee7857fd languageName: node linkType: hard -"@formatjs/icu-messageformat-parser@npm:2.7.8": - version: 2.7.8 - resolution: "@formatjs/icu-messageformat-parser@npm:2.7.8" +"@formatjs/icu-messageformat-parser@npm:2.7.10": + version: 2.7.10 + resolution: "@formatjs/icu-messageformat-parser@npm:2.7.10" dependencies: - "@formatjs/ecma402-abstract": "npm:2.0.0" - "@formatjs/icu-skeleton-parser": "npm:1.8.2" - tslib: "npm:^2.4.0" - checksum: 10/292fd36268ad84337c0e798fc73b58e8f3cf3f362cea031f710fd78053d29b420526ab766a95745e162ae4a11bf846bc2f7ae5c2c0a3288d3bc9daa97a3be8c1 + "@formatjs/ecma402-abstract": "npm:2.2.0" + "@formatjs/icu-skeleton-parser": "npm:1.8.4" + tslib: "npm:^2.7.0" + checksum: 10/26b1a7108ebd4f1c3e79580b31b3e651f056d7eb2114e81d7b9d3358b366aa647443f63c6c014a2c7228bb698f5289861d5de92d862caa36ec2d85ddc36ef87d languageName: node linkType: hard -"@formatjs/icu-skeleton-parser@npm:1.8.2": - version: 1.8.2 - resolution: "@formatjs/icu-skeleton-parser@npm:1.8.2" +"@formatjs/icu-skeleton-parser@npm:1.8.4": + version: 1.8.4 + resolution: "@formatjs/icu-skeleton-parser@npm:1.8.4" dependencies: - "@formatjs/ecma402-abstract": "npm:2.0.0" - tslib: "npm:^2.4.0" - checksum: 10/a06b61cf6c298bbbc23349e391bad8a1cf0a6a32dc4928a4681a3aa6f38dd8c6a181dc4067e228f67584d4dc181d862704095e65c38cfac077c984dc24ba54d3 + "@formatjs/ecma402-abstract": "npm:2.2.0" + tslib: "npm:^2.7.0" + checksum: 10/15610bdbf7b8405191a41f044ccd2ba152364690b20a23bec32b98764e3de44029bb03cb897ef0bce0c2f1643ba2333dc79e99724f2619a69154c13617eb27af languageName: node linkType: hard -"@formatjs/intl-displaynames@npm:6.6.8": - version: 6.6.8 - resolution: "@formatjs/intl-displaynames@npm:6.6.8" +"@formatjs/intl-displaynames@npm:6.6.10": + version: 6.6.10 + resolution: "@formatjs/intl-displaynames@npm:6.6.10" dependencies: - "@formatjs/ecma402-abstract": "npm:2.0.0" - "@formatjs/intl-localematcher": "npm:0.5.4" - tslib: "npm:^2.4.0" - checksum: 10/d305787fe2a35f9725b1293f70a2ccc454310c5df48ad62613d674a648dd318bec2a3ccd8656047443d1e438bb1cf8140e354d9c4a4101ec38df00614e0244b7 + "@formatjs/ecma402-abstract": "npm:2.2.0" + "@formatjs/intl-localematcher": "npm:0.5.5" + tslib: "npm:^2.7.0" + checksum: 10/03f7c8c79b1facd29522b4f2691553ca2679828f7f5a0982e123159f748deca362c5a9c49106a53eeebe5952432b027f835004acb579f0676ec70b93945745d6 languageName: node linkType: hard -"@formatjs/intl-listformat@npm:7.5.7": - version: 7.5.7 - resolution: "@formatjs/intl-listformat@npm:7.5.7" +"@formatjs/intl-listformat@npm:7.5.9": + version: 7.5.9 + resolution: "@formatjs/intl-listformat@npm:7.5.9" dependencies: - "@formatjs/ecma402-abstract": "npm:2.0.0" - "@formatjs/intl-localematcher": "npm:0.5.4" - tslib: "npm:^2.4.0" - checksum: 10/ba7e1ee9c29f2a8cfc66d51c5f273f279ced048b427533aa3d502cf7d12d510e79965d0471a158fd41d7cc7314f688c56d863c3ebec8e5e550d687f64d210794 + "@formatjs/ecma402-abstract": "npm:2.2.0" + "@formatjs/intl-localematcher": "npm:0.5.5" + tslib: "npm:^2.7.0" + checksum: 10/24e6b0ce7d16a584aedc596cd781f302b9a84082489b2b0c49db15dbab1393c35210487e33c5e5c13f70e0796afc5998efca734fb84ebc541172b1463e3c7300 languageName: node linkType: hard -"@formatjs/intl-localematcher@npm:0.5.4": - version: 0.5.4 - resolution: "@formatjs/intl-localematcher@npm:0.5.4" +"@formatjs/intl-localematcher@npm:0.5.5": + version: 0.5.5 + resolution: "@formatjs/intl-localematcher@npm:0.5.5" dependencies: - tslib: "npm:^2.4.0" - checksum: 10/780cb29b42e1ea87f2eb5db268577fcdc53da52d9f096871f3a1bb78603b4ba81d208ea0b0b9bc21548797c941ce435321f62d2522795b83b740f90b0ceb5778 + tslib: "npm:^2.7.0" + checksum: 10/179069eb3a23510e17f118efa3b6a9873f18683977cb813e57ef08cba09bbac73fce13f42c557deb62d3da4f32a8c7ad7d522aae4f1b41625835ce564e59e750 languageName: node linkType: hard -"@formatjs/intl@npm:2.10.5": - version: 2.10.5 - resolution: "@formatjs/intl@npm:2.10.5" +"@formatjs/intl@npm:2.10.8": + version: 2.10.8 + resolution: "@formatjs/intl@npm:2.10.8" dependencies: - "@formatjs/ecma402-abstract": "npm:2.0.0" - "@formatjs/fast-memoize": "npm:2.2.0" - "@formatjs/icu-messageformat-parser": "npm:2.7.8" - "@formatjs/intl-displaynames": "npm:6.6.8" - "@formatjs/intl-listformat": "npm:7.5.7" - intl-messageformat: "npm:10.5.14" - tslib: "npm:^2.4.0" + "@formatjs/ecma402-abstract": "npm:2.2.0" + "@formatjs/fast-memoize": "npm:2.2.1" + "@formatjs/icu-messageformat-parser": "npm:2.7.10" + "@formatjs/intl-displaynames": "npm:6.6.10" + "@formatjs/intl-listformat": "npm:7.5.9" + intl-messageformat: "npm:10.7.0" + tslib: "npm:^2.7.0" peerDependencies: typescript: ^4.7 || 5 peerDependenciesMeta: typescript: optional: true - checksum: 10/0e3507c81cba12f14ca87b0f7197c80b05793c0da8a16cccf75d7b924e3c71f9f8a829402b2421c3b695db19338a56c36fc18a4c2980bc00414e37f7c191562a + checksum: 10/651c45a73644e870899d07e5e62629df404041f0e436d9f10d944a5974710d60261858757eff29e1719cd60a8b8cc62db2ed120f21aabf80e9f9b31f9e10fb60 languageName: node linkType: hard @@ -5450,7 +5451,7 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:*, @types/react@npm:16 || 17 || 18, @types/react@npm:18.3.3": +"@types/react@npm:*, @types/react@npm:18.3.3": version: 18.3.3 resolution: "@types/react@npm:18.3.3" dependencies: @@ -5460,6 +5461,16 @@ __metadata: languageName: node linkType: hard +"@types/react@npm:^18.3.11": + version: 18.3.11 + resolution: "@types/react@npm:18.3.11" + dependencies: + "@types/prop-types": "npm:*" + csstype: "npm:^3.0.2" + checksum: 10/a36f0707fdfe9fe19cbe5892bcdab0f042ecadb501ea4e1c39519943f3e74cffbd31e892d3860f5c87cf33f5f223552b246a552bed0087b95954f2cb39d5cf65 + languageName: node + linkType: hard + "@types/redux-mock-store@npm:1.0.6": version: 1.0.6 resolution: "@types/redux-mock-store@npm:1.0.6" @@ -11029,15 +11040,15 @@ __metadata: languageName: node linkType: hard -"intl-messageformat@npm:10.5.14": - version: 10.5.14 - resolution: "intl-messageformat@npm:10.5.14" +"intl-messageformat@npm:10.7.0": + version: 10.7.0 + resolution: "intl-messageformat@npm:10.7.0" dependencies: - "@formatjs/ecma402-abstract": "npm:2.0.0" - "@formatjs/fast-memoize": "npm:2.2.0" - "@formatjs/icu-messageformat-parser": "npm:2.7.8" - tslib: "npm:^2.4.0" - checksum: 10/01692e92671b00d2423a7db405e6bb8e42bea52445dec931abaa8a8c47e3a7da17dddd3cd0faa33cb6a614370ea230b2c3980ae106cafa8b760e50ac4db0952f + "@formatjs/ecma402-abstract": "npm:2.2.0" + "@formatjs/fast-memoize": "npm:2.2.1" + "@formatjs/icu-messageformat-parser": "npm:2.7.10" + tslib: "npm:^2.7.0" + checksum: 10/78b4c3fe6d05b1cea66f2207255e6f25e4e9f6dd4f0b9ed00b2f3a85dfd2f55e4fe7d24faf2123463213685116368384b85dde3573447bb8e86e81e41344eef7 languageName: node linkType: hard @@ -15642,27 +15653,27 @@ __metadata: languageName: node linkType: hard -"react-intl@npm:6.7.0": - version: 6.7.0 - resolution: "react-intl@npm:6.7.0" +"react-intl@npm:6.8.0": + version: 6.8.0 + resolution: "react-intl@npm:6.8.0" dependencies: - "@formatjs/ecma402-abstract": "npm:2.0.0" - "@formatjs/icu-messageformat-parser": "npm:2.7.8" - "@formatjs/intl": "npm:2.10.5" - "@formatjs/intl-displaynames": "npm:6.6.8" - "@formatjs/intl-listformat": "npm:7.5.7" + "@formatjs/ecma402-abstract": "npm:2.2.0" + "@formatjs/icu-messageformat-parser": "npm:2.7.10" + "@formatjs/intl": "npm:2.10.8" + "@formatjs/intl-displaynames": "npm:6.6.10" + "@formatjs/intl-listformat": "npm:7.5.9" "@types/hoist-non-react-statics": "npm:^3.3.1" - "@types/react": "npm:16 || 17 || 18" + "@types/react": "npm:^18.3.11" hoist-non-react-statics: "npm:^3.3.2" - intl-messageformat: "npm:10.5.14" - tslib: "npm:^2.4.0" + intl-messageformat: "npm:10.7.0" + tslib: "npm:^2.7.0" peerDependencies: react: ^16.6.0 || 17 || 18 typescript: ^4.7 || 5 peerDependenciesMeta: typescript: optional: true - checksum: 10/2bfc42140140754fae529a123330312ed537f1f62d1bd89c8c13869b9ad591583cad1972df2bdd9edc8eaf73e57511bef6b8f36966b3a42610a4bcd3c84c0e0f + checksum: 10/59de653fcf26322c40d5f1216e7e27015b69dcc2cbe6a72e3df41ffed897e04e811b6713f95e5237b4c18076890c19ed6199e78f2f5ef6d206d04402d5d2ccd6 languageName: node linkType: hard @@ -17678,6 +17689,13 @@ __metadata: languageName: node linkType: hard +"tslib@npm:^2.7.0": + version: 2.7.0 + resolution: "tslib@npm:2.7.0" + checksum: 10/9a5b47ddac65874fa011c20ff76db69f97cf90c78cff5934799ab8894a5342db2d17b4e7613a087046bc1d133d21547ddff87ac558abeec31ffa929c88b7fce6 + languageName: node + linkType: hard + "tsutils@npm:^3.21.0": version: 3.21.0 resolution: "tsutils@npm:3.21.0" @@ -18745,7 +18763,7 @@ __metadata: react: "npm:18.3.1" react-dom: "npm:18.3.1" react-error-boundary: "npm:4.0.13" - react-intl: "npm:6.7.0" + react-intl: "npm:6.8.0" react-redux: "npm:9.1.2" react-router: "npm:6.27.0" react-router-dom: "npm:6.27.0" From 3a6630b8f8224ba60e15115454d92810c8680a0c Mon Sep 17 00:00:00 2001 From: Amir Ghezelbash Date: Mon, 14 Oct 2024 13:47:18 +0330 Subject: [PATCH 025/329] feat: Screen sharing from detached window (#18085) * feat: Screen sharing from detached window * add confirm modal * fix broken tests --- src/i18n/en-US.json | 3 + src/script/calling/CallState.ts | 98 +-------------- src/script/calling/CallingRepository.ts | 113 +++++++++++++++++- .../calling/CallingCell/CallingCell.test.tsx | 2 +- .../calling/CallingCell/CallingCell.tsx | 14 +-- .../calling/CallingOverlayContainer.tsx | 7 +- .../calling/FullscreenVideoCall.tsx | 104 +++++++++++++++- src/script/main/app.ts | 1 + src/script/media/MediaStreamHandler.ts | 21 +++- .../NotificationRepository.test.ts | 2 + .../notification/NotificationRepository.ts | 4 +- 11 files changed, 246 insertions(+), 123 deletions(-) diff --git a/src/i18n/en-US.json b/src/i18n/en-US.json index d92dfcc9061..b54643888b4 100644 --- a/src/i18n/en-US.json +++ b/src/i18n/en-US.json @@ -1549,6 +1549,9 @@ "videoCallParticipantConnecting": "Connecting...", "videoCallPaused": "Video paused", "videoCallScreenShareNotSupported": "Screen sharing is not supported in this browser", + "videoCallScreenShareEnded": "Your screen share has ended.", + "videoCallScreenShareEndConfirm": "End screen share", + "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", "videoCallaudioInputMicrophone": "Microphone", "videoCallaudioOutputSpeaker": "Speaker", "videoCallbackgroundBlur": "Blur my background", diff --git a/src/script/calling/CallState.ts b/src/script/calling/CallState.ts index 7fc947bb476..fb9e2a12da3 100644 --- a/src/script/calling/CallState.ts +++ b/src/script/calling/CallState.ts @@ -18,18 +18,12 @@ */ import {QualifiedId} from '@wireapp/api-client/lib/user'; -import {amplify} from 'amplify'; import ko from 'knockout'; import {singleton} from 'tsyringe'; import {REASON as CALL_REASON, STATE as CALL_STATE} from '@wireapp/avs'; -import {WebAppEvents} from '@wireapp/webapp-events'; -import {calculateChildWindowPosition} from 'Util/DOM/caculateChildWindowPosition'; -import {isDetachedCallingFeatureEnabled} from 'Util/isDetachedCallingFeatureEnabled'; -import {t} from 'Util/LocalizerUtil'; import {matchQualifiedIds} from 'Util/QualifiedId'; -import {copyStyles} from 'Util/renderElement'; import {Call} from './Call'; @@ -78,6 +72,7 @@ export class CallState { readonly isSpeakersViewActive: ko.PureComputed; public readonly viewMode = ko.observable(CallingViewMode.MINIMIZED); public readonly detachedWindow = ko.observable(null); + public readonly isScreenSharingSourceFromDetachedWindow = ko.observable(false); public readonly detachedWindowCallQualifiedId = ko.observable(null); public readonly desktopScreenShareMenu = ko.observable(DesktopScreenShareMenu.NONE); private currentViewMode = this.viewMode(); @@ -113,95 +108,4 @@ export class CallState { }); }); } - - onPageHide = (event: PageTransitionEvent) => { - if (event.persisted) { - return; - } - - this.detachedWindow()?.close(); - }; - - handleThemeUpdateEvent = () => { - const detachedWindow = this.detachedWindow(); - if (detachedWindow) { - detachedWindow.document.body.className = window.document.body.className; - } - }; - - closeDetachedWindow = () => { - this.detachedWindow(null); - this.detachedWindowCallQualifiedId(null); - amplify.unsubscribe(WebAppEvents.PROPERTIES.UPDATE.INTERFACE.THEME, this.handleThemeUpdateEvent); - this.viewMode(CallingViewMode.MINIMIZED); - }; - - setViewModeMinimized = () => { - const isDetachedWindowSupported = isDetachedCallingFeatureEnabled(); - - if (!isDetachedWindowSupported) { - this.viewMode(CallingViewMode.MINIMIZED); - return; - } - - this.detachedWindow()?.close(); - this.closeDetachedWindow(); - }; - - setViewModeFullScreen = () => { - this.viewMode(CallingViewMode.FULL_SCREEN); - }; - - async setViewModeDetached( - detachedViewModeOptions: {name: string; height: number; width: number} = { - name: 'WIRE_PICTURE_IN_PICTURE_CALL', - width: 1026, - height: 829, - }, - ) { - if (!isDetachedCallingFeatureEnabled()) { - this.setViewModeFullScreen(); - return; - } - - const {name, width, height} = detachedViewModeOptions; - const {top, left} = calculateChildWindowPosition(height, width); - - const detachedWindow = window.open( - '', - name, - ` - width=${width} - height=${height}, - top=${top}, - left=${left} - location=no, - menubar=no, - resizable=yes, - status=no, - toolbar=no, - `, - ); - - this.detachedWindow(detachedWindow); - - this.detachedWindowCallQualifiedId(this.joinedCall()?.conversation.qualifiedId ?? null); - - if (!detachedWindow) { - return; - } - - // New window is not opened on the same domain (it's about:blank), so we cannot use any of the dom loaded events to copy the styles. - setTimeout(() => copyStyles(window.document, detachedWindow.document), 0); - - detachedWindow.document.title = t('callingPopOutWindowTitle', {brandName: Config.getConfig().BRAND_NAME}); - - detachedWindow.addEventListener('beforeunload', this.closeDetachedWindow); - detachedWindow.addEventListener('pagehide', this.closeDetachedWindow); - window.addEventListener('pagehide', this.onPageHide); - - amplify.subscribe(WebAppEvents.PROPERTIES.UPDATE.INTERFACE.THEME, this.handleThemeUpdateEvent); - - this.viewMode(CallingViewMode.DETACHED_WINDOW); - } } diff --git a/src/script/calling/CallingRepository.ts b/src/script/calling/CallingRepository.ts index 796f97d75b1..ae967894554 100644 --- a/src/script/calling/CallingRepository.ts +++ b/src/script/calling/CallingRepository.ts @@ -53,19 +53,23 @@ import { import {Runtime} from '@wireapp/commons'; import {WebAppEvents} from '@wireapp/webapp-events'; +import {showAppNotification} from 'Components/AppNotification'; import {useCallAlertState} from 'Components/calling/useCallAlertState'; import {CALL_QUALITY_FEEDBACK_KEY} from 'Components/Modals/QualityFeedbackModal/constants'; import {flatten} from 'Util/ArrayUtil'; +import {calculateChildWindowPosition} from 'Util/DOM/caculateChildWindowPosition'; +import {isDetachedCallingFeatureEnabled} from 'Util/isDetachedCallingFeatureEnabled'; import {t} from 'Util/LocalizerUtil'; import {getLogger, Logger} from 'Util/Logger'; import {roundLogarithmic} from 'Util/NumberUtil'; import {matchQualifiedIds} from 'Util/QualifiedId'; +import {copyStyles} from 'Util/renderElement'; import {TIME_IN_MILLIS} from 'Util/TimeUtil'; import {createUuid} from 'Util/uuid'; import {Call, SerializedConversationId} from './Call'; import {callingSubscriptions} from './callingSubscriptionsHandler'; -import {CallState, MuteState} from './CallState'; +import {CallingViewMode, CallState, MuteState} from './CallState'; import {CALL_MESSAGE_TYPE} from './enum/CallMessageType'; import {LEAVE_CALL_REASON} from './enum/LeaveCallReason'; import {ClientId, Participant, UserId} from './Participant'; @@ -862,7 +866,7 @@ export class CallingRepository { } async startCall(conversation: Conversation, callType: CALL_TYPE): Promise { - void this.callState.setViewModeMinimized(); + void this.setViewModeMinimized(); if (!this.selfUser || !this.selfClientId) { this.logger.warn( `Calling repository is not initialized correctly \n ${JSON.stringify({ @@ -1001,8 +1005,109 @@ export class CallingRepository { } }; + onPageHide = (event: PageTransitionEvent) => { + if (event.persisted) { + return; + } + + this.callState.detachedWindow()?.close(); + }; + + handleThemeUpdateEvent = () => { + const detachedWindow = this.callState.detachedWindow(); + if (detachedWindow) { + detachedWindow.document.body.className = window.document.body.className; + } + }; + + closeDetachedWindow = () => { + this.callState.detachedWindow(null); + this.callState.detachedWindowCallQualifiedId(null); + amplify.unsubscribe(WebAppEvents.PROPERTIES.UPDATE.INTERFACE.THEME, this.handleThemeUpdateEvent); + this.callState.viewMode(CallingViewMode.MINIMIZED); + + const joinedCall = this.callState.joinedCall(); + const isSharingScreen = joinedCall?.getSelfParticipant().sharesScreen(); + const isScreenSharingSourceFromDetachedWindow = this.callState.isScreenSharingSourceFromDetachedWindow(); + + if (joinedCall && isSharingScreen && isScreenSharingSourceFromDetachedWindow) { + this.callState.isScreenSharingSourceFromDetachedWindow(false); + void this.toggleScreenshare(joinedCall); + showAppNotification(t('videoCallScreenShareEnded')); + } + }; + + setViewModeMinimized = () => { + const isDetachedWindowSupported = isDetachedCallingFeatureEnabled(); + + if (!isDetachedWindowSupported) { + this.callState.viewMode(CallingViewMode.MINIMIZED); + return; + } + + this.callState.detachedWindow()?.close(); + this.closeDetachedWindow(); + }; + + setViewModeFullScreen = () => { + this.callState.viewMode(CallingViewMode.FULL_SCREEN); + }; + + async setViewModeDetached( + detachedViewModeOptions: {name: string; height: number; width: number} = { + name: 'WIRE_PICTURE_IN_PICTURE_CALL', + width: 1026, + height: 829, + }, + ) { + if (!isDetachedCallingFeatureEnabled()) { + this.setViewModeFullScreen(); + return; + } + + const {name, width, height} = detachedViewModeOptions; + const {top, left} = calculateChildWindowPosition(height, width); + + const detachedWindow = window.open( + '', + name, + ` + width=${width} + height=${height}, + top=${top}, + left=${left} + location=no, + menubar=no, + resizable=yes, + status=no, + toolbar=no, + `, + ); + + this.callState.detachedWindow(detachedWindow); + + this.callState.detachedWindowCallQualifiedId(this.callState.joinedCall()?.conversation.qualifiedId ?? null); + + if (!detachedWindow) { + return; + } + + // New window is not opened on the same domain (it's about:blank), so we cannot use any of the dom loaded events to copy the styles. + setTimeout(() => copyStyles(window.document, detachedWindow.document), 0); + + detachedWindow.document.title = t('callingPopOutWindowTitle', {brandName: Config.getConfig().BRAND_NAME}); + + detachedWindow.addEventListener('beforeunload', this.closeDetachedWindow); + detachedWindow.addEventListener('pagehide', this.closeDetachedWindow); + window.addEventListener('pagehide', this.onPageHide); + + amplify.subscribe(WebAppEvents.PROPERTIES.UPDATE.INTERFACE.THEME, this.handleThemeUpdateEvent); + + this.callState.viewMode(CallingViewMode.DETACHED_WINDOW); + } + async answerCall(call: Call, callType?: CALL_TYPE): Promise { - void this.callState.setViewModeMinimized(); + void this.setViewModeMinimized(); const {conversation} = call; try { callType ??= call.getSelfParticipant().sharesCamera() ? call.initialType : CALL_TYPE.NORMAL; @@ -1562,7 +1667,7 @@ export class CallingRepository { }, ) ) { - void this.callState.setViewModeMinimized(); + void this.setViewModeMinimized(); } // There's nothing we need to do for non-mls calls diff --git a/src/script/components/calling/CallingCell/CallingCell.test.tsx b/src/script/components/calling/CallingCell/CallingCell.test.tsx index 16ca62db913..0533efa1f73 100644 --- a/src/script/components/calling/CallingCell/CallingCell.test.tsx +++ b/src/script/components/calling/CallingCell/CallingCell.test.tsx @@ -68,7 +68,7 @@ const createProps = async () => { return { call: createCall(CALL_STATE.MEDIA_ESTAB), callActions: {} as CallActions, - callingRepository: mockCallingRepository, + callingRepository: mockCallingRepository as CallingRepository, pushToTalkKey: null, conversation, hasAccessToCamera: true, diff --git a/src/script/components/calling/CallingCell/CallingCell.tsx b/src/script/components/calling/CallingCell/CallingCell.tsx index 08e0d951875..4daec26f79e 100644 --- a/src/script/components/calling/CallingCell/CallingCell.tsx +++ b/src/script/components/calling/CallingCell/CallingCell.tsx @@ -54,7 +54,7 @@ interface VideoCallProps { interface AnsweringControlsProps { call: Call; callActions: CallActions; - callingRepository: Pick; + callingRepository: CallingRepository; pushToTalkKey: string | null; isFullUi?: boolean; callState?: CallState; @@ -165,18 +165,18 @@ export const CallingCell = ({ return; } if (isSpaceOrEnterKey(event.key)) { - void callState.setViewModeFullScreen(); + void callingRepository.setViewModeFullScreen(); } }, - [isOngoing, callState], + [isOngoing, callingRepository], ); const handleMaximizeClick = useCallback(() => { if (!isOngoing) { return; } - void callState.setViewModeFullScreen(); - }, [isOngoing, callState]); + void callingRepository.setViewModeFullScreen(); + }, [isOngoing, callingRepository]); const {setCurrentView} = useAppMainState(state => state.responsiveView); const {showAlert, clearShowAlert} = useCallAlertState(); @@ -250,10 +250,10 @@ export const CallingCell = ({ const toggleDetachedWindow = () => { if (isDetachedWindow) { - void callState.setViewModeMinimized(); + void callingRepository.setViewModeMinimized(); return; } - void callState.setViewModeDetached(); + void callingRepository.setViewModeDetached(); }; return ( diff --git a/src/script/components/calling/CallingOverlayContainer.tsx b/src/script/components/calling/CallingOverlayContainer.tsx index 4cc2a390f5a..ad3c7add5ab 100644 --- a/src/script/components/calling/CallingOverlayContainer.tsx +++ b/src/script/components/calling/CallingOverlayContainer.tsx @@ -71,7 +71,7 @@ const CallingContainer: React.FC = ({ useEffect(() => { if (currentCallState === undefined) { - void callState.setViewModeMinimized(); + void callingRepository.setViewModeMinimized(); } }, [currentCallState]); @@ -82,7 +82,7 @@ const CallingContainer: React.FC = ({ const {clearShowAlert} = useCallAlertState(); const leave = (call: Call) => { - callState.setViewModeMinimized(); + callingRepository.setViewModeMinimized(); callingRepository.leaveCall(call.conversation.qualifiedId, LEAVE_CALL_REASON.MANUAL_LEAVE_BY_UI_CLICK); callState.activeCallViewTab(CallViewTab.ALL); call.maximizedParticipant(null); @@ -129,9 +129,6 @@ const CallingContainer: React.FC = ({ } const toggleScreenShare = (call: Call) => { - if (viewMode === CallingViewMode.DETACHED_WINDOW) { - callState.setViewModeMinimized(); - } toggleScreenshare(call, DesktopScreenShareMenu.DETACHED_WINDOW); }; diff --git a/src/script/components/calling/FullscreenVideoCall.tsx b/src/script/components/calling/FullscreenVideoCall.tsx index 3b7ca128847..dd0c0fbff4c 100644 --- a/src/script/components/calling/FullscreenVideoCall.tsx +++ b/src/script/components/calling/FullscreenVideoCall.tsx @@ -25,11 +25,20 @@ import classNames from 'classnames'; import {container} from 'tsyringe'; import {CALL_TYPE} from '@wireapp/avs'; -import {EmojiIcon, GridIcon, IconButton, IconButtonVariant, Select} from '@wireapp/react-ui-kit'; +import { + Checkbox, + CheckboxLabel, + EmojiIcon, + GridIcon, + IconButton, + IconButtonVariant, + Select, +} from '@wireapp/react-ui-kit'; import {useCallAlertState} from 'Components/calling/useCallAlertState'; import * as Icon from 'Components/Icon'; import {ConversationClassifiedBar} from 'Components/input/ClassifiedBar'; +import {ModalComponent} from 'Components/ModalComponent'; import {CallingRepository} from 'src/script/calling/CallingRepository'; import {Config} from 'src/script/Config'; import {isCallViewOption} from 'src/script/guards/CallView'; @@ -102,6 +111,8 @@ export interface FullscreenVideoCallProps { const EMOJIS_LIST = ['👍', '🎉', '❤️', '😂', '😮', '👏', '🤔', '😢', '👎']; +const LOCAL_STORAGE_KEY_FOR_SCREEN_SHARING_CONFIRM_MODAL = 'DO_NOT_ASK_AGAIN_FOR_SCREEN_SHARING_CONFIRM_MODAL'; + const FullscreenVideoCall: React.FC = ({ call, canShareScreen, @@ -129,6 +140,7 @@ const FullscreenVideoCall: React.FC = ({ teamState = container.resolve(TeamState), callState = container.resolve(CallState), }) => { + const [isConfirmCloseModalOpen, setIsConfirmCloseModalOpen] = useState(false); const [showEmojisBar, setShowEmojisBar] = useState(false); const [disabledEmojis, setDisabledEmojis] = useState([]); const selfParticipant = call.getSelfParticipant(); @@ -170,12 +182,28 @@ const FullscreenVideoCall: React.FC = ({ ]); const {selfUser, roles} = useKoSubscribableChildren(conversation, ['selfUser', 'roles']); - const {emojis, viewMode} = useKoSubscribableChildren(callState, ['emojis', 'viewMode']); + const {emojis, viewMode, isScreenSharingSourceFromDetachedWindow} = useKoSubscribableChildren(callState, [ + 'emojis', + 'viewMode', + 'isScreenSharingSourceFromDetachedWindow', + ]); const [audioOptionsOpen, setAudioOptionsOpen] = useState(false); const [videoOptionsOpen, setVideoOptionsOpen] = useState(false); - const minimize = () => callState.setViewModeMinimized(); - const openPopup = () => callState.setViewModeDetached(); + + const minimize = () => { + const isSharingScreen = call?.getSelfParticipant().sharesScreen(); + + const hasAlreadyConfirmed = localStorage.getItem(LOCAL_STORAGE_KEY_FOR_SCREEN_SHARING_CONFIRM_MODAL) === 'true'; + + if (isSharingScreen && isScreenSharingSourceFromDetachedWindow && !hasAlreadyConfirmed) { + setIsConfirmCloseModalOpen(true); + return; + } + + callingRepository.setViewModeMinimized(); + }; + const openPopup = () => callingRepository.setViewModeDetached(); const [isParticipantsListOpen, toggleParticipantsList] = useToggleState(false); const [isCallViewOpen, toggleCallView] = useToggleState(false); @@ -468,7 +496,7 @@ const FullscreenVideoCall: React.FC = ({ onClick={openPopup} onKeyDown={event => handleKeyDown(event, () => openPopup())} type="button" - data-uie-name="do-call-controls-video-minimize" + data-uie-name="do-call-controls-video-maximize" title={t('videoCallOverlayOpenPopupWindow')} > @@ -837,6 +865,72 @@ const FullscreenVideoCall: React.FC = ({ showParticipants={true} /> )} + setIsConfirmCloseModalOpen(false)} + onBgClick={() => setIsConfirmCloseModalOpen(false)} + data-uie-name="confirm-close-with-active-screen-share-modal" + wrapperCSS={{borderRadius: 10, width: 328}} + > + {isConfirmCloseModalOpen && ( + <> +
+ +
+ +
+ + ) => + localStorage.setItem( + LOCAL_STORAGE_KEY_FOR_SCREEN_SHARING_CONFIRM_MODAL, + event.target.checked.toString(), + ) + } + > + + {t('qualityFeedback.doNotAskAgain')} + + +
+ + +
+
+ + + + )} +
); }; diff --git a/src/script/main/app.ts b/src/script/main/app.ts index cd0cb0df513..4eb66dfc971 100644 --- a/src/script/main/app.ts +++ b/src/script/main/app.ts @@ -288,6 +288,7 @@ export class App { repositories.conversation, repositories.permission, repositories.audio, + repositories.calling, ); repositories.preferenceNotification = new PreferenceNotificationRepository(repositories.user['userState'].self); diff --git a/src/script/media/MediaStreamHandler.ts b/src/script/media/MediaStreamHandler.ts index 1f8be52b34a..748f7e34547 100644 --- a/src/script/media/MediaStreamHandler.ts +++ b/src/script/media/MediaStreamHandler.ts @@ -17,8 +17,11 @@ * */ +import {container} from 'tsyringe'; + import {Runtime} from '@wireapp/commons'; +import {CallingViewMode, CallState} from 'src/script/calling/CallState'; import {getLogger, Logger} from 'Util/Logger'; import {MediaConstraintsHandler, ScreensharingMethods} from './MediaConstraintsHandler'; @@ -159,13 +162,25 @@ export class MediaStreamHandler { this.schedulePermissionHint(audio, video, screen); } + const callState = container.resolve(CallState); + + const detachedWindow = callState.detachedWindow(); + const isInDetachedMode = callState.viewMode() === CallingViewMode.DETACHED_WINDOW; + const useDetachedWindowForScreenSharingSource = isInDetachedMode && detachedWindow !== null; + + if (useDetachedWindowForScreenSharingSource) { + callState.isScreenSharingSourceFromDetachedWindow(true); + } + + const windowToUse = useDetachedWindowForScreenSharingSource ? detachedWindow : window; + const supportsGetDisplayMedia = screen && this.screensharingMethod === ScreensharingMethods.DISPLAY_MEDIA; const mediaAPI = supportsGetDisplayMedia - ? navigator.mediaDevices.getDisplayMedia - : navigator.mediaDevices.getUserMedia; + ? windowToUse.navigator.mediaDevices.getDisplayMedia + : windowToUse.navigator.mediaDevices.getUserMedia; return mediaAPI - .call(navigator.mediaDevices, mediaConstraints) + .call(windowToUse.navigator.mediaDevices, mediaConstraints) .then((mediaStream: MediaStream) => { this.clearPermissionRequestHint(audio, video, screen); return mediaStream; diff --git a/src/script/notification/NotificationRepository.test.ts b/src/script/notification/NotificationRepository.test.ts index 6db9f1382e6..6ac96230ef0 100644 --- a/src/script/notification/NotificationRepository.test.ts +++ b/src/script/notification/NotificationRepository.test.ts @@ -28,6 +28,7 @@ import {Runtime} from '@wireapp/commons'; import {Availability} from '@wireapp/protocol-messaging'; import {WebAppEvents} from '@wireapp/webapp-events'; +import {CallingRepository} from 'src/script/calling/CallingRepository'; import {TERMINATION_REASON} from 'src/script/calling/enum/TerminationReason'; import {ConnectionMapper} from 'src/script/connection/ConnectionMapper'; import {ConversationMapper} from 'src/script/conversation/ConversationMapper'; @@ -74,6 +75,7 @@ function buildNotificationRepository() { {} as any, new PermissionRepository(), new AudioRepository(), + {} as CallingRepository, userState, container.resolve(ConversationState), container.resolve(CallState), diff --git a/src/script/notification/NotificationRepository.ts b/src/script/notification/NotificationRepository.ts index ad1983b7f40..f0d4f1a2082 100644 --- a/src/script/notification/NotificationRepository.ts +++ b/src/script/notification/NotificationRepository.ts @@ -27,6 +27,7 @@ import {Runtime} from '@wireapp/commons'; import {Availability} from '@wireapp/protocol-messaging'; import {WebAppEvents} from '@wireapp/webapp-events'; +import {CallingRepository} from 'src/script/calling/CallingRepository'; import {Declension, t, getUserName} from 'Util/LocalizerUtil'; import {getLogger, Logger} from 'Util/Logger'; import {getRenderedTextContent} from 'Util/messageRenderer'; @@ -119,6 +120,7 @@ export class NotificationRepository { conversationRepository: ConversationRepository, permissionRepository: PermissionRepository, private readonly audioRepository: AudioRepository, + private readonly callingRepository: CallingRepository, private readonly userState = container.resolve(UserState), private readonly conversationState = container.resolve(ConversationState), private readonly callState = container.resolve(CallState), @@ -863,7 +865,7 @@ export class NotificationRepository { notification.onclick = () => { amplify.publish(WebAppEvents.NOTIFICATION.CLICK); window.focus(); - void this.callState.setViewModeMinimized(); + void this.callingRepository.setViewModeMinimized(); notificationContent.trigger(); this.logger.info(`Notification for ${messageInfo} in '${conversationId?.id || conversationId}' closed by click.`); From 505d3629e59053e9e0802f07c717e68f84d947b1 Mon Sep 17 00:00:00 2001 From: Amir Ghezelbash Date: Tue, 15 Oct 2024 12:56:02 +0330 Subject: [PATCH 026/329] fix: Add missing imports in callstate (#18158) --- src/script/calling/CallState.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/script/calling/CallState.ts b/src/script/calling/CallState.ts index fb9e2a12da3..f87c2cccf95 100644 --- a/src/script/calling/CallState.ts +++ b/src/script/calling/CallState.ts @@ -18,10 +18,12 @@ */ import {QualifiedId} from '@wireapp/api-client/lib/user'; +import {amplify} from 'amplify'; import ko from 'knockout'; import {singleton} from 'tsyringe'; import {REASON as CALL_REASON, STATE as CALL_STATE} from '@wireapp/avs'; +import {WebAppEvents} from '@wireapp/webapp-events'; import {matchQualifiedIds} from 'Util/QualifiedId'; From 0119d9353ee3aae535ac413fa02378bb2a37492d Mon Sep 17 00:00:00 2001 From: Amir Ghezelbash Date: Tue, 15 Oct 2024 18:56:27 +0330 Subject: [PATCH 027/329] chore: Bump @wireapp/avs from 9.9.6 to 9.9.8 (#18159) --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 45a2a86ac9a..e02f7ad623e 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "@lexical/history": "0.18.0", "@lexical/react": "0.18.0", "@mediapipe/tasks-vision": "0.10.17", - "@wireapp/avs": "9.9.6", + "@wireapp/avs": "9.9.8", "@wireapp/commons": "5.2.10", "@wireapp/core": "46.4.0", "@wireapp/react-ui-kit": "9.23.6", diff --git a/yarn.lock b/yarn.lock index ed7ee362f02..b46dfa34987 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6001,10 +6001,10 @@ __metadata: languageName: node linkType: hard -"@wireapp/avs@npm:9.9.6": - version: 9.9.6 - resolution: "@wireapp/avs@npm:9.9.6" - checksum: 10/ce66183cdd98e74d1cebe19f58d55be38b3635789811c958d2b36447c9b629942e9f1724723f7f9a610309011e6cddbae535ad5a5a1720074397422da4eb0450 +"@wireapp/avs@npm:9.9.8": + version: 9.9.8 + resolution: "@wireapp/avs@npm:9.9.8" + checksum: 10/79193e2dc7521bced412e4614326c74ca326021f77c287dbcd4bc5473b392c5e3815e6932f8dfe22de1ec4b3b2eaf2ee4944da67fab71e946cbbbb318941874c languageName: node linkType: hard @@ -18688,7 +18688,7 @@ __metadata: "@types/uuid": "npm:^10.0.0" "@types/webpack-env": "npm:1.18.5" "@types/wicg-file-system-access": "npm:^2023.10.5" - "@wireapp/avs": "npm:9.9.6" + "@wireapp/avs": "npm:9.9.8" "@wireapp/commons": "npm:5.2.10" "@wireapp/copy-config": "npm:2.2.7" "@wireapp/core": "npm:46.4.0" From 4f1c1745bde08614dd9eab5b6afc781fc658485b Mon Sep 17 00:00:00 2001 From: Amir Ghezelbash Date: Wed, 16 Oct 2024 13:14:48 +0330 Subject: [PATCH 028/329] chore: bump to latest core & api-client for abort controller (#18156) * chore: bump to experimental packages for abort controller * up deps * config toolbar --- package.json | 2 +- .../ConfigToolbar/ConfigToolbar.tsx | 64 +++++++++++++++ yarn.lock | 79 ++++++++++++------- 3 files changed, 114 insertions(+), 31 deletions(-) diff --git a/package.json b/package.json index e02f7ad623e..f921e50718f 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "@mediapipe/tasks-vision": "0.10.17", "@wireapp/avs": "9.9.8", "@wireapp/commons": "5.2.10", - "@wireapp/core": "46.4.0", + "@wireapp/core": "46.4.1", "@wireapp/react-ui-kit": "9.23.6", "@wireapp/store-engine-dexie": "2.1.12", "@wireapp/webapp-events": "0.24.0", diff --git a/src/script/components/ConfigToolbar/ConfigToolbar.tsx b/src/script/components/ConfigToolbar/ConfigToolbar.tsx index 66010a9876f..d8dda991200 100644 --- a/src/script/components/ConfigToolbar/ConfigToolbar.tsx +++ b/src/script/components/ConfigToolbar/ConfigToolbar.tsx @@ -20,10 +20,12 @@ import {useState, useEffect, useRef} from 'react'; import keyboardjs from 'keyboardjs'; +import {container} from 'tsyringe'; import {Button, Input, Switch} from '@wireapp/react-ui-kit'; import {Config, Configuration} from 'src/script/Config'; +import {ConversationState} from 'src/script/conversation/ConversationState'; import {useClickOutside} from 'src/script/hooks/useClickOutside'; import {wrapperStyles} from './ConfigToolbar.styles'; @@ -31,6 +33,9 @@ import {wrapperStyles} from './ConfigToolbar.styles'; export function ConfigToolbar() { const [showConfig, setShowConfig] = useState(false); const [configFeaturesState, setConfigFeaturesState] = useState(Config.getConfig().FEATURE); + const [intervalId, setIntervalId] = useState(null); // For managing setInterval + const messageCountRef = useRef(0); // For the message count + const [prefix, setPrefix] = useState('Message -'); // Prefix input const wrapperRef = useRef(null); // Toggle config tool on 'cmd/ctrl + shift + 2' @@ -46,6 +51,54 @@ export function ConfigToolbar() { }; }, []); + const startSendingMessages = () => { + if (intervalId) { + return; + } + + let isRequestInProgress = false; + + const id = window.setInterval(async () => { + if (isRequestInProgress) { + return; + } + + const conversationState = container.resolve(ConversationState); + const activeConversation = conversationState?.activeConversation(); + if (!activeConversation) { + return; + } + + isRequestInProgress = true; + + try { + await window.wire.app.repository.message.sendTextWithLinkPreview( + activeConversation, + `${prefix} ${messageCountRef.current}`, + [], + undefined, + ); + + messageCountRef.current++; + } catch (error) { + console.error('Error sending message:', error); + } finally { + isRequestInProgress = false; + } + }, 100); + + setIntervalId(id); + }; + + // Stop sending messages and reset the counter + const stopSendingMessages = () => { + if (intervalId) { + clearInterval(intervalId); + setIntervalId(null); + messageCountRef.current = 0; + } + }; + // Update the config state when form input changes const handleChange = (path: string, value: string | boolean | string[]) => { const updateConfig = (obj: any, keys: string[]): void => { @@ -119,10 +172,21 @@ export function ConfigToolbar() { implications of each change before proceeding. Changes may cause unexpected behavior.
{renderConfig(configFeaturesState)}
+

Debug Functions

+ +

Message Automation

+ setPrefix(event.currentTarget.value)} + placeholder="Prefix for the messages" + /> + + ); } diff --git a/yarn.lock b/yarn.lock index b46dfa34987..70f9b36d8fc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5980,12 +5980,12 @@ __metadata: languageName: node linkType: hard -"@wireapp/api-client@npm:^27.6.0": - version: 27.6.0 - resolution: "@wireapp/api-client@npm:27.6.0" +"@wireapp/api-client@npm:^27.6.1": + version: 27.6.1 + resolution: "@wireapp/api-client@npm:27.6.1" dependencies: - "@wireapp/commons": "npm:^5.2.10" - "@wireapp/priority-queue": "npm:^2.1.8" + "@wireapp/commons": "npm:^5.2.12" + "@wireapp/priority-queue": "npm:^2.1.10" "@wireapp/protocol-messaging": "npm:1.50.0" axios: "npm:1.7.7" axios-retry: "npm:4.5.0" @@ -5997,7 +5997,7 @@ __metadata: tough-cookie: "npm:4.1.4" ws: "npm:8.18.0" zod: "npm:3.23.8" - checksum: 10/91811a1634c6bde4b6776e4be658d4168dc6abc8a295414ad8630248edb00d424883c3c646a29f728b15988662ee4b517465c6d4e785a91a9d271a4cacb6c9b5 + checksum: 10/635365065a896446e07b3e94536fb54839375ebda537866d08b21d2cf07a1bad42d6d328a049f4a5f8b265908ea69ae7c14b407d39f73a795c59d8ca5267a8c2 languageName: node linkType: hard @@ -6015,7 +6015,7 @@ __metadata: languageName: node linkType: hard -"@wireapp/commons@npm:5.2.10, @wireapp/commons@npm:^5.2.10": +"@wireapp/commons@npm:5.2.10": version: 5.2.10 resolution: "@wireapp/commons@npm:5.2.10" dependencies: @@ -6027,6 +6027,18 @@ __metadata: languageName: node linkType: hard +"@wireapp/commons@npm:^5.2.12": + version: 5.2.12 + resolution: "@wireapp/commons@npm:5.2.12" + dependencies: + ansi-regex: "npm:5.0.1" + fs-extra: "npm:11.2.0" + logdown: "npm:3.3.1" + platform: "npm:1.3.6" + checksum: 10/c86c938a32715e07f82c983ddfbc2a6dc125b83eba2f3a0cb86f2e737838c55c96e907b09c73a5baefd1910415315df95268bd9df17e58764fc8453d131997ac + languageName: node + linkType: hard + "@wireapp/copy-config@npm:2.2.7": version: 2.2.7 resolution: "@wireapp/copy-config@npm:2.2.7" @@ -6051,20 +6063,20 @@ __metadata: languageName: node linkType: hard -"@wireapp/core@npm:46.4.0": - version: 46.4.0 - resolution: "@wireapp/core@npm:46.4.0" +"@wireapp/core@npm:46.4.1": + version: 46.4.1 + resolution: "@wireapp/core@npm:46.4.1" dependencies: - "@wireapp/api-client": "npm:^27.6.0" - "@wireapp/commons": "npm:^5.2.10" + "@wireapp/api-client": "npm:^27.6.1" + "@wireapp/commons": "npm:^5.2.12" "@wireapp/core-crypto": "npm:1.0.2" "@wireapp/cryptobox": "npm:12.8.0" - "@wireapp/priority-queue": "npm:^2.1.8" - "@wireapp/promise-queue": "npm:^2.3.5" + "@wireapp/priority-queue": "npm:^2.1.10" + "@wireapp/promise-queue": "npm:^2.3.7" "@wireapp/protocol-messaging": "npm:1.50.0" - "@wireapp/store-engine": "npm:5.1.8" + "@wireapp/store-engine": "npm:5.1.10" axios: "npm:1.7.7" - bazinga64: "npm:^6.3.8" + bazinga64: "npm:^6.3.10" deepmerge-ts: "npm:6.0.0" hash.js: "npm:1.1.7" http-status-codes: "npm:2.3.0" @@ -6073,7 +6085,7 @@ __metadata: long: "npm:^5.2.0" uuid: "npm:9.0.1" zod: "npm:3.23.8" - checksum: 10/6f1d5f177c4c0af706676bdd59c2279dc1a26ed885d800563200c0532cbe85a47ebc698f94e101ec7727a7d4c32bc79f87fb5aea387b41ee00c68ef70a7b67cf + checksum: 10/c7529ff79ce7cabcf6c1a5a64eddc5c9e5a52dae59caeeab38ab5c5545ebc684e14d909bf76272bfcb9f4eb009be3a2d3685bda77737cf2bb53e22c37b752c38 languageName: node linkType: hard @@ -6149,17 +6161,17 @@ __metadata: languageName: node linkType: hard -"@wireapp/priority-queue@npm:^2.1.8": - version: 2.1.8 - resolution: "@wireapp/priority-queue@npm:2.1.8" - checksum: 10/538e2b1b7c085ad259b6d3e0fedcce17a4e18c93ece34a52f2d1bc0ab8e6914592042a1e48d3663f6cee6b776b2e5825c926d996c3d2581612eab581d2a6a2ed +"@wireapp/priority-queue@npm:^2.1.10": + version: 2.1.10 + resolution: "@wireapp/priority-queue@npm:2.1.10" + checksum: 10/72c2b3aad88284ce775e98fcd8585b3f511fdd6e28db6c12ed3bd75fce6d6ce06003412cdf0d5979be723149f5d8195f87ee10847ac57d7fd8bc594de58de3fb languageName: node linkType: hard -"@wireapp/promise-queue@npm:^2.3.5": - version: 2.3.5 - resolution: "@wireapp/promise-queue@npm:2.3.5" - checksum: 10/a6282eab9975203d30790821af6cab25c3ff258281fe8b3f67407bcac5ac45fada6c4ae3c6fe5d32ae5b6a7e2c85736e299ab3613fdc6ab2140eef48238ba996 +"@wireapp/promise-queue@npm:^2.3.7": + version: 2.3.7 + resolution: "@wireapp/promise-queue@npm:2.3.7" + checksum: 10/6f45200303b42259981b305f2b207535e13579917fd5d2360001cc0cebdd0f271468a535beb570261eefc200ed94abf1213d4f4cacc8bfa01c4af6f9c5ff9b23 languageName: node linkType: hard @@ -6228,6 +6240,13 @@ __metadata: languageName: node linkType: hard +"@wireapp/store-engine@npm:5.1.10": + version: 5.1.10 + resolution: "@wireapp/store-engine@npm:5.1.10" + checksum: 10/1278a432cf712a73e011e4d9e30a1d4c2513adb786639db4f6e031761837e8f3987fd5fc045aa95be22f04cd82b3089586883a4ff55ed2428435d040a76005ee + languageName: node + linkType: hard + "@wireapp/store-engine@npm:5.1.8": version: 5.1.8 resolution: "@wireapp/store-engine@npm:5.1.8" @@ -7117,10 +7136,10 @@ __metadata: languageName: node linkType: hard -"bazinga64@npm:^6.3.8": - version: 6.3.8 - resolution: "bazinga64@npm:6.3.8" - checksum: 10/553194f1579b13b9951515199234a447f439792008269fbf1f34e0644aeba23c1334bcb20f0344a7460011716dcda8351084089298cd21f629ce36b06937f9ff +"bazinga64@npm:^6.3.10": + version: 6.3.10 + resolution: "bazinga64@npm:6.3.10" + checksum: 10/beaa4b41b4f5f2605bf28b3771cd9e3f85ce2bddd6f553f15bd943feb9c1631818191a5c2639d8b10e4d3691cc7c77582ad78943b2981d5bc92e03b0e7ca6264 languageName: node linkType: hard @@ -18691,7 +18710,7 @@ __metadata: "@wireapp/avs": "npm:9.9.8" "@wireapp/commons": "npm:5.2.10" "@wireapp/copy-config": "npm:2.2.7" - "@wireapp/core": "npm:46.4.0" + "@wireapp/core": "npm:46.4.1" "@wireapp/eslint-config": "npm:3.0.7" "@wireapp/prettier-config": "npm:0.6.4" "@wireapp/react-ui-kit": "npm:9.23.6" From 9ba24d03cae2e2dca2cff0fdb63124b048320793 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20J=C3=B3=C5=BAwik?= Date: Wed, 16 Oct 2024 15:26:34 +0200 Subject: [PATCH 029/329] fix: Open conversation on click on filtered conversations (#18161) * fix: Open conversation on click on filtered conversations * cr fixes --- src/script/page/LeftSidebar/LeftSidebar.tsx | 31 +--------- .../ConversationHeader/ConversationHeader.tsx | 58 ++++++++++--------- .../Conversations/Conversations.test.tsx | 3 - .../panels/Conversations/Conversations.tsx | 15 ++--- .../Conversations/ConversationsList.test.tsx | 3 - .../Conversations/ConversationsList.tsx | 4 +- 6 files changed, 40 insertions(+), 74 deletions(-) diff --git a/src/script/page/LeftSidebar/LeftSidebar.tsx b/src/script/page/LeftSidebar/LeftSidebar.tsx index 7b2761835d9..c13997044da 100644 --- a/src/script/page/LeftSidebar/LeftSidebar.tsx +++ b/src/script/page/LeftSidebar/LeftSidebar.tsx @@ -17,15 +17,13 @@ * */ -import React, {useEffect, useRef, useState} from 'react'; +import {useEffect} from 'react'; import {amplify} from 'amplify'; import cx from 'classnames'; import {WebAppEvents} from '@wireapp/webapp-events'; -import {SidebarTabs, useSidebarStore} from 'src/script/page/LeftSidebar/panels/Conversations/useSidebarStore'; - import {Conversations} from './panels/Conversations'; import {TemporaryGuestConversations} from './panels/TemporatyGuestConversations'; @@ -39,53 +37,28 @@ type LeftSidebarProps = { isActivatedAccount: boolean; }; -const LeftSidebar: React.FC = ({listViewModel, selfUser, isActivatedAccount}) => { +const LeftSidebar = ({listViewModel, selfUser, isActivatedAccount}: LeftSidebarProps) => { const {conversationRepository, propertiesRepository} = listViewModel; const repositories = listViewModel.contentViewModel.repositories; - const inputRef = useRef(null); - const [isConversationFilterFocused, setIsConversationFilterFocused] = useState(false); const listState = useAppState(state => state.listState); - const switchList = (list: ListState) => listViewModel.switchList(list); - - const {setCurrentTab} = useSidebarStore(); - useEffect(() => { function openCreateGroupModal() { amplify.publish(WebAppEvents.CONVERSATION.CREATE_GROUP, 'conversation_details'); } - async function jumpToRecentSearch() { - switchList(ListState.CONVERSATIONS); - - setCurrentTab(SidebarTabs.RECENT); - setIsConversationFilterFocused(true); - } - amplify.subscribe(WebAppEvents.SHORTCUT.START, openCreateGroupModal); - amplify.subscribe(WebAppEvents.SHORTCUT.SEARCH, jumpToRecentSearch); - return () => { amplify.unsubscribe(WebAppEvents.SHORTCUT.START, openCreateGroupModal); - amplify.unsubscribe(WebAppEvents.SHORTCUT.SEARCH, jumpToRecentSearch); }; }, []); - useEffect(() => { - if (isConversationFilterFocused) { - inputRef.current?.focus(); - } - }, [inputRef, isConversationFilterFocused]); - return ( ); }; - -export {LeftSidebar}; diff --git a/src/script/page/LeftSidebar/panels/Conversations/ConversationSidebar/ConversationSidebar.tsx b/src/script/page/LeftSidebar/panels/Conversations/ConversationSidebar/ConversationSidebar.tsx index 0a121a0a544..da40cca274e 100644 --- a/src/script/page/LeftSidebar/panels/Conversations/ConversationSidebar/ConversationSidebar.tsx +++ b/src/script/page/LeftSidebar/panels/Conversations/ConversationSidebar/ConversationSidebar.tsx @@ -33,6 +33,7 @@ import { } from './ConversationSidebar.styles'; import {User} from '../../../../../entity/User'; +import {ContentState} from '../../../../useAppState'; import {UserDetails} from '../../../UserDetails'; import {ConversationTabs} from '../ConversationTabs'; import {SidebarTabs} from '../useSidebarStore'; @@ -52,7 +53,7 @@ type ConversationSidebarProps = { favoriteConversations: Conversation[]; archivedConversations: Conversation[]; conversationRepository: ConversationRepository; - onClickPreferences: () => void; + onClickPreferences: (contentState: ContentState) => void; showNotificationsBadge: boolean; teamRepository: TeamRepository; userRepository: UserRepository; diff --git a/src/script/page/LeftSidebar/panels/Conversations/ConversationTabs/ConversationTabs.tsx b/src/script/page/LeftSidebar/panels/Conversations/ConversationTabs/ConversationTabs.tsx index 9ca61ca8073..b3e874ba49b 100644 --- a/src/script/page/LeftSidebar/panels/Conversations/ConversationTabs/ConversationTabs.tsx +++ b/src/script/page/LeftSidebar/panels/Conversations/ConversationTabs/ConversationTabs.tsx @@ -45,6 +45,7 @@ import {TeamCreation} from './TeamCreation/TeamCreation'; import {Config} from '../../../../../Config'; import {Conversation} from '../../../../../entity/Conversation'; +import {ContentState} from '../../../../useAppState'; import {ConversationTab} from '../ConversationTab'; interface ConversationTabsProps { @@ -56,7 +57,7 @@ interface ConversationTabsProps { conversationRepository: ConversationRepository; onChangeTab: (tab: SidebarTabs, folderId?: string) => void; currentTab: SidebarTabs; - onClickPreferences: () => void; + onClickPreferences: (contentState: ContentState) => void; showNotificationsBadge?: boolean; selfUser: User; teamRepository: TeamRepository; @@ -242,7 +243,7 @@ export const ConversationTabs = ({ Icon={} onChangeTab={tab => { onChangeTab(tab); - onClickPreferences(); + onClickPreferences(ContentState.PREFERENCES_ACCOUNT); }} conversationTabIndex={1} dataUieName="go-preferences" diff --git a/src/script/page/LeftSidebar/panels/Conversations/Conversations.tsx b/src/script/page/LeftSidebar/panels/Conversations/Conversations.tsx index 331b566f518..0fa90a7d61d 100644 --- a/src/script/page/LeftSidebar/panels/Conversations/Conversations.tsx +++ b/src/script/page/LeftSidebar/panels/Conversations/Conversations.tsx @@ -17,10 +17,11 @@ * */ -import React, {KeyboardEvent as ReactKeyBoardEvent, useEffect, useRef, useState} from 'react'; +import React, {KeyboardEvent as ReactKeyBoardEvent, useCallback, useEffect, useMemo, useRef, useState} from 'react'; import {amplify} from 'amplify'; import {container} from 'tsyringe'; +import {useShallow} from 'zustand/react/shallow'; import {useMatchMedia} from '@wireapp/react-ui-kit'; import {WebAppEvents} from '@wireapp/webapp-events'; @@ -80,7 +81,7 @@ type ConversationsProps = { userRepository: UserRepository; }; -const Conversations: React.FC = ({ +export const Conversations: React.FC = ({ integrationRepository, searchRepository, teamRepository, @@ -98,7 +99,12 @@ const Conversations: React.FC = ({ const [conversationListRef, setConversationListRef] = useState(null); const searchInputRef = useRef(null); - const {currentTab, status: sidebarStatus, setStatus: setSidebarStatus, setCurrentTab} = useSidebarStore(); + const { + currentTab, + status: sidebarStatus, + setStatus: setSidebarStatus, + setCurrentTab, + } = useSidebarStore(useShallow(state => state)); const [conversationsFilter, setConversationsFilter] = useState(''); const {classifiedDomains, isTeam} = useKoSubscribableChildren(teamState, ['classifiedDomains', 'isTeam']); const {connectRequests} = useKoSubscribableChildren(userState, ['connectRequests']); @@ -112,7 +118,7 @@ const Conversations: React.FC = ({ archivedConversations, groupConversations, directConversations, - visibleConversations: conversations, + visibleConversations, } = useKoSubscribableChildren(conversationState, [ 'activeConversation', 'archivedConversations', @@ -122,10 +128,15 @@ const Conversations: React.FC = ({ 'visibleConversations', ]); + const conversations = useMemo(() => visibleConversations, [visibleConversations]); + const {activeCalls} = useKoSubscribableChildren(callState, ['activeCalls']); const {conversationLabelRepository} = conversationRepository; - const favoriteConversations = conversationLabelRepository.getFavorites(conversations); + const favoriteConversations = useMemo( + () => conversationLabelRepository.getFavorites(conversations), + [conversationLabelRepository, conversations], + ); const isPreferences = currentTab === SidebarTabs.PREFERENCES; @@ -138,8 +149,10 @@ const Conversations: React.FC = ({ SidebarTabs.ARCHIVES, ].includes(currentTab); - const {setCurrentView} = useAppMainState(state => state.responsiveView); - const {openFolder, closeFolder, expandedFolder, isFoldersTabOpen, toggleFoldersTab} = useFolderStore(); + const {setCurrentView} = useAppMainState(useShallow(state => state.responsiveView)); + const {openFolder, closeFolder, expandedFolder, isFoldersTabOpen, toggleFoldersTab} = useFolderStore( + useShallow(state => state), + ); const {currentFocus, handleKeyDown, resetConversationFocus} = useConversationFocus(conversations); // false when screen is larger than 1000px @@ -191,7 +204,7 @@ const Conversations: React.FC = ({ ((showSearchInput && currentTabConversations.length === 0) || (hasNoConversations && currentTab !== SidebarTabs.ARCHIVES)); - function toggleSidebar() { + const toggleSidebar = useCallback(() => { if (isFoldersTabOpen) { toggleFoldersTab(); } @@ -201,7 +214,7 @@ const Conversations: React.FC = ({ WebAppEvents.ANALYTICS.EVENT, isSideBarOpen ? EventName.UI.SIDEBAR_COLLAPSE : EventName.UI.SIDEBAR_UNCOLLAPSE, ); - } + }, [isFoldersTabOpen, isSideBarOpen, setSidebarStatus, toggleFoldersTab]); useEffect(() => { amplify.subscribe(WebAppEvents.CONVERSATION.SHOW, (conversation?: Conversation) => { @@ -244,65 +257,75 @@ const Conversations: React.FC = ({ }; }, []); - const clearConversationFilter = () => setConversationsFilter(''); + const clearConversationFilter = useCallback(() => setConversationsFilter(''), []); - function changeTab(nextTab: SidebarTabs, folderId?: string) { - if (!folderId) { - closeFolder(); - } + const switchList = listViewModel.switchList; + const switchContent = listViewModel.contentViewModel.switchContent; - if (nextTab === SidebarTabs.ARCHIVES) { - // will eventually load missing events from the db - void conversationRepository.updateArchivedConversations(); - } + const onExitPreferences = useCallback(() => { + setCurrentView(ViewType.MOBILE_LEFT_SIDEBAR); + switchList(ListState.CONVERSATIONS); + switchContent(ContentState.CONVERSATION); + }, []); - if (nextTab !== SidebarTabs.PREFERENCES) { - onExitPreferences(); - } + const changeTab = useCallback( + (nextTab: SidebarTabs, folderId?: string) => { + if (!folderId) { + closeFolder(); + } - clearConversationFilter(); - setCurrentTab(nextTab); - } + if (nextTab === SidebarTabs.ARCHIVES) { + // will eventually load missing events from the db + void conversationRepository.updateArchivedConversations(); + } - const switchList = listViewModel.switchList; + if (nextTab !== SidebarTabs.PREFERENCES) { + onExitPreferences(); + } - const onExitPreferences = () => { - setCurrentView(ViewType.MOBILE_LEFT_SIDEBAR); - switchList(ListState.CONVERSATIONS); - listViewModel.contentViewModel.switchContent(ContentState.CONVERSATION); - }; + clearConversationFilter(); + setCurrentTab(nextTab); + }, + [conversationRepository], + ); - function onClickPreferences(itemId: ContentState) { + const onClickPreferences = useCallback((itemId: ContentState) => { switchList(ListState.PREFERENCES); setCurrentView(ViewType.MOBILE_CENTRAL_COLUMN); - listViewModel.contentViewModel.switchContent(itemId); + 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); - } + }, []); - const handleEnterSearchClick = (event: ReactKeyBoardEvent) => { - const firstFoundConversation = currentTabConversations?.[0]; + const handleEnterSearchClick = useCallback( + (event: ReactKeyBoardEvent) => { + const firstFoundConversation = currentTabConversations?.[0]; - if (firstFoundConversation) { - createNavigateKeyboard(generateConversationUrl(firstFoundConversation.qualifiedId), true)(event); - setConversationsFilter(''); - scrollToConversation(firstFoundConversation.id); - } - }; + if (firstFoundConversation) { + createNavigateKeyboard(generateConversationUrl(firstFoundConversation.qualifiedId), true)(event); + setConversationsFilter(''); + scrollToConversation(firstFoundConversation.id); + } + }, + [currentTabConversations], + ); - const onSearch = (searchValue: string) => { - setConversationsFilter(searchValue); - conversationListRef?.scrollTo(0, 0); - }; + const onSearch = useCallback( + (searchValue: string) => { + setConversationsFilter(searchValue); + conversationListRef?.scrollTo(0, 0); + }, + [conversationListRef], + ); - const jumpToRecentSearch = () => { + const jumpToRecentSearch = useCallback(() => { switchList(ListState.CONVERSATIONS); setCurrentTab(SidebarTabs.RECENT); - }; + }, []); return (
@@ -342,7 +365,7 @@ const Conversations: React.FC = ({ favoriteConversations={favoriteConversations} archivedConversations={archivedConversations} conversationRepository={conversationRepository} - onClickPreferences={() => onClickPreferences(ContentState.PREFERENCES_ACCOUNT)} + onClickPreferences={onClickPreferences} showNotificationsBadge={notifications.length > 0} userRepository={userRepository} teamRepository={teamRepository} @@ -416,5 +439,3 @@ const Conversations: React.FC = ({
); }; - -export {Conversations}; diff --git a/src/script/page/LeftSidebar/panels/Conversations/ConversationsList.tsx b/src/script/page/LeftSidebar/panels/Conversations/ConversationsList.tsx index cc6e05d01b9..e5765c9cfd3 100644 --- a/src/script/page/LeftSidebar/panels/Conversations/ConversationsList.tsx +++ b/src/script/page/LeftSidebar/panels/Conversations/ConversationsList.tsx @@ -23,6 +23,7 @@ import React, { useEffect, useState, MutableRefObject, + useCallback, } from 'react'; import {ConversationListCell} from 'Components/ConversationListCell'; @@ -91,43 +92,67 @@ export const ConversationsList = ({ const {joinableCalls} = useKoSubscribableChildren(callState, ['joinableCalls']); - const isActiveConversation = (conversation: Conversation) => conversationState.isActiveConversation(conversation); + const isActiveConversation = useCallback( + (conversation: Conversation) => conversationState.isActiveConversation(conversation), + [conversationState], + ); - const openContextMenu = (conversation: Conversation, event: MouseEvent | React.MouseEvent) => - listViewModel.onContextMenu(conversation, event); + const openContextMenu = useCallback( + (conversation: Conversation, event: MouseEvent | React.MouseEvent) => + listViewModel.onContextMenu(conversation, event), + [listViewModel], + ); - const answerCall = (conversation: Conversation) => listViewModel.answerCall(conversation); + const answerCall = useCallback( + (conversation: Conversation) => listViewModel.answerCall(conversation), + [listViewModel], + ); - const hasJoinableCall = (conversation: Conversation) => { - const call = joinableCalls.find((callInstance: Call) => - matchQualifiedIds(callInstance.conversation.qualifiedId, conversation.qualifiedId), - ); + const hasJoinableCall = useCallback( + (conversation: Conversation) => { + const call = joinableCalls.find((callInstance: Call) => + matchQualifiedIds(callInstance.conversation.qualifiedId, conversation.qualifiedId), + ); - return !!call && !conversation.isSelfUserRemoved(); - }; + return !!call && !conversation.isSelfUserRemoved(); + }, + [joinableCalls], + ); const onConnectionRequestClick = () => { setCurrentView(ViewType.MOBILE_CENTRAL_COLUMN); listViewModel.contentViewModel.switchContent(ContentState.CONNECTION_REQUESTS); }; + const onConversationClick = useCallback( + (conversation: Conversation) => + (event: ReactMouseEvent | ReactKeyBoardEvent) => { + if (isActiveConversation(conversation)) { + clearSearchFilter(); + setClickedFilteredConversationId(conversation.id); + return; + } + + if (isKeyboardEvent(event)) { + createNavigateKeyboard(generateConversationUrl(conversation.qualifiedId), true)(event); + } else { + createNavigate(generateConversationUrl(conversation.qualifiedId))(event); + } + + clearSearchFilter(); + setClickedFilteredConversationId(conversation.id); + }, + [clearSearchFilter, isActiveConversation], + ); + const getCommonConversationCellProps = (conversation: Conversation, index: number) => ({ isFocused: document.activeElement !== searchInputRef.current && !conversationsFilter && currentFocus === conversation.id, handleArrowKeyDown: handleArrowKeyDown(index), - resetConversationFocus: resetConversationFocus, + resetConversationFocus, dataUieName: 'item-conversation', - conversation: conversation, - onClick: (event: ReactMouseEvent | ReactKeyBoardEvent) => { - if (isKeyboardEvent(event)) { - createNavigateKeyboard(generateConversationUrl(conversation.qualifiedId), true)(event); - } else { - createNavigate(generateConversationUrl(conversation.qualifiedId))(event); - } - - clearSearchFilter(); - setClickedFilteredConversationId(conversation.id); - }, + conversation, + onClick: onConversationClick(conversation), isSelected: isActiveConversation, onJoinCall: answerCall, rightClick: openContextMenu, diff --git a/src/script/page/LeftSidebar/panels/Conversations/getGroupParticipantsConversation.ts b/src/script/page/LeftSidebar/panels/Conversations/getGroupParticipantsConversation.ts index 91cb250d518..c7cd84b7acf 100644 --- a/src/script/page/LeftSidebar/panels/Conversations/getGroupParticipantsConversation.ts +++ b/src/script/page/LeftSidebar/panels/Conversations/getGroupParticipantsConversation.ts @@ -52,21 +52,29 @@ export const getGroupParticipantsConversations = ({ const {query, isHandleQuery} = searchRepository.normalizeQuery(conversationsFilter); let filteredGroup = conversationRepository.getGroupsByName(query, isHandleQuery); + // Convert arrays to Sets for faster lookups + const favoriteSet = new Set(favoriteConversations); + const archivedSet = new Set(archivedConversations); + const conversationsSet = new Set(conversations); + const currentFolderConversations = + isFolderView && currentFolder?.conversations() ? new Set(currentFolder.conversations()) : null; + if (isFavoritesView) { - filteredGroup = favoriteConversations.filter(item => filteredGroup.includes(item)); + filteredGroup = filteredGroup.filter(item => favoriteSet.has(item)); } if (isArchivesView) { - filteredGroup = archivedConversations.filter(item => filteredGroup.includes(item)); + filteredGroup = filteredGroup.filter(item => archivedSet.has(item)); } - if (isFolderView && currentFolder) { - filteredGroup = currentFolder?.conversations()?.filter(item => filteredGroup.includes(item)) || []; + if (isFolderView && currentFolderConversations) { + filteredGroup = filteredGroup.filter(item => currentFolderConversations.has(item)); } if (!isArchivesView) { - filteredGroup = filteredGroup.filter(item => !archivedConversations.includes(item)); + filteredGroup = filteredGroup.filter(item => !archivedSet.has(item)); } - return filteredGroup.filter(item => !conversations.includes(item)); + // Exclude existing conversations + return filteredGroup.filter(item => !conversationsSet.has(item)); }; diff --git a/src/script/page/LeftSidebar/panels/ListWrapper.tsx b/src/script/page/LeftSidebar/panels/ListWrapper.tsx index 8c4f3a8d8d9..e9ed045a8c1 100644 --- a/src/script/page/LeftSidebar/panels/ListWrapper.tsx +++ b/src/script/page/LeftSidebar/panels/ListWrapper.tsx @@ -17,7 +17,7 @@ * */ -import React, {ReactElement, ReactNode} from 'react'; +import React, {memo, ReactElement, ReactNode} from 'react'; import {css} from '@emotion/react'; import {throttle} from 'underscore'; @@ -60,95 +60,99 @@ interface LeftListWrapperProps { setConversationListRef?: (element: HTMLElement) => void; } -const ListWrapper = ({ - id, - header, - sidebar, - headerElement, - onClose, - children, - hasHeader = true, - footer, - before, - headerUieName, - setConversationListRef, -}: LeftListWrapperProps) => { - const calculateBorders = throttle((element: HTMLElement) => { - window.requestAnimationFrame(() => { - if (element.offsetHeight <= 0 || !isScrollable(element)) { - element.classList.remove('left-list-center-border-bottom', 'conversations-center-border-top'); +const ListWrapper = memo( + ({ + id, + header, + sidebar, + headerElement, + onClose, + children, + hasHeader = true, + footer, + before, + headerUieName, + setConversationListRef, + }: LeftListWrapperProps) => { + const calculateBorders = throttle((element: HTMLElement) => { + window.requestAnimationFrame(() => { + if (element.offsetHeight <= 0 || !isScrollable(element)) { + element.classList.remove('left-list-center-border-bottom', 'conversations-center-border-top'); + return; + } + + element.classList.toggle('left-list-center-border-top', !isScrolledTop(element)); + element.classList.toggle('left-list-center-border-bottom', !isScrolledBottom(element)); + }); + }, 100); + + function initBorderedScroll(element: HTMLElement | null) { + if (!element) { return; } - element.classList.toggle('left-list-center-border-top', !isScrolledTop(element)); - element.classList.toggle('left-list-center-border-bottom', !isScrolledBottom(element)); - }); - }, 100); + setConversationListRef?.(element); - function initBorderedScroll(element: HTMLElement | null) { - if (!element) { - return; + calculateBorders(element); + element.addEventListener('scroll', () => calculateBorders(element)); } - setConversationListRef?.(element); - - calculateBorders(element); - element.addEventListener('scroll', () => calculateBorders(element)); - } - - const {isSlow} = useConnectionQuality(); - - return ( - <> - {sidebar} -
- {hasHeader && ( -
- {isSlow && ( -

- - {t('internetConnectionSlow')} -

- )} -
- {headerElement || ( - <> -

- {header} -

- - {onClose && ( - - )} - + const {isSlow} = useConnectionQuality(); + + return ( + <> + {sidebar} +
+ {hasHeader && ( +
+ {isSlow && ( +

+ + {t('internetConnectionSlow')} +

)} -
-
- )} - - {before ?? null} - - - {children} - - - {footer ?? null} -
- - ); -}; +
+ {headerElement || ( + <> +

+ {header} +

+ + {onClose && ( + + )} + + )} +
+ + )} + + {before ?? null} + + + {children} + + + {footer ?? null} + + + ); + }, +); + +ListWrapper.displayName = 'ListWrapper'; export {ListWrapper}; From f29a93b97328f2531a78a06a918a6e55dd087f90 Mon Sep 17 00:00:00 2001 From: Immad Abdul Jabbar Date: Tue, 3 Dec 2024 17:02:07 +0100 Subject: [PATCH 237/329] fix: team creation flow play test feedback fix [WPB-14765] (#18417) * fix: team creation flow play test feedback fix [WPB-14765] * add lineHeight variable --- .../components/TextInput/TextInput.styles.ts | 2 +- .../page/AccentColorPicker/AccentColorPicker.tsx | 2 +- .../TeamCreation/TeamCreation.styles.ts | 12 ++++++++++-- .../TeamCreation/TeamCreationAccountHeader.tsx | 13 ++++++++----- .../TeamCreation/TeamCreationBanner.tsx | 11 +++++++---- .../TeamCreationSteps/Confirmation.tsx | 12 ++++++------ .../TeamCreationSteps/Introduction.tsx | 16 ++++++++-------- .../accountPreferences/AccountInput.tsx | 2 +- .../accountPreferences/AvailabilityButtons.tsx | 2 +- src/style/common/variables.less | 1 + 10 files changed, 44 insertions(+), 29 deletions(-) diff --git a/src/script/components/TextInput/TextInput.styles.ts b/src/script/components/TextInput/TextInput.styles.ts index 72453aa653c..e01aba0308d 100644 --- a/src/script/components/TextInput/TextInput.styles.ts +++ b/src/script/components/TextInput/TextInput.styles.ts @@ -43,7 +43,7 @@ export const errorMessageCSS: CSSObject = { bottom: 4, color: 'var(--text-input-alert)', left: 0, - lineHeight: '0.875rem', + lineHeight: 'var(--line-height-small-plus)', position: 'absolute', textTransform: 'unset', }; diff --git a/src/script/page/AccentColorPicker/AccentColorPicker.tsx b/src/script/page/AccentColorPicker/AccentColorPicker.tsx index a76d1d8c9f7..7eab85b2290 100644 --- a/src/script/page/AccentColorPicker/AccentColorPicker.tsx +++ b/src/script/page/AccentColorPicker/AccentColorPicker.tsx @@ -33,7 +33,7 @@ export interface AccentColorPickerProps { } const headerStyles: CSSObject = { - lineHeight: '0.875rem', + lineHeight: 'var(--line-height-small-plus)', margin: '20px 0 6px', padding: 0, textAlign: 'center', diff --git a/src/script/page/LeftSidebar/panels/Conversations/ConversationTabs/TeamCreation/TeamCreation.styles.ts b/src/script/page/LeftSidebar/panels/Conversations/ConversationTabs/TeamCreation/TeamCreation.styles.ts index c2393a0657c..ce4b372339f 100644 --- a/src/script/page/LeftSidebar/panels/Conversations/ConversationTabs/TeamCreation/TeamCreation.styles.ts +++ b/src/script/page/LeftSidebar/panels/Conversations/ConversationTabs/TeamCreation/TeamCreation.styles.ts @@ -22,9 +22,10 @@ import {CSSObject} from '@emotion/react'; import {media} from '@wireapp/react-ui-kit'; export const teamUpgradeBannerHeaderCss: CSSObject = { - lineHeight: 'var(--line-height-sm)', + lineHeight: 'var(--line-height-small-plus)', marginLeft: '0.5rem', verticalAlign: 'text-top', + fontWeight: 'var(--font-weight-semibold)', }; export const teamUpgradeBannerContentCss: CSSObject = { @@ -121,8 +122,9 @@ export const teamUpgradeAccountBannerContainerCss: CSSObject = { justifyContent: 'space-between', alignItems: 'center', padding: '0.5rem', + gap: '0.5rem', marginBottom: '2rem', - [media.tabletSMDown]: { + [media.tabletDown]: { flexDirection: 'column', alignItems: 'baseline', gap: '0.5rem', @@ -143,3 +145,9 @@ export const bannerWrapperCss: CSSObject = { boxShadow: '0px 0px 12px 0px var(--background-fade-32)', borderRadius: '0.5rem', }; + +export const bannerHeaderContainerCss: CSSObject = { + display: 'flex', + alignItems: 'center', + marginBottom: '0.5rem', +}; diff --git a/src/script/page/LeftSidebar/panels/Conversations/ConversationTabs/TeamCreation/TeamCreationAccountHeader.tsx b/src/script/page/LeftSidebar/panels/Conversations/ConversationTabs/TeamCreation/TeamCreationAccountHeader.tsx index 5f9e72bcf62..23e787caaaa 100644 --- a/src/script/page/LeftSidebar/panels/Conversations/ConversationTabs/TeamCreation/TeamCreationAccountHeader.tsx +++ b/src/script/page/LeftSidebar/panels/Conversations/ConversationTabs/TeamCreation/TeamCreationAccountHeader.tsx @@ -23,6 +23,7 @@ import * as Icon from 'Components/Icon'; import {t} from 'Util/LocalizerUtil'; import { + bannerHeaderContainerCss, teamUpgradeAccountBannerContainerCss, teamUpgradeBannerButtonCss, teamUpgradeBannerHeaderCss, @@ -35,11 +36,13 @@ interface Props { export const TeamCreationAccountHeader = ({onClick}: Props) => { return (
-
- - - {t('teamUpgradeBannerHeader')} - +
+
+ + + {t('teamUpgradeBannerHeader')} + +
{t('teamUpgradeBannerContent')}
+
{renderAvsSwitch(avsDebuggerEnabled)}
+ +
+

Message Automation

= ({ isMaximized, onTileDoubleClick, }) => { - const {isMuted, videoState, videoStream, blurredVideoStream, isActivelySpeaking, isAudioEstablished} = - useKoSubscribableChildren(participant, [ - 'isMuted', - 'videoStream', - 'blurredVideoStream', - 'isActivelySpeaking', - 'videoState', - 'isAudioEstablished', - ]); + const { + isMuted, + videoState, + videoStream, + blurredVideoStream, + isActivelySpeaking, + isAudioEstablished, + isSwitchingVideoResolution, + } = useKoSubscribableChildren(participant, [ + 'isMuted', + 'videoStream', + 'blurredVideoStream', + 'isActivelySpeaking', + 'videoState', + 'isAudioEstablished', + 'isSwitchingVideoResolution', + ]); const {name} = useKoSubscribableChildren(participant?.user, ['name']); const sharesScreen = videoState === VIDEO_STATE.SCREENSHARE; @@ -220,7 +228,7 @@ const GroupVideoGridTile: React.FC = ({ {nameContainer} - {hasPausedVideo && ( + {(hasPausedVideo || isSwitchingVideoResolution) && (
@@ -232,7 +240,7 @@ const GroupVideoGridTile: React.FC = ({ css={{fontsize: minimized ? '0.6875rem' : '0.875rem'}} data-uie-name="status-video-paused" > - {t('videoCallPaused')} + {hasPausedVideo ? t('videoCallPaused') : t('videoCallParticipantConnecting')}
{nameContainer}
diff --git a/src/script/team/TeamState.ts b/src/script/team/TeamState.ts index f2293502164..abbb2b2bf00 100644 --- a/src/script/team/TeamState.ts +++ b/src/script/team/TeamState.ts @@ -120,6 +120,7 @@ export class TeamState { this.isConferenceCallingEnabled = ko.pureComputed( () => this.teamFeatures()?.conferenceCalling?.status === FeatureStatus.ENABLED, ); + this.isGuestLinkEnabled = ko.pureComputed( () => this.teamFeatures()?.conversationGuestLinks?.status === FeatureStatus.ENABLED, ); diff --git a/src/script/util/DebugUtil.ts b/src/script/util/DebugUtil.ts index 0dc1a6f04cb..2dea7977747 100644 --- a/src/script/util/DebugUtil.ts +++ b/src/script/util/DebugUtil.ts @@ -37,7 +37,10 @@ import keyboardjs from 'keyboardjs'; import {$createTextNode, $getRoot, LexicalEditor} from 'lexical'; import {container} from 'tsyringe'; +import {AvsDebugger} from '@wireapp/avs-debugger'; + import {showAppNotification} from 'Components/AppNotification'; +import {getStorage} from 'Util/localStorage'; import {getLogger, Logger} from 'Util/Logger'; import {KEY} from './KeyboardUtil'; @@ -112,6 +115,9 @@ export class DebugUtil { this.logger = getLogger('DebugUtil'); keyboardjs.bind(['command+shift+1', 'ctrl+shift+1'], this.toggleDebugUi); + + // If the debugger marked as active in the LocalStorage, install the Web Component + this.setupAvsDebugger(); } async importEvents() { @@ -253,6 +259,39 @@ export class DebugUtil { this.propertiesRepository.savePreference(PROPERTIES_TYPE.CALL.PUSH_TO_TALK_KEY, key); } + setupAvsDebugger() { + if (this.isEnabledAvsDebugger()) { + this.enableAvsDebugger(true); + } + } + + enableAvsDebugger(enable: boolean): boolean { + const storage = getStorage(); + + if (storage === undefined) { + return false; + } + if (enable) { + AvsDebugger.initTrackDebugger(); + } else { + AvsDebugger.destructTrackDebugger(); + } + + storage.setItem('avs-debugger-enabled', `${enable}`); + return enable; + } + + isEnabledAvsDebugger(): boolean { + const storage = getStorage(); + + if (storage === undefined) { + return false; + } + + const isEnabled = storage.getItem('avs-debugger-enabled'); + return isEnabled === 'true'; + } + /** Used by QA test automation. */ blockAllConnections(): Promise { const blockUsers = this.userState.users().map(userEntity => this.connectionRepository.blockUser(userEntity)); diff --git a/test/unit_tests/calling/videoGridHandlerSpec.js b/test/unit_tests/calling/videoGridHandlerSpec.js index a9f4a10d20d..4e66d582e1a 100644 --- a/test/unit_tests/calling/videoGridHandlerSpec.js +++ b/test/unit_tests/calling/videoGridHandlerSpec.js @@ -71,7 +71,7 @@ describe('videoGridHandler', () => { selfUser.isMe = true; const selfParticipant = new Participant(selfUser, 'selfdevice'); selfParticipant.videoState(VIDEO_STATE.STARTED); - selfParticipant.videoStream({}); + selfParticipant.videoStream({getVideoTracks: () => []}); const call = new Call('', '', undefined, selfParticipant, CALL_TYPE.NORMAL, { currentAvailableDeviceId: { audiooutput: ko.pureComputed(() => 'test'), diff --git a/yarn.lock b/yarn.lock index df279eb8a92..0578e3502e8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5969,10 +5969,21 @@ __metadata: languageName: node linkType: hard -"@wireapp/avs@npm:9.10.16": - version: 9.10.16 - resolution: "@wireapp/avs@npm:9.10.16" - checksum: 10/2ed7b43e5be5bfadfb8eb870cdfc2a758f835e87304e7c445114580831b63e720c6a96e12db7addd90b8581c2ffc424b1e65987ea4c34d9e19bb45aa5ba3701f +"@wireapp/avs-debugger@npm:0.0.5": + version: 0.0.5 + resolution: "@wireapp/avs-debugger@npm:0.0.5" + dependencies: + debug: "npm:^4.3.5" + uuid: "npm:^10.0.0" + webrtc-internals: "npm:^0.0.8" + checksum: 10/0ca37f7af760eab50c16ffafb964901190e4a4ed50d8ff3db8f3a1af25265c2534a1683cce2a52076c3b6994ad90e6e46c8b30845ba12d0c0f7a929f5f5d99de + languageName: node + linkType: hard + +"@wireapp/avs@npm:10.0.4": + version: 10.0.4 + resolution: "@wireapp/avs@npm:10.0.4" + checksum: 10/b584313806a95ffe732c9a4f62ea001f4871ee60e3a75830bd6dce176422c8eee43ae2be8ccff4642b1a3ed729508cc029f647219d04551523a77efe890370fe languageName: node linkType: hard @@ -18223,6 +18234,15 @@ __metadata: languageName: node linkType: hard +"uuid@npm:^10.0.0": + version: 10.0.0 + resolution: "uuid@npm:10.0.0" + bin: + uuid: dist/bin/uuid + checksum: 10/35aa60614811a201ff90f8ca5e9ecb7076a75c3821e17f0f5ff72d44e36c2d35fcbc2ceee9c4ac7317f4cc41895da30e74f3885e30313bee48fda6338f250538 + languageName: node + linkType: hard + "v8-compile-cache-lib@npm:^3.0.1": version: 3.0.1 resolution: "v8-compile-cache-lib@npm:3.0.1" @@ -18525,6 +18545,13 @@ __metadata: languageName: node linkType: hard +"webrtc-internals@npm:^0.0.8": + version: 0.0.8 + resolution: "webrtc-internals@npm:0.0.8" + checksum: 10/df26c0d602c1807ba33d1ef53d363ad3acbcb854438257efd1dac33511cfedbdf23b94b2afee534a9e8b277d23b395cbe6b06bc0d293cec38391ed8e3d9e2490 + languageName: node + linkType: hard + "whatwg-encoding@npm:^2.0.0": version: 2.0.0 resolution: "whatwg-encoding@npm:2.0.0" @@ -18732,7 +18759,8 @@ __metadata: "@types/uuid": "npm:^10.0.0" "@types/webpack-env": "npm:1.18.5" "@types/wicg-file-system-access": "npm:^2023.10.5" - "@wireapp/avs": "npm:9.10.16" + "@wireapp/avs": "npm:10.0.4" + "@wireapp/avs-debugger": "npm:0.0.5" "@wireapp/commons": "npm:5.4.0" "@wireapp/copy-config": "npm:2.2.10" "@wireapp/core": "npm:46.11.4" From dd05ef64ef66c953e2d52c8e467311e4293a4f53 Mon Sep 17 00:00:00 2001 From: Amir Ghezelbash Date: Wed, 4 Dec 2024 18:30:01 +0330 Subject: [PATCH 243/329] fix: Avoid remote mute transmitting to other calls (#18423) * fix: Avoid remote mute message transmitting to other calls * fix tests * fix tests --- src/script/calling/CallingRepository.test.ts | 12 +++++++++--- src/script/calling/CallingRepository.ts | 10 +++++++--- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/script/calling/CallingRepository.test.ts b/src/script/calling/CallingRepository.test.ts index 640b9ad6370..c06a04dc6d6 100644 --- a/src/script/calling/CallingRepository.test.ts +++ b/src/script/calling/CallingRepository.test.ts @@ -132,10 +132,12 @@ describe('CallingRepository', () => { buildMediaDevicesHandler(), ); + call.state(CALL_STATE.MEDIA_ESTAB); + conversation.roles({[senderUserId.id]: DefaultConversationRoleName.WIRE_ADMIN}); callingRepository['conversationState'].conversations.push(conversation); - spyOn(callingRepository, 'findCall').and.returnValue(call); + callingRepository['callState'].calls([call]); spyOn(callingRepository, 'muteCall').and.callThrough(); spyOn(wCall, 'recvMsg').and.callThrough(); @@ -175,10 +177,12 @@ describe('CallingRepository', () => { buildMediaDevicesHandler(), ); + call.state(CALL_STATE.MEDIA_ESTAB); + conversation.roles({[senderUserId.id]: DefaultConversationRoleName.WIRE_MEMBER}); callingRepository['conversationState'].conversations.push(conversation); - spyOn(callingRepository, 'findCall').and.returnValue(call); + callingRepository['callState'].calls([call]); spyOn(callingRepository, 'muteCall').and.callThrough(); spyOn(wCall, 'recvMsg').and.callThrough(); @@ -218,10 +222,12 @@ describe('CallingRepository', () => { buildMediaDevicesHandler(), ); + call.state(CALL_STATE.MEDIA_ESTAB); + conversation.roles({[senderUserId.id]: DefaultConversationRoleName.WIRE_ADMIN}); callingRepository['conversationState'].conversations.push(conversation); - spyOn(callingRepository, 'findCall').and.returnValue(call); + callingRepository['callState'].calls([call]); spyOn(callingRepository, 'muteCall').and.callThrough(); spyOn(wCall, 'recvMsg').and.callThrough(); diff --git a/src/script/calling/CallingRepository.ts b/src/script/calling/CallingRepository.ts index 128e0ba33bc..212fcdbaae1 100644 --- a/src/script/calling/CallingRepository.ts +++ b/src/script/calling/CallingRepository.ts @@ -758,8 +758,12 @@ export class CallingRepository { } case CALL_MESSAGE_TYPE.REMOTE_MUTE: { - const call = this.findCall(conversationId); - if (!call) { + const currentCall = this.callState.joinedCall(); + if ( + !currentCall || + !matchQualifiedIds(currentCall.conversation.qualifiedId, conversationId) || + !this.selfUser + ) { return; } @@ -782,7 +786,7 @@ export class CallingRepository { return; } - this.muteCall(call, true, MuteState.REMOTE_MUTED); + this.muteCall(currentCall, true, MuteState.REMOTE_MUTED); return this.processCallingMessage(conversation, event); } From 8c0bcb1cfe083e4730b73ca05b5b72dc8d820377 Mon Sep 17 00:00:00 2001 From: Virgile <78490891+V-Gira@users.noreply.github.com> Date: Wed, 4 Dec 2024 16:14:46 +0100 Subject: [PATCH 244/329] chore(core-bump): update final v7 endpoints [WPB-14768] (#18424) --- package.json | 2 +- yarn.lock | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 4d1ff4528ec..15af22da9dd 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "@wireapp/avs": "10.0.4", "@wireapp/avs-debugger": "0.0.5", "@wireapp/commons": "5.4.0", - "@wireapp/core": "46.11.4", + "@wireapp/core": "46.11.6", "@wireapp/react-ui-kit": "9.28.0", "@wireapp/store-engine-dexie": "2.1.15", "@wireapp/telemetry": "0.1.3", diff --git a/yarn.lock b/yarn.lock index 0578e3502e8..11569e38759 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5948,9 +5948,9 @@ __metadata: languageName: node linkType: hard -"@wireapp/api-client@npm:^27.12.2": - version: 27.12.2 - resolution: "@wireapp/api-client@npm:27.12.2" +"@wireapp/api-client@npm:^27.13.1": + version: 27.13.1 + resolution: "@wireapp/api-client@npm:27.13.1" dependencies: "@wireapp/commons": "npm:^5.4.0" "@wireapp/priority-queue": "npm:^2.1.11" @@ -5965,7 +5965,7 @@ __metadata: tough-cookie: "npm:4.1.4" ws: "npm:8.18.0" zod: "npm:3.23.8" - checksum: 10/4f983f7e974a24d89c95b09fbb1fa67b6373d3839aeba8f5aee98ce83d9a6b065cb6669a0f74c67bb5c7f3869aeaf75c4bbb8d0cdbaf99ae58fd10f4ebc6257e + checksum: 10/8e297f4da3ac3d4a052d5670b0ddcd6302c9a246ef61760c61b3ecf0e1e78b0d01107fa32a10ad70e8203e7e3a6cab0d2373cc52ece4bfd154f8840b2e9db84b languageName: node linkType: hard @@ -6030,11 +6030,11 @@ __metadata: languageName: node linkType: hard -"@wireapp/core@npm:46.11.4": - version: 46.11.4 - resolution: "@wireapp/core@npm:46.11.4" +"@wireapp/core@npm:46.11.6": + version: 46.11.6 + resolution: "@wireapp/core@npm:46.11.6" dependencies: - "@wireapp/api-client": "npm:^27.12.2" + "@wireapp/api-client": "npm:^27.13.1" "@wireapp/commons": "npm:^5.4.0" "@wireapp/core-crypto": "npm:1.1.2" "@wireapp/cryptobox": "npm:12.8.0" @@ -6052,7 +6052,7 @@ __metadata: long: "npm:^5.2.0" uuid: "npm:9.0.1" zod: "npm:3.23.8" - checksum: 10/dd891891db8d1d66b791ec09bb39d8272cb5172456fb58cf86cad91a250786e3b8ea9e95e8a5ade9ef726437f036a94d285c3c162beeb128edf7f0fc51d67323 + checksum: 10/ee0dfc80fa1e4ca2eaf31a550abf8b87e9d81f402f64c3f2d85f02b3117a1edab4762347c7d4d005f5083d091fdabbfc497503e1671b51bfa2ab4daf89c69ef9 languageName: node linkType: hard @@ -18763,7 +18763,7 @@ __metadata: "@wireapp/avs-debugger": "npm:0.0.5" "@wireapp/commons": "npm:5.4.0" "@wireapp/copy-config": "npm:2.2.10" - "@wireapp/core": "npm:46.11.4" + "@wireapp/core": "npm:46.11.6" "@wireapp/eslint-config": "npm:3.0.7" "@wireapp/prettier-config": "npm:0.6.4" "@wireapp/react-ui-kit": "npm:9.28.0" From ee3fc70d9e56728c2f0f598c3b32d06ba1294e64 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Dec 2024 15:27:36 +0000 Subject: [PATCH 245/329] chore(deps): bump wire-web-config-default-staging in /app-config (#18425) Bumps [wire-web-config-default-staging](https://github.com/wireapp/wire-web-config-default) from v0.31.36 to v0.32.0. - [Commits](https://github.com/wireapp/wire-web-config-default/compare/v0.31.36...24ef7324fd417d1e6c27e9a9f5f5653422986d89) --- updated-dependencies: - dependency-name: wire-web-config-default-staging dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app-config/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app-config/package.json b/app-config/package.json index cf2c7bbac25..dc370f50063 100644 --- a/app-config/package.json +++ b/app-config/package.json @@ -1,6 +1,6 @@ { "dependencies": { "wire-web-config-default-master": "https://github.com/wireapp/wire-web-config-wire#v0.31.36", - "wire-web-config-default-staging": "https://github.com/wireapp/wire-web-config-default#v0.31.36" + "wire-web-config-default-staging": "https://github.com/wireapp/wire-web-config-default#v0.32.0" } } From ba37a97370f2a234548b32474dca086339b61df4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrian=20Wei=C3=9F?= <77456193+aweiss-dev@users.noreply.github.com> Date: Wed, 4 Dec 2024 17:44:52 +0100 Subject: [PATCH 246/329] feat: export & import users, conversations. Harden code (#18426) --- .../CrossPlatformBackup/AssetMetadata.ts | 2 +- .../backup/CrossPlatformBackup/CPB.export.ts | 143 +++++++++--------- .../backup/CrossPlatformBackup/CPB.import.ts | 30 +++- .../backup/CrossPlatformBackup/data.schema.ts | 79 +++++----- .../importMappers/mapConversationRecord.ts | 15 +- .../importMappers/mapEventRecord.ts | 9 +- .../importMappers/mapUserRecord.ts | 18 ++- 7 files changed, 169 insertions(+), 127 deletions(-) diff --git a/src/script/backup/CrossPlatformBackup/AssetMetadata.ts b/src/script/backup/CrossPlatformBackup/AssetMetadata.ts index 5c52c60ec40..d4a04090a08 100644 --- a/src/script/backup/CrossPlatformBackup/AssetMetadata.ts +++ b/src/script/backup/CrossPlatformBackup/AssetMetadata.ts @@ -55,7 +55,7 @@ const hasNameProperty = (infoObject: unknown): infoObject is {name: string} => isObject(infoObject) && 'name' in infoObject; const isImageAsset = (contentType: string, infoObject: unknown): infoObject is ImageAsset => AssetContentType.isImage(contentType) && - hasNameProperty(infoObject) && + isObject(infoObject) && 'height' in infoObject && 'width' in infoObject && 'tag' in infoObject; diff --git a/src/script/backup/CrossPlatformBackup/CPB.export.ts b/src/script/backup/CrossPlatformBackup/CPB.export.ts index 0d1baf636c3..2cc27e4ffec 100644 --- a/src/script/backup/CrossPlatformBackup/CPB.export.ts +++ b/src/script/backup/CrossPlatformBackup/CPB.export.ts @@ -23,14 +23,19 @@ import {buildMetaData} from './AssetMetadata'; import { CPBackupExporter, BackupQualifiedId, - BackUpConversation, BackupUser, - BackupMessage, + BackUpConversation, BackupDateTime, BackupMessageContent, + BackupMessage, } from './CPB.library'; import {ExportHistoryFromDatabaseParams} from './CPB.types'; -import {ConversationTableSchema, UserTableSchema, EventTableSchema, AssetContentSchema} from './data.schema'; +import { + AssetContentSchema, + ConversationTableEntrySchema, + EventTableEntrySchema, + UserTableEntrySchema, +} from './data.schema'; import {preprocessConversations, preprocessUsers, preprocessEvents} from '../recordPreprocessors'; @@ -63,62 +68,55 @@ export const exportCPBHistoryFromDatabase = async ({ } // Taking care of conversations - const { - success: conversationsSuccess, - data: conversationsData, - error: conversationsError, - } = ConversationTableSchema.safeParse( - await exportTable({ - backupService, - table: conversationTable, - preprocessor: streamProgress(preprocessConversations), - }), - ); - if (conversationsSuccess) { - conversationsData.forEach(conversationData => - backupExporter.addConversation( - new BackUpConversation( - new BackupQualifiedId(conversationData.id, conversationData.domain), - conversationData.name ?? '', - ), - ), - ); - } else { - CPBLogger.log('Conversation data schema validation failed', conversationsError); - } + const conversationRecords = await exportTable({ + backupService, + table: conversationTable, + preprocessor: streamProgress(preprocessConversations), + }); + conversationRecords.forEach(record => { + const {success, data, error} = ConversationTableEntrySchema.safeParse(record); + + if (success) { + backupExporter.addConversation(new BackUpConversation(new BackupQualifiedId(data.id, data.domain), data.name)); + } else { + CPBLogger.error('Conversation data schema validation failed', error); + } + }); + // ------------------------------ // Taking care of users - const { - success: usersSuccess, - data: usersData, - error: usersError, - } = UserTableSchema.safeParse( - await exportTable({backupService, table: usersTable, preprocessor: streamProgress(preprocessUsers)}), - ); - if (usersSuccess) { - usersData.forEach(userData => + const userRecords = await exportTable({ + backupService, + table: usersTable, + preprocessor: streamProgress(preprocessUsers), + }); + userRecords.forEach(record => { + const {success, data, error} = UserTableEntrySchema.safeParse(record); + + if (success) { backupExporter.addUser( new BackupUser( - new BackupQualifiedId(userData?.qualified_id?.id ?? userData.id, userData?.qualified_id?.domain ?? ''), - userData.name, - userData.handle ?? '', + new BackupQualifiedId(data?.qualified_id?.id ?? data.id, data?.qualified_id?.domain ?? ''), + data.name, + data.handle ?? '', ), - ), - ); - } else { - CPBLogger.log('User data schema validation failed', usersError); - } + ); + } else { + CPBLogger.error('User data schema validation failed', error); + } + }); + // ------------------------------ // Taking care of events - const { - success: eventsSuccess, - data: eventsData, - error: eventsError, - } = EventTableSchema.safeParse( - await exportTable({backupService, table: eventsTable, preprocessor: streamProgress(preprocessEvents)}), - ); - if (eventsSuccess) { - eventsData.forEach(eventData => { + const eventRecords = await exportTable({ + backupService, + table: eventsTable, + preprocessor: streamProgress(preprocessEvents), + }); + + eventRecords.forEach(record => { + const {success, data: eventData, error} = EventTableEntrySchema.safeParse(record); + if (success) { const {type} = eventData; // ToDo: Add support for other types of messages and different types of content. Also figure out which fields are required. if (!isSupportedEventType(type)) { @@ -147,28 +145,31 @@ export const exportCPBHistoryFromDatabase = async ({ const webPrimaryKey = eventData.primary_key; if (isAssetAddEvent(type)) { - const {success, error, data} = AssetContentSchema.safeParse(eventData.data); - if (!success) { - CPBLogger.log('Asset data schema validation failed', error); + const { + success: assetParseSuccess, + error: assetParseError, + data: assetParseData, + } = AssetContentSchema.safeParse(eventData.data); + if (!assetParseSuccess) { + CPBLogger.error('Asset data schema validation failed', assetParseError); return; } - const metaData = buildMetaData(data.content_type, data.info); - - CPBLogger.log('metaData', metaData, data.content_type); + const metaData = buildMetaData(assetParseData.content_type, assetParseData.info); const asset = new BackupMessageContent.Asset( - data.content_type, - data.content_length, - data.info.name, - transformObjectToArray(data.otr_key), - transformObjectToArray(data.sha256), - data.key, - data.token, - data.domain, + assetParseData.content_type, + Number.parseInt(assetParseData.content_length), + assetParseData.info.name, + transformObjectToArray(assetParseData.otr_key), + transformObjectToArray(assetParseData.sha256), + assetParseData.key, + assetParseData.token, + assetParseData.domain, null, metaData, ); + backupExporter.addMessage( new BackupMessage(id, conversationId, senderUserId, senderClientId, creationDate, asset, webPrimaryKey), ); @@ -180,10 +181,12 @@ export const exportCPBHistoryFromDatabase = async ({ new BackupMessage(id, conversationId, senderUserId, senderClientId, creationDate, text, webPrimaryKey), ); } - }); - } else { - CPBLogger.log('Event data schema validation failed', eventsError); - } + } else { + CPBLogger.error('Event data schema validation failed', error); + } + }); + + // ------------------------------ return backupExporter.serialize(); }; diff --git a/src/script/backup/CrossPlatformBackup/CPB.import.ts b/src/script/backup/CrossPlatformBackup/CPB.import.ts index 1e974c6e175..3d3718e1710 100644 --- a/src/script/backup/CrossPlatformBackup/CPB.import.ts +++ b/src/script/backup/CrossPlatformBackup/CPB.import.ts @@ -19,9 +19,10 @@ import {CPBackup, CPBackupImporter, BackupImportResult} from './CPB.library'; import {ImportHistoryToDatabaseParams} from './CPB.types'; +import {mapConversationRecord, mapUserRecord} from './importMappers'; import {mapEventRecord} from './importMappers/mapEventRecord'; -import {EventRecord} from '../../storage'; +import {ConversationRecord, EventRecord, UserRecord} from '../../storage'; import {FileDescriptor, Filename} from '../Backup.types'; import {IncompatibleBackupError} from '../Error'; @@ -44,7 +45,7 @@ export const importCPBHistoryToDatabase = async ({ const result = backupImporter.importBackup(new Int8Array(backupRawData.buffer)); if (result instanceof BackupImportResult.Success) { - CPBLogger.log(`SUCCESSFUL BACKUP IMPORT: ${result.backupData}`); + // import events const eventRecords: EventRecord[] = []; result.backupData.messages.forEach(message => { const eventRecord = mapEventRecord(message); @@ -52,15 +53,30 @@ export const importCPBHistoryToDatabase = async ({ eventRecords.push(eventRecord); } }); + FileDescriptor.push({entities: eventRecords, filename: Filename.EVENTS}); + CPBLogger.log(`IMPORTED ${eventRecords.length} EVENTS`); + + // import conversations + const conversationRecords: ConversationRecord[] = []; result.backupData.conversations.forEach(conversation => { - // TODO: Import conversations + const conversationRecord = mapConversationRecord(conversation); + if (conversationRecord) { + conversationRecords.push(conversationRecord); + } }); + FileDescriptor.push({entities: conversationRecords, filename: Filename.CONVERSATIONS}); + CPBLogger.log(`IMPORTED ${conversationRecords.length} CONVERSATIONS`); + + // import users + const userRecords: UserRecord[] = []; result.backupData.users.forEach(user => { - // TODO: Import users + const userRecord = mapUserRecord(user); + if (userRecord) { + userRecords.push(userRecord); + } }); - - CPBLogger.log(`IMPORTED ${eventRecords.length} EVENTS`); - FileDescriptor.push({entities: eventRecords, filename: Filename.EVENTS}); + FileDescriptor.push({entities: userRecords, filename: Filename.USERS}); + CPBLogger.log(`IMPORTED ${userRecords.length} USERS`); } else { CPBLogger.log(`ERROR DURING BACKUP IMPORT: ${result}`); throw new IncompatibleBackupError('Incompatible cross-platform backup'); diff --git a/src/script/backup/CrossPlatformBackup/data.schema.ts b/src/script/backup/CrossPlatformBackup/data.schema.ts index cd6d3066146..e0f3de04557 100644 --- a/src/script/backup/CrossPlatformBackup/data.schema.ts +++ b/src/script/backup/CrossPlatformBackup/data.schema.ts @@ -19,55 +19,55 @@ import zod from 'zod'; -const ConversationSchema = zod.object({ - accessModes: zod.array(zod.string()).optional(), - accessRole: zod.array(zod.any()).optional(), - accessRoleV2: zod.string().optional(), - archived_state: zod.boolean(), - archived_timestamp: zod.number(), - cipher_suite: zod.number().optional(), - creator: zod.string(), +// For now we just check for the data we urgently need for the backup +export const ConversationTableEntrySchema = zod.object({ domain: zod.string(), - group_id: zod.string().optional(), id: zod.string(), - last_event_timestamp: zod.number(), - last_server_timestamp: zod.number(), - message_timer: zod.string().nullable().optional(), - muted_state: zod.number().nullable(), - muted_timestamp: zod.number(), - name: zod.string().nullable(), - others: zod.array(zod.any()), - protocol: zod.string(), - receipt_mode: zod.number().nullable(), - roles: zod.object({}).passthrough(), - status: zod.number(), - team_id: zod.string().nullable().optional(), - type: zod.number(), + name: zod.string(), + // accessModes: zod.array(zod.string()).optional(), + // accessRole: zod.array(zod.any()).optional(), + // accessRoleV2: zod.string().optional(), + // archived_state: zod.boolean(), + // archived_timestamp: zod.number(), + // cipher_suite: zod.number().optional(), + // creator: zod.string(), + // group_id: zod.string().optional(), + // last_event_timestamp: zod.number(), + // last_server_timestamp: zod.number(), + // message_timer: zod.string().nullable().optional(), + // muted_state: zod.number().nullable(), + // muted_timestamp: zod.number(), + // others: zod.array(zod.any()), + // protocol: zod.string(), + // receipt_mode: zod.number().nullable(), + // roles: zod.object({}).passthrough(), + // status: zod.number(), + // team_id: zod.string().nullable().optional(), + // type: zod.number(), }); -export const ConversationTableSchema = zod.array(ConversationSchema); -export type ConversationTable = zod.infer; +export type ConversationTableEntry = zod.infer; -const UserSchema = zod.object({ - accent_id: zod.number().optional(), - assets: zod.array(zod.any()).optional(), +// For now we just check for the data we urgently need for the backup +export const UserTableEntrySchema = zod.object({ handle: zod.string().optional(), id: zod.string(), - legalhold_status: zod.string().optional(), name: zod.string(), - picture: zod.array(zod.any()).optional(), qualified_id: zod .object({ domain: zod.string(), id: zod.string(), }) .optional(), - supported_protocols: zod.array(zod.string()).optional(), - team: zod.string().optional(), + // accent_id: zod.number().optional(), + // assets: zod.array(zod.any()).optional(), + // legalhold_status: zod.string().optional(), + // picture: zod.array(zod.any()).optional(), + // supported_protocols: zod.array(zod.string()).optional(), + // team: zod.string().optional(), }); -export const UserTableSchema = zod.array(UserSchema); -export type UserTable = zod.infer; +export type UserTableEntry = zod.infer; -const EventSchema = zod.object({ +export const EventTableEntrySchema = zod.object({ category: zod.number().int().optional(), conversation: zod.string().min(1, 'Conversation is required'), data: zod.any(), @@ -89,19 +89,18 @@ const EventSchema = zod.object({ time: zod.string(), type: zod.string().min(1, 'Type is required'), }); -export const EventTableSchema = zod.array(EventSchema); -export type EventTable = zod.infer; +export type EventTableEntry = zod.infer; export const AssetContentSchema = zod.object({ - content_length: zod.number(), + content_length: zod.string(), content_type: zod.string(), domain: zod.string().optional(), - expects_read_confirmation: zod.boolean(), info: zod.any(), key: zod.string(), - legal_hold_status: zod.number(), otr_key: zod.record(zod.string(), zod.number()), sha256: zod.record(zod.string(), zod.number()), - status: zod.string().optional(), token: zod.string().optional(), + // expects_read_confirmation: zod.boolean(), + // status: zod.string().optional(), + // legal_hold_status: zod.number(), }); diff --git a/src/script/backup/CrossPlatformBackup/importMappers/mapConversationRecord.ts b/src/script/backup/CrossPlatformBackup/importMappers/mapConversationRecord.ts index d96e0dd3a88..4cc720709dd 100644 --- a/src/script/backup/CrossPlatformBackup/importMappers/mapConversationRecord.ts +++ b/src/script/backup/CrossPlatformBackup/importMappers/mapConversationRecord.ts @@ -21,6 +21,17 @@ import {ConversationRecord} from 'src/script/storage'; import {BackUpConversation} from '../CPB.library'; -export const mapConversationRecord = ({id, name}: BackUpConversation): ConversationRecord | null => { - return null; +export const mapConversationRecord = ({id: qualifiedId, name}: BackUpConversation): ConversationRecord | null => { + if (!qualifiedId || !name) { + return null; + } + + // We dont get all the "required" fields from the backup, so we need to outsmart the type system. + // ToDO: Fix the backup to include all required fields or check if we can make them optional without breaking anything. + const conversationRecord: ConversationRecord = { + id: qualifiedId.id.toString(), + name: name.toString(), + domain: qualifiedId.domain.toString(), + } as ConversationRecord; + return conversationRecord; }; diff --git a/src/script/backup/CrossPlatformBackup/importMappers/mapEventRecord.ts b/src/script/backup/CrossPlatformBackup/importMappers/mapEventRecord.ts index 2ecf4d4db0f..d3d0aab4acc 100644 --- a/src/script/backup/CrossPlatformBackup/importMappers/mapEventRecord.ts +++ b/src/script/backup/CrossPlatformBackup/importMappers/mapEventRecord.ts @@ -121,15 +121,14 @@ const mapAssetMessageToEventRecord = (message: AssetBackupMessage): EventRecord * @returns EventRecord or undefined */ export const mapEventRecord = (message: BackupMessage): EventRecord | undefined => { - if (isTextContent(message.content)) { - return mapTextMessageToEventRecord(message as TextBackupMessage); - } - if (isAssetContent(message.content)) { - CPBLogger.log('Asset message', message); return mapAssetMessageToEventRecord(message as AssetBackupMessage); } + if (isTextContent(message.content)) { + return mapTextMessageToEventRecord(message as TextBackupMessage); + } + CPBLogger.error('Unknown message type', message); return undefined; }; diff --git a/src/script/backup/CrossPlatformBackup/importMappers/mapUserRecord.ts b/src/script/backup/CrossPlatformBackup/importMappers/mapUserRecord.ts index 2117d2b5051..505a4e880e4 100644 --- a/src/script/backup/CrossPlatformBackup/importMappers/mapUserRecord.ts +++ b/src/script/backup/CrossPlatformBackup/importMappers/mapUserRecord.ts @@ -21,6 +21,20 @@ import {UserRecord} from 'src/script/storage'; import {BackupUser} from '../CPB.library'; -export const mapUserRecord = ({id, name, handle}: BackupUser): UserRecord | null => { - return null; +export const mapUserRecord = ({id: qualifiedId, name, handle}: BackupUser): UserRecord | null => { + if (!qualifiedId || !name || !handle) { + return null; + } + // We dont get all the "required" fields from the backup, so we need to outsmart the type system. + // ToDO: Fix the backup to include all required fields or check if we can make them optional without breaking anything. + const userRecord: UserRecord = { + id: qualifiedId.id.toString(), + name: name.toString(), + handle: handle.toString(), + qualified_id: { + domain: qualifiedId.domain.toString(), + id: qualifiedId.id.toString(), + }, + } as UserRecord; + return userRecord; }; From 6794cdbd0aa050cf3cc8a24490e54dc2d2d9ba65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrian=20Wei=C3=9F?= <77456193+aweiss-dev@users.noreply.github.com> Date: Wed, 4 Dec 2024 18:35:51 +0100 Subject: [PATCH 247/329] fix(CPB): fix zod error (#18428) * fix: database is not consistent * chore: fix usage --- src/script/backup/CrossPlatformBackup/CPB.export.ts | 2 +- src/script/backup/CrossPlatformBackup/data.schema.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/script/backup/CrossPlatformBackup/CPB.export.ts b/src/script/backup/CrossPlatformBackup/CPB.export.ts index 2cc27e4ffec..da9116bdaa4 100644 --- a/src/script/backup/CrossPlatformBackup/CPB.export.ts +++ b/src/script/backup/CrossPlatformBackup/CPB.export.ts @@ -159,7 +159,7 @@ export const exportCPBHistoryFromDatabase = async ({ const asset = new BackupMessageContent.Asset( assetParseData.content_type, - Number.parseInt(assetParseData.content_length), + Number.parseInt(`${assetParseData.content_length}`), assetParseData.info.name, transformObjectToArray(assetParseData.otr_key), transformObjectToArray(assetParseData.sha256), diff --git a/src/script/backup/CrossPlatformBackup/data.schema.ts b/src/script/backup/CrossPlatformBackup/data.schema.ts index e0f3de04557..ba69afd0df6 100644 --- a/src/script/backup/CrossPlatformBackup/data.schema.ts +++ b/src/script/backup/CrossPlatformBackup/data.schema.ts @@ -92,7 +92,7 @@ export const EventTableEntrySchema = zod.object({ export type EventTableEntry = zod.infer; export const AssetContentSchema = zod.object({ - content_length: zod.string(), + content_length: zod.string().or(zod.number()), content_type: zod.string(), domain: zod.string().optional(), info: zod.any(), From d0ad6435f13923158648b0ac5c0bd639120b3259 Mon Sep 17 00:00:00 2001 From: Olaf Sulich Date: Thu, 5 Dec 2024 07:31:50 +0100 Subject: [PATCH 248/329] fix(messageRenderer): differentiate heading size by its level [WPB-11802] (#18421) * feat(messageRenderer): differentiate heading size by its level * fix(messageRenderer): tests --- src/script/util/messageRenderer.test.ts | 10 +++++----- src/script/util/messageRenderer.ts | 5 ++++- src/style/content/conversation/message-list.less | 14 +++++++++++++- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/script/util/messageRenderer.test.ts b/src/script/util/messageRenderer.test.ts index 15fadae56d8..2e19d063b06 100644 --- a/src/script/util/messageRenderer.test.ts +++ b/src/script/util/messageRenderer.test.ts @@ -553,11 +553,11 @@ describe('Markdown for code snippets', () => { }); describe('Markdown for headings', () => { - it('renders all headings the same', () => { - expect(renderMessage('# heading')).toBe('
heading
'); - expect(renderMessage('## heading')).toBe('
heading
'); - expect(renderMessage('### heading')).toBe('
heading
'); - expect(renderMessage('#### heading')).toBe('
heading
'); + it('differentiate heading size by its level', () => { + expect(renderMessage('# heading')).toBe('
heading
'); + expect(renderMessage('## heading')).toBe('
heading
'); + expect(renderMessage('### heading')).toBe('
heading
'); + expect(renderMessage('#### heading')).toBe('
heading
'); }); }); diff --git a/src/script/util/messageRenderer.ts b/src/script/util/messageRenderer.ts index 29138ac32a4..5a9097351b9 100644 --- a/src/script/util/messageRenderer.ts +++ b/src/script/util/messageRenderer.ts @@ -47,7 +47,10 @@ const markdownit = new MarkdownIt('zero', { const originalFenceRule = markdownit.renderer.rules.fence!; -markdownit.renderer.rules.heading_open = () => '
'; +markdownit.renderer.rules.heading_open = (tokens, idx) => { + const headingLevel = tokens[idx].tag.slice(1); + return `
`; +}; markdownit.renderer.rules.heading_close = () => '
'; const originalNormalizeLink = markdownit.normalizeLink!; diff --git a/src/style/content/conversation/message-list.less b/src/style/content/conversation/message-list.less index ba9de5e64d7..b25d8affd7b 100644 --- a/src/style/content/conversation/message-list.less +++ b/src/style/content/conversation/message-list.less @@ -340,10 +340,22 @@ .md-heading { margin: 4px 0 8px; - font-size: var(--font-size-large); + font-size: var(--font-size-base); font-weight: var(--font-weight-bold); line-height: var(--line-height-lg); + &--1 { + font-size: var(--font-size-xlarge); + } + + &--2 { + font-size: var(--font-size-large); + } + + &--3 { + font-size: var(--font-size-base); + } + & + br { display: none; } From 60e8e7473581b71c7a8e8f3fa5ea955d5ceca66d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrian=20Wei=C3=9F?= <77456193+aweiss-dev@users.noreply.github.com> Date: Thu, 5 Dec 2024 14:17:06 +0100 Subject: [PATCH 249/329] fix: make federated users on proteus selectable in certain situations [WPB-14458] (#18427) * fix: make federated users on proteus selectable in certain situations * fix: comments --- .../UserSearchableList/UserSearchableList.tsx | 10 +++++++--- src/script/team/TeamRepository.ts | 19 ++++++++++++++++++- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/script/components/UserSearchableList/UserSearchableList.tsx b/src/script/components/UserSearchableList/UserSearchableList.tsx index 3439a9734ce..e91d6bd4974 100644 --- a/src/script/components/UserSearchableList/UserSearchableList.tsx +++ b/src/script/components/UserSearchableList/UserSearchableList.tsx @@ -94,7 +94,7 @@ export const UserSearchableList = ({ // We shouldn't show any members that have the 'external' role and are not already locally known. const nonExternalMembers = await teamRepository.filterExternals(uniqueMembers); setRemoteTeamMembers( - filterRemoteTeamUsers ? teamRepository.filterRemoteDomainUsers(nonExternalMembers) : nonExternalMembers, + filterRemoteTeamUsers ? await teamRepository.filterRemoteDomainUsers(nonExternalMembers) : nonExternalMembers, ); }, 300), [], @@ -103,6 +103,10 @@ export const UserSearchableList = ({ // Filter all list items if a filter is provided useEffect(() => { + const setUsers = async (users: User[]) => { + setFilteredUsers(filterRemoteTeamUsers ? await teamRepository.filterRemoteDomainUsers(users) : users); + }; + const {query: normalizedQuery} = searchRepository.normalizeQuery(filter); const results = searchRepository .searchUserInSet(filter, users) @@ -119,7 +123,7 @@ export const UserSearchableList = ({ } if (!selfFirst) { - setFilteredUsers(filterRemoteTeamUsers ? teamRepository.filterRemoteDomainUsers(results) : results); + void setUsers(results); return; } @@ -127,7 +131,7 @@ export const UserSearchableList = ({ const [selfUser, otherUsers] = partition(results, user => user.isMe); const concatUsers = selfUser.concat(otherUsers); - setFilteredUsers(filterRemoteTeamUsers ? teamRepository.filterRemoteDomainUsers(concatUsers) : concatUsers); + void setUsers(concatUsers); }, [filter, users.length]); const foundUserEntities = () => { diff --git a/src/script/team/TeamRepository.ts b/src/script/team/TeamRepository.ts index 783280de791..865027b14ba 100644 --- a/src/script/team/TeamRepository.ts +++ b/src/script/team/TeamRepository.ts @@ -56,6 +56,7 @@ import {NOTIFICATION_HANDLING_STATE} from '../event/NotificationHandlingState'; import {IntegrationMapper} from '../integration/IntegrationMapper'; import {ServiceEntity} from '../integration/ServiceEntity'; import {MLSMigrationStatus, getMLSMigrationStatus} from '../mls/MLSMigration/migrationStatus'; +import {APIClient} from '../service/APIClientSingleton'; import {ROLE, ROLE as TEAM_ROLE, roleFromTeamPermissions} from '../user/UserPermission'; import {UserRepository} from '../user/UserRepository'; import {UserState} from '../user/UserState'; @@ -82,6 +83,7 @@ export class TeamRepository extends TypedEventEmitter { private readonly teamMapper: TeamMapper; private readonly userRepository: UserRepository; private readonly assetRepository: AssetRepository; + private backendSupportsMLS: boolean | null = null; constructor( userRepository: UserRepository, @@ -236,13 +238,28 @@ export class TeamRepository extends TypedEventEmitter { await this.updateTeamMembersByIds(selfTeamId, newTeamMemberIds, true); }; - filterRemoteDomainUsers(users: User[]): User[] { + public async filterRemoteDomainUsers(users: User[]): Promise { const isMLS = this.teamState.teamFeatures()?.mls?.config.defaultProtocol === ConversationProtocol.MLS; + // IF MLS is enabled, THEN return all users if (isMLS) { return users; } + const domain = this.userState.self()?.domain ?? this.teamState.teamDomain(); + const hasFederatedUsers = users.some(user => user.domain !== domain); + + if (this.backendSupportsMLS === null) { + const apiClient = container.resolve(APIClient); + this.backendSupportsMLS = await apiClient.supportsMLS(); + } + + // IF the backend does not support MLS, AND there are federated users, THEN return all users + if (!this.backendSupportsMLS && hasFederatedUsers) { + return users; + } + + // IF the backend supports MLS, AND we use the proteus protocol, THEN filter out federated users return users.filter(user => { if (user.domain !== domain) { this.logger.log(`Filtering out user ${user.id} because of domain mismatch, current protocol is not MLS`); From afae0ba39f890bc8df03367d36bf46cddb768098 Mon Sep 17 00:00:00 2001 From: Amir Ghezelbash Date: Thu, 5 Dec 2024 16:57:25 +0330 Subject: [PATCH 250/329] feat: in call hand raise (WPB-11982) (#18250) * feat: in call hand raise iteration 1 * fix broken tests * hand raise icon * fix transmit to other calls * updated types * feat: notification queue * bump config * update config * update yarn.lock * use dev lock file * hand raise animation * add support for sorting and remove extra copies * remove hand down icon * add duration * info icons * remove log * move style to file * use memo * fix crash and move class name to styles --- server/config/client.config.ts | 1 + server/config/env.ts | 3 + src/i18n/en-US.json | 5 ++ src/script/calling/Call.ts | 7 ++ src/script/calling/CallingRepository.test.ts | 3 + src/script/calling/CallingRepository.ts | 47 ++++++++++++- src/script/calling/Participant.ts | 1 + src/script/calling/enum/CallMessageType.ts | 1 + .../CallParticipantItemContent.tsx | 1 - .../CallParticipantsListItem.tsx | 6 ++ ...rticipantsListItemHandRaiseIcon.styles.tsx | 27 ++++++++ .../CallParticipantsListItemHandRaiseIcon.tsx | 60 ++++++++++++++++ .../CallingParticipantList.styles.ts | 6 ++ .../CallingParticipantList.tsx | 68 ++++++++++++++----- .../calling/CallingOverlayContainer.tsx | 5 ++ .../calling/FullscreenVideoCall.tsx | 58 +++++++++++++--- .../components/calling/GroupVideoGrid.tsx | 18 ++++- .../components/calling/GroupVideoGridTile.tsx | 4 ++ src/script/conversation/MessageRepository.ts | 6 ++ src/script/cryptography/CryptographyMapper.ts | 16 +++++ src/script/event/CallingEvent.ts | 2 + src/script/event/Client.ts | 1 + src/style/components/group-video-grid.less | 59 ++++++++++++++++ src/style/foundation/video-calling.less | 1 + src/types/i18n.d.ts | 5 ++ 25 files changed, 382 insertions(+), 29 deletions(-) create mode 100644 src/script/components/calling/CallParticipantsListItem/CallParticipantsListItemHandRaiseIcon.styles.tsx create mode 100644 src/script/components/calling/CallParticipantsListItem/CallParticipantsListItemHandRaiseIcon.tsx diff --git a/server/config/client.config.ts b/server/config/client.config.ts index c1c113bcf0b..8230538a83c 100644 --- a/server/config/client.config.ts +++ b/server/config/client.config.ts @@ -48,6 +48,7 @@ export function generateConfig(params: ConfigGeneratorParams, env: Env) { CHECK_CONSENT: env.FEATURE_CHECK_CONSENT != 'false', CONFERENCE_AUTO_MUTE: env.FEATURE_CONFERENCE_AUTO_MUTE == 'true', ENABLE_IN_CALL_REACTIONS: env.FEATURE_ENABLE_IN_CALL_REACTIONS == 'true', + ENABLE_IN_CALL_HAND_RAISE: env.FEATURE_ENABLE_IN_CALL_HAND_RAISE == 'true', ENABLE_REMOVE_GROUP_CONVERSATION: env.FEATURE_ENABLE_REMOVE_GROUP_CONVERSATION == 'true', ENABLE_DETACHED_CALLING_WINDOW: env.FEATURE_ENABLE_DETACHED_CALLING_WINDOW == 'true', ENABLE_TEAM_CREATION: env.FEATURE_ENABLE_TEAM_CREATION == 'true', diff --git a/server/config/env.ts b/server/config/env.ts index 6d3972f23d3..7103c1d4011 100644 --- a/server/config/env.ts +++ b/server/config/env.ts @@ -164,6 +164,9 @@ export type Env = { /** Feature to enable in call reactions */ FEATURE_ENABLE_IN_CALL_REACTIONS: string; + /** Feature to enable in call hand raise */ + FEATURE_ENABLE_IN_CALL_HAND_RAISE: string; + /** Feature to enable remove conversation locally */ FEATURE_ENABLE_REMOVE_GROUP_CONVERSATION: string; diff --git a/src/i18n/en-US.json b/src/i18n/en-US.json index 1f2c097c4b6..c563eaeb419 100644 --- a/src/i18n/en-US.json +++ b/src/i18n/en-US.json @@ -1603,7 +1603,12 @@ "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", diff --git a/src/script/calling/Call.ts b/src/script/calling/Call.ts index 348a7caa5b2..4446ca9b88d 100644 --- a/src/script/calling/Call.ts +++ b/src/script/calling/Call.ts @@ -49,6 +49,7 @@ export class Call { public readonly state: ko.Observable = ko.observable(CALL_STATE.UNKNOWN); public readonly muteState: ko.Observable = ko.observable(MuteState.NOT_MUTED); public readonly participants: ko.ObservableArray; + public readonly handRaisedParticipants: ko.PureComputed; public readonly selfClientId: ClientId; public readonly initialType: CALL_TYPE; public readonly isCbrEnabled: ko.Observable = ko.observable( @@ -90,6 +91,12 @@ export class Call { this.initialType = callType; this.selfClientId = selfParticipant?.clientId; this.participants = ko.observableArray([selfParticipant]); + this.handRaisedParticipants = ko.pureComputed(() => + this.participants() + .filter(participant => Boolean(participant.handRaisedAt())) + .sort((p1, p2) => p1.handRaisedAt()! - p2.handRaisedAt()!), + ); + this.activeAudioOutput = this.mediaDevicesHandler.currentAvailableDeviceId.audiooutput(); this.mediaDevicesHandler.currentAvailableDeviceId.audiooutput.subscribe((newActiveAudioOutput: string) => { this.activeAudioOutput = newActiveAudioOutput; diff --git a/src/script/calling/CallingRepository.test.ts b/src/script/calling/CallingRepository.test.ts index c06a04dc6d6..ed9fa8a3d18 100644 --- a/src/script/calling/CallingRepository.test.ts +++ b/src/script/calling/CallingRepository.test.ts @@ -144,6 +144,7 @@ describe('CallingRepository', () => { const event: CallingEvent = { content: { emojis: {}, + isHandUp: false, type: CALL_MESSAGE_TYPE.REMOTE_MUTE, version: '', data: {targets: {[selfUserId.domain]: {[selfUserId.id]: [selfClientId]}}}, @@ -189,6 +190,7 @@ describe('CallingRepository', () => { const event: CallingEvent = { content: { emojis: {}, + isHandUp: false, type: CALL_MESSAGE_TYPE.REMOTE_MUTE, version: '', data: {targets: {[selfUserId.domain]: {[selfUserId.id]: [selfClientId]}}}, @@ -236,6 +238,7 @@ describe('CallingRepository', () => { const event: CallingEvent = { content: { emojis: {}, + isHandUp: false, type: CALL_MESSAGE_TYPE.REMOTE_MUTE, version: '', data: {targets: {[selfUserId.domain]: {[selfUserId.id]: [someOtherClientId]}}}, diff --git a/src/script/calling/CallingRepository.ts b/src/script/calling/CallingRepository.ts index 212fcdbaae1..3c6e24db4a3 100644 --- a/src/script/calling/CallingRepository.ts +++ b/src/script/calling/CallingRepository.ts @@ -728,7 +728,7 @@ export class CallingRepository { return; } - const {content, qualified_conversation, from, qualified_from} = event; + const {content, qualified_conversation, from, qualified_from, time} = event; const isFederated = this.core.backendFeatures.isFederated && qualified_conversation && qualified_from; const userId = isFederated ? qualified_from : {domain: '', id: from}; const conversationId = this.extractTargetedConversationId(event); @@ -738,6 +738,7 @@ export class CallingRepository { this.logger.warn(`Unable to find a conversation with id of ${conversationId.id}@${conversationId.domain}`); return; } + switch (content.type) { case CALL_MESSAGE_TYPE.CONFKEY: { if (source !== EventRepository.SOURCE.STREAM) { @@ -830,6 +831,46 @@ export class CallingRepository { break; } + case CALL_MESSAGE_TYPE.HAND_RAISED: { + const currentCall = this.callState.joinedCall(); + if ( + !currentCall || + !matchQualifiedIds(currentCall.conversation.qualifiedId, conversationId) || + !this.selfUser + ) { + this.logger.info('Ignored hand raise event because no active call was found'); + return; + } + + const participant = currentCall + .participants() + .find(participant => matchQualifiedIds(participant.user.qualifiedId, userId)); + + if (!participant) { + this.logger.info('Ignored hand raise event because no active participant was found'); + return; + } + + const isSelf = matchQualifiedIds(this.selfUser.qualifiedId, userId); + + const {isHandUp} = content; + const handRaisedAt = time ? new Date(time).getTime() : new Date().getTime(); + participant.handRaisedAt(isHandUp ? handRaisedAt : null); + + if (!isHandUp) { + break; + } + + const name = participant.user.name(); + const handUpMessage = isSelf + ? t('videoCallParticipantRaisedSelfHandUp') + : t('videoCallParticipantRaisedTheirHandUp', {name}); + + showAppNotification(handUpMessage); + + break; + } + case CALL_MESSAGE_TYPE.REMOTE_KICK: { this.leaveCall(conversationId, LEAVE_CALL_REASON.REMOTE_KICK); return this.processCallingMessage(conversation, event); @@ -1680,6 +1721,10 @@ export class CallingRepository { }); }; + readonly sendInCallHandRaised = async (isHandUp: boolean, call: Call) => { + void this.messageRepository.sendInCallHandRaised(call.conversation, isHandUp); + }; + readonly sendModeratorMute = (conversationId: QualifiedId, participants: Participant[]) => { const recipients = this.convertParticipantsToCallingMessageRecepients(participants); void this.sendCallingMessage( diff --git a/src/script/calling/Participant.ts b/src/script/calling/Participant.ts index 0a6165e703c..8f6d56a707e 100644 --- a/src/script/calling/Participant.ts +++ b/src/script/calling/Participant.ts @@ -49,6 +49,7 @@ export class Participant { // Audio public readonly audioStream = observable(); public readonly isMuted = observable(false); + public readonly handRaisedAt = observable(null); constructor( public readonly user: User, diff --git a/src/script/calling/enum/CallMessageType.ts b/src/script/calling/enum/CallMessageType.ts index c14af64abe2..5a3ae15959c 100644 --- a/src/script/calling/enum/CallMessageType.ts +++ b/src/script/calling/enum/CallMessageType.ts @@ -31,6 +31,7 @@ export enum CALL_MESSAGE_TYPE { REJECT = 'REJECT', REMOTE_KICK = 'REMOTEKICK', EMOJIS = 'EMOJIS', + HAND_RAISED = 'HANDRAISED', REMOTE_MUTE = 'REMOTEMUTE', SETUP = 'SETUP', UPDATE = 'UPDATE', diff --git a/src/script/components/calling/CallParticipantsListItem/CallParticipantItemContent/CallParticipantItemContent.tsx b/src/script/components/calling/CallParticipantsListItem/CallParticipantItemContent/CallParticipantItemContent.tsx index d90b1dc7ad8..2e51b2a713f 100644 --- a/src/script/components/calling/CallParticipantsListItem/CallParticipantItemContent/CallParticipantItemContent.tsx +++ b/src/script/components/calling/CallParticipantsListItem/CallParticipantItemContent/CallParticipantItemContent.tsx @@ -58,7 +58,6 @@ export const CallParticipantItemContent = ({
- {isSelf &&
{selfString}
} {isAudioEstablished && showContextMenu && (
+ } + data-uie-name="hand-raised-at" + > + ✋ + + + ); +} diff --git a/src/script/components/calling/CallingCell/CallIngParticipantList/CallingParticipantList.styles.ts b/src/script/components/calling/CallingCell/CallIngParticipantList/CallingParticipantList.styles.ts index 7f81989fe88..1144e6cbfd4 100644 --- a/src/script/components/calling/CallingCell/CallIngParticipantList/CallingParticipantList.styles.ts +++ b/src/script/components/calling/CallingCell/CallIngParticipantList/CallingParticipantList.styles.ts @@ -23,3 +23,9 @@ export const labelStyles: CSSObject = { padding: '12px 10px', fontWeight: 'var(--font-weight-semibold)', }; + +export const labelWithIconStyles: CSSObject = { + ...labelStyles, + display: 'flex', + justifyContent: 'space-between', +}; diff --git a/src/script/components/calling/CallingCell/CallIngParticipantList/CallingParticipantList.tsx b/src/script/components/calling/CallingCell/CallIngParticipantList/CallingParticipantList.tsx index 22e75150b75..65f31864bfc 100644 --- a/src/script/components/calling/CallingCell/CallIngParticipantList/CallingParticipantList.tsx +++ b/src/script/components/calling/CallingCell/CallIngParticipantList/CallingParticipantList.tsx @@ -17,17 +17,19 @@ * */ -import React from 'react'; +import React, {useMemo} from 'react'; import cx from 'classnames'; +import {Tooltip} from '@wireapp/react-ui-kit'; + import {CallParticipantsListItem} from 'Components/calling/CallParticipantsListItem'; import {FadingScrollbar} from 'Components/FadingScrollbar'; import * as Icon from 'Components/Icon'; import {t} from 'Util/LocalizerUtil'; import {sortUsersByPriority} from 'Util/StringUtil'; -import {labelStyles} from './CallingParticipantList.styles'; +import {labelStyles, labelWithIconStyles} from './CallingParticipantList.styles'; import {CallingRepository} from '../../../../calling/CallingRepository'; import {Participant} from '../../../../calling/Participant'; @@ -40,6 +42,7 @@ interface CallingParticipantListProps { isModerator?: boolean; isSelfVerified?: boolean; participants: Participant[]; + handRaisedParticipants: Participant[]; showParticipants?: boolean; } @@ -49,6 +52,7 @@ export const CallingParticipantList = ({ isModerator, isSelfVerified, participants, + handRaisedParticipants, showParticipants, }: CallingParticipantListProps) => { const getParticipantContext = (event: React.MouseEvent, participant: Participant) => { @@ -78,30 +82,58 @@ export const CallingParticipantList = ({ showContextMenu({event, entries, identifier: 'participant-moderator-menu'}); }; + const participantsList = useMemo(() => { + return participants + .slice() + .sort((participantA, participantB) => sortUsersByPriority(participantA.user, participantB.user)); + }, [participants]); + return (
-

{t('videoCallOverlayParticipantsListLabel', {count: participants.length})}

+ {handRaisedParticipants.length > 0 && ( + <> +

+ {t('videoCallOverlayParticipantsRaisedHandListLabel', {count: handRaisedParticipants.length})} + + + +

+
    + {handRaisedParticipants.map((participant, index, participantsArray) => ( +
  • + getParticipantContext(event, participant)} + isLast={participantsArray.length === index} + /> +
  • + ))} +
+ + )} +

{t('videoCallOverlayParticipantsListLabel', {count: participants.length})}

    - {participants - .slice() - .sort((participantA, participantB) => sortUsersByPriority(participantA.user, participantB.user)) - .map((participant, index, participantsArray) => ( -
  • - getParticipantContext(event, participant)} - isLast={participantsArray.length === index} - /> -
  • - ))} + {participantsList.map((participant, index, participantsArray) => ( +
  • + getParticipantContext(event, participant)} + isLast={participantsArray.length === index} + /> +
  • + ))}
diff --git a/src/script/components/calling/CallingOverlayContainer.tsx b/src/script/components/calling/CallingOverlayContainer.tsx index ad3c7add5ab..8a0884f101a 100644 --- a/src/script/components/calling/CallingOverlayContainer.tsx +++ b/src/script/components/calling/CallingOverlayContainer.tsx @@ -114,6 +114,10 @@ const CallingContainer: React.FC = ({ void callingRepository.sendInCallEmoji(emoji, call); }; + const sendHandRaised = (isHandUp: boolean, call: Call) => { + void callingRepository.sendInCallHandRaised(isHandUp, call); + }; + const switchSpeakerOutput = (deviceId: string) => { mediaDevicesHandler.currentDeviceId.audiooutput(deviceId); }; @@ -152,6 +156,7 @@ const CallingContainer: React.FC = ({ muteState={muteState} isChoosingScreen={isScreenshareActive} sendEmoji={sendEmoji} + sendHandRaised={sendHandRaised} switchCameraInput={switchCameraInput} switchMicrophoneInput={switchMicrophoneInput} switchSpeakerOutput={switchSpeakerOutput} diff --git a/src/script/components/calling/FullscreenVideoCall.tsx b/src/script/components/calling/FullscreenVideoCall.tsx index ddfc73058ba..6184f395e0d 100644 --- a/src/script/components/calling/FullscreenVideoCall.tsx +++ b/src/script/components/calling/FullscreenVideoCall.tsx @@ -21,7 +21,6 @@ import React, {useEffect, useRef, useState} from 'react'; import {DefaultConversationRoleName} from '@wireapp/api-client/lib/conversation/'; import {TabIndex} from '@wireapp/react-ui-kit/lib/types/enums'; -import classNames from 'classnames'; import cx from 'classnames'; import {container} from 'tsyringe'; @@ -34,6 +33,7 @@ import { IconButton, IconButtonVariant, Select, + RaiseHandIcon, } from '@wireapp/react-ui-kit'; import {useCallAlertState} from 'Components/calling/useCallAlertState'; @@ -109,6 +109,7 @@ export interface FullscreenVideoCallProps { toggleMute: (call: Call, muteState: boolean) => void; toggleScreenshare: (call: Call) => void; sendEmoji: (emoji: string, call: Call) => void; + sendHandRaised: (isHandUp: boolean, call: Call) => void; videoGrid: Grid; } @@ -140,6 +141,7 @@ const FullscreenVideoCall: React.FC = ({ toggleScreenshare, leave, changePage, + sendHandRaised, teamState = container.resolve(TeamState), callState = container.resolve(CallState), }) => { @@ -169,8 +171,19 @@ const FullscreenVideoCall: React.FC = ({ pages: callPages, startedAt, participants, - } = useKoSubscribableChildren(call, ['activeSpeakers', 'currentPage', 'pages', 'startedAt', 'participants']); - const {display_name: conversationName} = useKoSubscribableChildren(conversation, ['display_name']); + handRaisedParticipants, + } = useKoSubscribableChildren(call, [ + 'activeSpeakers', + 'currentPage', + 'pages', + 'startedAt', + 'participants', + 'handRaisedParticipants', + ]); + const {display_name: conversationName, is1to1: is1to1Conversation} = useKoSubscribableChildren(conversation, [ + 'display_name', + 'is1to1', + ]); const {isVideoCallingEnabled, classifiedDomains} = useKoSubscribableChildren(teamState, [ 'isVideoCallingEnabled', 'classifiedDomains', @@ -216,8 +229,14 @@ const FullscreenVideoCall: React.FC = ({ }; const openPopup = () => callingRepository.setViewModeDetached(); - const [isParticipantsListOpen, toggleParticipantsList] = useToggleState(false); const [isCallViewOpen, toggleCallView] = useToggleState(false); + const [isHandRaised, setIsHandRaised] = useState(false); + const [isParticipantsListOpen, toggleParticipantsList] = useToggleState(false); + + function toggleIsHandRaised(currentIsHandRaised: boolean) { + setIsHandRaised(!currentIsHandRaised); + sendHandRaised(!currentIsHandRaised, call); + } useEffect(() => { const onKeyDown = (event: KeyboardEvent): void => { @@ -767,7 +786,7 @@ const FullscreenVideoCall: React.FC = ({ toggleCallView(); } }} - className={classNames('video-controls__button_primary', {active: isCallViewOpen})} + className={cx('video-controls__button_primary', {active: isCallViewOpen})} onClick={toggleCallView} onKeyDown={event => handleKeyDown(event, toggleCallView)} type="button" @@ -806,6 +825,28 @@ const FullscreenVideoCall: React.FC = ({ )} + {Config.getConfig().FEATURE.ENABLE_IN_CALL_HAND_RAISE && !is1to1Conversation && ( +
  • + +
  • + )} + {Config.getConfig().FEATURE.ENABLE_IN_CALL_REACTIONS && (
  • {showEmojisBar && ( @@ -826,7 +867,7 @@ const FullscreenVideoCall: React.FC = ({ key={emoji} disabled={isDisabled} onClick={() => onEmojiClick(emoji)} - className={classNames({disabled: isDisabled})} + className={cx({disabled: isDisabled})} > {emoji} @@ -837,7 +878,7 @@ const FullscreenVideoCall: React.FC = ({
  • {isParticipantsListOpen && ( = ({ setRowsAndColumns(calculateRowsAndColumns(participants.length)); }, [participants.length]); - const {isMuted: selfIsMuted} = useKoSubscribableChildren(selfParticipant, ['isMuted']); + const {isMuted: selfIsMuted, handRaisedAt: selfHandRaisedAt} = useKoSubscribableChildren(selfParticipant, [ + 'isMuted', + 'handRaisedAt', + ]); return (
    @@ -185,6 +188,11 @@ const GroupVideoGrid: React.FunctionComponent = ({ )} + {selfHandRaisedAt && !minimized && ( + + ✋ + + )} )} {!!grid.thumbnail && !thumbnail.hasActiveVideo && !!selfParticipant && ( @@ -203,6 +211,14 @@ const GroupVideoGrid: React.FunctionComponent = ({ )} + {selfHandRaisedAt && !minimized && ( + + ✋ + + )} = ({ const { isMuted, videoState, + handRaisedAt, videoStream, blurredVideoStream, isActivelySpeaking, @@ -79,6 +80,7 @@ const GroupVideoGridTile: React.FC = ({ isSwitchingVideoResolution, } = useKoSubscribableChildren(participant, [ 'isMuted', + 'handRaisedAt', 'videoStream', 'blurredVideoStream', 'isActivelySpeaking', @@ -214,6 +216,8 @@ const GroupVideoGridTile: React.FC = ({ )} + {!minimized && handRaisedAt && } + {isMaximized && (
    {t('videoCallOverlayFitVideoLabelGoBack')} diff --git a/src/script/conversation/MessageRepository.ts b/src/script/conversation/MessageRepository.ts index 53d2c30e36a..3fb9bbae5c2 100644 --- a/src/script/conversation/MessageRepository.ts +++ b/src/script/conversation/MessageRepository.ts @@ -1044,6 +1044,12 @@ export class MessageRepository { return this.sendAndInjectMessage(emojisMessage, conversation); } + public async sendInCallHandRaised(conversation: Conversation, isHandUp: boolean) { + const handRaiseMessage = MessageBuilder.buildInCallHandRaiseMessage({isHandUp: isHandUp}); + + return this.sendAndInjectMessage(handRaiseMessage, conversation); + } + private expectReadReceipt(conversationEntity: Conversation): boolean { if (conversationEntity.is1to1()) { return !!this.propertyRepository.receiptMode(); diff --git a/src/script/cryptography/CryptographyMapper.ts b/src/script/cryptography/CryptographyMapper.ts index 38a98b2aa9e..68e2a6b2967 100644 --- a/src/script/cryptography/CryptographyMapper.ts +++ b/src/script/cryptography/CryptographyMapper.ts @@ -50,6 +50,7 @@ import { Reaction, Text, InCallEmoji, + InCallHandRaise, } from '@wireapp/protocol-messaging'; import {CALL_MESSAGE_TYPE} from 'src/script/calling/enum/CallMessageType'; @@ -221,6 +222,11 @@ export class CryptographyMapper { break; } + case GenericMessageType.IN_CALL_HAND_RAISE: { + specificContent = this._mapInCallHandRaise(genericMessage.inCallHandRaise as InCallHandRaise); + break; + } + case GenericMessageType.TEXT: { const mappedText = this._mapText(genericMessage.text as Text); specificContent = addMetadata(mappedText, genericMessage.text); @@ -565,6 +571,16 @@ export class CryptographyMapper { }; } + private _mapInCallHandRaise(handRaise: InCallHandRaise) { + return { + content: { + isHandUp: handRaise.isHandUp, + type: CALL_MESSAGE_TYPE.HAND_RAISED, + }, + type: ClientEvent.CALL.IN_CALL_HAND_RAISE, + }; + } + private _mapText(text: Text): MappedText { const {mentions: protoMentions, quote: protoQuote} = text; diff --git a/src/script/event/CallingEvent.ts b/src/script/event/CallingEvent.ts index 04d9486a536..570aa0c6921 100644 --- a/src/script/event/CallingEvent.ts +++ b/src/script/event/CallingEvent.ts @@ -32,6 +32,7 @@ interface CallingRemoteMuteEventContentData { interface CallingEventContentData { [CALL_MESSAGE_TYPE.REMOTE_MUTE]: CallingRemoteMuteEventContentData; [CALL_MESSAGE_TYPE.EMOJIS]: {}; + [CALL_MESSAGE_TYPE.HAND_RAISED]: {}; } type CallingEventContent = { @@ -41,6 +42,7 @@ type CallingEventContent = { version: string; data: CallingEventContentData[EventType]; emojis: InCallEmojiType; + isHandUp: boolean; } : {type: EventType; version: string}; }[CALL_MESSAGE_TYPE]; diff --git a/src/script/event/Client.ts b/src/script/event/Client.ts index 68dc6fd1246..d4c86b67ee7 100644 --- a/src/script/event/Client.ts +++ b/src/script/event/Client.ts @@ -20,6 +20,7 @@ export enum CALL { E_CALL = 'call.e-call', IN_CALL_EMOJI = 'call.in-call-emoji', + IN_CALL_HAND_RAISE = 'call.in-call-hand-raise', } export enum CONVERSATION { diff --git a/src/style/components/group-video-grid.less b/src/style/components/group-video-grid.less index 0a00d1d849c..10f8b643c50 100644 --- a/src/style/components/group-video-grid.less +++ b/src/style/components/group-video-grid.less @@ -122,6 +122,7 @@ &:hover { opacity: 1; } + &__label { .label-small-medium; position: absolute; @@ -132,6 +133,17 @@ background-color: var(--accent-color); color: var(--app-bg-secondary); } + + &__hand_raise_icon { + .label-small-medium; + position: absolute; + top: 7px; + right: 7px; + padding: 5px 10px; + border-radius: 6px; + background-color: var(--accent-color); + color: var(--app-bg-secondary); + } } &--empty { @@ -184,6 +196,53 @@ } } + &__hand_icon { + position: absolute; + top: 10px; + left: 10px; + + display: inline-block; + animation: + raise 0.5s ease-in-out, + shake 1s ease-in-out 0.5s; + animation-fill-mode: forwards; + font-size: 1.5rem; + + @keyframes raise { + 0% { + opacity: 0; + transform: translateY(10px); + } + + 100% { + transform: translateY(0); + } + } + + @keyframes shake { + 0% { + transform: rotate(0deg); + } + 25% { + transform: rotate(-10deg); + } + 50% { + transform: rotate(10deg); + } + 75% { + transform: rotate(-10deg); + } + 100% { + transform: rotate(0deg); + } + } + } + + &__hand_icon.small { + top: 12px; + font-size: 1.2rem; + } + &__name { overflow: hidden; text-overflow: ellipsis; diff --git a/src/style/foundation/video-calling.less b/src/style/foundation/video-calling.less index 78ebdbdbe50..c6dcde3c939 100644 --- a/src/style/foundation/video-calling.less +++ b/src/style/foundation/video-calling.less @@ -212,6 +212,7 @@ } &__button_primary { + position: relative; .button-icon-primary; } diff --git a/src/types/i18n.d.ts b/src/types/i18n.d.ts index f80a9258b5d..d623c30a802 100644 --- a/src/types/i18n.d.ts +++ b/src/types/i18n.d.ts @@ -1607,7 +1607,12 @@ declare module 'I18n/en-US.json' { 'videoCallOverlayMicrophone': `Microphone`; 'videoCallOverlayOpenFullScreen': `Open the call in full screen`; 'videoCallOverlayOpenPopupWindow': `Open in a new window`; + 'videoCallOverlayParticipantsRaisedHandListLabel': `Hand raised ({count})`; 'videoCallOverlayParticipantsListLabel': `Participants ({count})`; + 'videoCallParticipantRaisedTheirHandUp': `{name} has raised their hand up`; + 'videoCallParticipantRaisedSortByTime': `Person waiting the longest is on the top of the list.`; + 'videoCallParticipantRaisedHandRaiseDuration': `Hand raised for {duration}`; + 'videoCallParticipantRaisedSelfHandUp': `You have raised your hand up`; 'videoCallOverlayShareScreen': `Share Screen`; 'videoCallOverlayShowParticipantsList': `Show participants list`; 'videoCallOverlayViewModeAll': `Show all participants`; From 1c8fef5a4aa2f21d572fe668f8b7a24c8521be20 Mon Sep 17 00:00:00 2001 From: Otto the Bot Date: Thu, 5 Dec 2024 14:34:36 +0100 Subject: [PATCH 251/329] chore: Update translations (#18430) --- src/i18n/ar-SA.json | 5 +++++ src/i18n/bn-BD.json | 5 +++++ src/i18n/ca-ES.json | 5 +++++ src/i18n/cs-CZ.json | 5 +++++ src/i18n/da-DK.json | 5 +++++ src/i18n/de-DE.json | 5 +++++ src/i18n/el-GR.json | 5 +++++ src/i18n/en-US.json | 10 +++++----- src/i18n/es-ES.json | 5 +++++ src/i18n/et-EE.json | 5 +++++ src/i18n/fa-IR.json | 5 +++++ src/i18n/fi-FI.json | 5 +++++ src/i18n/fr-FR.json | 5 +++++ src/i18n/ga-IE.json | 5 +++++ src/i18n/he-IL.json | 5 +++++ src/i18n/hi-IN.json | 5 +++++ src/i18n/hr-HR.json | 5 +++++ src/i18n/hu-HU.json | 5 +++++ src/i18n/id-ID.json | 5 +++++ src/i18n/is-IS.json | 5 +++++ src/i18n/it-IT.json | 5 +++++ src/i18n/ja-JP.json | 5 +++++ src/i18n/lt-LT.json | 5 +++++ src/i18n/lv-LV.json | 5 +++++ src/i18n/ms-MY.json | 5 +++++ src/i18n/nl-NL.json | 5 +++++ src/i18n/no-NO.json | 5 +++++ src/i18n/pl-PL.json | 5 +++++ src/i18n/pt-BR.json | 5 +++++ src/i18n/pt-PT.json | 5 +++++ src/i18n/ro-RO.json | 5 +++++ src/i18n/ru-RU.json | 5 +++++ src/i18n/si-LK.json | 5 +++++ src/i18n/sk-SK.json | 5 +++++ src/i18n/sl-SI.json | 5 +++++ src/i18n/sr-SP.json | 5 +++++ src/i18n/sv-SE.json | 5 +++++ src/i18n/th-TH.json | 5 +++++ src/i18n/tr-TR.json | 5 +++++ src/i18n/uk-UA.json | 5 +++++ src/i18n/uz-UZ.json | 5 +++++ src/i18n/vi-VN.json | 5 +++++ src/i18n/zh-CN.json | 5 +++++ src/i18n/zh-HK.json | 5 +++++ src/i18n/zh-TW.json | 5 +++++ 45 files changed, 225 insertions(+), 5 deletions(-) diff --git a/src/i18n/ar-SA.json b/src/i18n/ar-SA.json index fbe5f59cffa..0225a666e7f 100644 --- a/src/i18n/ar-SA.json +++ b/src/i18n/ar-SA.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "مشاركه الشاشه", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "تم إيقاف الفيديو مؤقتاً", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/bn-BD.json b/src/i18n/bn-BD.json index 1f2c097c4b6..6ec69c6a168 100644 --- a/src/i18n/bn-BD.json +++ b/src/i18n/bn-BD.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "Video paused", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/ca-ES.json b/src/i18n/ca-ES.json index 1f2c097c4b6..6ec69c6a168 100644 --- a/src/i18n/ca-ES.json +++ b/src/i18n/ca-ES.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "Video paused", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/cs-CZ.json b/src/i18n/cs-CZ.json index 900f7001769..d247ef5b099 100644 --- a/src/i18n/cs-CZ.json +++ b/src/i18n/cs-CZ.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "Video paused", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/da-DK.json b/src/i18n/da-DK.json index ccbc53505a7..e1845f10eed 100644 --- a/src/i18n/da-DK.json +++ b/src/i18n/da-DK.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "Video paused", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/de-DE.json b/src/i18n/de-DE.json index 230df96f20a..29e03121abe 100644 --- a/src/i18n/de-DE.json +++ b/src/i18n/de-DE.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "In neuem Fenster öffnen", "videoCallOverlayParticipantsListLabel": "Teilnehmer ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "Bildschirm teilen", "videoCallOverlayShowParticipantsList": "Teilnehmerliste anzeigen", "videoCallOverlayViewModeAll": "Alle Teilnehmer anzeigen", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Nur aktive Sprecher anzeigen", "videoCallParticipantConnecting": "Verbinden…", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "Video wurde angehalten", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/el-GR.json b/src/i18n/el-GR.json index 3448c291e22..dac9fe6cf9e 100644 --- a/src/i18n/el-GR.json +++ b/src/i18n/el-GR.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "Video paused", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/en-US.json b/src/i18n/en-US.json index c563eaeb419..6ec69c6a168 100644 --- a/src/i18n/en-US.json +++ b/src/i18n/en-US.json @@ -1603,18 +1603,18 @@ "videoCallOverlayMicrophone": "Microphone", "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", - "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayParticipantsListLabel": "Participants ({count})", - "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", - "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", - "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", - "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "Video paused", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/es-ES.json b/src/i18n/es-ES.json index 15218317d73..81f30dd5f9e 100644 --- a/src/i18n/es-ES.json +++ b/src/i18n/es-ES.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "Compartir pantalla", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "Video pausado", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/et-EE.json b/src/i18n/et-EE.json index 4352f1efc58..93513884089 100644 --- a/src/i18n/et-EE.json +++ b/src/i18n/et-EE.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "Jaga ekraani", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "Video pausil", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/fa-IR.json b/src/i18n/fa-IR.json index 0229dce3638..d3a08cfca92 100644 --- a/src/i18n/fa-IR.json +++ b/src/i18n/fa-IR.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "Video paused", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/fi-FI.json b/src/i18n/fi-FI.json index a406f8cb381..00e9ab3254c 100644 --- a/src/i18n/fi-FI.json +++ b/src/i18n/fi-FI.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "Video paused", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/fr-FR.json b/src/i18n/fr-FR.json index 5c8feb1f984..54adc579e5e 100644 --- a/src/i18n/fr-FR.json +++ b/src/i18n/fr-FR.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "Partager l’Écran", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "Vidéo en pause", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/ga-IE.json b/src/i18n/ga-IE.json index 1f2c097c4b6..6ec69c6a168 100644 --- a/src/i18n/ga-IE.json +++ b/src/i18n/ga-IE.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "Video paused", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/he-IL.json b/src/i18n/he-IL.json index 1f2c097c4b6..6ec69c6a168 100644 --- a/src/i18n/he-IL.json +++ b/src/i18n/he-IL.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "Video paused", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/hi-IN.json b/src/i18n/hi-IN.json index 666d37a0ab0..67349f958e9 100644 --- a/src/i18n/hi-IN.json +++ b/src/i18n/hi-IN.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "Video paused", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/hr-HR.json b/src/i18n/hr-HR.json index c1c2afd66bd..3629927da94 100644 --- a/src/i18n/hr-HR.json +++ b/src/i18n/hr-HR.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "Dijeljenje ekrana", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "Video pauziran", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/hu-HU.json b/src/i18n/hu-HU.json index 26e524f2bcd..a7641c8b226 100644 --- a/src/i18n/hu-HU.json +++ b/src/i18n/hu-HU.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "Képernyő megosztása", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "Videó szüneteltetve", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/id-ID.json b/src/i18n/id-ID.json index 0330859c47d..9cc3ee92d66 100644 --- a/src/i18n/id-ID.json +++ b/src/i18n/id-ID.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "Video paused", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/is-IS.json b/src/i18n/is-IS.json index 1f2c097c4b6..6ec69c6a168 100644 --- a/src/i18n/is-IS.json +++ b/src/i18n/is-IS.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "Video paused", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/it-IT.json b/src/i18n/it-IT.json index ecb9d961025..da0ee958f92 100644 --- a/src/i18n/it-IT.json +++ b/src/i18n/it-IT.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "Condividi schermo", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "Video in pausa", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/ja-JP.json b/src/i18n/ja-JP.json index 55eef42a611..c5c988480aa 100644 --- a/src/i18n/ja-JP.json +++ b/src/i18n/ja-JP.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "画面共有", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "ビデオ停止中", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/lt-LT.json b/src/i18n/lt-LT.json index c99c3d329c9..5cff6694ecd 100644 --- a/src/i18n/lt-LT.json +++ b/src/i18n/lt-LT.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "Siųsti ekrano vaizdą", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "Vaizdas pristabdytas", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/lv-LV.json b/src/i18n/lv-LV.json index 7f2a0c0259b..2cb9f0fb732 100644 --- a/src/i18n/lv-LV.json +++ b/src/i18n/lv-LV.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "Video paused", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/ms-MY.json b/src/i18n/ms-MY.json index 1f2c097c4b6..6ec69c6a168 100644 --- a/src/i18n/ms-MY.json +++ b/src/i18n/ms-MY.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "Video paused", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/nl-NL.json b/src/i18n/nl-NL.json index 422b3cfb8a5..1ca96aa1d77 100644 --- a/src/i18n/nl-NL.json +++ b/src/i18n/nl-NL.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "Video paused", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/no-NO.json b/src/i18n/no-NO.json index 953e9bd617d..c067f2fd23d 100644 --- a/src/i18n/no-NO.json +++ b/src/i18n/no-NO.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "Del skjerm", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "Video pauset", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/pl-PL.json b/src/i18n/pl-PL.json index 4d84da37b4b..d763382104a 100644 --- a/src/i18n/pl-PL.json +++ b/src/i18n/pl-PL.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "Video paused", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/pt-BR.json b/src/i18n/pt-BR.json index db3c044140d..eb496ce1d66 100644 --- a/src/i18n/pt-BR.json +++ b/src/i18n/pt-BR.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "Compartilhar tela", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Conectando...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "Vídeo pausado", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/pt-PT.json b/src/i18n/pt-PT.json index 9af0db9ae3c..a7b0b7ac3fd 100644 --- a/src/i18n/pt-PT.json +++ b/src/i18n/pt-PT.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "Video paused", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/ro-RO.json b/src/i18n/ro-RO.json index 88897bbf1d8..84573d63f79 100644 --- a/src/i18n/ro-RO.json +++ b/src/i18n/ro-RO.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "Video paused", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/ru-RU.json b/src/i18n/ru-RU.json index b8d5ec367b4..a91dd6fc0be 100644 --- a/src/i18n/ru-RU.json +++ b/src/i18n/ru-RU.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Открыть вызов в полноэкранном режиме", "videoCallOverlayOpenPopupWindow": "Открыть в новом окне", "videoCallOverlayParticipantsListLabel": "Участники ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "Поделиться экраном", "videoCallOverlayShowParticipantsList": "Показать список участников", "videoCallOverlayViewModeAll": "Показать всех участников", "videoCallOverlayViewModeLabel": "Режим просмотра", "videoCallOverlayViewModeSpeakers": "Показывать только активных спикеров", "videoCallParticipantConnecting": "Подключение...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "Видео приостановлено", "videoCallScreenShareEndConfirm": "Завершить совместное использование экрана", "videoCallScreenShareEndConfirmDescription": "Если свернуть окно, совместное использование экрана завершится.", diff --git a/src/i18n/si-LK.json b/src/i18n/si-LK.json index e7f5b89576c..4554d9d5905 100644 --- a/src/i18n/si-LK.json +++ b/src/i18n/si-LK.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "තිරය බෙදාගන්න", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "සම්බන්ධ වෙමින්...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "දෘශ්‍ය විරාමයකි", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/sk-SK.json b/src/i18n/sk-SK.json index eaa5d9a08a4..2d984ec4b59 100644 --- a/src/i18n/sk-SK.json +++ b/src/i18n/sk-SK.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "Video paused", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/sl-SI.json b/src/i18n/sl-SI.json index 1d1b532357c..cdcf971cc63 100644 --- a/src/i18n/sl-SI.json +++ b/src/i18n/sl-SI.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "Video paused", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/sr-SP.json b/src/i18n/sr-SP.json index fbdddff574e..9516591a663 100644 --- a/src/i18n/sr-SP.json +++ b/src/i18n/sr-SP.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "Подели екран", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "Видео је паузиран", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/sv-SE.json b/src/i18n/sv-SE.json index e2abf11cb03..bcd4124d061 100644 --- a/src/i18n/sv-SE.json +++ b/src/i18n/sv-SE.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Öppna i ett nytt fönster", "videoCallOverlayParticipantsListLabel": "Deltagare ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "Dela skärm", "videoCallOverlayShowParticipantsList": "Visa deltagarlista", "videoCallOverlayViewModeAll": "Visa alla deltagare", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "Klippet pausades", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/th-TH.json b/src/i18n/th-TH.json index 1f2c097c4b6..6ec69c6a168 100644 --- a/src/i18n/th-TH.json +++ b/src/i18n/th-TH.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "Video paused", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/tr-TR.json b/src/i18n/tr-TR.json index 5f6944a9e0b..923b0f18cfe 100644 --- a/src/i18n/tr-TR.json +++ b/src/i18n/tr-TR.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "Ekran Paylaşımı", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "Video duraklatıldı", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/uk-UA.json b/src/i18n/uk-UA.json index c55e12ec8c4..9e05929adb5 100644 --- a/src/i18n/uk-UA.json +++ b/src/i18n/uk-UA.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "Показати свій екран", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "Відео призупинене", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/uz-UZ.json b/src/i18n/uz-UZ.json index 1f2c097c4b6..6ec69c6a168 100644 --- a/src/i18n/uz-UZ.json +++ b/src/i18n/uz-UZ.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "Video paused", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/vi-VN.json b/src/i18n/vi-VN.json index 1f2c097c4b6..6ec69c6a168 100644 --- a/src/i18n/vi-VN.json +++ b/src/i18n/vi-VN.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "Video paused", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/zh-CN.json b/src/i18n/zh-CN.json index 239010f930b..661576e4d08 100644 --- a/src/i18n/zh-CN.json +++ b/src/i18n/zh-CN.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "分享屏幕", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "视频已暂停", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/zh-HK.json b/src/i18n/zh-HK.json index 1f2c097c4b6..6ec69c6a168 100644 --- a/src/i18n/zh-HK.json +++ b/src/i18n/zh-HK.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "Video paused", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", diff --git a/src/i18n/zh-TW.json b/src/i18n/zh-TW.json index 88c75f67a5e..a751c682fda 100644 --- a/src/i18n/zh-TW.json +++ b/src/i18n/zh-TW.json @@ -1604,12 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Open the call in full screen", "videoCallOverlayOpenPopupWindow": "Open in a new window", "videoCallOverlayParticipantsListLabel": "Participants ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", "videoCallOverlayShareScreen": "Share Screen", "videoCallOverlayShowParticipantsList": "Show participants list", "videoCallOverlayViewModeAll": "Show all participants", "videoCallOverlayViewModeLabel": "View mode", "videoCallOverlayViewModeSpeakers": "Show active speakers only", "videoCallParticipantConnecting": "Connecting...", + "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", + "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", + "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", + "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", "videoCallPaused": "Video paused", "videoCallScreenShareEndConfirm": "End screen share", "videoCallScreenShareEndConfirmDescription": "If you minimize the window, your screen share will end.", From fd590d3e01b0116e0217f99b0a1574d87e8528b1 Mon Sep 17 00:00:00 2001 From: Amir Ghezelbash Date: Thu, 5 Dec 2024 17:48:30 +0330 Subject: [PATCH 252/329] fix: Add support for custom document in useClickOutside (WPB-14862) (#18431) --- .../components/calling/FullscreenVideoCall.tsx | 13 ++++++------- src/script/hooks/useClickOutside.tsx | 7 ++++--- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/script/components/calling/FullscreenVideoCall.tsx b/src/script/components/calling/FullscreenVideoCall.tsx index 6184f395e0d..20948a7f9f1 100644 --- a/src/script/components/calling/FullscreenVideoCall.tsx +++ b/src/script/components/calling/FullscreenVideoCall.tsx @@ -160,8 +160,6 @@ const FullscreenVideoCall: React.FC = ({ const emojiBarRef = useRef(null); const emojiBarToggleButtonRef = useRef(null); - useClickOutside(emojiBarRef, () => setShowEmojisBar(false), emojiBarToggleButtonRef); - const {blurredVideoStream} = useKoSubscribableChildren(selfParticipant, ['blurredVideoStream']); const hasBlurredBackground = !!blurredVideoStream; @@ -206,11 +204,12 @@ const FullscreenVideoCall: React.FC = ({ ]); const {selfUser, roles} = useKoSubscribableChildren(conversation, ['selfUser', 'roles']); - const {emojis, viewMode, isScreenSharingSourceFromDetachedWindow} = useKoSubscribableChildren(callState, [ - 'emojis', - 'viewMode', - 'isScreenSharingSourceFromDetachedWindow', - ]); + const {emojis, viewMode, detachedWindow, isScreenSharingSourceFromDetachedWindow} = useKoSubscribableChildren( + callState, + ['emojis', 'viewMode', 'detachedWindow', 'isScreenSharingSourceFromDetachedWindow'], + ); + + useClickOutside(emojiBarRef, () => setShowEmojisBar(false), emojiBarToggleButtonRef, detachedWindow?.document); const [audioOptionsOpen, setAudioOptionsOpen] = useState(false); const [videoOptionsOpen, setVideoOptionsOpen] = useState(false); diff --git a/src/script/hooks/useClickOutside.tsx b/src/script/hooks/useClickOutside.tsx index 3c38e4debd9..c167e2309b3 100644 --- a/src/script/hooks/useClickOutside.tsx +++ b/src/script/hooks/useClickOutside.tsx @@ -23,6 +23,7 @@ export const useClickOutside = ( ref: RefObject, onClick: (e: MouseEvent) => void, exclude?: RefObject, + windowDocument = window.document, ) => { useEffect(() => { const handleClick = (event: MouseEvent) => { @@ -34,8 +35,8 @@ export const useClickOutside = ( } } }; - document.addEventListener('click', handleClick); + windowDocument.addEventListener('click', handleClick); - return () => document.removeEventListener('click', handleClick); - }, [onClick]); + return () => windowDocument.removeEventListener('click', handleClick); + }, [exclude, onClick, ref, windowDocument]); }; From 72f116c9685c0bd5f05f0f53f9dfdd0ba1839636 Mon Sep 17 00:00:00 2001 From: Otto the Bot Date: Thu, 5 Dec 2024 15:23:37 +0100 Subject: [PATCH 253/329] chore: Update translations (#18432) --- src/i18n/ru-RU.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/i18n/ru-RU.json b/src/i18n/ru-RU.json index a91dd6fc0be..510089595f6 100644 --- a/src/i18n/ru-RU.json +++ b/src/i18n/ru-RU.json @@ -1604,17 +1604,17 @@ "videoCallOverlayOpenFullScreen": "Открыть вызов в полноэкранном режиме", "videoCallOverlayOpenPopupWindow": "Открыть в новом окне", "videoCallOverlayParticipantsListLabel": "Участники ({count})", - "videoCallOverlayParticipantsRaisedHandListLabel": "Hand raised ({count})", + "videoCallOverlayParticipantsRaisedHandListLabel": "Поднятая рука ({count})", "videoCallOverlayShareScreen": "Поделиться экраном", "videoCallOverlayShowParticipantsList": "Показать список участников", "videoCallOverlayViewModeAll": "Показать всех участников", "videoCallOverlayViewModeLabel": "Режим просмотра", "videoCallOverlayViewModeSpeakers": "Показывать только активных спикеров", "videoCallParticipantConnecting": "Подключение...", - "videoCallParticipantRaisedHandRaiseDuration": "Hand raised for {duration}", - "videoCallParticipantRaisedSelfHandUp": "You have raised your hand up", - "videoCallParticipantRaisedSortByTime": "Person waiting the longest is on the top of the list.", - "videoCallParticipantRaisedTheirHandUp": "{name} has raised their hand up", + "videoCallParticipantRaisedHandRaiseDuration": "Поднята рука {duration}", + "videoCallParticipantRaisedSelfHandUp": "Вы подняли руку", + "videoCallParticipantRaisedSortByTime": "Тот, кто ждал дольше всех, оказывается в верхней части списка.", + "videoCallParticipantRaisedTheirHandUp": "{name} поднял руку", "videoCallPaused": "Видео приостановлено", "videoCallScreenShareEndConfirm": "Завершить совместное использование экрана", "videoCallScreenShareEndConfirmDescription": "Если свернуть окно, совместное использование экрана завершится.", From ef47e2e2f6cbcd6f64d5e00556121bc8ea02fbe4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrian=20Wei=C3=9F?= <77456193+aweiss-dev@users.noreply.github.com> Date: Thu, 5 Dec 2024 15:32:06 +0100 Subject: [PATCH 254/329] fix: display MLS device details when MLS is active (#18433) * fix: display MLS device details when MLS is active * fix: dont display get a certificate button without E2EI enabled --- src/script/hooks/useDeviceIdentities.ts | 12 +++++------- .../DevicesPreferences/components/DetailedDevice.tsx | 2 +- .../components/MLSDeviceDetails/MLSDeviceDetails.tsx | 5 +++-- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/script/hooks/useDeviceIdentities.ts b/src/script/hooks/useDeviceIdentities.ts index 10e1244305e..0481f96e597 100644 --- a/src/script/hooks/useDeviceIdentities.ts +++ b/src/script/hooks/useDeviceIdentities.ts @@ -26,9 +26,12 @@ import {E2EIHandler, getUsersIdentities, MLSStatuses, WireIdentity} from '../E2E export const useUserIdentity = (userId: QualifiedId, groupId?: string, updateAfterEnrollment?: boolean) => { const [deviceIdentities, setDeviceIdentities] = useState(); + const getDeviceIdentity = (deviceId: string) => { + return deviceIdentities?.find(identity => identity.deviceId === deviceId); + }; const refreshDeviceIdentities = useCallback(async () => { - if (!E2EIHandler.getInstance().isE2EIEnabled() || !groupId) { + if (!groupId) { return; } @@ -63,11 +66,6 @@ export const useUserIdentity = (userId: QualifiedId, groupId?: string, updateAft ? MLSStatuses.VALID : MLSStatuses.NOT_ACTIVATED, - getDeviceIdentity: - deviceIdentities !== undefined - ? (deviceId: string) => { - return deviceIdentities.find(identity => identity.deviceId === deviceId); - } - : undefined, + getDeviceIdentity, }; }; diff --git a/src/script/page/MainContent/panels/preferences/DevicesPreferences/components/DetailedDevice.tsx b/src/script/page/MainContent/panels/preferences/DevicesPreferences/components/DetailedDevice.tsx index 5ea3e240ef7..d1e18b1f56a 100644 --- a/src/script/page/MainContent/panels/preferences/DevicesPreferences/components/DetailedDevice.tsx +++ b/src/script/page/MainContent/panels/preferences/DevicesPreferences/components/DetailedDevice.tsx @@ -41,7 +41,7 @@ export const DetailedDevice: React.FC = ({ getDeviceIdentity, isProteusVerified, }) => { - const getIdentity = getDeviceIdentity ? () => getDeviceIdentity(device.id) : undefined; + const getIdentity = () => getDeviceIdentity?.(device.id); return ( <> diff --git a/src/script/page/MainContent/panels/preferences/DevicesPreferences/components/MLSDeviceDetails/MLSDeviceDetails.tsx b/src/script/page/MainContent/panels/preferences/DevicesPreferences/components/MLSDeviceDetails/MLSDeviceDetails.tsx index 980dff6c964..208bf4ac04c 100644 --- a/src/script/page/MainContent/panels/preferences/DevicesPreferences/components/MLSDeviceDetails/MLSDeviceDetails.tsx +++ b/src/script/page/MainContent/panels/preferences/DevicesPreferences/components/MLSDeviceDetails/MLSDeviceDetails.tsx @@ -17,7 +17,7 @@ * */ -import {MLSStatuses, WireIdentity} from 'src/script/E2EIdentity'; +import {E2EIHandler, MLSStatuses, WireIdentity} from 'src/script/E2EIdentity'; import {t} from 'Util/LocalizerUtil'; import {splitFingerprint} from 'Util/StringUtil'; @@ -39,6 +39,7 @@ export const MLSDeviceDetails = ({isCurrentDevice, identity, isSelfUser = false} } const certificateState = identity?.status ?? MLSStatuses.NOT_ACTIVATED; + const isE2EIEnabled = E2EIHandler.getInstance().isE2EIEnabled(); if (!isSelfUser && certificateState === MLSStatuses.NOT_ACTIVATED) { return null; @@ -58,7 +59,7 @@ export const MLSDeviceDetails = ({isCurrentDevice, identity, isSelfUser = false} )} - {(isSelfUser || (!isSelfUser && certificateState !== MLSStatuses.NOT_ACTIVATED)) && ( + {isE2EIEnabled && (isSelfUser || (!isSelfUser && certificateState !== MLSStatuses.NOT_ACTIVATED)) && ( )}
    From 2adab056464258e136e8a711a1f5e42a74433c59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20J=C3=B3=C5=BAwik?= Date: Thu, 5 Dec 2024 15:55:03 +0100 Subject: [PATCH 255/329] fix: change import of useWarnings hook (#18434) --- src/script/page/AppMain.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/script/page/AppMain.tsx b/src/script/page/AppMain.tsx index 7364a319026..9737c39ea6b 100644 --- a/src/script/page/AppMain.tsx +++ b/src/script/page/AppMain.tsx @@ -95,8 +95,6 @@ export const AppMain: FC = ({ useInitializeRootFontSize(); - const {showSmallOffset, showLargeOffset} = useWarnings(); - if (!apiContext) { throw new Error('API Context has not been set'); } @@ -114,6 +112,8 @@ export const AppMain: FC = ({ 'viewMode', ]); + const {showSmallOffset, showLargeOffset} = useWarnings(); + const teamState = container.resolve(TeamState); const userState = container.resolve(UserState); From 50f9bceb3802a3bbee5f3959a5a3f623412d5092 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrian=20Wei=C3=9F?= <77456193+aweiss-dev@users.noreply.github.com> Date: Thu, 5 Dec 2024 16:00:02 +0100 Subject: [PATCH 256/329] fix: dont show headline if we dont have a thumbprint / certificateDetails (#18435) --- .../components/MLSDeviceDetails/MLSDeviceDetails.tsx | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/script/page/MainContent/panels/preferences/DevicesPreferences/components/MLSDeviceDetails/MLSDeviceDetails.tsx b/src/script/page/MainContent/panels/preferences/DevicesPreferences/components/MLSDeviceDetails/MLSDeviceDetails.tsx index 208bf4ac04c..8f15e7da6be 100644 --- a/src/script/page/MainContent/panels/preferences/DevicesPreferences/components/MLSDeviceDetails/MLSDeviceDetails.tsx +++ b/src/script/page/MainContent/panels/preferences/DevicesPreferences/components/MLSDeviceDetails/MLSDeviceDetails.tsx @@ -40,11 +40,17 @@ export const MLSDeviceDetails = ({isCurrentDevice, identity, isSelfUser = false} const certificateState = identity?.status ?? MLSStatuses.NOT_ACTIVATED; const isE2EIEnabled = E2EIHandler.getInstance().isE2EIEnabled(); + const showE2EICertificateDetails = + isE2EIEnabled && (isSelfUser || (!isSelfUser && certificateState !== MLSStatuses.NOT_ACTIVATED)); if (!isSelfUser && certificateState === MLSStatuses.NOT_ACTIVATED) { return null; } + if (!showE2EICertificateDetails && !identity?.thumbprint) { + return null; + } + return (

    {t('mlsSignature', {signature: MLSPublicKeys.ED25519.toUpperCase()})}

    @@ -59,9 +65,7 @@ export const MLSDeviceDetails = ({isCurrentDevice, identity, isSelfUser = false} )} - {isE2EIEnabled && (isSelfUser || (!isSelfUser && certificateState !== MLSStatuses.NOT_ACTIVATED)) && ( - - )} + {showE2EICertificateDetails && }
    ); }; From 1e80a32ab5471303f054c84cae9a3e4730c6d665 Mon Sep 17 00:00:00 2001 From: Immad Abdul Jabbar Date: Thu, 5 Dec 2024 19:24:55 +0100 Subject: [PATCH 257/329] fix: auth pages translation issues [WPB-14861] (#18437) --- src/i18n/en-US.json | 4 ++-- src/script/auth/main.tsx | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/i18n/en-US.json b/src/i18n/en-US.json index 6ec69c6a168..c6439d37bf6 100644 --- a/src/i18n/en-US.json +++ b/src/i18n/en-US.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "Name your team", @@ -1653,4 +1653,4 @@ "wireMacos": "{brandName} for macOS", "wireWindows": "{brandName} for Windows", "wire_for_web": "{brandName} for Web" -} +} \ No newline at end of file diff --git a/src/script/auth/main.tsx b/src/script/auth/main.tsx index 56874276b13..177562ebbbf 100644 --- a/src/script/auth/main.tsx +++ b/src/script/auth/main.tsx @@ -38,6 +38,7 @@ import {actionRoot} from './module/action'; import {Root} from './page/Root'; import {Config} from '../Config'; +import {setAppLocale} from '../localization/Localizer'; import {APIClient} from '../service/APIClientSingleton'; import {Core} from '../service/CoreSingleton'; @@ -81,6 +82,7 @@ async function runApp() { await initializeDataDog(config, {domain: domain}); render(Root); + setAppLocale(); if (module.hot) { module.hot.accept('./page/Root', () => { render(require('./page/Root').Root); From b36df3f25cf760af722e6c9dcbf36a38b9d553dd Mon Sep 17 00:00:00 2001 From: Otto the Bot Date: Thu, 5 Dec 2024 19:30:17 +0100 Subject: [PATCH 258/329] chore: Update translations (#18438) --- src/i18n/ar-SA.json | 2 +- src/i18n/bn-BD.json | 2 +- src/i18n/ca-ES.json | 2 +- src/i18n/cs-CZ.json | 2 +- src/i18n/da-DK.json | 2 +- src/i18n/de-DE.json | 2 +- src/i18n/el-GR.json | 2 +- src/i18n/en-US.json | 2 +- src/i18n/es-ES.json | 2 +- src/i18n/et-EE.json | 2 +- src/i18n/fa-IR.json | 2 +- src/i18n/fi-FI.json | 2 +- src/i18n/fr-FR.json | 2 +- src/i18n/ga-IE.json | 2 +- src/i18n/he-IL.json | 2 +- src/i18n/hi-IN.json | 2 +- src/i18n/hr-HR.json | 2 +- src/i18n/hu-HU.json | 2 +- src/i18n/id-ID.json | 2 +- src/i18n/is-IS.json | 2 +- src/i18n/it-IT.json | 2 +- src/i18n/ja-JP.json | 2 +- src/i18n/lt-LT.json | 2 +- src/i18n/lv-LV.json | 2 +- src/i18n/ms-MY.json | 2 +- src/i18n/nl-NL.json | 2 +- src/i18n/no-NO.json | 2 +- src/i18n/pl-PL.json | 2 +- src/i18n/pt-BR.json | 2 +- src/i18n/pt-PT.json | 2 +- src/i18n/ro-RO.json | 2 +- src/i18n/ru-RU.json | 2 +- src/i18n/si-LK.json | 2 +- src/i18n/sk-SK.json | 2 +- src/i18n/sl-SI.json | 2 +- src/i18n/sr-SP.json | 2 +- src/i18n/sv-SE.json | 2 +- src/i18n/th-TH.json | 2 +- src/i18n/tr-TR.json | 2 +- src/i18n/uk-UA.json | 2 +- src/i18n/uz-UZ.json | 2 +- src/i18n/vi-VN.json | 2 +- src/i18n/zh-CN.json | 2 +- src/i18n/zh-HK.json | 2 +- src/i18n/zh-TW.json | 2 +- 45 files changed, 45 insertions(+), 45 deletions(-) diff --git a/src/i18n/ar-SA.json b/src/i18n/ar-SA.json index 0225a666e7f..517923186c2 100644 --- a/src/i18n/ar-SA.json +++ b/src/i18n/ar-SA.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "سمِّ فريقك", diff --git a/src/i18n/bn-BD.json b/src/i18n/bn-BD.json index 6ec69c6a168..23ebef06201 100644 --- a/src/i18n/bn-BD.json +++ b/src/i18n/bn-BD.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "Name your team", diff --git a/src/i18n/ca-ES.json b/src/i18n/ca-ES.json index 6ec69c6a168..23ebef06201 100644 --- a/src/i18n/ca-ES.json +++ b/src/i18n/ca-ES.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "Name your team", diff --git a/src/i18n/cs-CZ.json b/src/i18n/cs-CZ.json index d247ef5b099..19c062ed92b 100644 --- a/src/i18n/cs-CZ.json +++ b/src/i18n/cs-CZ.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "Name your team", diff --git a/src/i18n/da-DK.json b/src/i18n/da-DK.json index e1845f10eed..08b6b918af2 100644 --- a/src/i18n/da-DK.json +++ b/src/i18n/da-DK.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "Name your team", diff --git a/src/i18n/de-DE.json b/src/i18n/de-DE.json index 29e03121abe..b18e90676ab 100644 --- a/src/i18n/de-DE.json +++ b/src/i18n/de-DE.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Ihre ersten Team-Mitglieder einzuladen und mit der Zusammenarbeit zu beginnen", "teamCreationSuccessListItem2": "Ihre Team-Einstellungen anzupassen", "teamCreationSuccessListTitle": "Öffnen Sie Team-Management, um:", - "teamCreationSuccessSubTitle": "Sie sind jetzt Besitzer des Teams {teamName}.", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Herzlichen Glückwunsch {name}!", "teamCreationTitle": "Erstellen Sie Ihr Team", "teamName.headline": "Team benennen", diff --git a/src/i18n/el-GR.json b/src/i18n/el-GR.json index dac9fe6cf9e..3b01fa81d1d 100644 --- a/src/i18n/el-GR.json +++ b/src/i18n/el-GR.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "Name your team", diff --git a/src/i18n/en-US.json b/src/i18n/en-US.json index c6439d37bf6..23ebef06201 100644 --- a/src/i18n/en-US.json +++ b/src/i18n/en-US.json @@ -1653,4 +1653,4 @@ "wireMacos": "{brandName} for macOS", "wireWindows": "{brandName} for Windows", "wire_for_web": "{brandName} for Web" -} \ No newline at end of file +} diff --git a/src/i18n/es-ES.json b/src/i18n/es-ES.json index 81f30dd5f9e..b86cfcdc2a3 100644 --- a/src/i18n/es-ES.json +++ b/src/i18n/es-ES.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "Dé un nombre al equipo", diff --git a/src/i18n/et-EE.json b/src/i18n/et-EE.json index 93513884089..ebba735c3ff 100644 --- a/src/i18n/et-EE.json +++ b/src/i18n/et-EE.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "Nimeta oma meeskond", diff --git a/src/i18n/fa-IR.json b/src/i18n/fa-IR.json index d3a08cfca92..e04abdbf123 100644 --- a/src/i18n/fa-IR.json +++ b/src/i18n/fa-IR.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "Name your team", diff --git a/src/i18n/fi-FI.json b/src/i18n/fi-FI.json index 00e9ab3254c..cfbf765bb96 100644 --- a/src/i18n/fi-FI.json +++ b/src/i18n/fi-FI.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "Name your team", diff --git a/src/i18n/fr-FR.json b/src/i18n/fr-FR.json index 54adc579e5e..9e28849dd33 100644 --- a/src/i18n/fr-FR.json +++ b/src/i18n/fr-FR.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "Donnez un nom à votre équipe", diff --git a/src/i18n/ga-IE.json b/src/i18n/ga-IE.json index 6ec69c6a168..23ebef06201 100644 --- a/src/i18n/ga-IE.json +++ b/src/i18n/ga-IE.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "Name your team", diff --git a/src/i18n/he-IL.json b/src/i18n/he-IL.json index 6ec69c6a168..23ebef06201 100644 --- a/src/i18n/he-IL.json +++ b/src/i18n/he-IL.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "Name your team", diff --git a/src/i18n/hi-IN.json b/src/i18n/hi-IN.json index 67349f958e9..0265bdcbc42 100644 --- a/src/i18n/hi-IN.json +++ b/src/i18n/hi-IN.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "Name your team", diff --git a/src/i18n/hr-HR.json b/src/i18n/hr-HR.json index 3629927da94..dcd4abcb08c 100644 --- a/src/i18n/hr-HR.json +++ b/src/i18n/hr-HR.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "Name your team", diff --git a/src/i18n/hu-HU.json b/src/i18n/hu-HU.json index a7641c8b226..24d971d0ee8 100644 --- a/src/i18n/hu-HU.json +++ b/src/i18n/hu-HU.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "Nevezd el a csapatod", diff --git a/src/i18n/id-ID.json b/src/i18n/id-ID.json index 9cc3ee92d66..6d56a320cf6 100644 --- a/src/i18n/id-ID.json +++ b/src/i18n/id-ID.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "Name your team", diff --git a/src/i18n/is-IS.json b/src/i18n/is-IS.json index 6ec69c6a168..23ebef06201 100644 --- a/src/i18n/is-IS.json +++ b/src/i18n/is-IS.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "Name your team", diff --git a/src/i18n/it-IT.json b/src/i18n/it-IT.json index da0ee958f92..9b61e32395f 100644 --- a/src/i18n/it-IT.json +++ b/src/i18n/it-IT.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "Name your team", diff --git a/src/i18n/ja-JP.json b/src/i18n/ja-JP.json index c5c988480aa..31398d41404 100644 --- a/src/i18n/ja-JP.json +++ b/src/i18n/ja-JP.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "チーム名", diff --git a/src/i18n/lt-LT.json b/src/i18n/lt-LT.json index 5cff6694ecd..49a80b685f3 100644 --- a/src/i18n/lt-LT.json +++ b/src/i18n/lt-LT.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "Pavadinkite komandą", diff --git a/src/i18n/lv-LV.json b/src/i18n/lv-LV.json index 2cb9f0fb732..0b0a6f63280 100644 --- a/src/i18n/lv-LV.json +++ b/src/i18n/lv-LV.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "Name your team", diff --git a/src/i18n/ms-MY.json b/src/i18n/ms-MY.json index 6ec69c6a168..23ebef06201 100644 --- a/src/i18n/ms-MY.json +++ b/src/i18n/ms-MY.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "Name your team", diff --git a/src/i18n/nl-NL.json b/src/i18n/nl-NL.json index 1ca96aa1d77..bef38e863f8 100644 --- a/src/i18n/nl-NL.json +++ b/src/i18n/nl-NL.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "Name your team", diff --git a/src/i18n/no-NO.json b/src/i18n/no-NO.json index c067f2fd23d..5b9303e77c2 100644 --- a/src/i18n/no-NO.json +++ b/src/i18n/no-NO.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "Name your team", diff --git a/src/i18n/pl-PL.json b/src/i18n/pl-PL.json index d763382104a..97dc2fbb2d2 100644 --- a/src/i18n/pl-PL.json +++ b/src/i18n/pl-PL.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "Name your team", diff --git a/src/i18n/pt-BR.json b/src/i18n/pt-BR.json index eb496ce1d66..5daa9a3606e 100644 --- a/src/i18n/pt-BR.json +++ b/src/i18n/pt-BR.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "Nomeie sua equipe", diff --git a/src/i18n/pt-PT.json b/src/i18n/pt-PT.json index a7b0b7ac3fd..647917488f6 100644 --- a/src/i18n/pt-PT.json +++ b/src/i18n/pt-PT.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "Nomeie sua equipa", diff --git a/src/i18n/ro-RO.json b/src/i18n/ro-RO.json index 84573d63f79..0376aea3ff9 100644 --- a/src/i18n/ro-RO.json +++ b/src/i18n/ro-RO.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "Name your team", diff --git a/src/i18n/ru-RU.json b/src/i18n/ru-RU.json index 510089595f6..84c3144ea37 100644 --- a/src/i18n/ru-RU.json +++ b/src/i18n/ru-RU.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Пригласите первых членов своей команды и начните совместную работу", "teamCreationSuccessListItem2": "Настройте параметры своей команды", "teamCreationSuccessListTitle": "Перейдите к Управлению командой:", - "teamCreationSuccessSubTitle": "Теперь вы являетесь владельцем команды ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Поздравляем {name}!", "teamCreationTitle": "Создать свою команду", "teamName.headline": "Назовите команду", diff --git a/src/i18n/si-LK.json b/src/i18n/si-LK.json index 4554d9d5905..79db3b7c9af 100644 --- a/src/i18n/si-LK.json +++ b/src/i18n/si-LK.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "කණ්ඩායම නම් කරන්න", diff --git a/src/i18n/sk-SK.json b/src/i18n/sk-SK.json index 2d984ec4b59..dcbd4a8ee03 100644 --- a/src/i18n/sk-SK.json +++ b/src/i18n/sk-SK.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "Name your team", diff --git a/src/i18n/sl-SI.json b/src/i18n/sl-SI.json index cdcf971cc63..602821445e8 100644 --- a/src/i18n/sl-SI.json +++ b/src/i18n/sl-SI.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "Name your team", diff --git a/src/i18n/sr-SP.json b/src/i18n/sr-SP.json index 9516591a663..60a4b819858 100644 --- a/src/i18n/sr-SP.json +++ b/src/i18n/sr-SP.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "Дајте име свом тиму", diff --git a/src/i18n/sv-SE.json b/src/i18n/sv-SE.json index bcd4124d061..55d9f9755b7 100644 --- a/src/i18n/sv-SE.json +++ b/src/i18n/sv-SE.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Grattis {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "Name your team", diff --git a/src/i18n/th-TH.json b/src/i18n/th-TH.json index 6ec69c6a168..23ebef06201 100644 --- a/src/i18n/th-TH.json +++ b/src/i18n/th-TH.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "Name your team", diff --git a/src/i18n/tr-TR.json b/src/i18n/tr-TR.json index 923b0f18cfe..f39fbd1ea42 100644 --- a/src/i18n/tr-TR.json +++ b/src/i18n/tr-TR.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "Takımınızı adlandırın", diff --git a/src/i18n/uk-UA.json b/src/i18n/uk-UA.json index 9e05929adb5..0f21f6ef925 100644 --- a/src/i18n/uk-UA.json +++ b/src/i18n/uk-UA.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "Назвіть свою команду", diff --git a/src/i18n/uz-UZ.json b/src/i18n/uz-UZ.json index 6ec69c6a168..23ebef06201 100644 --- a/src/i18n/uz-UZ.json +++ b/src/i18n/uz-UZ.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "Name your team", diff --git a/src/i18n/vi-VN.json b/src/i18n/vi-VN.json index 6ec69c6a168..23ebef06201 100644 --- a/src/i18n/vi-VN.json +++ b/src/i18n/vi-VN.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "Name your team", diff --git a/src/i18n/zh-CN.json b/src/i18n/zh-CN.json index 661576e4d08..06f6e223756 100644 --- a/src/i18n/zh-CN.json +++ b/src/i18n/zh-CN.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "Name your team", diff --git a/src/i18n/zh-HK.json b/src/i18n/zh-HK.json index 6ec69c6a168..23ebef06201 100644 --- a/src/i18n/zh-HK.json +++ b/src/i18n/zh-HK.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "Name your team", diff --git a/src/i18n/zh-TW.json b/src/i18n/zh-TW.json index a751c682fda..31e79a0dc05 100644 --- a/src/i18n/zh-TW.json +++ b/src/i18n/zh-TW.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Invite your first team members, and start working together", "teamCreationSuccessListItem2": "Customize your team settings", "teamCreationSuccessListTitle": "Go to Team Management to:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team ({teamName}).", + "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", "teamCreationSuccessTitle": "Congratulations {name}!", "teamCreationTitle": "Create your team", "teamName.headline": "Name your team", From da34510949823ffaa5e368018992476c13081267 Mon Sep 17 00:00:00 2001 From: Olaf Sulich Date: Fri, 6 Dec 2024 07:34:45 +0100 Subject: [PATCH 259/329] feat(EventTracking): enable automatic error tracking (#18429) --- src/script/tracking/EventTrackingRepository.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/script/tracking/EventTrackingRepository.ts b/src/script/tracking/EventTrackingRepository.ts index ee22d42e3c7..486a2912c01 100644 --- a/src/script/tracking/EventTrackingRepository.ts +++ b/src/script/tracking/EventTrackingRepository.ts @@ -235,6 +235,7 @@ export class EventTrackingRepository { apiKey: COUNTLY_API_KEY, enableLogging: COUNTLY_ENABLE_LOGGING, serverUrl: 'https://countly.wire.com/', + autoErrorTracking: true, }, }); From 14b549cf992e3dc0582601d39770b52ccee312d7 Mon Sep 17 00:00:00 2001 From: Otto the Bot Date: Fri, 6 Dec 2024 07:40:39 +0100 Subject: [PATCH 260/329] chore: Update translations (#18439) --- src/i18n/ru-RU.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/i18n/ru-RU.json b/src/i18n/ru-RU.json index 84c3144ea37..3ea452fea5a 100644 --- a/src/i18n/ru-RU.json +++ b/src/i18n/ru-RU.json @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Пригласите первых членов своей команды и начните совместную работу", "teamCreationSuccessListItem2": "Настройте параметры своей команды", "teamCreationSuccessListTitle": "Перейдите к Управлению командой:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", + "teamCreationSuccessSubTitle": "Теперь вы являетесь владельцем команды {teamName}.", "teamCreationSuccessTitle": "Поздравляем {name}!", "teamCreationTitle": "Создать свою команду", "teamName.headline": "Назовите команду", From c36821d1071dac9f80d55f2155592d0b535ebe20 Mon Sep 17 00:00:00 2001 From: Virgile <78490891+V-Gira@users.noreply.github.com> Date: Fri, 6 Dec 2024 11:28:11 +0100 Subject: [PATCH 261/329] chore(core-bump): update core-crypto to 2.0.0 [11654] (#18436) --- package.json | 2 +- yarn.lock | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 15af22da9dd..1ecc1042852 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "@wireapp/avs": "10.0.4", "@wireapp/avs-debugger": "0.0.5", "@wireapp/commons": "5.4.0", - "@wireapp/core": "46.11.6", + "@wireapp/core": "46.12.0", "@wireapp/react-ui-kit": "9.28.0", "@wireapp/store-engine-dexie": "2.1.15", "@wireapp/telemetry": "0.1.3", diff --git a/yarn.lock b/yarn.lock index 11569e38759..adf3a35f7ef 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6023,20 +6023,20 @@ __metadata: languageName: node linkType: hard -"@wireapp/core-crypto@npm:1.1.2": - version: 1.1.2 - resolution: "@wireapp/core-crypto@npm:1.1.2" - checksum: 10/7f0a3fc87f1f58ff0a2067053bfd7669ad4073584e31fe450d9a5528964f65600f20521b092704b8dce699c31b8b478eaadb23d26b4f1d2f224134ba63f1d7fa +"@wireapp/core-crypto@npm:2.0.0": + version: 2.0.0 + resolution: "@wireapp/core-crypto@npm:2.0.0" + checksum: 10/f4d9a687ba32bea4026d831f05dcc20e65436f44e6600663348aaf3089ceb1d0a6ad179d24516fc54436be104805b065ab44fe9418b3c8ef872aba8417f71ce3 languageName: node linkType: hard -"@wireapp/core@npm:46.11.6": - version: 46.11.6 - resolution: "@wireapp/core@npm:46.11.6" +"@wireapp/core@npm:46.12.0": + version: 46.12.0 + resolution: "@wireapp/core@npm:46.12.0" dependencies: "@wireapp/api-client": "npm:^27.13.1" "@wireapp/commons": "npm:^5.4.0" - "@wireapp/core-crypto": "npm:1.1.2" + "@wireapp/core-crypto": "npm:2.0.0" "@wireapp/cryptobox": "npm:12.8.0" "@wireapp/priority-queue": "npm:^2.1.11" "@wireapp/promise-queue": "npm:^2.3.10" @@ -6052,7 +6052,7 @@ __metadata: long: "npm:^5.2.0" uuid: "npm:9.0.1" zod: "npm:3.23.8" - checksum: 10/ee0dfc80fa1e4ca2eaf31a550abf8b87e9d81f402f64c3f2d85f02b3117a1edab4762347c7d4d005f5083d091fdabbfc497503e1671b51bfa2ab4daf89c69ef9 + checksum: 10/3553572c04ade544185d65865f7f03c6ab5ff35b9bfc198da9217bdfb3fc93ed7942b792968fe6fb10c635c506cf84cd89d64d9da068dbd473ac01b034057229 languageName: node linkType: hard @@ -18763,7 +18763,7 @@ __metadata: "@wireapp/avs-debugger": "npm:0.0.5" "@wireapp/commons": "npm:5.4.0" "@wireapp/copy-config": "npm:2.2.10" - "@wireapp/core": "npm:46.11.6" + "@wireapp/core": "npm:46.12.0" "@wireapp/eslint-config": "npm:3.0.7" "@wireapp/prettier-config": "npm:0.6.4" "@wireapp/react-ui-kit": "npm:9.28.0" From 5f1e15e5f814368468856835b9f2fe9f32382b42 Mon Sep 17 00:00:00 2001 From: Otto the Bot Date: Fri, 6 Dec 2024 11:34:16 +0100 Subject: [PATCH 262/329] chore: Update translations (#18440) --- src/i18n/de-DE.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/i18n/de-DE.json b/src/i18n/de-DE.json index b18e90676ab..099c2a61aa6 100644 --- a/src/i18n/de-DE.json +++ b/src/i18n/de-DE.json @@ -1,5 +1,5 @@ { - "AppLockDisableCancel": "Cancel", + "AppLockDisableCancel": "Abbrechen", "AppLockDisableInfo": "Sie müssen Wire nicht mehr mit Ihrem Kennwort entsperren.", "AppLockDisableTurnOff": "Ausschalten", "ApplockDisableHeadline": "App-Sperre ausschalten?", @@ -1508,7 +1508,7 @@ "teamCreationSuccessListItem1": "Ihre ersten Team-Mitglieder einzuladen und mit der Zusammenarbeit zu beginnen", "teamCreationSuccessListItem2": "Ihre Team-Einstellungen anzupassen", "teamCreationSuccessListTitle": "Öffnen Sie Team-Management, um:", - "teamCreationSuccessSubTitle": "You’re now the owner of the team {teamName}.", + "teamCreationSuccessSubTitle": "Sie sind jetzt Besitzer des Teams {teamName}.", "teamCreationSuccessTitle": "Herzlichen Glückwunsch {name}!", "teamCreationTitle": "Erstellen Sie Ihr Team", "teamName.headline": "Team benennen", From 02854ae80c26885c6cd70892e783c6436cf2a6e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20J=C3=B3=C5=BAwik?= Date: Fri, 6 Dec 2024 11:51:25 +0100 Subject: [PATCH 263/329] revert: change import of useWarnings hook (#18441) This reverts commit 2adab056464258e136e8a711a1f5e42a74433c59. --- src/script/page/AppMain.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/script/page/AppMain.tsx b/src/script/page/AppMain.tsx index 9737c39ea6b..7364a319026 100644 --- a/src/script/page/AppMain.tsx +++ b/src/script/page/AppMain.tsx @@ -95,6 +95,8 @@ export const AppMain: FC = ({ useInitializeRootFontSize(); + const {showSmallOffset, showLargeOffset} = useWarnings(); + if (!apiContext) { throw new Error('API Context has not been set'); } @@ -112,8 +114,6 @@ export const AppMain: FC = ({ 'viewMode', ]); - const {showSmallOffset, showLargeOffset} = useWarnings(); - const teamState = container.resolve(TeamState); const userState = container.resolve(UserState); From fd52dbe72c4588b63cb405c0ea07a10fde3a96e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20J=C3=B3=C5=BAwik?= Date: Fri, 6 Dec 2024 12:23:07 +0100 Subject: [PATCH 264/329] revert: Warning container in call (#18442) --- .../calling/FullscreenVideoCall.tsx | 11 +----- src/script/guards/useWarnings.ts | 34 ------------------ src/script/page/AppMain.tsx | 12 +------ .../WarningsContainer/WarningsContainer.tsx | 35 +++++++++++++++---- src/style/foundation/video-calling.less | 8 ----- 5 files changed, 30 insertions(+), 70 deletions(-) delete mode 100644 src/script/guards/useWarnings.ts diff --git a/src/script/components/calling/FullscreenVideoCall.tsx b/src/script/components/calling/FullscreenVideoCall.tsx index 20948a7f9f1..c9be651c963 100644 --- a/src/script/components/calling/FullscreenVideoCall.tsx +++ b/src/script/components/calling/FullscreenVideoCall.tsx @@ -74,7 +74,6 @@ import {CallingViewMode, CallState, MuteState} from '../../calling/CallState'; import {Participant} from '../../calling/Participant'; import type {Grid} from '../../calling/videoGridHandler'; import type {Conversation} from '../../entity/Conversation'; -import {useWarnings} from '../../guards/useWarnings'; import {ElectronDesktopCapturerSource, MediaDevicesHandler} from '../../media/MediaDevicesHandler'; import {TeamState} from '../../team/TeamState'; import {CallViewTab} from '../../view_model/CallingViewModel'; @@ -148,9 +147,6 @@ const FullscreenVideoCall: React.FC = ({ const [isConfirmCloseModalOpen, setIsConfirmCloseModalOpen] = useState(false); const [showEmojisBar, setShowEmojisBar] = useState(false); const [disabledEmojis, setDisabledEmojis] = useState([]); - - const {showSmallOffset, showLargeOffset} = useWarnings(); - const selfParticipant = call.getSelfParticipant(); const {sharesScreen: selfSharesScreen, sharesCamera: selfSharesCamera} = useKoSubscribableChildren(selfParticipant, [ 'sharesScreen', @@ -429,12 +425,7 @@ const FullscreenVideoCall: React.FC = ({ const isModerator = selfUser && roles[selfUser.id] === DefaultConversationRoleName.WIRE_ADMIN; return ( -
    +
    diff --git a/src/script/guards/useWarnings.ts b/src/script/guards/useWarnings.ts deleted file mode 100644 index 6e47e0e49e3..00000000000 --- a/src/script/guards/useWarnings.ts +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Wire - * Copyright (C) 2024 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 {useWarningsState} from '../view_model/WarningsContainer/WarningsState'; -import {CONFIG, TYPE as type} from '../view_model/WarningsContainer/WarningsTypes'; - -export const useWarnings = () => { - const warnings = useWarningsState(state => state.warnings); - const visibleWarning = warnings[warnings.length - 1]; - const isConnectivityRecovery = visibleWarning === type.CONNECTIVITY_RECOVERY; - const hasOffset = warnings.length > 0 && !isConnectivityRecovery; - const isMiniMode = CONFIG.MINI_MODES.includes(visibleWarning); - - return { - showSmallOffset: hasOffset && isMiniMode, - showLargeOffset: hasOffset && !isMiniMode, - }; -}; diff --git a/src/script/page/AppMain.tsx b/src/script/page/AppMain.tsx index 7364a319026..3dd17a82a60 100644 --- a/src/script/page/AppMain.tsx +++ b/src/script/page/AppMain.tsx @@ -20,7 +20,6 @@ import {FC, useEffect, useLayoutEffect} from 'react'; import {amplify} from 'amplify'; -import cx from 'classnames'; import {ErrorBoundary} from 'react-error-boundary'; import {container} from 'tsyringe'; @@ -52,7 +51,6 @@ import {useAppState, ContentState} from './useAppState'; import {CallingViewMode, CallState, DesktopScreenShareMenu} from '../calling/CallState'; import {ConversationState} from '../conversation/ConversationState'; import {User} from '../entity/User'; -import {useWarnings} from '../guards/useWarnings'; import {useActiveWindow} from '../hooks/useActiveWindow'; import {useInitializeRootFontSize} from '../hooks/useRootFontSize'; import {App} from '../main/app'; @@ -95,8 +93,6 @@ export const AppMain: FC = ({ useInitializeRootFontSize(); - const {showSmallOffset, showLargeOffset} = useWarnings(); - if (!apiContext) { throw new Error('API Context has not been set'); } @@ -253,13 +249,7 @@ export const AppMain: FC = ({ {Config.getConfig().FEATURE.ENABLE_DEBUG && } {!locked && ( -
    +
    {showLeftSidebar && ( void; } -export const WarningsContainer = ({onRefresh}: WarningProps) => { +const WarningsContainer: React.FC = ({onRefresh}) => { const name = useWarningsState(state => state.name); const warnings = useWarningsState(state => state.warnings); + const type = TYPE; const visibleWarning = warnings[warnings.length - 1]; + const warningDimmed = warnings.some(warning => CONFIG.DIMMED_MODES.includes(warning)); - if (warnings.length === 0) { - return null; - } + useEffect(() => { + const visibleWarning = warnings[warnings.length - 1]; + const isConnectivityRecovery = visibleWarning === TYPE.CONNECTIVITY_RECOVERY; + const hasOffset = warnings.length > 0 && !isConnectivityRecovery; + const isMiniMode = CONFIG.MINI_MODES.includes(visibleWarning); - const warningDimmed = warnings.some(warning => CONFIG.DIMMED_MODES.includes(warning)); + const app = document.querySelector('#app'); + if (app) { + app.classList.toggle('app--small-offset', hasOffset && isMiniMode); + app.classList.toggle('app--large-offset', hasOffset && !isMiniMode); + } - const {BRAND_NAME: brandName, URL} = Config.getConfig(); + afterRender(() => window.dispatchEvent(new Event('resize'))); + }, [warnings]); + + const brandName = Config.getConfig().BRAND_NAME; + const URL = Config.getConfig().URL; const closeButton = (
    diff --git a/src/script/components/calling/CallingCell/CallIngParticipantList/CallingParticipantList.tsx b/src/script/components/calling/CallingCell/CallIngParticipantList/CallingParticipantList.tsx index 65f31864bfc..d2c299cdc86 100644 --- a/src/script/components/calling/CallingCell/CallIngParticipantList/CallingParticipantList.tsx +++ b/src/script/components/calling/CallingCell/CallIngParticipantList/CallingParticipantList.tsx @@ -107,7 +107,7 @@ export const CallingParticipantList = ({ {handRaisedParticipants.map((participant, index, participantsArray) => (
  • = ({ const [showEmojisBar, setShowEmojisBar] = useState(false); const [disabledEmojis, setDisabledEmojis] = useState([]); const selfParticipant = call.getSelfParticipant(); - const {sharesScreen: selfSharesScreen, sharesCamera: selfSharesCamera} = useKoSubscribableChildren(selfParticipant, [ - 'sharesScreen', - 'sharesCamera', - ]); - + const { + sharesScreen: selfSharesScreen, + sharesCamera: selfSharesCamera, + handRaisedAt: selfHandRaisedAt, + } = useKoSubscribableChildren(selfParticipant, ['sharesScreen', 'sharesCamera', 'handRaisedAt']); + const isSelfHandRaised = Boolean(selfHandRaisedAt); const emojiBarRef = useRef(null); const emojiBarToggleButtonRef = useRef(null); @@ -225,11 +226,10 @@ const FullscreenVideoCall: React.FC = ({ const openPopup = () => callingRepository.setViewModeDetached(); const [isCallViewOpen, toggleCallView] = useToggleState(false); - const [isHandRaised, setIsHandRaised] = useState(false); const [isParticipantsListOpen, toggleParticipantsList] = useToggleState(false); function toggleIsHandRaised(currentIsHandRaised: boolean) { - setIsHandRaised(!currentIsHandRaised); + selfParticipant.handRaisedAt(new Date().getTime()); sendHandRaised(!currentIsHandRaised, call); } @@ -818,16 +818,16 @@ const FullscreenVideoCall: React.FC = ({ {Config.getConfig().FEATURE.ENABLE_IN_CALL_HAND_RAISE && !is1to1Conversation && (
  • + ); + const nameContainer = !minimized && (
    = ({ tabIndex={isMaximized ? TabIndex.FOCUSABLE : TabIndex.UNFOCUSABLE} > {hasActiveVideo ? ( -
    +
    @@ -230,6 +250,8 @@ const GroupVideoGridTile: React.FC = ({
    )} + {actionItem} + {nameContainer} {(hasPausedVideo || isSwitchingVideoResolution) && ( diff --git a/src/script/media/MediaConstraintsHandler.test.ts b/src/script/media/MediaConstraintsHandler.test.ts index b8e9d918b39..f932a9ac8f2 100644 --- a/src/script/media/MediaConstraintsHandler.test.ts +++ b/src/script/media/MediaConstraintsHandler.test.ts @@ -77,27 +77,11 @@ describe('MediaConstraintsHandler', () => { }); describe('getScreenStreamConstraints', () => { - it('returns constraints to get the screen stream if browser supports getDisplayMedia in conference call', () => { + it('returns constraints to get the screen stream if browser supports getDisplayMedia', () => { const constraintsHandler = createConstraintsHandler(); const constraints: MediaStreamConstraints | undefined = constraintsHandler.getScreenStreamConstraints( ScreensharingMethods.DISPLAY_MEDIA, - true, - ); - - expect(constraints?.audio).toBe(false); - expect((constraints?.video as MediaTrackConstraints).height).toEqual( - jasmine.objectContaining({ideal: jasmine.any(Number), max: jasmine.any(Number)}), - ); - expect((constraints?.video as MediaTrackConstraints).frameRate).toEqual(jasmine.any(Number)); - }); - - it('returns constraints to get the screen stream if browser supports getDisplayMedia in one to one call', () => { - const constraintsHandler = createConstraintsHandler(); - - const constraints: MediaStreamConstraints | undefined = constraintsHandler.getScreenStreamConstraints( - ScreensharingMethods.DISPLAY_MEDIA, - false, ); expect(constraints?.audio).toBe(false); @@ -105,59 +89,26 @@ describe('MediaConstraintsHandler', () => { expect((constraints?.video as MediaTrackConstraints).frameRate).toEqual(jasmine.any(Number)); }); - it('returns constraints to get the screen stream if browser uses desktopCapturer in conference call', () => { - const constraintsHandler = createConstraintsHandler(); - - const constraints: MediaStreamConstraints | undefined = constraintsHandler.getScreenStreamConstraints( - ScreensharingMethods.DESKTOP_CAPTURER, - true, - ); - - expect(constraints?.audio).toBe(false); - expect((constraints?.video as MediaTrackConstraintsExt).mandatory).toEqual( - jasmine.objectContaining({maxHeight: jasmine.any(Number), minHeight: jasmine.any(Number)}), - ); - }); - it('returns constraints to get the screen stream if browser uses desktopCapturer in one to one call', () => { const constraintsHandler = createConstraintsHandler(); const constraints: MediaStreamConstraints | undefined = constraintsHandler.getScreenStreamConstraints( ScreensharingMethods.DESKTOP_CAPTURER, - false, ); expect(constraints?.audio).toBe(false); expect((constraints?.video as MediaTrackConstraintsExt).mandatory).toEqual({ chromeMediaSource: 'desktop', chromeMediaSourceId: 'camera', + maxFrameRate: 5, }); }); - it('returns constraints to get the screen stream if browser uses getUserMedia in conference call', () => { - const constraintsHandler = createConstraintsHandler(); - - const constraints: MediaStreamConstraints | undefined = constraintsHandler.getScreenStreamConstraints( - ScreensharingMethods.USER_MEDIA, - true, - ); - - expect(constraints?.audio).toBe(false); - expect(constraints?.video as MediaTrackConstraints).toEqual( - jasmine.objectContaining({ - frameRate: jasmine.any(Number), - height: {exact: jasmine.any(Number)}, - mediaSource: 'screen', - }), - ); - }); - it('returns constraints to get the screen stream if browser uses getUserMedia in one to one call', () => { const constraintsHandler = createConstraintsHandler(); const constraints: MediaStreamConstraints | undefined = constraintsHandler.getScreenStreamConstraints( ScreensharingMethods.USER_MEDIA, - false, ); expect(constraints?.audio).toBe(false); diff --git a/src/script/media/MediaConstraintsHandler.ts b/src/script/media/MediaConstraintsHandler.ts index 5b0fadbc889..8002fe9a440 100644 --- a/src/script/media/MediaConstraintsHandler.ts +++ b/src/script/media/MediaConstraintsHandler.ts @@ -29,15 +29,10 @@ import {UserState} from '../user/UserState'; interface Config { CONSTRAINTS: { SCREEN: { - DESKTOP_CAPTURER_FULL: MediaTrackConstraints & { - mandatory: {chromeMediaSource: string; chromeMediaSourceId?: string; maxHeight?: number; minHeight?: number}; - }; DESKTOP_CAPTURER: MediaTrackConstraints & { - mandatory: {chromeMediaSource: string; chromeMediaSourceId?: string; maxHeight: number; minHeight: number}; + mandatory?: {chromeMediaSource: string; chromeMediaSourceId?: string; maxFrameRate?: number}; }; - DISPLAY_MEDIA_FULL: MediaTrackConstraints; DISPLAY_MEDIA: MediaTrackConstraints; - USER_MEDIA_FULL: MediaTrackConstraints & {mediaSource: string}; USER_MEDIA: MediaTrackConstraints & {mediaSource: string}; }; VIDEO: Record & {PREFERRED_FACING_MODE: string}; @@ -59,35 +54,17 @@ export class MediaConstraintsHandler { return { CONSTRAINTS: { SCREEN: { - DESKTOP_CAPTURER_FULL: { - mandatory: { - chromeMediaSource: 'desktop', - }, - }, DESKTOP_CAPTURER: { mandatory: { chromeMediaSource: 'desktop', - maxHeight: 1080, - minHeight: 1080, + maxFrameRate: 5, }, }, - DISPLAY_MEDIA_FULL: { - frameRate: 12, - }, DISPLAY_MEDIA: { frameRate: 5, - height: { - ideal: 1080, - max: 1080, - }, - }, - USER_MEDIA_FULL: { - frameRate: 12, - mediaSource: 'screen', }, USER_MEDIA: { frameRate: 5, - height: {exact: 720}, mediaSource: 'screen', }, }, @@ -153,14 +130,12 @@ export class MediaConstraintsHandler { }; } - getScreenStreamConstraints(method: ScreensharingMethods, isGroup: boolean): MediaStreamConstraints | undefined { + getScreenStreamConstraints(method: ScreensharingMethods): MediaStreamConstraints | undefined { switch (method) { case ScreensharingMethods.DESKTOP_CAPTURER: - this.logger.info(`Enabling screen sharing from desktopCapturer (with fULL resolution: ${isGroup})`); + this.logger.info(`Enabling screen sharing from desktopCapturer (with fULL resolution)`); - const desktopCapturer = isGroup - ? MediaConstraintsHandler.CONFIG.CONSTRAINTS.SCREEN.DESKTOP_CAPTURER - : MediaConstraintsHandler.CONFIG.CONSTRAINTS.SCREEN.DESKTOP_CAPTURER_FULL; + const desktopCapturer = MediaConstraintsHandler.CONFIG.CONSTRAINTS.SCREEN.DESKTOP_CAPTURER; const streamConstraints = { audio: false, @@ -172,22 +147,18 @@ export class MediaConstraintsHandler { return streamConstraints; case ScreensharingMethods.DISPLAY_MEDIA: - this.logger.info(`Enabling screen sharing from getDisplayMedia (with fULL resolution: ${isGroup})`); + this.logger.info(`Enabling screen sharing from getDisplayMedia (with fULL resolution)`); - const display = isGroup - ? MediaConstraintsHandler.CONFIG.CONSTRAINTS.SCREEN.DISPLAY_MEDIA - : MediaConstraintsHandler.CONFIG.CONSTRAINTS.SCREEN.DISPLAY_MEDIA_FULL; + const display = MediaConstraintsHandler.CONFIG.CONSTRAINTS.SCREEN.DISPLAY_MEDIA; return { audio: false, video: display, }; case ScreensharingMethods.USER_MEDIA: - this.logger.info(`Enabling screen sharing from getUserMedia (with fULL resolution: ${isGroup})`); + this.logger.info(`Enabling screen sharing from getUserMedia (with fULL resolution)`); - const userMedia = isGroup - ? MediaConstraintsHandler.CONFIG.CONSTRAINTS.SCREEN.USER_MEDIA - : MediaConstraintsHandler.CONFIG.CONSTRAINTS.SCREEN.USER_MEDIA_FULL; + const userMedia = MediaConstraintsHandler.CONFIG.CONSTRAINTS.SCREEN.USER_MEDIA; return { audio: false, diff --git a/src/script/media/MediaStreamHandler.ts b/src/script/media/MediaStreamHandler.ts index 4324a2cabbe..8be15b8d745 100644 --- a/src/script/media/MediaStreamHandler.ts +++ b/src/script/media/MediaStreamHandler.ts @@ -154,7 +154,7 @@ export class MediaStreamHandler { hasPermission: boolean, ): Promise { const mediaConstraints = screen - ? this.constraintsHandler.getScreenStreamConstraints(this.screensharingMethod, isGroup) + ? this.constraintsHandler.getScreenStreamConstraints(this.screensharingMethod) : this.constraintsHandler.getMediaStreamConstraints(audio, video, isGroup); const willPromptForPermission = !hasPermission && !Runtime.isDesktopApp(); diff --git a/src/script/team/TeamState.ts b/src/script/team/TeamState.ts index abbb2b2bf00..9e368138208 100644 --- a/src/script/team/TeamState.ts +++ b/src/script/team/TeamState.ts @@ -117,9 +117,7 @@ export class TeamState { () => this.teamFeatures()?.mls?.config.protocolToggleUsers.includes(this.userState.self().id) ?? false, ); - this.isConferenceCallingEnabled = ko.pureComputed( - () => this.teamFeatures()?.conferenceCalling?.status === FeatureStatus.ENABLED, - ); + this.isConferenceCallingEnabled = ko.pureComputed(() => true); this.isGuestLinkEnabled = ko.pureComputed( () => this.teamFeatures()?.conversationGuestLinks?.status === FeatureStatus.ENABLED, diff --git a/src/style/components/group-video-grid.less b/src/style/components/group-video-grid.less index 10f8b643c50..db0efe7ba11 100644 --- a/src/style/components/group-video-grid.less +++ b/src/style/components/group-video-grid.less @@ -163,9 +163,31 @@ object-fit: cover; } + &__action_icon { + position: absolute; + z-index: 1; + bottom: 30px; + left: 50%; + display: flex; + padding: 4px; + border: 0px; + border-radius: 4px; + margin: 8px; + background-color: var(--gray-100); + transform: translate(-50%); + svg { + width: 24px; + fill: var(--white); + } + } + &__action_icon:hover { + background-color: var(--black); + } + &__label { .label-small-medium; position: absolute; + z-index: 1; bottom: 0; left: 50%; display: flex; From 876a99083af720ed2f3f906a4fff61162cbc1cbc Mon Sep 17 00:00:00 2001 From: Otto the Bot Date: Tue, 10 Dec 2024 14:17:41 +0100 Subject: [PATCH 289/329] chore: Update translations (#18473) --- src/i18n/ru-RU.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/i18n/ru-RU.json b/src/i18n/ru-RU.json index faef6ab713c..07ccaace966 100644 --- a/src/i18n/ru-RU.json +++ b/src/i18n/ru-RU.json @@ -1061,9 +1061,9 @@ "modalConversationOptionsToggleServiceMessage": "Не удалось изменить статус сервисов.", "modalConversationRemoveAction": "Удалить", "modalConversationRemoveCloseBtn": "Закрыть окно 'Удалить'", - "modalConversationRemoveGroupAction": "Delete for Me", - "modalConversationRemoveGroupHeadline": "Delete {conversation} group for me?", - "modalConversationRemoveGroupMessage": "You won’t be able to access the group and its content. There is no option to restore it.", + "modalConversationRemoveGroupAction": "Удалить у меня", + "modalConversationRemoveGroupHeadline": "Удалить группу {conversation} у меня?", + "modalConversationRemoveGroupMessage": "Вы не сможете получить доступ к группе и ее содержимому. Восстановить ее невозможно.", "modalConversationRemoveGuestsHeadline": "Отключить доступ гостей?", "modalConversationRemoveGuestsMessage": "Текущие гости будут удалены из беседы. Новые гости допущены не будут.", "modalConversationRemoveGuestsOrServicesAction": "Отключить", From 888e5acd0f9fe95773c83fde117dacbc8d9c477e Mon Sep 17 00:00:00 2001 From: Otto the Bot Date: Wed, 11 Dec 2024 09:06:03 +0100 Subject: [PATCH 290/329] chore: Update translations (#18474) --- src/i18n/de-DE.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/i18n/de-DE.json b/src/i18n/de-DE.json index 9ba42273a3e..1f40a7cd7df 100644 --- a/src/i18n/de-DE.json +++ b/src/i18n/de-DE.json @@ -1061,9 +1061,9 @@ "modalConversationOptionsToggleServiceMessage": "Status der Dienste konnte nicht geändert werden.", "modalConversationRemoveAction": "Entfernen", "modalConversationRemoveCloseBtn": "Fenster 'Entfernen' schließen", - "modalConversationRemoveGroupAction": "Delete for Me", - "modalConversationRemoveGroupHeadline": "Delete {conversation} group for me?", - "modalConversationRemoveGroupMessage": "You won’t be able to access the group and its content. There is no option to restore it.", + "modalConversationRemoveGroupAction": "Für mich löschen", + "modalConversationRemoveGroupHeadline": "Gruppe {conversation} für mich löschen?", + "modalConversationRemoveGroupMessage": "Sie können dann nicht mehr auf die Gruppe und ihren Inhalt zugreifen. Es gibt keine Möglichkeit, sie wiederherzustellen.", "modalConversationRemoveGuestsHeadline": "Gastzugang deaktivieren?", "modalConversationRemoveGuestsMessage": "Aktuelle Gäste werden aus der Unterhaltung entfernt. Neue Gäste können nicht hinzugefügt werden.", "modalConversationRemoveGuestsOrServicesAction": "Deaktivieren", From d1a063c05c0b43754e03ac49ed30891ff59c4848 Mon Sep 17 00:00:00 2001 From: Enrico Schwendig Date: Wed, 11 Dec 2024 12:33:50 +0100 Subject: [PATCH 291/329] feat: disable zoom feature for screen share [WPB-14947] (#18475) * feat: enable conference feature check * feat: remove zoom icons --- .../components/calling/GroupVideoGridTile.tsx | 25 ++----------------- src/script/team/TeamState.ts | 4 ++- 2 files changed, 5 insertions(+), 24 deletions(-) diff --git a/src/script/components/calling/GroupVideoGridTile.tsx b/src/script/components/calling/GroupVideoGridTile.tsx index a657d46bfc6..052fad5fb65 100644 --- a/src/script/components/calling/GroupVideoGridTile.tsx +++ b/src/script/components/calling/GroupVideoGridTile.tsx @@ -17,7 +17,7 @@ * */ -import React, {useState} from 'react'; +import React from 'react'; import {QualifiedId} from '@wireapp/api-client/lib/user'; import {TabIndex} from '@wireapp/react-ui-kit/lib/types/enums'; @@ -89,8 +89,6 @@ const GroupVideoGridTile: React.FC = ({ 'isSwitchingVideoResolution', ]); - const [isZoomedIn, setIsZoomedIn] = useState(false); - const {name} = useKoSubscribableChildren(participant?.user, ['name']); const sharesScreen = videoState === VIDEO_STATE.SCREENSHARE; @@ -108,24 +106,8 @@ const GroupVideoGridTile: React.FC = ({ } }; - const handleZoomClick = () => { - setIsZoomedIn(prev => !prev); - }; - const participantNameColor = getParticipantNameColor({isActivelySpeaking, isAudioEstablished}); - const actionItem = !minimized && sharesScreen && ( - - ); - const nameContainer = !minimized && (
    = ({ tabIndex={isMaximized ? TabIndex.FOCUSABLE : TabIndex.UNFOCUSABLE} > {hasActiveVideo ? ( -
    +
    @@ -250,8 +231,6 @@ const GroupVideoGridTile: React.FC = ({
    )} - {actionItem} - {nameContainer} {(hasPausedVideo || isSwitchingVideoResolution) && ( diff --git a/src/script/team/TeamState.ts b/src/script/team/TeamState.ts index 9e368138208..abbb2b2bf00 100644 --- a/src/script/team/TeamState.ts +++ b/src/script/team/TeamState.ts @@ -117,7 +117,9 @@ export class TeamState { () => this.teamFeatures()?.mls?.config.protocolToggleUsers.includes(this.userState.self().id) ?? false, ); - this.isConferenceCallingEnabled = ko.pureComputed(() => true); + this.isConferenceCallingEnabled = ko.pureComputed( + () => this.teamFeatures()?.conferenceCalling?.status === FeatureStatus.ENABLED, + ); this.isGuestLinkEnabled = ko.pureComputed( () => this.teamFeatures()?.conversationGuestLinks?.status === FeatureStatus.ENABLED, From 66f6d07b1d7470bd9cbf26759d67d948a06687f7 Mon Sep 17 00:00:00 2001 From: Virgile <78490891+V-Gira@users.noreply.github.com> Date: Wed, 11 Dec 2024 16:01:01 +0100 Subject: [PATCH 292/329] chore: set default api to v7 (#18478) --- src/script/Config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/script/Config.ts b/src/script/Config.ts index 04ba29ba490..7a2d9b25c8b 100644 --- a/src/script/Config.ts +++ b/src/script/Config.ts @@ -81,7 +81,7 @@ const config = { ALLOWED_IMAGE_TYPES: ['image/bmp', 'image/gif', 'image/jpeg', 'image/jpg', 'image/png'], /** Which min and max version of the backend api do we support */ - SUPPORTED_API_RANGE: [1, env.ENABLE_DEV_BACKEND_API ? Infinity : 6], + SUPPORTED_API_RANGE: [1, env.ENABLE_DEV_BACKEND_API ? Infinity : 7], /** DataDog client api keys acces */ dataDog: { From 3057ce50619f4603e1f057699b814e0cb516c0a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrian=20Wei=C3=9F?= <77456193+aweiss-dev@users.noreply.github.com> Date: Wed, 11 Dec 2024 16:02:33 +0100 Subject: [PATCH 293/329] feat: remove the environmental mls feature flag (#18479) --- .env.localhost | 1 - server/config/client.config.ts | 1 - server/config/env.ts | 2 -- .../Modals/GroupCreation/GroupCreationModal.tsx | 11 ++++------- src/script/util/util.ts | 3 +-- 5 files changed, 5 insertions(+), 13 deletions(-) diff --git a/.env.localhost b/.env.localhost index 4b8da96deee..ed0eeafcc3f 100644 --- a/.env.localhost +++ b/.env.localhost @@ -19,7 +19,6 @@ ENABLE_DEV_BACKEND_API="true" #FEATURE_DEFAULT_LOGIN_TEMPORARY_CLIENT="false" #FEATURE_APPLOCK_UNFOCUS_TIMEOUT="30" #FEATURE_APPLOCK_SCHEDULED_TIMEOUT="30" -#FEATURE_ENABLE_MLS="true" #FEATURE_USE_CORE_CRYPTO="true" # staging diff --git a/server/config/client.config.ts b/server/config/client.config.ts index 8230538a83c..45e42389a69 100644 --- a/server/config/client.config.ts +++ b/server/config/client.config.ts @@ -63,7 +63,6 @@ export function generateConfig(params: ConfigGeneratorParams, env: Env) { ENABLE_ENFORCE_DESKTOP_APPLICATION_ONLY: env.FEATURE_ENABLE_ENFORCE_DESKTOP_APPLICATION_ONLY == 'true', ENABLE_EXTRA_CLIENT_ENTROPY: env.FEATURE_ENABLE_EXTRA_CLIENT_ENTROPY == 'true', ENABLE_MEDIA_EMBEDS: env.FEATURE_ENABLE_MEDIA_EMBEDS != 'false', - ENABLE_MLS: env.FEATURE_ENABLE_MLS == 'true', ENABLE_PROTEUS_CORE_CRYPTO: env.FEATURE_ENABLE_PROTEUS_CORE_CRYPTO == 'true', ENABLE_SSO: env.FEATURE_ENABLE_SSO == 'true', ENFORCE_CONSTANT_BITRATE: env.FEATURE_ENFORCE_CONSTANT_BITRATE == 'true', diff --git a/server/config/env.ts b/server/config/env.ts index 7103c1d4011..e135893e441 100644 --- a/server/config/env.ts +++ b/server/config/env.ts @@ -78,8 +78,6 @@ export type Env = { FEATURE_ALLOWED_FILE_UPLOAD_EXTENSIONS: string; /** will enable the MLS protocol */ - FEATURE_ENABLE_MLS?: string; - FEATURE_USE_CORE_CRYPTO?: string; FEATURE_MLS_CONFIG_KEYING_MATERIAL_UPDATE_THRESHOLD?: string; diff --git a/src/script/components/Modals/GroupCreation/GroupCreationModal.tsx b/src/script/components/Modals/GroupCreation/GroupCreationModal.tsx index f39792e4aca..c734c341488 100644 --- a/src/script/components/Modals/GroupCreation/GroupCreationModal.tsx +++ b/src/script/components/Modals/GroupCreation/GroupCreationModal.tsx @@ -81,15 +81,12 @@ const GroupCreationModal: React.FC = ({ } = useKoSubscribableChildren(teamState, ['isTeam', 'isMLSEnabled', 'isProtocolToggleEnabledForUser']); const {self: selfUser} = useKoSubscribableChildren(userState, ['self']); - const isMLSFeatureEnabled = Config.getConfig().FEATURE.ENABLE_MLS; - - const enableMLSToggle = isMLSFeatureEnabled && isMLSEnabledForTeam && isProtocolToggleEnabledForUser; + const enableMLSToggle = isMLSEnabledForTeam && isProtocolToggleEnabledForUser; //if feature flag is set to false or mls is disabled for current team use proteus as default - const defaultProtocol = - isMLSFeatureEnabled && isMLSEnabledForTeam - ? teamState.teamFeatures()?.mls?.config.defaultProtocol - : ConversationProtocol.PROTEUS; + const defaultProtocol = isMLSEnabledForTeam + ? teamState.teamFeatures()?.mls?.config.defaultProtocol + : ConversationProtocol.PROTEUS; const protocolOptions: ProtocolOption[] = ([ConversationProtocol.PROTEUS, ConversationProtocol.MLS] as const).map( protocol => ({ diff --git a/src/script/util/util.ts b/src/script/util/util.ts index df66753fc91..3b8251868ac 100644 --- a/src/script/util/util.ts +++ b/src/script/util/util.ts @@ -25,7 +25,6 @@ import {Runtime} from '@wireapp/commons'; import {isTabKey} from './KeyboardUtil'; import {getLogger} from './Logger'; -import {Config} from '../Config'; import type {Conversation} from '../entity/Conversation'; import {AuthError} from '../error/AuthError'; @@ -304,7 +303,7 @@ export const setContextMenuPosition = (event: React.KeyboardEvent) => { const supportsSecretStorage = () => !Runtime.isDesktopApp() || !!window.systemCrypto; // disables mls for old 'broken' desktop clients, see https://github.com/wireapp/wire-desktop/pull/6094 -export const supportsMLS = () => Config.getConfig().FEATURE.ENABLE_MLS && supportsSecretStorage(); +export const supportsMLS = () => supportsSecretStorage(); export const incomingCssClass = 'content-animation-incoming-horizontal-left'; From f2638e9228d9e356d35bcb76591027ea31ff8820 Mon Sep 17 00:00:00 2001 From: Amir Ghezelbash Date: Wed, 11 Dec 2024 20:02:54 +0330 Subject: [PATCH 294/329] feat: bump @wireapp/core from 14.13.0 to 46.14.0 (#18481) --- package.json | 2 +- yarn.lock | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 312ec61f783..e5cca669628 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "@wireapp/avs": "10.0.4", "@wireapp/avs-debugger": "0.0.7", "@wireapp/commons": "5.4.0", - "@wireapp/core": "46.13.0", + "@wireapp/core": "46.14.0", "@wireapp/react-ui-kit": "9.28.0", "@wireapp/store-engine-dexie": "2.1.15", "@wireapp/telemetry": "0.1.4", diff --git a/yarn.lock b/yarn.lock index 6899bb0f75e..beb233fd9b2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5948,9 +5948,9 @@ __metadata: languageName: node linkType: hard -"@wireapp/api-client@npm:^27.13.2": - version: 27.13.2 - resolution: "@wireapp/api-client@npm:27.13.2" +"@wireapp/api-client@npm:^27.14.0": + version: 27.14.0 + resolution: "@wireapp/api-client@npm:27.14.0" dependencies: "@wireapp/commons": "npm:^5.4.0" "@wireapp/priority-queue": "npm:^2.1.11" @@ -5965,7 +5965,7 @@ __metadata: tough-cookie: "npm:4.1.4" ws: "npm:8.18.0" zod: "npm:3.23.8" - checksum: 10/1fbe961c5648fd349de4f59df29eb52e80d7999c7114066cfdfbf14a7c42e4ebfa6276218f4694aa4a141e7e6221e1b2bd9f65de48cfcd2c3207e330e00edc9d + checksum: 10/8f03bc24e21b8a1b2c78e4aa663115eb910d2cb5acbf3e4603e25ed860b72a1c2342db4cf02d2f853413386b3d6b91128d0baf72cb4c6f3237dc75f49b4a4151 languageName: node linkType: hard @@ -6030,11 +6030,11 @@ __metadata: languageName: node linkType: hard -"@wireapp/core@npm:46.13.0": - version: 46.13.0 - resolution: "@wireapp/core@npm:46.13.0" +"@wireapp/core@npm:46.14.0": + version: 46.14.0 + resolution: "@wireapp/core@npm:46.14.0" dependencies: - "@wireapp/api-client": "npm:^27.13.2" + "@wireapp/api-client": "npm:^27.14.0" "@wireapp/commons": "npm:^5.4.0" "@wireapp/core-crypto": "npm:2.0.0" "@wireapp/cryptobox": "npm:12.8.0" @@ -6052,7 +6052,7 @@ __metadata: long: "npm:^5.2.0" uuid: "npm:9.0.1" zod: "npm:3.23.8" - checksum: 10/30b90cdc3fdc0ba8e015bac7182244c410528ba66ed0a48c7aa647e8354e2b4fa6aa0c9e30af18923aa02551b6c10562632604c6d59537e49dc1e113d4858cb6 + checksum: 10/5fba4c5b419e82c65d4157582c951ed4617dadf167d02cff733c89911bdf71b84c28ff344b2b0ca7097ddcdeb4c41fb9203a1bebec07bcf1188e9cb601de19ce languageName: node linkType: hard @@ -18775,7 +18775,7 @@ __metadata: "@wireapp/avs-debugger": "npm:0.0.7" "@wireapp/commons": "npm:5.4.0" "@wireapp/copy-config": "npm:2.2.10" - "@wireapp/core": "npm:46.13.0" + "@wireapp/core": "npm:46.14.0" "@wireapp/eslint-config": "npm:3.0.7" "@wireapp/prettier-config": "npm:0.6.4" "@wireapp/react-ui-kit": "npm:9.28.0" From a77dc249dcdfbda11d0753b8e2e5bf6a1c2b6454 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Dec 2024 16:39:06 +0000 Subject: [PATCH 295/329] chore(deps): bump nanoid from 3.3.7 to 3.3.8 (#18482) Bumps [nanoid](https://github.com/ai/nanoid) from 3.3.7 to 3.3.8. - [Release notes](https://github.com/ai/nanoid/releases) - [Changelog](https://github.com/ai/nanoid/blob/main/CHANGELOG.md) - [Commits](https://github.com/ai/nanoid/compare/3.3.7...3.3.8) --- updated-dependencies: - dependency-name: nanoid dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index beb233fd9b2..6ec02c0568e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13683,11 +13683,11 @@ __metadata: linkType: hard "nanoid@npm:^3.3.7": - version: 3.3.7 - resolution: "nanoid@npm:3.3.7" + version: 3.3.8 + resolution: "nanoid@npm:3.3.8" bin: nanoid: bin/nanoid.cjs - checksum: 10/ac1eb60f615b272bccb0e2b9cd933720dad30bf9708424f691b8113826bb91aca7e9d14ef5d9415a6ba15c266b37817256f58d8ce980c82b0ba3185352565679 + checksum: 10/2d1766606cf0d6f47b6f0fdab91761bb81609b2e3d367027aff45e6ee7006f660fb7e7781f4a34799fe6734f1268eeed2e37a5fdee809ade0c2d4eb11b0f9c40 languageName: node linkType: hard From 34383fcf0b601c812d2729cd25a2cd12a8a0c3e0 Mon Sep 17 00:00:00 2001 From: Virgile <78490891+V-Gira@users.noreply.github.com> Date: Wed, 11 Dec 2024 18:52:45 +0100 Subject: [PATCH 296/329] chore: Revert "chore: set default api to v7 (#18478)" (#18483) This reverts commit 66f6d07b1d7470bd9cbf26759d67d948a06687f7. --- src/script/Config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/script/Config.ts b/src/script/Config.ts index 7a2d9b25c8b..04ba29ba490 100644 --- a/src/script/Config.ts +++ b/src/script/Config.ts @@ -81,7 +81,7 @@ const config = { ALLOWED_IMAGE_TYPES: ['image/bmp', 'image/gif', 'image/jpeg', 'image/jpg', 'image/png'], /** Which min and max version of the backend api do we support */ - SUPPORTED_API_RANGE: [1, env.ENABLE_DEV_BACKEND_API ? Infinity : 7], + SUPPORTED_API_RANGE: [1, env.ENABLE_DEV_BACKEND_API ? Infinity : 6], /** DataDog client api keys acces */ dataDog: { From d3925671e2b1fb09e540c6200fbe4cffa943af26 Mon Sep 17 00:00:00 2001 From: Virgile <78490891+V-Gira@users.noreply.github.com> Date: Wed, 11 Dec 2024 19:35:44 +0100 Subject: [PATCH 297/329] chore: Revert "feat: remove the environmental mls feature flag (#18479)" (#18484) This reverts commit 3057ce50619f4603e1f057699b814e0cb516c0a3. --- .env.localhost | 1 + server/config/client.config.ts | 1 + server/config/env.ts | 2 ++ .../Modals/GroupCreation/GroupCreationModal.tsx | 11 +++++++---- src/script/util/util.ts | 3 ++- 5 files changed, 13 insertions(+), 5 deletions(-) diff --git a/.env.localhost b/.env.localhost index ed0eeafcc3f..4b8da96deee 100644 --- a/.env.localhost +++ b/.env.localhost @@ -19,6 +19,7 @@ ENABLE_DEV_BACKEND_API="true" #FEATURE_DEFAULT_LOGIN_TEMPORARY_CLIENT="false" #FEATURE_APPLOCK_UNFOCUS_TIMEOUT="30" #FEATURE_APPLOCK_SCHEDULED_TIMEOUT="30" +#FEATURE_ENABLE_MLS="true" #FEATURE_USE_CORE_CRYPTO="true" # staging diff --git a/server/config/client.config.ts b/server/config/client.config.ts index 45e42389a69..8230538a83c 100644 --- a/server/config/client.config.ts +++ b/server/config/client.config.ts @@ -63,6 +63,7 @@ export function generateConfig(params: ConfigGeneratorParams, env: Env) { ENABLE_ENFORCE_DESKTOP_APPLICATION_ONLY: env.FEATURE_ENABLE_ENFORCE_DESKTOP_APPLICATION_ONLY == 'true', ENABLE_EXTRA_CLIENT_ENTROPY: env.FEATURE_ENABLE_EXTRA_CLIENT_ENTROPY == 'true', ENABLE_MEDIA_EMBEDS: env.FEATURE_ENABLE_MEDIA_EMBEDS != 'false', + ENABLE_MLS: env.FEATURE_ENABLE_MLS == 'true', ENABLE_PROTEUS_CORE_CRYPTO: env.FEATURE_ENABLE_PROTEUS_CORE_CRYPTO == 'true', ENABLE_SSO: env.FEATURE_ENABLE_SSO == 'true', ENFORCE_CONSTANT_BITRATE: env.FEATURE_ENFORCE_CONSTANT_BITRATE == 'true', diff --git a/server/config/env.ts b/server/config/env.ts index e135893e441..7103c1d4011 100644 --- a/server/config/env.ts +++ b/server/config/env.ts @@ -78,6 +78,8 @@ export type Env = { FEATURE_ALLOWED_FILE_UPLOAD_EXTENSIONS: string; /** will enable the MLS protocol */ + FEATURE_ENABLE_MLS?: string; + FEATURE_USE_CORE_CRYPTO?: string; FEATURE_MLS_CONFIG_KEYING_MATERIAL_UPDATE_THRESHOLD?: string; diff --git a/src/script/components/Modals/GroupCreation/GroupCreationModal.tsx b/src/script/components/Modals/GroupCreation/GroupCreationModal.tsx index c734c341488..f39792e4aca 100644 --- a/src/script/components/Modals/GroupCreation/GroupCreationModal.tsx +++ b/src/script/components/Modals/GroupCreation/GroupCreationModal.tsx @@ -81,12 +81,15 @@ const GroupCreationModal: React.FC = ({ } = useKoSubscribableChildren(teamState, ['isTeam', 'isMLSEnabled', 'isProtocolToggleEnabledForUser']); const {self: selfUser} = useKoSubscribableChildren(userState, ['self']); - const enableMLSToggle = isMLSEnabledForTeam && isProtocolToggleEnabledForUser; + const isMLSFeatureEnabled = Config.getConfig().FEATURE.ENABLE_MLS; + + const enableMLSToggle = isMLSFeatureEnabled && isMLSEnabledForTeam && isProtocolToggleEnabledForUser; //if feature flag is set to false or mls is disabled for current team use proteus as default - const defaultProtocol = isMLSEnabledForTeam - ? teamState.teamFeatures()?.mls?.config.defaultProtocol - : ConversationProtocol.PROTEUS; + const defaultProtocol = + isMLSFeatureEnabled && isMLSEnabledForTeam + ? teamState.teamFeatures()?.mls?.config.defaultProtocol + : ConversationProtocol.PROTEUS; const protocolOptions: ProtocolOption[] = ([ConversationProtocol.PROTEUS, ConversationProtocol.MLS] as const).map( protocol => ({ diff --git a/src/script/util/util.ts b/src/script/util/util.ts index 3b8251868ac..df66753fc91 100644 --- a/src/script/util/util.ts +++ b/src/script/util/util.ts @@ -25,6 +25,7 @@ import {Runtime} from '@wireapp/commons'; import {isTabKey} from './KeyboardUtil'; import {getLogger} from './Logger'; +import {Config} from '../Config'; import type {Conversation} from '../entity/Conversation'; import {AuthError} from '../error/AuthError'; @@ -303,7 +304,7 @@ export const setContextMenuPosition = (event: React.KeyboardEvent) => { const supportsSecretStorage = () => !Runtime.isDesktopApp() || !!window.systemCrypto; // disables mls for old 'broken' desktop clients, see https://github.com/wireapp/wire-desktop/pull/6094 -export const supportsMLS = () => supportsSecretStorage(); +export const supportsMLS = () => Config.getConfig().FEATURE.ENABLE_MLS && supportsSecretStorage(); export const incomingCssClass = 'content-animation-incoming-horizontal-left'; From ad9574fa5375523bee883c8fba6f342261daa387 Mon Sep 17 00:00:00 2001 From: Virgile <78490891+V-Gira@users.noreply.github.com> Date: Thu, 12 Dec 2024 09:59:33 +0100 Subject: [PATCH 298/329] chore: restore default api v7 and MLS env variable removal (#18485) * Chore: restore "chore: set default api to v7 (#18478)" (#18483)" This reverts commit 34383fcf0b601c812d2729cd25a2cd12a8a0c3e0. * chore: restore "feat: remove the environmental mls feature flag (#18479)" (#18484)" This reverts commit d3925671e2b1fb09e540c6200fbe4cffa943af26. --- .env.localhost | 1 - server/config/client.config.ts | 1 - server/config/env.ts | 2 -- src/script/Config.ts | 2 +- .../Modals/GroupCreation/GroupCreationModal.tsx | 11 ++++------- src/script/util/util.ts | 3 +-- 6 files changed, 6 insertions(+), 14 deletions(-) diff --git a/.env.localhost b/.env.localhost index 4b8da96deee..ed0eeafcc3f 100644 --- a/.env.localhost +++ b/.env.localhost @@ -19,7 +19,6 @@ ENABLE_DEV_BACKEND_API="true" #FEATURE_DEFAULT_LOGIN_TEMPORARY_CLIENT="false" #FEATURE_APPLOCK_UNFOCUS_TIMEOUT="30" #FEATURE_APPLOCK_SCHEDULED_TIMEOUT="30" -#FEATURE_ENABLE_MLS="true" #FEATURE_USE_CORE_CRYPTO="true" # staging diff --git a/server/config/client.config.ts b/server/config/client.config.ts index 8230538a83c..45e42389a69 100644 --- a/server/config/client.config.ts +++ b/server/config/client.config.ts @@ -63,7 +63,6 @@ export function generateConfig(params: ConfigGeneratorParams, env: Env) { ENABLE_ENFORCE_DESKTOP_APPLICATION_ONLY: env.FEATURE_ENABLE_ENFORCE_DESKTOP_APPLICATION_ONLY == 'true', ENABLE_EXTRA_CLIENT_ENTROPY: env.FEATURE_ENABLE_EXTRA_CLIENT_ENTROPY == 'true', ENABLE_MEDIA_EMBEDS: env.FEATURE_ENABLE_MEDIA_EMBEDS != 'false', - ENABLE_MLS: env.FEATURE_ENABLE_MLS == 'true', ENABLE_PROTEUS_CORE_CRYPTO: env.FEATURE_ENABLE_PROTEUS_CORE_CRYPTO == 'true', ENABLE_SSO: env.FEATURE_ENABLE_SSO == 'true', ENFORCE_CONSTANT_BITRATE: env.FEATURE_ENFORCE_CONSTANT_BITRATE == 'true', diff --git a/server/config/env.ts b/server/config/env.ts index 7103c1d4011..e135893e441 100644 --- a/server/config/env.ts +++ b/server/config/env.ts @@ -78,8 +78,6 @@ export type Env = { FEATURE_ALLOWED_FILE_UPLOAD_EXTENSIONS: string; /** will enable the MLS protocol */ - FEATURE_ENABLE_MLS?: string; - FEATURE_USE_CORE_CRYPTO?: string; FEATURE_MLS_CONFIG_KEYING_MATERIAL_UPDATE_THRESHOLD?: string; diff --git a/src/script/Config.ts b/src/script/Config.ts index 04ba29ba490..7a2d9b25c8b 100644 --- a/src/script/Config.ts +++ b/src/script/Config.ts @@ -81,7 +81,7 @@ const config = { ALLOWED_IMAGE_TYPES: ['image/bmp', 'image/gif', 'image/jpeg', 'image/jpg', 'image/png'], /** Which min and max version of the backend api do we support */ - SUPPORTED_API_RANGE: [1, env.ENABLE_DEV_BACKEND_API ? Infinity : 6], + SUPPORTED_API_RANGE: [1, env.ENABLE_DEV_BACKEND_API ? Infinity : 7], /** DataDog client api keys acces */ dataDog: { diff --git a/src/script/components/Modals/GroupCreation/GroupCreationModal.tsx b/src/script/components/Modals/GroupCreation/GroupCreationModal.tsx index f39792e4aca..c734c341488 100644 --- a/src/script/components/Modals/GroupCreation/GroupCreationModal.tsx +++ b/src/script/components/Modals/GroupCreation/GroupCreationModal.tsx @@ -81,15 +81,12 @@ const GroupCreationModal: React.FC = ({ } = useKoSubscribableChildren(teamState, ['isTeam', 'isMLSEnabled', 'isProtocolToggleEnabledForUser']); const {self: selfUser} = useKoSubscribableChildren(userState, ['self']); - const isMLSFeatureEnabled = Config.getConfig().FEATURE.ENABLE_MLS; - - const enableMLSToggle = isMLSFeatureEnabled && isMLSEnabledForTeam && isProtocolToggleEnabledForUser; + const enableMLSToggle = isMLSEnabledForTeam && isProtocolToggleEnabledForUser; //if feature flag is set to false or mls is disabled for current team use proteus as default - const defaultProtocol = - isMLSFeatureEnabled && isMLSEnabledForTeam - ? teamState.teamFeatures()?.mls?.config.defaultProtocol - : ConversationProtocol.PROTEUS; + const defaultProtocol = isMLSEnabledForTeam + ? teamState.teamFeatures()?.mls?.config.defaultProtocol + : ConversationProtocol.PROTEUS; const protocolOptions: ProtocolOption[] = ([ConversationProtocol.PROTEUS, ConversationProtocol.MLS] as const).map( protocol => ({ diff --git a/src/script/util/util.ts b/src/script/util/util.ts index df66753fc91..3b8251868ac 100644 --- a/src/script/util/util.ts +++ b/src/script/util/util.ts @@ -25,7 +25,6 @@ import {Runtime} from '@wireapp/commons'; import {isTabKey} from './KeyboardUtil'; import {getLogger} from './Logger'; -import {Config} from '../Config'; import type {Conversation} from '../entity/Conversation'; import {AuthError} from '../error/AuthError'; @@ -304,7 +303,7 @@ export const setContextMenuPosition = (event: React.KeyboardEvent) => { const supportsSecretStorage = () => !Runtime.isDesktopApp() || !!window.systemCrypto; // disables mls for old 'broken' desktop clients, see https://github.com/wireapp/wire-desktop/pull/6094 -export const supportsMLS = () => Config.getConfig().FEATURE.ENABLE_MLS && supportsSecretStorage(); +export const supportsMLS = () => supportsSecretStorage(); export const incomingCssClass = 'content-animation-incoming-horizontal-left'; From 54ef4b43b2af86d27ca258deccca70d2c5f1b971 Mon Sep 17 00:00:00 2001 From: Amir Ghezelbash Date: Thu, 12 Dec 2024 12:52:33 +0330 Subject: [PATCH 299/329] chore: Bump @wireapp/core from 46.14.0 to 46.14.1 (#18486) --- package.json | 2 +- yarn.lock | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index e5cca669628..81cfded23e3 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "@wireapp/avs": "10.0.4", "@wireapp/avs-debugger": "0.0.7", "@wireapp/commons": "5.4.0", - "@wireapp/core": "46.14.0", + "@wireapp/core": "46.14.1", "@wireapp/react-ui-kit": "9.28.0", "@wireapp/store-engine-dexie": "2.1.15", "@wireapp/telemetry": "0.1.4", diff --git a/yarn.lock b/yarn.lock index 6ec02c0568e..2e7108ac861 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6023,20 +6023,20 @@ __metadata: languageName: node linkType: hard -"@wireapp/core-crypto@npm:2.0.0": - version: 2.0.0 - resolution: "@wireapp/core-crypto@npm:2.0.0" - checksum: 10/f4d9a687ba32bea4026d831f05dcc20e65436f44e6600663348aaf3089ceb1d0a6ad179d24516fc54436be104805b065ab44fe9418b3c8ef872aba8417f71ce3 +"@wireapp/core-crypto@npm:3.0.0": + version: 3.0.0 + resolution: "@wireapp/core-crypto@npm:3.0.0" + checksum: 10/7c4a1385bac9e59692ee0e4102745f20cfb5a2d4abd0025e28bce33970712125de2cc2d631769828a9339374684cb3ab9f6e737dfc0eb9af16d2f4129fec75ff languageName: node linkType: hard -"@wireapp/core@npm:46.14.0": - version: 46.14.0 - resolution: "@wireapp/core@npm:46.14.0" +"@wireapp/core@npm:46.14.1": + version: 46.14.1 + resolution: "@wireapp/core@npm:46.14.1" dependencies: "@wireapp/api-client": "npm:^27.14.0" "@wireapp/commons": "npm:^5.4.0" - "@wireapp/core-crypto": "npm:2.0.0" + "@wireapp/core-crypto": "npm:3.0.0" "@wireapp/cryptobox": "npm:12.8.0" "@wireapp/priority-queue": "npm:^2.1.11" "@wireapp/promise-queue": "npm:^2.3.10" @@ -6052,7 +6052,7 @@ __metadata: long: "npm:^5.2.0" uuid: "npm:9.0.1" zod: "npm:3.23.8" - checksum: 10/5fba4c5b419e82c65d4157582c951ed4617dadf167d02cff733c89911bdf71b84c28ff344b2b0ca7097ddcdeb4c41fb9203a1bebec07bcf1188e9cb601de19ce + checksum: 10/11a5fbedddc1c5be8218935f4b1f1ec9c7824c4261e6d189ad3708f8edcdcfaea143fd121fd57c05a790c0392e9e5757c5a82742c1c8a85fb3ff9f8360a4c650 languageName: node linkType: hard @@ -18775,7 +18775,7 @@ __metadata: "@wireapp/avs-debugger": "npm:0.0.7" "@wireapp/commons": "npm:5.4.0" "@wireapp/copy-config": "npm:2.2.10" - "@wireapp/core": "npm:46.14.0" + "@wireapp/core": "npm:46.14.1" "@wireapp/eslint-config": "npm:3.0.7" "@wireapp/prettier-config": "npm:0.6.4" "@wireapp/react-ui-kit": "npm:9.28.0" From cd61a9aae0bdcd4b496c4a9329b2e472b26c6209 Mon Sep 17 00:00:00 2001 From: Olaf Sulich Date: Thu, 12 Dec 2024 12:17:35 +0100 Subject: [PATCH 300/329] fix: app notification (#18476) * fix(notification): enable multiple notifications, add option to display them in the detatched window * refactor(AppNotification): cleanup * fix: multi window patch (draft) * feat: introduce sonner lib * feat: adjust other notifications * chore: cleanup * refactor(AppNotification): add comments * refactor(AppNotification): docs * feat: replace amplify events with native ones * chore: update deps * fix: lint --- package.json | 3 +- src/script/calling/CallingRepository.ts | 11 +- .../AppNotification/AppNotification.styles.ts | 63 ------ .../AppNotification/AppNotification.test.tsx | 87 -------- .../AppNotification/AppNotification.tsx | 189 +++++++++++++----- .../QualityFeedbackModal.tsx | 8 +- .../calling/CallingCell/CallingCell.tsx | 19 ++ .../DetachedWindow/DetachedWindow.tsx | 1 + .../calling/FullscreenVideoCall.tsx | 20 ++ src/script/util/DebugUtil.ts | 5 - src/style/components/app-notification.less | 40 ++++ src/style/foundation/main.less | 1 + yarn.lock | 21 +- 13 files changed, 250 insertions(+), 218 deletions(-) delete mode 100644 src/script/components/AppNotification/AppNotification.styles.ts delete mode 100644 src/script/components/AppNotification/AppNotification.test.tsx create mode 100644 src/style/components/app-notification.less diff --git a/package.json b/package.json index 81cfded23e3..06471e7def5 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "@wireapp/react-ui-kit": "9.28.0", "@wireapp/store-engine-dexie": "2.1.15", "@wireapp/telemetry": "0.1.4", - "@wireapp/webapp-events": "0.24.3", + "@wireapp/webapp-events": "0.25.0", "amplify": "https://github.com/wireapp/amplify#head=master", "beautiful-react-hooks": "5.0.2", "classnames": "2.5.1", @@ -50,6 +50,7 @@ "redux": "5.0.1", "redux-logdown": "1.0.4", "redux-thunk": "3.1.0", + "sonner": "^1.7.1", "speakingurl": "14.0.1", "switch-path": "1.2.0", "tsyringe": "4.8.0", diff --git a/src/script/calling/CallingRepository.ts b/src/script/calling/CallingRepository.ts index aad27469d1a..cd2f2a48672 100644 --- a/src/script/calling/CallingRepository.ts +++ b/src/script/calling/CallingRepository.ts @@ -55,7 +55,6 @@ import {AvsDebugger} from '@wireapp/avs-debugger'; import {Runtime} from '@wireapp/commons'; import {WebAppEvents} from '@wireapp/webapp-events'; -import {showAppNotification} from 'Components/AppNotification'; import {useCallAlertState} from 'Components/calling/useCallAlertState'; import {CALL_QUALITY_FEEDBACK_KEY} from 'Components/Modals/QualityFeedbackModal/constants'; import {flatten} from 'Util/ArrayUtil'; @@ -866,7 +865,13 @@ export class CallingRepository { ? t('videoCallParticipantRaisedSelfHandUp') : t('videoCallParticipantRaisedTheirHandUp', {name}); - showAppNotification(handUpMessage); + window.dispatchEvent( + new CustomEvent(WebAppEvents.CALL.HAND_RAISED, { + detail: { + notificationMessage: handUpMessage, + }, + }), + ); break; } @@ -1132,9 +1137,9 @@ export class CallingRepository { const isScreenSharingSourceFromDetachedWindow = this.callState.isScreenSharingSourceFromDetachedWindow(); if (joinedCall && isSharingScreen && isScreenSharingSourceFromDetachedWindow) { + window.dispatchEvent(new CustomEvent(WebAppEvents.CALL.SCREEN_SHARING_ENDED)); this.callState.isScreenSharingSourceFromDetachedWindow(false); void this.toggleScreenshare(joinedCall); - showAppNotification(t('videoCallScreenShareEnded')); } }; diff --git a/src/script/components/AppNotification/AppNotification.styles.ts b/src/script/components/AppNotification/AppNotification.styles.ts deleted file mode 100644 index 07424c66de6..00000000000 --- a/src/script/components/AppNotification/AppNotification.styles.ts +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Wire - * Copyright (C) 2024 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 wrapper: CSSObject = { - alignItems: 'center', - backgroundColor: 'var(--main-color)', - borderRadius: '8px', - boxShadow: '0 2px 16px 0 var(--background-fade-16)', - display: 'flex', - gap: '16px', - padding: '8px 16px', - - position: 'fixed', - top: '0', - left: '50%', - translate: '-50% 0', - transition: 'top 0.3s, opacity 0.3s', - zIndex: '99999', - - 'body.theme-dark &': { - backgroundColor: 'var(--gray-80)', - boxShadow: '0 2px 16px 0 rgba(151, 151, 151, 0.12)', - }, -}; - -export const content: CSSObject = { - color: 'var(--white)', - fontSize: 'var(--font-size-base)', - fontWeight: 'var(--font-weight-regular)', - lineHeight: 'var(--line-height-lg)', -}; - -export const buttonStyles: CSSObject = { - background: 'transparent', - border: 'none', - padding: 0, - - display: 'flex', - alignItems: 'center', - justifyContent: 'center', -}; - -export const closeIcon: CSSObject = { - fill: 'var(--white)', -}; diff --git a/src/script/components/AppNotification/AppNotification.test.tsx b/src/script/components/AppNotification/AppNotification.test.tsx deleted file mode 100644 index 00c91c898a2..00000000000 --- a/src/script/components/AppNotification/AppNotification.test.tsx +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Wire - * Copyright (C) 2024 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 {render, fireEvent, act} from '@testing-library/react'; - -import {AppNotification, showAppNotification} from './AppNotification'; - -jest.useFakeTimers(); - -describe('AppNotification', () => { - afterEach(() => { - jest.clearAllTimers(); - }); - - it('renders the message correctly', () => { - const message = 'Test notification'; - const onClose = jest.fn(); - const {getByText} = render(); - - expect(getByText(message)).toBeDefined(); - }); - - it('calls onClose when the close button is clicked', () => { - const message = 'Test notification'; - const onClose = jest.fn(); - const {getByRole} = render(); - const button = getByRole('button'); - - fireEvent.click(button); - - expect(onClose).toHaveBeenCalledTimes(1); - }); - - it('calls onClose after the notificationTimeout', () => { - const message = 'Test notification'; - const onClose = jest.fn(); - const notificationTimeout = 3000; - - render(); - - act(() => { - jest.advanceTimersByTime(notificationTimeout); - }); - - expect(onClose).toHaveBeenCalledTimes(1); - }); -}); - -describe('showAppNotification', () => { - afterEach(() => { - jest.clearAllTimers(); - const appNotificationContainer = document.querySelector('#app-notification'); - if (appNotificationContainer) { - appNotificationContainer.innerHTML = ''; - } - }); - - it('renders AppNotification into the container', () => { - const appNotificationContainer = document.createElement('div'); - appNotificationContainer.setAttribute('id', 'app-notification'); - document.body.appendChild(appNotificationContainer); - - const message = 'Test notification'; - - act(() => { - showAppNotification(message); - }); - - expect(appNotificationContainer.textContent).toContain(message); - }); -}); diff --git a/src/script/components/AppNotification/AppNotification.tsx b/src/script/components/AppNotification/AppNotification.tsx index b0106d304fb..7cc2d74cdd9 100644 --- a/src/script/components/AppNotification/AppNotification.tsx +++ b/src/script/components/AppNotification/AppNotification.tsx @@ -17,74 +17,159 @@ * */ -import {useCallback, useEffect, useRef, useState} from 'react'; - -import {createRoot} from 'react-dom/client'; - -import * as Icon from 'Components/Icon'; - -import {buttonStyles, closeIcon, content, wrapper} from './AppNotification.styles'; +import {useEffect, useRef} from 'react'; + +import {createRoot, Root} from 'react-dom/client'; +import {toast, Toaster} from 'sonner'; + +import {CloseIcon} from 'Components/Icon'; + +interface AppNotificationOptions { + message?: string; + /** + * The window in which the notification should be displayed. + * @default window + */ + activeWindow?: Window; + /** + * Additional icon to be displayed in the notification. + */ + icon?: React.ElementType; + /** + * Whether the notification should have a close button. + */ + withCloseButton?: boolean; + /** + * Whether the notification should be automatically closed after a certain time. + * @default true + */ + autoClose?: boolean; +} -const DEFAULT_NOTIFICATION_TIMEOUT = 3000; -const ANIMATION_DURATION = 300; +const NOTIFICATION_TIMEOUT_MS = 3000; const APP_NOTIFICATION_SELECTOR = '#app-notification'; -interface AppNotificationProps { - message: string; - onClose: () => void; - notificationTimeout?: number; -} +// Small delay to ensure rendering is complete. +// In some cases (switching between windows) the notification is not displayed without this delay. +// It's caused by the rendering behavior of the toast library (injecting the into the DOM node). +const ACTION_DELAY_MS = 1; -export const AppNotification = ({ - message, - onClose, - notificationTimeout = DEFAULT_NOTIFICATION_TIMEOUT, -}: AppNotificationProps) => { - const closeTimeoutRef = useRef | null>(null); +// Stores React roots for different windows (activeWindow). +// Each window (identified by its 'name' property or 'default' if not available) gets its own root. +// This prevents multiple calls to createRoot() for the same container, ensuring a single root per window. +// It's necessary to display notifications in different windows (e.g. main window and detached call window). +let roots: Record = {}; - const [isAnimated, setIsAnimated] = useState(false); - const [isClosing, setIsClosing] = useState(false); +/** + * Hook to display app notifications. + * + * Usage, based on the default options: + * ```tsx + * const notification = useAppNotification({message: 'Hello, World!'}); + * notification.show(); + * ``` + * + * Usage, with the show method options (useful when the message is dynamic, based on some other action): + * + * ```tsx + * const notification = useAppNotification(); + * notification.show({message: 'Hello, World!'}); + * ``` + * + */ +export const useAppNotification = (props?: AppNotificationOptions) => { + const notificationId = useRef(null); - const handleCloseNotification = useCallback(() => { - closeTimeoutRef.current = setTimeout(() => { - setIsClosing(true); - setTimeout(() => { - onClose(); - }, ANIMATION_DURATION); - }, notificationTimeout - ANIMATION_DURATION); - }, [notificationTimeout, onClose]); + const activeWindow = props?.activeWindow || window; useEffect(() => { - setIsAnimated(true); - handleCloseNotification(); + setTimeout(() => { + clearRoots(); + }, ACTION_DELAY_MS); + }, [activeWindow]); - return () => { - if (closeTimeoutRef.current) { - clearTimeout(closeTimeoutRef.current); - } - }; - }, [handleCloseNotification]); + return { + show: (options?: Pick) => { + injectToaster(activeWindow); - return ( -
    -
    {message}
    + setTimeout(() => { + const id = toast.custom( + toastId => ( + toast.dismiss(toastId)} + /> + ), + { + duration: props?.autoClose === false ? Infinity : NOTIFICATION_TIMEOUT_MS, + position: 'top-center', + unstyled: true, + dismissible: false, + style: { + top: 24, + }, + }, + ); + notificationId.current = id; + }, ACTION_DELAY_MS); + }, + close: () => { + if (!notificationId.current) { + return; + } - -
    - ); + toast.dismiss(notificationId.current); + }, + }; }; -export const showAppNotification = (message: string) => { - const appNotificationContainer = document.querySelector(APP_NOTIFICATION_SELECTOR); +export const injectToaster = (activeWindow: Window) => { + const windowKey = activeWindow.name || 'default'; - if (!appNotificationContainer) { + if (roots[windowKey]) { return; } - const root = createRoot(appNotificationContainer); - const closeNotification = () => root.unmount(); + const container = activeWindow.document.querySelector(APP_NOTIFICATION_SELECTOR); + + if (!container) { + throw new Error('Notification container not found!'); + } + + const root = createRoot(container); + + roots[windowKey] = root; + + root.render(); +}; - root.render(); +// Clear all roots to prevent memory leaks. +// Necessary, when the activeWindow changes (e.g. switching from the main window to the detached call window). +// Without cleaning the roots (unmounting) the from the DOM note, would be rendered in both windows. +const clearRoots = () => { + // eslint-disable-next-line id-length + Object.entries(roots).forEach(([_, rootEntry]) => { + rootEntry.unmount(); + }); + roots = {}; +}; + +interface AppNotificationProps extends Pick { + onClose?: () => void; +} + +const AppNotification = ({message, icon: Icon, withCloseButton, onClose}: AppNotificationProps) => { + return ( +
    + {Icon && } +
    {message}
    + {withCloseButton && ( + + )} +
    + ); }; diff --git a/src/script/components/Modals/QualityFeedbackModal/QualityFeedbackModal.tsx b/src/script/components/Modals/QualityFeedbackModal/QualityFeedbackModal.tsx index 55054162ac9..42a63e7dfab 100644 --- a/src/script/components/Modals/QualityFeedbackModal/QualityFeedbackModal.tsx +++ b/src/script/components/Modals/QualityFeedbackModal/QualityFeedbackModal.tsx @@ -25,7 +25,7 @@ import {container} from 'tsyringe'; import {Button, ButtonVariant, Checkbox, CheckboxLabel} from '@wireapp/react-ui-kit'; import {WebAppEvents} from '@wireapp/webapp-events'; -import {showAppNotification} from 'Components/AppNotification'; +import {useAppNotification} from 'Components/AppNotification'; import {useCallAlertState} from 'Components/calling/useCallAlertState'; import {ModalComponent} from 'Components/Modals/ModalComponent'; import {RatingListLabel} from 'Components/Modals/QualityFeedbackModal/typings'; @@ -58,6 +58,10 @@ export const QualityFeedbackModal = () => { const {setQualityFeedbackModalShown, qualityFeedbackModalShown} = useCallAlertState(); const {self: selfUser} = useKoSubscribableChildren(userState, ['self']); + const submittedNotification = useAppNotification({ + message: t('qualityFeedback.notificationSubmitted'), + }); + if (!qualityFeedbackModalShown) { return null; } @@ -76,7 +80,7 @@ export const QualityFeedbackModal = () => { currentStorageData[selfUser.id] = isChecked ? null : dateUntilShowModal.getTime(); localStorage.setItem(CALL_QUALITY_FEEDBACK_KEY, JSON.stringify(currentStorageData)); - showAppNotification(t('qualityFeedback.notificationSubmitted')); + submittedNotification.show(); } catch (error) { logger.warn(`Can't send feedback: ${(error as Error).message}`); } finally { diff --git a/src/script/components/calling/CallingCell/CallingCell.tsx b/src/script/components/calling/CallingCell/CallingCell.tsx index d028745b6bc..963d4d4637e 100644 --- a/src/script/components/calling/CallingCell/CallingCell.tsx +++ b/src/script/components/calling/CallingCell/CallingCell.tsx @@ -23,7 +23,9 @@ import {TabIndex} from '@wireapp/react-ui-kit/lib/types/enums'; import {container} from 'tsyringe'; import {CALL_TYPE, REASON as CALL_REASON, STATE as CALL_STATE} from '@wireapp/avs'; +import {WebAppEvents} from '@wireapp/webapp-events'; +import {useAppNotification} from 'Components/AppNotification'; import {callingContainer} from 'Components/calling/CallingCell/CallingCell.styles'; import {CallingControls} from 'Components/calling/CallingCell/CallingControls'; import {CallingHeader} from 'Components/calling/CallingCell/CallingHeader'; @@ -159,6 +161,23 @@ export const CallingCell = ({ isMuted: isCurrentlyMuted, }); + const screenSharingEndedNotification = useAppNotification({ + message: t('videoCallScreenShareEnded'), + activeWindow: window, + }); + + useEffect(() => { + const screenSharingEndedHandler = () => { + screenSharingEndedNotification.show(); + }; + + window.addEventListener(WebAppEvents.CALL.SCREEN_SHARING_ENDED, screenSharingEndedHandler); + + return () => { + window.removeEventListener(WebAppEvents.CALL.SCREEN_SHARING_ENDED, screenSharingEndedHandler); + }; + }, [screenSharingEndedNotification]); + const handleMaximizeKeydown = useCallback( (event: React.KeyboardEvent) => { if (!isOngoing) { diff --git a/src/script/components/calling/DetachedCallingCell/components/DetachedWindow/DetachedWindow.tsx b/src/script/components/calling/DetachedCallingCell/components/DetachedWindow/DetachedWindow.tsx index 933371c07e6..85dbc3f9c9b 100644 --- a/src/script/components/calling/DetachedCallingCell/components/DetachedWindow/DetachedWindow.tsx +++ b/src/script/components/calling/DetachedCallingCell/components/DetachedWindow/DetachedWindow.tsx @@ -54,6 +54,7 @@ export const DetachedWindow = ({children, callState = container.resolve(CallStat {children} +
    , detachedWindow.document.body, diff --git a/src/script/components/calling/FullscreenVideoCall.tsx b/src/script/components/calling/FullscreenVideoCall.tsx index 297c3897c66..b051d3a5ec8 100644 --- a/src/script/components/calling/FullscreenVideoCall.tsx +++ b/src/script/components/calling/FullscreenVideoCall.tsx @@ -35,7 +35,9 @@ import { RaiseHandIcon, Select, } from '@wireapp/react-ui-kit'; +import {WebAppEvents} from '@wireapp/webapp-events'; +import {useAppNotification} from 'Components/AppNotification/AppNotification'; import {useCallAlertState} from 'Components/calling/useCallAlertState'; import {ConversationClassifiedBar} from 'Components/ClassifiedBar/ClassifiedBar'; import * as Icon from 'Components/Icon'; @@ -237,6 +239,24 @@ const FullscreenVideoCall = ({ const [isCallViewOpen, toggleCallView] = useToggleState(false); const [isParticipantsListOpen, toggleParticipantsList] = useToggleState(false); + const handRaisedNotification = useAppNotification({ + activeWindow: viewMode === CallingViewMode.DETACHED_WINDOW ? detachedWindow! : window, + }); + + useEffect(() => { + const handRaisedHandler = (event: Event) => { + handRaisedNotification.show({ + message: (event as CustomEvent<{notificationMessage: string}>).detail.notificationMessage, + }); + }; + + window.addEventListener(WebAppEvents.CALL.HAND_RAISED, handRaisedHandler); + + return () => { + window.removeEventListener(WebAppEvents.CALL.HAND_RAISED, handRaisedHandler); + }; + }, [handRaisedNotification]); + function toggleIsHandRaised(currentIsHandRaised: boolean) { selfParticipant.handRaisedAt(new Date().getTime()); sendHandRaised(!currentIsHandRaised, call); diff --git a/src/script/util/DebugUtil.ts b/src/script/util/DebugUtil.ts index 2dea7977747..aaf4138025b 100644 --- a/src/script/util/DebugUtil.ts +++ b/src/script/util/DebugUtil.ts @@ -39,7 +39,6 @@ import {container} from 'tsyringe'; import {AvsDebugger} from '@wireapp/avs-debugger'; -import {showAppNotification} from 'Components/AppNotification'; import {getStorage} from 'Util/localStorage'; import {getLogger, Logger} from 'Util/Logger'; @@ -621,8 +620,4 @@ export class DebugUtil { disableForcedErrorReporting() { return disableForcedErrorReporting(); } - - renderAppNotification(message?: string) { - showAppNotification(message || 'Test notification'); - } } diff --git a/src/style/components/app-notification.less b/src/style/components/app-notification.less new file mode 100644 index 00000000000..25ed4072a36 --- /dev/null +++ b/src/style/components/app-notification.less @@ -0,0 +1,40 @@ +.app-notification { + display: flex; + align-items: center; + padding: 8px 16px; + border-radius: 12px; + background-color: var(--main-color); + box-shadow: 0 2px 16px 0 var(--background-fade-16); + gap: 12px; + + body.theme-dark & { + background-color: var(--gray-80); + box-shadow: 0 2px 16px 0 rgba(151, 151, 151, 0.12); + } + + &__content { + color: var(--white); + font-size: var(--font-size-base); + font-weight: var(--font-weight-regular); + line-height: var(--line-height-lg); + } + + &__button { + display: flex; + align-items: center; + justify-content: center; + padding: 0; + border: none; + background: transparent; + } + + &__icon { + fill: var(--white); + } +} + +[data-sonner-toaster] { + display: flex; + align-items: center; + justify-content: center; +} diff --git a/src/style/foundation/main.less b/src/style/foundation/main.less index 23118178eb9..65493369d03 100644 --- a/src/style/foundation/main.less +++ b/src/style/foundation/main.less @@ -87,6 +87,7 @@ @import '../components/mention-suggestions'; @import '../components/list/conversation-list-calling-cell'; @import '../components/lexical-input'; +@import '../components/app-notification.less'; @import '../content/animations'; @import '../content/collection'; diff --git a/yarn.lock b/yarn.lock index 2e7108ac861..6c92b8d56fd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6223,10 +6223,10 @@ __metadata: languageName: node linkType: hard -"@wireapp/webapp-events@npm:0.24.3": - version: 0.24.3 - resolution: "@wireapp/webapp-events@npm:0.24.3" - checksum: 10/19388c669ad105b364ea3de1ebffd7b43b1c43e0eff093f35ea6f989c989117324235979a6325f8611aca8b15cdb593657800a24a5ea5b190ce47b2c55e5cf02 +"@wireapp/webapp-events@npm:0.25.0": + version: 0.25.0 + resolution: "@wireapp/webapp-events@npm:0.25.0" + checksum: 10/9b0d3a0563facf11b79bd4ebcf08323772c4b2de6f4412bcdebbba11024dd33b1e998a67e3f9fdc0010d421306e3ca85029f35ff0fdec12e5e3acee0d193114b languageName: node linkType: hard @@ -16752,6 +16752,16 @@ __metadata: languageName: node linkType: hard +"sonner@npm:^1.7.1": + version: 1.7.1 + resolution: "sonner@npm:1.7.1" + peerDependencies: + react: ^18.0.0 || ^19.0.0 || ^19.0.0-rc + react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-rc + checksum: 10/a67279e3db9cf0ae235cc316812b22489dcbe2c9488e12313f35c5073520640ffe3c955a61ab1992ed4b4b96ca72087b6687b725305a0e3be9b1279c5a1fc735 + languageName: node + linkType: hard + "sortobject@npm:^4.0.0": version: 4.16.0 resolution: "sortobject@npm:4.16.0" @@ -18782,7 +18792,7 @@ __metadata: "@wireapp/store-engine": "npm:5.1.11" "@wireapp/store-engine-dexie": "npm:2.1.15" "@wireapp/telemetry": "npm:0.1.4" - "@wireapp/webapp-events": "npm:0.24.3" + "@wireapp/webapp-events": "npm:0.25.0" amplify: "https://github.com/wireapp/amplify#head=master" archiver: "npm:7.0.1" autoprefixer: "npm:10.4.20" @@ -18860,6 +18870,7 @@ __metadata: seedrandom: "npm:3.0.5" simple-git: "npm:3.27.0" sinon: "npm:18.0.0" + sonner: "npm:^1.7.1" speakingurl: "npm:14.0.1" style-loader: "npm:4.0.0" stylelint: "npm:16.11.0" From 6ad3f26294a20668d22ae243b26ccd3fe82b2743 Mon Sep 17 00:00:00 2001 From: Enrico Schwendig Date: Thu, 12 Dec 2024 13:42:40 +0100 Subject: [PATCH 301/329] feat: remove test zoom icons (#18487) --- .../CallParticipantsListItem/CallParticipantStatusIcons.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/script/components/calling/CallParticipantsListItem/CallParticipantStatusIcons.tsx b/src/script/components/calling/CallParticipantsListItem/CallParticipantStatusIcons.tsx index 0b06fb2daf4..b7a113dfb21 100644 --- a/src/script/components/calling/CallParticipantsListItem/CallParticipantStatusIcons.tsx +++ b/src/script/components/calling/CallParticipantsListItem/CallParticipantStatusIcons.tsx @@ -56,7 +56,6 @@ export const CallParticipantStatusIcons = ({callParticipant}: CallParticipantSta {isMuted ? ( - ) : ( Date: Fri, 13 Dec 2024 10:39:50 +0100 Subject: [PATCH 302/329] fix: order screen share before video (#18490) --- src/script/calling/Call.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/script/calling/Call.ts b/src/script/calling/Call.ts index 4446ca9b88d..12f6eddcf92 100644 --- a/src/script/calling/Call.ts +++ b/src/script/calling/Call.ts @@ -226,10 +226,13 @@ export class Call { const selfParticipant = this.getSelfParticipant(); const remoteParticipants = this.getRemoteParticipants().sort((p1, p2) => sortUsersByPriority(p1.user, p2.user)); - const [withVideo, withoutVideo] = partition(remoteParticipants, participant => participant.isSendingVideo()); + const [withVideoAndScreenShare, withoutVideo] = partition(remoteParticipants, participant => + participant.isSendingVideo(), + ); + const [withScreenShare, withVideo] = partition(withVideoAndScreenShare, participant => participant.sharesScreen()); const newPages = chunk( - [selfParticipant, ...withVideo, ...withoutVideo].filter(Boolean), + [selfParticipant, ...withScreenShare, ...withVideo, ...withoutVideo].filter(Boolean), NUMBER_OF_PARTICIPANTS_IN_ONE_PAGE, ); From 64fd75d8777f0ed00bdc2c2728eec2afa6dc82ef Mon Sep 17 00:00:00 2001 From: Virgile <78490891+V-Gira@users.noreply.github.com> Date: Fri, 13 Dec 2024 12:04:36 +0100 Subject: [PATCH 303/329] runfix(api-client/core): use v7 endpoint for setting member conversation roles [WPB-15024] (#18488) * chore(deps): bump core to 46.15.0 * feat(api-client/core): use v7 endpoint for setting member conversation roles [WPB-15024] * runfix: use conversation's qualified id * chore(deps): bump core to 46.15.1 * chore(deps): bump core to 46.15.3 --- package.json | 2 +- .../ConversationRoleRepository.ts | 5 +++-- .../conversation/ConversationService.ts | 2 +- .../GroupParticipantUser.tsx | 2 +- yarn.lock | 20 +++++++++---------- 5 files changed, 16 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index 06471e7def5..84d239c6ac3 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "@wireapp/avs": "10.0.4", "@wireapp/avs-debugger": "0.0.7", "@wireapp/commons": "5.4.0", - "@wireapp/core": "46.14.1", + "@wireapp/core": "46.15.3", "@wireapp/react-ui-kit": "9.28.0", "@wireapp/store-engine-dexie": "2.1.15", "@wireapp/telemetry": "0.1.4", diff --git a/src/script/conversation/ConversationRoleRepository.ts b/src/script/conversation/ConversationRoleRepository.ts index 73361c11b9e..35205298a8a 100644 --- a/src/script/conversation/ConversationRoleRepository.ts +++ b/src/script/conversation/ConversationRoleRepository.ts @@ -18,6 +18,7 @@ */ import {DefaultConversationRoleName as DefaultRole, ConversationRole} from '@wireapp/api-client/lib/conversation/'; +import {QualifiedId} from '@wireapp/api-client/lib/user'; import {container} from 'tsyringe'; import {Logger, getLogger} from 'Util/Logger'; @@ -108,10 +109,10 @@ export class ConversationRoleRepository { readonly setMemberConversationRole = ( conversation: Conversation, - userId: string, + userId: QualifiedId, conversationRole: string, ): Promise => { - return this.conversationService.putMembers(conversation.id, userId, { + return this.conversationService.putMembers(conversation.qualifiedId, userId, { conversation_role: conversationRole, }); }; diff --git a/src/script/conversation/ConversationService.ts b/src/script/conversation/ConversationService.ts index 03134d469c7..9f5fec495c2 100644 --- a/src/script/conversation/ConversationService.ts +++ b/src/script/conversation/ConversationService.ts @@ -303,7 +303,7 @@ export class ConversationService { return this.apiClient.api.conversation.deleteMember(conversationId, userId); } - putMembers(conversationId: string, userId: string, data: ConversationOtherMemberUpdateData): Promise { + putMembers(conversationId: QualifiedId, userId: QualifiedId, data: ConversationOtherMemberUpdateData): Promise { return this.apiClient.api.conversation.putOtherMember(userId, conversationId, data); } diff --git a/src/script/page/RightSidebar/GroupParticipantUser/GroupParticipantUser.tsx b/src/script/page/RightSidebar/GroupParticipantUser/GroupParticipantUser.tsx index 11f15e25090..0f5438396f8 100644 --- a/src/script/page/RightSidebar/GroupParticipantUser/GroupParticipantUser.tsx +++ b/src/script/page/RightSidebar/GroupParticipantUser/GroupParticipantUser.tsx @@ -95,7 +95,7 @@ const GroupParticipantUser: FC = ({ } const newRole = isAdmin ? DefaultRole.WIRE_MEMBER : DefaultRole.WIRE_ADMIN; - await conversationRoleRepository.setMemberConversationRole(activeConversation, currentUser.id, newRole); + await conversationRoleRepository.setMemberConversationRole(activeConversation, currentUser.qualifiedId, newRole); roles[currentUser.id] = newRole; activeConversation.roles(roles); diff --git a/yarn.lock b/yarn.lock index 6c92b8d56fd..fe789d7909f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5948,9 +5948,9 @@ __metadata: languageName: node linkType: hard -"@wireapp/api-client@npm:^27.14.0": - version: 27.14.0 - resolution: "@wireapp/api-client@npm:27.14.0" +"@wireapp/api-client@npm:^27.16.1": + version: 27.16.1 + resolution: "@wireapp/api-client@npm:27.16.1" dependencies: "@wireapp/commons": "npm:^5.4.0" "@wireapp/priority-queue": "npm:^2.1.11" @@ -5965,7 +5965,7 @@ __metadata: tough-cookie: "npm:4.1.4" ws: "npm:8.18.0" zod: "npm:3.23.8" - checksum: 10/8f03bc24e21b8a1b2c78e4aa663115eb910d2cb5acbf3e4603e25ed860b72a1c2342db4cf02d2f853413386b3d6b91128d0baf72cb4c6f3237dc75f49b4a4151 + checksum: 10/d9965829f8264dbc0317cbf2addca0eb3ef08f958ebf2422be60985de8254d777b24edbe89e98112dbe0a7096bea3b41b9cc246602404aa72b8e4b07ffabd57e languageName: node linkType: hard @@ -6030,11 +6030,11 @@ __metadata: languageName: node linkType: hard -"@wireapp/core@npm:46.14.1": - version: 46.14.1 - resolution: "@wireapp/core@npm:46.14.1" +"@wireapp/core@npm:46.15.3": + version: 46.15.3 + resolution: "@wireapp/core@npm:46.15.3" dependencies: - "@wireapp/api-client": "npm:^27.14.0" + "@wireapp/api-client": "npm:^27.16.1" "@wireapp/commons": "npm:^5.4.0" "@wireapp/core-crypto": "npm:3.0.0" "@wireapp/cryptobox": "npm:12.8.0" @@ -6052,7 +6052,7 @@ __metadata: long: "npm:^5.2.0" uuid: "npm:9.0.1" zod: "npm:3.23.8" - checksum: 10/11a5fbedddc1c5be8218935f4b1f1ec9c7824c4261e6d189ad3708f8edcdcfaea143fd121fd57c05a790c0392e9e5757c5a82742c1c8a85fb3ff9f8360a4c650 + checksum: 10/ec2f4f32606367e6a8d94341b8f528a0cf90c4b0cb05f40b0e972605557a9d97ae5891cfd8338cdecb615515240dfcfbbe2b4c1faf7d3f79ee2d37b1ad248e07 languageName: node linkType: hard @@ -18785,7 +18785,7 @@ __metadata: "@wireapp/avs-debugger": "npm:0.0.7" "@wireapp/commons": "npm:5.4.0" "@wireapp/copy-config": "npm:2.2.10" - "@wireapp/core": "npm:46.14.1" + "@wireapp/core": "npm:46.15.3" "@wireapp/eslint-config": "npm:3.0.7" "@wireapp/prettier-config": "npm:0.6.4" "@wireapp/react-ui-kit": "npm:9.28.0" From 866c3ff5aaefd72f0bd7f4cda93dc17cecf0b5ef Mon Sep 17 00:00:00 2001 From: Immad Abdul Jabbar Date: Fri, 13 Dec 2024 17:54:15 +0500 Subject: [PATCH 304/329] fix: add "wire-" prefix for sso code [WPB-11927] (#18477) --- src/script/auth/page/Index.test.tsx | 3 ++- src/script/auth/page/Index.tsx | 3 ++- src/script/auth/page/Login.tsx | 5 +++-- src/script/auth/page/SingleSignOnForm.tsx | 3 +-- src/script/auth/util/urlUtil.ts | 6 ++++++ 5 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/script/auth/page/Index.test.tsx b/src/script/auth/page/Index.test.tsx index 5dd352ff919..69c69c377a0 100644 --- a/src/script/auth/page/Index.test.tsx +++ b/src/script/auth/page/Index.test.tsx @@ -28,6 +28,7 @@ import {initialAuthState} from '../module/reducer/authReducer'; import {ROUTE} from '../route'; import {mockStoreFactory} from '../util/test/mockStoreFactory'; import {mountComponent} from '../util/test/TestUtil'; +import {getPrefixedSSOCode} from '../util/urlUtil'; jest.mock('react-router-dom', () => ({ ...jest.requireActual('react-router-dom'), @@ -71,7 +72,7 @@ describe('when visiting the index page', () => { }), ); - expect(Navigate).toHaveBeenCalledWith({to: `${ROUTE.SSO}/wire-${defaultSSOCode}`}, {}); + expect(Navigate).toHaveBeenCalledWith({to: `${ROUTE.SSO}/${getPrefixedSSOCode(defaultSSOCode)}`}, {}); }); it('shows the welcome text with default backend name', () => { diff --git a/src/script/auth/page/Index.tsx b/src/script/auth/page/Index.tsx index 632cd431ce5..90c812f7ec7 100644 --- a/src/script/auth/page/Index.tsx +++ b/src/script/auth/page/Index.tsx @@ -40,6 +40,7 @@ import {bindActionCreators, RootState} from '../module/reducer'; import * as AuthSelector from '../module/selector/AuthSelector'; import {QUERY_KEY, ROUTE} from '../route'; import {logoutReasonStrings} from '../util/logoutUtil'; +import {getPrefixedSSOCode} from '../util/urlUtil'; type Props = React.HTMLProps; @@ -56,7 +57,7 @@ const IndexComponent = ({defaultSSOCode}: Props & ConnectedProps & DispatchProps if (defaultSSOCode) { // Redirect to prefilled SSO login if default SSO code is set on backend - return ; + return ; } const features = Config.getConfig().FEATURE; diff --git a/src/script/auth/page/Login.tsx b/src/script/auth/page/Login.tsx index 8ff3f3761f0..dd7a08b16c2 100644 --- a/src/script/auth/page/Login.tsx +++ b/src/script/auth/page/Login.tsx @@ -77,6 +77,7 @@ import * as ConversationSelector from '../module/selector/ConversationSelector'; import {QUERY_KEY, ROUTE} from '../route'; import {parseError, parseValidationErrors} from '../util/errorUtil'; import {getOAuthQueryString} from '../util/oauthUtil'; +import {getPrefixedSSOCode} from '../util/urlUtil'; type Props = React.HTMLProps & { embedded?: boolean; }; @@ -156,7 +157,7 @@ const LoginComponent = ({ useEffect(() => { // Redirect to prefilled SSO login if default SSO code is set on backend unless we're following the guest link flow if (defaultSSOCode && !embedded) { - navigate(`${ROUTE.SSO}/${defaultSSOCode}`); + navigate(`${ROUTE.SSO}/${getPrefixedSSOCode(defaultSSOCode)}`); } }, [defaultSSOCode, embedded, navigate]); @@ -474,7 +475,7 @@ const LoginComponent = ({