From eb36e1d26b53f61621fdd0600ece487c803da2ab Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 20 Nov 2022 15:10:52 +0000 Subject: [PATCH 001/329] chore(deps): Bump @wireapp/commons from 5.0.0 to 5.0.3 in /server (#14148) Bumps [@wireapp/commons](https://github.com/wireapp/wire-web-packages) from 5.0.0 to 5.0.3. - [Release notes](https://github.com/wireapp/wire-web-packages/releases) - [Commits](https://github.com/wireapp/wire-web-packages/compare/@wireapp/commons@5.0.0...@wireapp/commons@5.0.3) --- updated-dependencies: - dependency-name: "@wireapp/commons" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] 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 c8fca926e6c..944f6d23686 100644 --- a/server/package.json +++ b/server/package.json @@ -4,7 +4,7 @@ "main": "dist/index.js", "license": "GPL-3.0", "dependencies": { - "@wireapp/commons": "5.0.0", + "@wireapp/commons": "5.0.3", "dotenv": "16.0.3", "dotenv-extended": "2.9.0", "express": "4.18.2", diff --git a/server/yarn.lock b/server/yarn.lock index 5e514512b25..112b4bac886 100644 --- a/server/yarn.lock +++ b/server/yarn.lock @@ -1371,15 +1371,15 @@ __metadata: languageName: node linkType: hard -"@wireapp/commons@npm:5.0.0": - version: 5.0.0 - resolution: "@wireapp/commons@npm:5.0.0" +"@wireapp/commons@npm:5.0.3": + version: 5.0.3 + resolution: "@wireapp/commons@npm:5.0.3" dependencies: ansi-regex: 5.0.1 fs-extra: 10.1.0 logdown: 3.3.1 platform: 1.3.6 - checksum: 9950b0bc0709a9abae963f99aed8f9bef772fdad6fc4054abf95b660b093e20704f3db2316cdfc189d7ee8787f665dc3902049af20161d777a9eb6e86b3a2250 + checksum: cf69ac8d0c3c116b0ccde13cee46d3c6623f36c395f449a73ac4dbb602aff229abb86b0a811b3cc91e8773ee9c6892ffc455612aa876009ddba63f782b73e5b0 languageName: node linkType: hard @@ -6472,7 +6472,7 @@ __metadata: "@types/geolite2": 2.0.0 "@types/hbs": 4.0.1 "@types/node": 12.20.55 - "@wireapp/commons": 5.0.0 + "@wireapp/commons": 5.0.3 dotenv: 16.0.3 dotenv-extended: 2.9.0 express: 4.18.2 From a2278beb1b4b707f040df1097e6c7f9392a16711 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 20 Nov 2022 15:20:21 +0000 Subject: [PATCH 002/329] chore(deps-dev): Bump typescript from 4.8.4 to 4.9.3 in /server (#14150) Bumps [typescript](https://github.com/Microsoft/TypeScript) from 4.8.4 to 4.9.3. - [Release notes](https://github.com/Microsoft/TypeScript/releases) - [Commits](https://github.com/Microsoft/TypeScript/compare/v4.8.4...v4.9.3) --- updated-dependencies: - dependency-name: typescript dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] 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 944f6d23686..ab995a29cf2 100644 --- a/server/package.json +++ b/server/package.json @@ -33,7 +33,7 @@ "rimraf": "3.0.2", "ts-jest": "29.0.3", "ts-node": "10.9.1", - "typescript": "4.8.4" + "typescript": "4.9.3" }, "scripts": { "build": "yarn clean && tsc && yarn copy-assets && yarn create-commit-sha && yarn create-version-file", diff --git a/server/yarn.lock b/server/yarn.lock index 112b4bac886..5503a945701 100644 --- a/server/yarn.lock +++ b/server/yarn.lock @@ -6204,23 +6204,23 @@ __metadata: languageName: node linkType: hard -"typescript@npm:4.8.4": - version: 4.8.4 - resolution: "typescript@npm:4.8.4" +"typescript@npm:4.9.3": + version: 4.9.3 + resolution: "typescript@npm:4.9.3" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 3e4f061658e0c8f36c820802fa809e0fd812b85687a9a2f5430bc3d0368e37d1c9605c3ce9b39df9a05af2ece67b1d844f9f6ea8ff42819f13bcb80f85629af0 + checksum: 17b8f816050b412403e38d48eef0e893deb6be522d6dc7caf105e54a72e34daf6835c447735fd2b28b66784e72bfbf87f627abb4818a8e43d1fa8106396128dc languageName: node linkType: hard -"typescript@patch:typescript@4.8.4#~builtin": - version: 4.8.4 - resolution: "typescript@patch:typescript@npm%3A4.8.4#~builtin::version=4.8.4&hash=a1c5e5" +"typescript@patch:typescript@4.9.3#~builtin": + version: 4.9.3 + resolution: "typescript@patch:typescript@npm%3A4.9.3#~builtin::version=4.9.3&hash=a1c5e5" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 563a0ef47abae6df27a9a3ab38f75fc681f633ccf1a3502b1108e252e187787893de689220f4544aaf95a371a4eb3141e4a337deb9895de5ac3c1ca76430e5f0 + checksum: ef65c22622d864497d0a0c5db693523329b3284c15fe632e93ad9aa059e8dc38ef3bd767d6f26b1e5ecf9446f49bd0f6c4e5714a2eeaf352805dc002479843d1 languageName: node linkType: hard @@ -6492,7 +6492,7 @@ __metadata: rimraf: 3.0.2 ts-jest: 29.0.3 ts-node: 10.9.1 - typescript: 4.8.4 + typescript: 4.9.3 languageName: unknown linkType: soft From ec9cd786fad05f6f7377add6fee9a5ed50a48183 Mon Sep 17 00:00:00 2001 From: Thomas Belin Date: Mon, 21 Nov 2022 13:58:59 +0100 Subject: [PATCH 003/329] feat: Focus order for chat content area [ACC-268] This reverts commit a85dc612f473e76124674a54144f2a27fc202c65, reversing changes made to f70526bd60f36a402e8090f85a39902f6511034a. --- src/i18n/en-US.json | 4 +- .../components/Conversation/Conversation.tsx | 98 +++++----- .../ContentMessage/MessageFooterLike.test.tsx | 3 + .../ContentMessage/MessageFooterLike.tsx | 12 +- .../Message/ContentMessage/MessageLike.tsx | 4 +- .../Message/ContentMessage/MessageQuote.tsx | 76 +++----- .../asset/RenderShowMsgBtn.test.tsx | 49 +++++ .../ContentMessage/asset/RenderShowMsgBtn.tsx | 56 ++++++ .../asset/TextMessageRenderer.test.tsx | 149 +++++++++++++++ .../asset/TextMessageRenderer.tsx | 179 ++++++++++++++++++ .../asset/controls/MediaButton.tsx | 3 + .../Message/ContentMessage/asset/index.tsx | 24 +-- .../Message/ContentMessage/index.test.tsx | 3 + .../Message/ContentMessage/index.tsx | 49 +++-- .../MessagesList/Message/MessageWrapper.tsx | 9 +- .../MessagesList/Message/PingMessage.test.tsx | 1 + .../MessagesList/Message/PingMessage.tsx | 3 + .../Message/ReadReceiptStatus.test.tsx | 7 + .../Message/ReadReceiptStatus.tsx | 3 + .../components/MessagesList/Message/index.tsx | 75 +++++++- .../components/MessagesList/MessageList.tsx | 38 ++-- .../components/list/ConversationListCell.tsx | 21 +- src/script/entity/message/Asset.ts | 2 + src/script/guards/Mouse.ts | 5 +- src/script/hooks/useRoveFocus.ts | 8 +- .../Conversations/ConversationsList.tsx | 12 +- .../GroupedConversationsFolder.tsx | 12 +- src/script/router/Router.ts | 8 +- src/script/router/routerBindings.ts | 15 +- src/script/util/conversationMessages.test.ts | 112 +++++++++++ src/script/util/conversationMessages.ts | 37 ++++ .../util/useDisposableRef/useDisposableRef.ts | 5 +- .../content/conversation/message-list.less | 8 + 33 files changed, 916 insertions(+), 174 deletions(-) create mode 100644 src/script/components/MessagesList/Message/ContentMessage/asset/RenderShowMsgBtn.test.tsx create mode 100644 src/script/components/MessagesList/Message/ContentMessage/asset/RenderShowMsgBtn.tsx create mode 100644 src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer.test.tsx create mode 100644 src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer.tsx create mode 100644 src/script/util/conversationMessages.test.ts diff --git a/src/i18n/en-US.json b/src/i18n/en-US.json index 4e09554c7df..868ed174443 100644 --- a/src/i18n/en-US.json +++ b/src/i18n/en-US.json @@ -1263,5 +1263,7 @@ "wireLinux": "{{brandName}} for Linux", "wireMacos": "{{brandName}} for macOS", "wireWindows": "{{brandName}} for Windows", - "wire_for_web": "{{brandName}} for Web" + "wire_for_web": "{{brandName}} for Web", + "mediaBtnPlay": "Play", + "mediaBtnPause": "Pause" } diff --git a/src/script/components/Conversation/Conversation.tsx b/src/script/components/Conversation/Conversation.tsx index fed97d78d64..65567d40cf1 100644 --- a/src/script/components/Conversation/Conversation.tsx +++ b/src/script/components/Conversation/Conversation.tsx @@ -17,15 +17,7 @@ * */ -import { - FC, - MouseEvent as ReactMouseEvent, - KeyboardEvent as ReactKeyboardEvent, - UIEvent, - useContext, - useEffect, - useState, -} from 'react'; +import {FC, UIEvent, useContext, useEffect, useState} from 'react'; import cx from 'classnames'; import {container} from 'tsyringe'; @@ -65,6 +57,7 @@ import {PanelState} from '../../page/RightSidebar'; import {RootContext} from '../../page/RootProvider'; import {TeamState} from '../../team/TeamState'; import {UserState} from '../../user/UserState'; +import {ElementType} from '../MessagesList/Message/ContentMessage/asset/TextMessageRenderer'; type ReadMessageBuffer = {conversation: ConversationEntity; message: Message}; @@ -188,47 +181,32 @@ export const Conversation: FC = ({ } }; - const handleClickOnMessage = ( - messageEntity: ContentMessage | Text, - event: ReactMouseEvent | ReactKeyboardEvent, - ) => { - if (isMouseEvent(event) && event.button === 2) { - // Default browser behavior on right click - return true; - } - - const emailTarget = (event.target as HTMLElement).closest('[data-email-link]'); - if (emailTarget) { - safeMailOpen(emailTarget.href); - event.preventDefault(); - return false; - } + const handleEmailClick = (event: Event) => { + safeMailOpen((event.target as HTMLAnchorElement).href); + event.preventDefault(); + return false; + }; - const linkTarget = (event.target as HTMLElement).closest('[data-md-link]'); - if (linkTarget) { - const href = linkTarget.href; - PrimaryModal.show(PrimaryModal.type.CONFIRM, { - primaryAction: { - action: () => { - safeWindowOpen(href); - }, - text: t('modalOpenLinkAction'), - }, - text: { - message: t('modalOpenLinkMessage', href, {}, true), - title: t('modalOpenLinkTitle'), - }, - }); - event.preventDefault(); - return false; - } + const handleMarkdownLinkClick = (event: Event) => { + const href = (event.target as HTMLAnchorElement).href; + PrimaryModal.show(PrimaryModal.type.CONFIRM, { + primaryAction: { + action: () => safeWindowOpen(href), + text: t('modalOpenLinkAction'), + }, + text: { + message: t('modalOpenLinkMessage', href, {}, true), + title: t('modalOpenLinkTitle'), + }, + }); + event.preventDefault(); + return false; + }; - const hasMentions = messageEntity instanceof Text && messageEntity.mentions().length; - const mentionElement = hasMentions - ? (event.target as HTMLElement).closest('.message-mention') - : undefined; - const userId = mentionElement?.dataset.userId; - const domain = mentionElement?.dataset.userDomain; + const userMentionClick = (event: Event) => { + const target = event.currentTarget as HTMLElement; + const userId = target?.dataset.userId; + const domain = target?.dataset.userDomain; if (userId) { (async () => { @@ -242,6 +220,30 @@ export const Conversation: FC = ({ } })(); } + }; + + const btnRightClick = 2; + const handleClickOnMessage = ( + messageEntity: ContentMessage | Text, + event: MouseEvent | KeyboardEvent, + elementType: ElementType, + ) => { + if (isMouseEvent(event) && event.button === btnRightClick) { + // Default browser behavior on right click + return true; + } + + switch (elementType) { + case 'email': + handleEmailClick(event); + break; + case 'markdownLink': + handleMarkdownLinkClick(event); + break; + case 'mention': + userMentionClick(event); + break; + } // need to return `true` because knockout will prevent default if we return anything else (including undefined) return true; diff --git a/src/script/components/MessagesList/Message/ContentMessage/MessageFooterLike.test.tsx b/src/script/components/MessagesList/Message/ContentMessage/MessageFooterLike.test.tsx index a87b1716e83..af102553605 100644 --- a/src/script/components/MessagesList/Message/ContentMessage/MessageFooterLike.test.tsx +++ b/src/script/components/MessagesList/Message/ContentMessage/MessageFooterLike.test.tsx @@ -39,6 +39,7 @@ describe('MessageFooterLike', () => { const message = createLikeMessage({}); const props = { + focusConversation: true, is1to1Conversation: false, message, onClickLikes: jest.fn(), @@ -54,6 +55,7 @@ describe('MessageFooterLike', () => { it('does open conversation details in group conversation when clicking on like names', async () => { const props = { + focusConversation: true, is1to1Conversation: false, message: createLikeMessage({ is_liked: ko.pureComputed(() => true), @@ -71,6 +73,7 @@ describe('MessageFooterLike', () => { it('does not open conversation details in 1:1 conversation when clicking on like names', async () => { const props = { + focusConversation: true, is1to1Conversation: true, message: createLikeMessage({ is_liked: ko.pureComputed(() => true), diff --git a/src/script/components/MessagesList/Message/ContentMessage/MessageFooterLike.tsx b/src/script/components/MessagesList/Message/ContentMessage/MessageFooterLike.tsx index 866f8289572..0121e766c95 100644 --- a/src/script/components/MessagesList/Message/ContentMessage/MessageFooterLike.tsx +++ b/src/script/components/MessagesList/Message/ContentMessage/MessageFooterLike.tsx @@ -32,9 +32,16 @@ export interface MessageFooterLikeProps { message: ContentMessage; onClickLikes: (message: Message) => void; onLike: (message: ContentMessage, button?: boolean) => void; + focusConversation: boolean; } -const MessageFooterLike: React.FC = ({message, is1to1Conversation, onLike, onClickLikes}) => { +const MessageFooterLike: React.FC = ({ + message, + is1to1Conversation, + onLike, + onClickLikes, + focusConversation, +}) => { const {like_caption: likeCaption, reactions_user_ids: reactionsUserIds} = useKoSubscribableChildren(message, [ 'is_liked', 'like_caption', @@ -44,7 +51,7 @@ const MessageFooterLike: React.FC = ({message, is1to1Con return (
- +
@@ -222,34 +209,26 @@ const QuotedMessage: FC = ({ {asset.isText() && ( <> -
handleClickOnMessage(asset, event)} - onKeyDown={event => handleKeyDown(event, () => handleClickOnMessage(asset, event))} - dangerouslySetInnerHTML={{__html: asset.render(selfId)}} - dir="auto" + isCurrentConversationFocused={focusConversation} + asset={asset} data-uie-name="media-text-quote" + isQuoteMsg + setCanShowMore={setCanShowMore} + editedTimestamp={editedTimestamp} /> {canShowMore && ( - + )} )} @@ -287,6 +266,7 @@ const QuotedMessage: FC = ({ } }} data-uie-name="label-timestamp-quote" + tabIndex={focusConversation ? 0 : -1} > {isBeforeToday(timestamp) ? t('replyQuoteTimeStampDate', formatDateNumeral(timestamp)) diff --git a/src/script/components/MessagesList/Message/ContentMessage/asset/RenderShowMsgBtn.test.tsx b/src/script/components/MessagesList/Message/ContentMessage/asset/RenderShowMsgBtn.test.tsx new file mode 100644 index 00000000000..745c7ddd169 --- /dev/null +++ b/src/script/components/MessagesList/Message/ContentMessage/asset/RenderShowMsgBtn.test.tsx @@ -0,0 +1,49 @@ +/* + * Wire + * Copyright (C) 2021 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 {fireEvent, render} from '@testing-library/react'; + +import {t} from 'Util/LocalizerUtil'; + +import {RenderShowMsgBtn} from './RenderShowMsgBtn'; + +describe('ToggleMsgFullTxt', () => { + it('toggles button show more/show less for a quoted message', () => { + let show = true; + const setShowFullText = jest.fn(show => !show); + const {getByTestId, getByText, rerender} = render( + , + ); + + expect(getByText(t('replyQuoteShowLess'))).not.toBeNull(); + + const toggleShowBtn = getByTestId('do-show-more-quote'); + fireEvent.click(toggleShowBtn); + expect(setShowFullText).toHaveBeenCalled(); + + show = false; + + // re-render the same component with different props + rerender(); + fireEvent.click(toggleShowBtn); + + expect(setShowFullText).toHaveBeenCalled(); + expect(getByText(t('replyQuoteShowMore'))).not.toBeNull(); + }); +}); diff --git a/src/script/components/MessagesList/Message/ContentMessage/asset/RenderShowMsgBtn.tsx b/src/script/components/MessagesList/Message/ContentMessage/asset/RenderShowMsgBtn.tsx new file mode 100644 index 00000000000..2c645ab87c6 --- /dev/null +++ b/src/script/components/MessagesList/Message/ContentMessage/asset/RenderShowMsgBtn.tsx @@ -0,0 +1,56 @@ +/* + * Wire + * Copyright (C) 2021 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 {FC} from 'react'; + +import cx from 'classnames'; + +import {Icon} from 'Components/Icon'; +import {t} from 'Util/LocalizerUtil'; + +interface ShowMsgBtnProps { + showFullText: boolean; + isCurrentConversationFocused: boolean; + setShowFullText: (showMore: boolean) => void; +} + +export const RenderShowMsgBtn: FC = ({ + showFullText, + isCurrentConversationFocused, + setShowFullText, +}) => { + return ( + <> + + + ); +}; diff --git a/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer.test.tsx b/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer.test.tsx new file mode 100644 index 00000000000..13abbb18e2e --- /dev/null +++ b/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer.test.tsx @@ -0,0 +1,149 @@ +/* + * Wire + * Copyright (C) 2021 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 {fireEvent, render} from '@testing-library/react'; +import ko from 'knockout'; + +import {PROTO_MESSAGE_TYPE} from 'src/script/cryptography/ProtoMessageType'; +import {LinkPreview} from 'src/script/entity/message/LinkPreview'; +import type {Text} from 'src/script/entity/message/Text'; + +import {TextMessageRenderer} from './TextMessageRenderer'; + +import {MentionEntity} from '../../../../../message/MentionEntity'; + +const mention = { + domain: '', + length: 0, + startIndex: 1, + type: PROTO_MESSAGE_TYPE.MENTION_TYPE_USER_ID, + userId: '1', +}; + +const asset: Text = { + isAudio: jest.fn(), + isButton: jest.fn(), + isDownloadable: jest.fn(), + isFile: jest.fn(), + isImage: jest.fn(), + isLocation: jest.fn(), + isText: jest.fn(), + isUserMentioned: jest.fn(), + isVideo: jest.fn(), + key: '1234', + mentions: ko.observableArray([new MentionEntity(mention.startIndex, mention.length, mention.userId, mention.domain)]), + previews: ko.observableArray([new LinkPreview()]), + render: jest.fn(), + should_render_text: ko.pureComputed(jest.fn()), + size: '', + text: 'this is a default txt message', + type: 'text', +}; +describe('TextMessageRenderer', () => { + it('renders a text message', () => { + const onClickElement = jest.fn(); + const txtMsg = 'simple message'; + const {getByText} = render( + , + ); + const txtMsgElement = getByText(txtMsg); + expect(txtMsgElement).not.toBe(null); + + txtMsgElement.focus(); + fireEvent.keyDown(txtMsgElement); + + // plain text message is not interactive + expect(onClickElement).not.toHaveBeenCalled(); + }); + + it('renders and trigger click/keydown event of mention message correcly', () => { + const onClickElement = jest.fn(); + const text = `@jj yes it is`; + const {getByTestId} = render( + , + ); + const mention = getByTestId('label-other-mention'); + fireEvent.click(mention); + expect(onClickElement).toHaveBeenCalled(); + + fireEvent.keyDown(mention); + expect(onClickElement).toHaveBeenCalled(); + }); + + it('renders a link message and should trigger click/keydown event', () => { + const onClickElement = jest.fn(); + + const linkTxt = 'this is a link'; + const text = `${linkTxt}`; + asset.text = linkTxt; + + const {getByText} = render( + , + ); + const linkElem = getByText(linkTxt); + expect(linkElem).not.toBe(null); + + fireEvent.click(linkElem); + expect(onClickElement).toHaveBeenCalled(); + + fireEvent.keyDown(linkElem); + expect(onClickElement).toHaveBeenCalled(); + }); + + it('should not trigger a key event if the message is not focused', () => { + const onClickElement = jest.fn(); + + const linkTxt = 'this is a link'; + const text = `${linkTxt}`; + asset.text = linkTxt; + + const {getByText} = render( + , + ); + const linkElem = getByText(linkTxt); + expect(linkElem).not.toBe(null); + + fireEvent.keyDown(linkElem); + expect(onClickElement).not.toHaveBeenCalled(); + }); +}); diff --git a/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer.tsx b/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer.tsx new file mode 100644 index 00000000000..f31e61297a1 --- /dev/null +++ b/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer.tsx @@ -0,0 +1,179 @@ +/* + * Wire + * Copyright (C) 2021 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 {useEffect, useRef, FC} from 'react'; + +import {Text} from 'src/script/entity/message/Text'; +import {handleKeyDown} from 'Util/KeyboardUtil'; +import {useDisposableRef} from 'Util/useDisposableRef'; + +export type ElementType = 'markdownLink' | 'email' | 'mention'; + +interface TextMessageRendererProps { + onMessageClick: (asset: Text, event: MouseEvent | KeyboardEvent, elementType: ElementType) => void; + text: string; + isCurrentConversationFocused: boolean; + msgClass: string; + asset: Text; + isQuoteMsg?: boolean; + editedTimestamp?: number; + setCanShowMore?: (showMore: boolean) => void; +} +const events = ['click', 'keydown', 'auxclick']; + +export const TextMessageRenderer: FC = ({ + text, + onMessageClick, + msgClass, + isCurrentConversationFocused, + asset, + isQuoteMsg = false, + editedTimestamp, + setCanShowMore, + ...props +}) => { + const containerRef = useRef(null); + const detectLongQuotes = useDisposableRef( + element => { + const preNode = element.querySelector('pre'); + const width = Math.max(element.scrollWidth, preNode ? preNode.scrollWidth : 0); + const height = Math.max(element.scrollHeight, preNode ? preNode.scrollHeight : 0); + const isWider = width > element.clientWidth; + const isHigher = height > element.clientHeight; + setCanShowMore?.(isWider || isHigher); + return () => {}; + }, + [editedTimestamp], + ); + + useEffect(() => { + if (!containerRef.current) { + return undefined; + } + const emailLinks = containerRef.current && [...containerRef.current.querySelectorAll('[data-email-link]')]; + const linkTargets = containerRef.current && [...containerRef.current.querySelectorAll('a[data-md-link]')]; + const msgLinkTargets = containerRef.current && [...containerRef.current.querySelectorAll('[data-uie-name]')]; + const hasMentions = asset && asset.mentions().length; + const msgMention = hasMentions + ? containerRef.current && [...containerRef.current.querySelectorAll('.message-mention')] + : null; + + // set tabindex for each interactive element based on the element focus state + if (msgMention) { + msgMention.forEach(mention => { + mention.setAttribute('tabindex', isCurrentConversationFocused ? '0' : '-1'); + }); + } + + if (linkTargets.length) { + linkTargets.forEach(link => { + link.setAttribute('tabindex', isCurrentConversationFocused ? '0' : '-1'); + }); + } + + if (msgLinkTargets.length) { + msgLinkTargets.forEach(link => { + link.setAttribute('tabindex', isCurrentConversationFocused ? '0' : '-1'); + }); + } + + if (emailLinks.length) { + emailLinks?.forEach(emailLink => { + emailLink.setAttribute('tabindex', isCurrentConversationFocused ? '0' : '-1'); + }); + } + + const handleKeyEvent = (event: KeyboardEvent, elementType: ElementType) => { + if (isCurrentConversationFocused) { + handleKeyDown(event, () => onMessageClick(asset, event, elementType)); + } + }; + + const handleClickEmail = (event: Event) => { + return event.type === 'keydown' + ? handleKeyEvent(event as KeyboardEvent, 'email') + : onMessageClick(asset, event as MouseEvent, 'email'); + }; + emailLinks?.forEach(emailLink => { + events.forEach(eventName => { + emailLink.addEventListener(eventName, handleClickEmail); + }); + }); + + const handleClickLink = (event: Event) => { + return event.type === 'keydown' + ? handleKeyEvent(event as KeyboardEvent, 'markdownLink') + : onMessageClick(asset, event as MouseEvent, 'markdownLink'); + }; + + linkTargets?.forEach(msgLink => { + events.forEach(eventName => { + msgLink.addEventListener(eventName, handleClickLink); + }); + }); + + const handleClickMention = (event: Event) => { + return event.type === 'keydown' + ? handleKeyEvent(event as KeyboardEvent, 'mention') + : onMessageClick(asset, event as MouseEvent, 'mention'); + }; + + msgMention?.forEach(mention => { + events.forEach(eventName => { + mention.addEventListener(eventName, handleClickMention); + }); + }); + + return () => { + emailLinks?.forEach(emailLink => { + events.forEach(eventName => { + emailLink.removeEventListener(eventName, handleClickEmail); + }); + }); + + linkTargets?.forEach(msgLink => { + events.forEach(eventName => { + msgLink.removeEventListener(eventName, handleClickLink); + }); + }); + + msgMention?.forEach(mention => { + events.forEach(eventName => { + mention.removeEventListener(eventName, handleClickMention); + }); + }); + }; + }, [onMessageClick, asset, isCurrentConversationFocused, containerRef]); + + return ( +
{ + if (isQuoteMsg) { + containerRef.current = detectLongQuotes(element); + } else { + containerRef.current = element; + } + }} + className={msgClass} + dangerouslySetInnerHTML={{__html: text}} + dir="auto" + {...props} + /> + ); +}; diff --git a/src/script/components/MessagesList/Message/ContentMessage/asset/controls/MediaButton.tsx b/src/script/components/MessagesList/Message/ContentMessage/asset/controls/MediaButton.tsx index 61786264fb6..86e770f3fa1 100644 --- a/src/script/components/MessagesList/Message/ContentMessage/asset/controls/MediaButton.tsx +++ b/src/script/components/MessagesList/Message/ContentMessage/asset/controls/MediaButton.tsx @@ -22,6 +22,7 @@ import React, {useEffect, useState} from 'react'; import cx from 'classnames'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; +import {t} from 'Util/LocalizerUtil'; import {noop} from 'Util/util'; import {AssetTransferState} from '../../../../../../assets/AssetTransferState'; @@ -83,6 +84,7 @@ const MediaButton: React.FC = ({ className="button-reset-default media-button media-button-play icon-play" onClick={play} data-uie-name="do-play-media" + aria-label={t('mediaBtnPlay')} /> )} {isUploaded && isPlaying && ( @@ -91,6 +93,7 @@ const MediaButton: React.FC = ({ className="button-reset-default media-button media-button-pause icon-pause" onClick={pause} data-uie-name="do-pause-media" + aria-label={t('mediaBtnPause')} /> )} {isDownloading && ( diff --git a/src/script/components/MessagesList/Message/ContentMessage/asset/index.tsx b/src/script/components/MessagesList/Message/ContentMessage/asset/index.tsx index 529b5e25c10..209b045a342 100644 --- a/src/script/components/MessagesList/Message/ContentMessage/asset/index.tsx +++ b/src/script/components/MessagesList/Message/ContentMessage/asset/index.tsx @@ -23,10 +23,10 @@ import {Asset} from 'src/script/entity/message/Asset'; import type {FileAsset as FileAssetType} from 'src/script/entity/message/FileAsset'; import type {Location} from 'src/script/entity/message/Location'; import type {MediumImage} from 'src/script/entity/message/MediumImage'; -import type {Text} from 'src/script/entity/message/Text'; +import {Text} from 'src/script/entity/message/Text'; +import {StatusType} from 'src/script/message/StatusType'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; import {includesOnlyEmojis} from 'Util/EmojiUtil'; -import {handleKeyDown} from 'Util/KeyboardUtil'; import {AudioAsset} from './AudioAsset'; import {FileAsset} from './FileAssetComponent'; @@ -34,6 +34,7 @@ import {ImageAsset} from './ImageAsset'; import {LinkPreviewAsset} from './LinkPreviewAssetComponent'; import {LocationAsset} from './LocationAsset'; import {MessageButton} from './MessageButton'; +import {TextMessageRenderer} from './TextMessageRenderer'; import {VideoAsset} from './VideoAsset'; import {MessageActions} from '../..'; @@ -41,7 +42,6 @@ import {AssetType} from '../../../../../assets/AssetType'; import {Button} from '../../../../../entity/message/Button'; import {CompositeMessage} from '../../../../../entity/message/CompositeMessage'; import {ContentMessage} from '../../../../../entity/message/ContentMessage'; -import {StatusType} from '../../../../../message/StatusType'; const ContentAsset = ({ asset, @@ -50,6 +50,7 @@ const ContentAsset = ({ onClickImage, onClickMessage, onClickButton, + focusConversation, }: { asset: Asset; message: ContentMessage; @@ -57,24 +58,23 @@ const ContentAsset = ({ onClickImage: MessageActions['onClickImage']; onClickMessage: MessageActions['onClickMessage']; selfId: QualifiedId; + focusConversation: boolean; }) => { const {isObfuscated, status} = useKoSubscribableChildren(message, ['isObfuscated', 'status']); + switch (asset.type) { case AssetType.TEXT: return ( <> {(asset as Text).should_render_text() && ( -
onClickMessage(asset as Text, event)} - onKeyDown={event => handleKeyDown(event, () => onClickMessage(asset as Text, event))} - onAuxClick={event => onClickMessage(asset as Text, event)} - dir="auto" + isCurrentConversationFocused={focusConversation} + asset={asset as Text} /> )} {(asset as Text).previews().map(preview => ( diff --git a/src/script/components/MessagesList/Message/ContentMessage/index.test.tsx b/src/script/components/MessagesList/Message/ContentMessage/index.test.tsx index 4123a4b8de9..bb70c16d597 100644 --- a/src/script/components/MessagesList/Message/ContentMessage/index.test.tsx +++ b/src/script/components/MessagesList/Message/ContentMessage/index.test.tsx @@ -46,6 +46,8 @@ describe('message', () => { contextMenu: {entries: ko.observable([])}, conversation: new Conversation(), findMessage: jest.fn(), + focusConversation: true, + handleFocus: jest.fn(), isLastDeliveredMessage: false, message, onClickAvatar: jest.fn(), @@ -61,6 +63,7 @@ describe('message', () => { onLike: jest.fn(), previousMessage: undefined, selfId: {domain: '', id: createRandomUuid()}, + totalMessage: 1, }; }); diff --git a/src/script/components/MessagesList/Message/ContentMessage/index.tsx b/src/script/components/MessagesList/Message/ContentMessage/index.tsx index a8cf22e9aa6..8d0aa309de8 100644 --- a/src/script/components/MessagesList/Message/ContentMessage/index.tsx +++ b/src/script/components/MessagesList/Message/ContentMessage/index.tsx @@ -28,7 +28,8 @@ import {CompositeMessage} from 'src/script/entity/message/CompositeMessage'; import {ContentMessage} from 'src/script/entity/message/ContentMessage'; import {Message} from 'src/script/entity/message/Message'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; -import {KEY} from 'Util/KeyboardUtil'; +import {getMessageAriaLabel} from 'Util/conversationMessages'; +import {isTabKey, KEY} from 'Util/KeyboardUtil'; import {t} from 'Util/LocalizerUtil'; import {setContextMenuPosition} from 'Util/util'; @@ -50,12 +51,15 @@ export interface ContentMessageProps extends Omit Promise; focusMessage?: () => void; hasMarker?: boolean; + focusConversation: boolean; isLastDeliveredMessage: boolean; message: ContentMessage; onClickButton: (message: CompositeMessage, buttonId: string) => void; previousMessage?: Message; quotedMessage?: ContentMessage; selfId: QualifiedId; + handleFocus: (index: number) => void; + totalMessage: number; } const ContentMessageComponent: React.FC = ({ @@ -64,6 +68,7 @@ const ContentMessageComponent: React.FC = ({ findMessage, selfId, hasMarker, + focusConversation, isLastDeliveredMessage, contextMenu, previousMessage, @@ -75,6 +80,8 @@ const ContentMessageComponent: React.FC = ({ onClickLikes, onClickButton, onLike, + handleFocus, + totalMessage, }) => { const {entries: menuEntries} = useKoSubscribableChildren(contextMenu, ['entries']); const {headerSenderName, timestamp, ephemeral_caption, ephemeral_status, assets, other_likes, was_edited} = @@ -103,13 +110,13 @@ const ContentMessageComponent: React.FC = ({
-
+
{headerSenderName} @@ -157,10 +164,22 @@ const ContentMessageComponent: React.FC = ({ const newEvent = setContextMenuPosition(event); showContextMenu(newEvent, menuEntries, 'message-options-menu'); } + + // context menu is the last tabbale element of a message, next tab press should + // focus on the message input bar + if (isTabKey(event)) { + handleFocus(totalMessage - 1); + } }; + const [messageAriaLabel] = getMessageAriaLabel({ + assets, + displayTimestampShort: message.displayTimestampShort(), + headerSenderName, + }); + return ( - <> +
{avatarSection} {message.quote() && ( = ({ focusMessage={onClickTimestamp} handleClickOnMessage={onClickMessage} showUserDetails={onClickAvatar} + focusConversation={focusConversation} /> )}
@@ -190,6 +210,7 @@ const ContentMessageComponent: React.FC = ({ onClickButton={onClickButton} onClickImage={onClickImage} onClickMessage={onClickMessage} + focusConversation={focusConversation} /> ))} @@ -199,6 +220,7 @@ const ContentMessageComponent: React.FC = ({ className="message-body-like-icon like-button message-show-on-hover" message={message} onLike={onLike} + focusConversation={focusConversation} />
)} @@ -206,6 +228,7 @@ const ContentMessageComponent: React.FC = ({
{menuEntries.length > 0 && (
{other_likes.length > 0 && ( - +
+ +
)} - +
); }; diff --git a/src/script/components/MessagesList/Message/MessageWrapper.tsx b/src/script/components/MessagesList/Message/MessageWrapper.tsx index ac3bcf99538..18e9f030bbe 100644 --- a/src/script/components/MessagesList/Message/MessageWrapper.tsx +++ b/src/script/components/MessagesList/Message/MessageWrapper.tsx @@ -48,11 +48,12 @@ import {ContextMenuEntry} from '../../../ui/ContextMenu'; import {MessageParams} from './index'; -export const MessageWrapper: React.FC = ({ +export const MessageWrapper: React.FC = ({ message, conversation, selfId, hasMarker, + focusConversation, isSelfTemporaryGuest, isLastDeliveredMessage, shouldShowInvitePeople, @@ -72,6 +73,8 @@ export const MessageWrapper: React.FC = ({ messageRepository, messageActions, teamState = container.resolve(TeamState), + handleFocus, + totalMessage, }) => { const findMessage = (conversation: Conversation, messageId: string) => { return messageRepository.getMessageInConversationById(conversation, messageId, true, true); @@ -177,6 +180,9 @@ export const MessageWrapper: React.FC = ({ onClickInvitePeople={onClickInvitePeople} onClickParticipants={onClickParticipants} onClickReceipts={onClickReceipts} + focusConversation={focusConversation} + handleFocus={handleFocus} + totalMessage={totalMessage} /> ); } @@ -222,6 +228,7 @@ export const MessageWrapper: React.FC = ({ is1to1Conversation={conversation.is1to1()} isLastDeliveredMessage={isLastDeliveredMessage} onClickReceipts={onClickReceipts} + focusConversation={focusConversation} /> ); } diff --git a/src/script/components/MessagesList/Message/PingMessage.test.tsx b/src/script/components/MessagesList/Message/PingMessage.test.tsx index 302bf6a6356..648fd2b70e4 100644 --- a/src/script/components/MessagesList/Message/PingMessage.test.tsx +++ b/src/script/components/MessagesList/Message/PingMessage.test.tsx @@ -43,6 +43,7 @@ describe('PingMessage', () => { const sender = 'sender'; const props = { + focusConversation: true, is1to1Conversation: false, isLastDeliveredMessage: false, message: createPingMessage({ diff --git a/src/script/components/MessagesList/Message/PingMessage.tsx b/src/script/components/MessagesList/Message/PingMessage.tsx index e8306b26d74..e2c1323841a 100644 --- a/src/script/components/MessagesList/Message/PingMessage.tsx +++ b/src/script/components/MessagesList/Message/PingMessage.tsx @@ -34,6 +34,7 @@ export interface PingMessageProps { isLastDeliveredMessage: boolean; message: PingMessageEntity; onClickReceipts?: (message: Message) => void; + focusConversation: boolean; } const PingMessage: React.FC = ({ @@ -41,6 +42,7 @@ const PingMessage: React.FC = ({ is1to1Conversation, isLastDeliveredMessage, onClickReceipts, + focusConversation, }) => { const {unsafeSenderName, caption, timestamp, ephemeral_caption, isObfuscated, get_icon_classes} = useKoSubscribableChildren(message, [ @@ -76,6 +78,7 @@ const PingMessage: React.FC = ({ is1to1Conversation={is1to1Conversation} isLastDeliveredMessage={isLastDeliveredMessage} onClickReceipts={onClickReceipts} + focusConversation={focusConversation} />
diff --git a/src/script/components/MessagesList/Message/ReadReceiptStatus.test.tsx b/src/script/components/MessagesList/Message/ReadReceiptStatus.test.tsx index 0d356a0b2d4..426139757d4 100644 --- a/src/script/components/MessagesList/Message/ReadReceiptStatus.test.tsx +++ b/src/script/components/MessagesList/Message/ReadReceiptStatus.test.tsx @@ -38,6 +38,7 @@ const createReadReceiptMessage = (partialReadReceiptStatus: Partial { it('is not shown when message is not last delivered message', () => { const props = { + focusConversation: true, is1to1Conversation: false, isLastDeliveredMessage: false, message: createReadReceiptMessage({ @@ -53,6 +54,7 @@ describe('ReadReceiptStatus', () => { it('shows "delivered" when noone read the message', () => { const props = { + focusConversation: true, is1to1Conversation: false, isLastDeliveredMessage: true, message: createReadReceiptMessage({ @@ -69,6 +71,7 @@ describe('ReadReceiptStatus', () => { it('shows the read icon', () => { const props = { + focusConversation: true, is1to1Conversation: false, isLastDeliveredMessage: true, message: createReadReceiptMessage({ @@ -88,6 +91,7 @@ describe('ReadReceiptStatus', () => { const onClickReceiptsSpy = jest.fn(); const readReceiptTime = new Date().toISOString(); const props = { + focusConversation: true, is1to1Conversation: true, isLastDeliveredMessage: true, message: createReadReceiptMessage({ @@ -106,6 +110,7 @@ describe('ReadReceiptStatus', () => { it('shows timestamp instead of read count', () => { const readReceiptTime = new Date().toISOString(); const props = { + focusConversation: true, is1to1Conversation: true, isLastDeliveredMessage: true, message: createReadReceiptMessage({ @@ -125,6 +130,7 @@ describe('ReadReceiptStatus', () => { const onClickReceiptsSpy = jest.fn(); const readReceiptTime = new Date().toISOString(); const props = { + focusConversation: true, is1to1Conversation: false, isLastDeliveredMessage: true, message: createReadReceiptMessage({ @@ -143,6 +149,7 @@ describe('ReadReceiptStatus', () => { it('shows read count', async () => { const props = { + focusConversation: true, is1to1Conversation: false, isLastDeliveredMessage: true, message: createReadReceiptMessage({ diff --git a/src/script/components/MessagesList/Message/ReadReceiptStatus.tsx b/src/script/components/MessagesList/Message/ReadReceiptStatus.tsx index 92113609930..610add7be12 100644 --- a/src/script/components/MessagesList/Message/ReadReceiptStatus.tsx +++ b/src/script/components/MessagesList/Message/ReadReceiptStatus.tsx @@ -32,6 +32,7 @@ export interface ReadReceiptStatusProps { isLastDeliveredMessage: boolean; message: Message; onClickReceipts?: (message: Message) => void; + focusConversation: boolean; } const ReadReceiptStatus: React.FC = ({ @@ -39,6 +40,7 @@ const ReadReceiptStatus: React.FC = ({ onClickReceipts, is1to1Conversation, isLastDeliveredMessage, + focusConversation, }) => { const [readReceiptText, setReadReceiptText] = useState(''); const [readReceiptTooltip, setReadReceiptTooltip] = useState(''); @@ -70,6 +72,7 @@ const ReadReceiptStatus: React.FC = ({ {showEyeIndicator && (
); }; diff --git a/src/script/components/MessagesList/MessageList.tsx b/src/script/components/MessagesList/MessageList.tsx index b247ae1259b..9b9711aa2da 100644 --- a/src/script/components/MessagesList/MessageList.tsx +++ b/src/script/components/MessagesList/MessageList.tsx @@ -17,15 +17,7 @@ * */ -import React, { - FC, - MouseEvent as ReactMouseEvent, - KeyboardEvent as ReactKeyboardEvent, - useEffect, - useLayoutEffect, - useRef, - useState, -} from 'react'; +import React, {FC, useEffect, useLayoutEffect, useRef, useState} from 'react'; import cx from 'classnames'; @@ -37,10 +29,12 @@ import {MemberMessage} from 'src/script/entity/message/MemberMessage'; import {Message as MessageEntity} from 'src/script/entity/message/Message'; import {Text} from 'src/script/entity/message/Text'; import {User} from 'src/script/entity/User'; +import {useRoveFocus} from 'src/script/hooks/useRoveFocus'; import {ServiceEntity} from 'src/script/integration/ServiceEntity'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; import {Message} from './Message'; +import {ElementType} from './Message/ContentMessage/asset/TextMessageRenderer'; import {Conversation as ConversationEntity, Conversation} from '../../entity/Conversation'; import {isMemberMessage, isContentMessage} from '../../guards/Message'; @@ -63,7 +57,11 @@ interface MessagesListParams { deleteMessageEveryone: (conversation: Conversation, message: MessageEntity) => void; }; messageRepository: MessageRepository; - onClickMessage: (message: ContentMessage | Text, event: ReactMouseEvent | ReactKeyboardEvent) => void; + onClickMessage: ( + message: ContentMessage | Text, + event: MouseEvent | KeyboardEvent, + elementType: ElementType, + ) => boolean; onLoading: (isLoading: boolean) => void; resetSession: (messageError: DecryptErrorMessage) => void; selfUser: User; @@ -147,6 +145,7 @@ const MessagesList: FC = ({ const [focusedMessage, setFocusedMessage] = useState(initialMessage?.id); const filteredMessages = filterDuplicatedMemberMessages(filterHiddenMessages(allMessages)); + const filteredMessagesLength = filteredMessages.length; const [messagesContainer, setMessageContainer] = useState(null); @@ -161,7 +160,7 @@ const MessagesList: FC = ({ }; const verticallyCenterMessage = (): boolean => { - if (filteredMessages.length === 1) { + if (filteredMessagesLength === 1) { const [firstMessage] = filteredMessages; return firstMessage.isMember() && firstMessage.isConnection(); } @@ -180,7 +179,7 @@ const MessagesList: FC = ({ return; } - const lastMessage = filteredMessages[filteredMessages.length - 1]; + const lastMessage = filteredMessages[filteredMessagesLength - 1]; const previousScrollHeight = scrollHeight.current; const scrollBottomPosition = scrollingContainer.scrollTop + scrollingContainer.clientHeight; const shouldStickToBottom = previousScrollHeight - scrollBottomPosition < 100; @@ -197,7 +196,7 @@ const MessagesList: FC = ({ scrollingContainer.scrollTop = scrollingContainer.scrollHeight - previousScrollHeight; } else if (shouldStickToBottom) { // We only want to animate the scroll if there are new messages in the list - const behavior = nbMessages.current !== filteredMessages.length ? 'smooth' : 'auto'; + const behavior = nbMessages.current !== filteredMessagesLength ? 'smooth' : 'auto'; // Simple content update, we just scroll to bottom if we are in the stick to bottom threshold scrollingContainer.scrollTo?.({behavior, top: scrollingContainer.scrollHeight}); } else if (lastMessage && lastMessage.status() === StatusType.SENDING && lastMessage.user().id === selfUser.id) { @@ -205,7 +204,7 @@ const MessagesList: FC = ({ scrollingContainer.scrollTo?.({behavior: 'smooth', top: scrollingContainer.scrollHeight}); } scrollHeight.current = scrollingContainer.scrollHeight; - nbMessages.current = filteredMessages.length; + nbMessages.current = filteredMessagesLength; }; // Listen to resizes of the the container element (if it's resized it means something has changed in the message list) @@ -238,7 +237,7 @@ const MessagesList: FC = ({ if (messagesContainer) { updateScroll(messagesContainer); } - }, [messagesContainer, filteredMessages.length]); + }, [messagesContainer, filteredMessagesLength]); useEffect(() => { onLoading(true); @@ -259,10 +258,12 @@ const MessagesList: FC = ({ } }, [loaded]); + const defaultFocus = -1; + const {currentFocus, handleKeyDown, setCurrentFocus} = useRoveFocus(filteredMessagesLength, defaultFocus); + if (!loaded) { return null; } - return (
{ @@ -328,6 +329,11 @@ const MessagesList: FC = ({ onLike={message => messageRepository.toggleLike(conversation, message)} selfId={selfUser.qualifiedId} shouldShowInvitePeople={shouldShowInvitePeople} + totalMessage={filteredMessagesLength} + index={index} + focusConversation={currentFocus === index} + handleFocus={setCurrentFocus} + handleArrowKeyDown={handleKeyDown} /> ); })} diff --git a/src/script/components/list/ConversationListCell.tsx b/src/script/components/list/ConversationListCell.tsx index 4b0c133ee2c..4d55be9fba2 100644 --- a/src/script/components/list/ConversationListCell.tsx +++ b/src/script/components/list/ConversationListCell.tsx @@ -17,7 +17,14 @@ * */ -import React, {useEffect, useMemo, useRef, useState} from 'react'; +import React, { + useEffect, + useMemo, + useRef, + useState, + MouseEvent as ReactMouseEvent, + KeyboardEvent as ReactKeyBoardEvent, +} from 'react'; import cx from 'classnames'; @@ -25,6 +32,8 @@ import {AvailabilityState} from 'Components/AvailabilityState'; import {Avatar, AVATAR_SIZE} from 'Components/Avatar'; import {GroupAvatar} from 'Components/avatar/GroupAvatar'; import {Icon} from 'Components/Icon'; +import {generateConversationUrl} from 'src/script/router/routeGenerator'; +import {setHistoryParam} from 'src/script/router/Router'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; import {isKey, isOneOfKeys, KEY} from 'Util/KeyboardUtil'; import {t} from 'Util/LocalizerUtil'; @@ -39,7 +48,7 @@ export interface ConversationListCellProps { conversation: Conversation; dataUieName: string; isSelected?: (conversation: Conversation) => boolean; - onClick: React.MouseEventHandler; + onClick: (event: ReactMouseEvent | ReactKeyBoardEvent) => void; onJoinCall: (conversation: Conversation, mediaType: MediaType) => void; rightClick: (conversation: Conversation, event: MouseEvent | React.MouseEvent) => void; showJoinButton: boolean; @@ -115,7 +124,7 @@ const ConversationListCell: React.FC = ({ const handleDivKeyDown = (event: React.KeyboardEvent) => { if (event.key === KEY.SPACE || event.key === KEY.ENTER) { - onClick(event as unknown as React.MouseEvent); + onClick(event); } else if (isKey(event, KEY.ARROW_RIGHT)) { setContextMenuFocus(true); } else { @@ -163,6 +172,12 @@ const ConversationListCell: React.FC = ({ } }, [index, isActive, isFolder, isConversationListFocus, handleFocus]); + // on conversation/app load reset last message focus to ensure last message is focused + // only when user enters a new conversation using keyboard(press enter) + useEffect(() => { + setHistoryParam(generateConversationUrl(conversation.qualifiedId)); + }, [conversation]); + return (
  • - event.type === 'click'; +export const isMouseEvent = (event: MouseEvent | KeyboardEvent): event is MouseEvent => event.type === 'click'; diff --git a/src/script/hooks/useRoveFocus.ts b/src/script/hooks/useRoveFocus.ts index d26f9782de8..4e70257ae5e 100644 --- a/src/script/hooks/useRoveFocus.ts +++ b/src/script/hooks/useRoveFocus.ts @@ -26,17 +26,19 @@ import {isKey, isTabKey, KEY} from 'Util/KeyboardUtil'; function useRoveFocus(size: number, defaultFocus = 0) { const [currentFocus, setCurrentFocus] = useState(defaultFocus); + const firstItem = 0; + const interval = 1; const handleKeyDown = useCallback( (e: ReactKeyboardEvent | KeyboardEvent) => { if (isKey(e, KEY.ARROW_DOWN)) { e.preventDefault(); - setCurrentFocus(currentFocus === size - 1 ? 0 : currentFocus + 1); + setCurrentFocus(currentFocus === --size ? firstItem : currentFocus + interval); } else if (isKey(e, KEY.ARROW_UP)) { e.preventDefault(); - setCurrentFocus(currentFocus === 0 ? size - 1 : currentFocus - 1); + setCurrentFocus(currentFocus === firstItem ? --size : currentFocus - interval); } else if (isTabKey(e)) { - setCurrentFocus(0); + setCurrentFocus(firstItem); } }, [size, currentFocus, setCurrentFocus], diff --git a/src/script/page/LeftSidebar/panels/Conversations/ConversationsList.tsx b/src/script/page/LeftSidebar/panels/Conversations/ConversationsList.tsx index 7ad488408fc..f23b2be8891 100644 --- a/src/script/page/LeftSidebar/panels/Conversations/ConversationsList.tsx +++ b/src/script/page/LeftSidebar/panels/Conversations/ConversationsList.tsx @@ -17,7 +17,7 @@ * */ -import React from 'react'; +import React, {MouseEvent as ReactMouseEvent, KeyboardEvent as ReactKeyBoardEvent} from 'react'; import {css} from '@emotion/react'; @@ -39,7 +39,7 @@ import {ConversationRepository} from '../../../../conversation/ConversationRepos import {ConversationState} from '../../../../conversation/ConversationState'; import {Conversation} from '../../../../entity/Conversation'; import {generateConversationUrl} from '../../../../router/routeGenerator'; -import {createNavigate} from '../../../../router/routerBindings'; +import {createNavigate, createNavigateKeyboard} from '../../../../router/routerBindings'; import {ListViewModel} from '../../../../view_model/ListViewModel'; import {useAppMainState, ViewType} from '../../../state'; import {ContentState, useAppState} from '../../../useAppState'; @@ -111,7 +111,13 @@ export const ConversationsList: React.FC<{ index={index} dataUieName="item-conversation" conversation={conversation} - onClick={createNavigate(generateConversationUrl(conversation.qualifiedId))} + onClick={(event: ReactMouseEvent | ReactKeyBoardEvent) => { + if ('key' in event) { + createNavigateKeyboard(generateConversationUrl(conversation.qualifiedId), true)(event); + } else { + createNavigate(generateConversationUrl(conversation.qualifiedId))(event); + } + }} isSelected={isActiveConversation} onJoinCall={answerCall} rightClick={openContextMenu} diff --git a/src/script/page/LeftSidebar/panels/Conversations/GroupedConversationsFolder.tsx b/src/script/page/LeftSidebar/panels/Conversations/GroupedConversationsFolder.tsx index 90cf4477036..22e594fd53c 100644 --- a/src/script/page/LeftSidebar/panels/Conversations/GroupedConversationsFolder.tsx +++ b/src/script/page/LeftSidebar/panels/Conversations/GroupedConversationsFolder.tsx @@ -17,7 +17,7 @@ * */ -import React from 'react'; +import React, {MouseEvent as ReactMouseEvent, KeyboardEvent as ReactKeyBoardEvent} from 'react'; import {css} from '@emotion/react'; @@ -31,7 +31,7 @@ import {GroupedConversationHeader} from './GroupedConversationHeader'; import {useRoveFocus} from '../../../../hooks/useRoveFocus'; import {generateConversationUrl} from '../../../../router/routeGenerator'; -import {createNavigate} from '../../../../router/routerBindings'; +import {createNavigate, createNavigateKeyboard} from '../../../../router/routerBindings'; export interface GroupedConversationsFolderProps { expandedFolders: string[]; @@ -70,7 +70,13 @@ const GroupedConversationsFolder: React.FC = ({ isConversationListFocus handleFocus={setCurrentFocus} handleArrowKeyDown={handleKeyDown} - onClick={createNavigate(generateConversationUrl(conversation.qualifiedId))} + onClick={(event: ReactMouseEvent | ReactKeyBoardEvent) => { + if ('key' in event) { + createNavigateKeyboard(generateConversationUrl(conversation.qualifiedId), true)(event); + } else { + createNavigate(generateConversationUrl(conversation.qualifiedId))(event); + } + }} rightClick={(_, event) => listViewModel.onContextMenu(conversation, event)} conversation={conversation} showJoinButton={hasJoinableCall(conversation)} diff --git a/src/script/router/Router.ts b/src/script/router/Router.ts index 5d3401d9588..ca7acbabbc9 100644 --- a/src/script/router/Router.ts +++ b/src/script/router/Router.ts @@ -40,7 +40,11 @@ export const configureRoutes = (routeDefinitions: Routes): void => { parseRoute(); }; -export const navigate = (path: string) => { - window.history.replaceState(null, '', `#${path}`); +export const navigate = (path: string, stateObj?: {}) => { + setHistoryParam(path, stateObj); parseRoute(); }; + +export const setHistoryParam = (path: string, stateObj?: {}) => { + window.history.replaceState(stateObj, '', `#${path}`); +}; diff --git a/src/script/router/routerBindings.ts b/src/script/router/routerBindings.ts index 3de7157f2b5..d489438b651 100644 --- a/src/script/router/routerBindings.ts +++ b/src/script/router/routerBindings.ts @@ -28,17 +28,24 @@ import {useAppMainState, ViewType} from '../page/state'; export const createNavigate = (link: string): React.MouseEventHandler => (event: React.MouseEvent) => { - const {responsiveView} = useAppMainState.getState(); - responsiveView.setCurrentView(ViewType.CENTRAL_COLUMN); + setResponsiveView(); navigate(link); event.preventDefault(); }; export const createNavigateKeyboard = - (link: string): React.KeyboardEventHandler => + (link: string, setIsResponsive = false): React.KeyboardEventHandler => (event: React.KeyboardEvent) => { + if (setIsResponsive) { + setResponsiveView(); + } if (event.key === KEY.ENTER || event.key === KEY.SPACE) { - navigate(link); + navigate(link, {eventKey: event.key}); event.preventDefault(); } }; + +export const setResponsiveView = () => { + const {responsiveView} = useAppMainState.getState(); + responsiveView.setCurrentView(ViewType.CENTRAL_COLUMN); +}; diff --git a/src/script/util/conversationMessages.test.ts b/src/script/util/conversationMessages.test.ts new file mode 100644 index 00000000000..d976389a164 --- /dev/null +++ b/src/script/util/conversationMessages.test.ts @@ -0,0 +1,112 @@ +/* + * Wire + * Copyright (C) 2018 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 {getMessageAriaLabel} from './conversationMessages'; + +describe('Conversation messages', () => { + describe(`Content messages area label by type`, () => { + const sample1 = { + assets: [ + { + file_name: 'document.pdf', + file_type: 'application/pdf', + isAudio: jest.fn(), + isButton: jest.fn(), + isDownloadable: jest.fn(), + isFile: jest.fn().mockReturnValue(true), + isImage: jest.fn(), + isLocation: jest.fn(), + isText: jest.fn(), + isVideo: jest.fn(), + key: '', + size: '', + text: '', + type: 'File', + }, + ], + displayTimestampShort: '5:15 PM', + headerSenderName: 'Arjita', + }; + + it(`returns the expected aria label for a file type message`, () => { + const actual = getMessageAriaLabel(sample1); + const expected = `Arjita. At 5:15 PM. with file attachment, document.pdf `; + + expect(actual[0]).toBe(expected); + }); + + const sample2 = { + assets: [ + { + file_name: 'file_example_MP3_700KB.mp3', + file_type: 'audio/mpeg', + isAudio: jest.fn().mockReturnValue(true), + isButton: jest.fn(), + isDownloadable: jest.fn(), + isFile: jest.fn(), + isImage: jest.fn(), + isLocation: jest.fn(), + isText: jest.fn(), + isVideo: jest.fn(), + key: '', + size: '', + text: '', + type: 'File', + }, + ], + displayTimestampShort: '2:15 PM', + headerSenderName: 'Tim', + }; + it(`returns the expected aria label for a audio type message`, () => { + const actual = getMessageAriaLabel(sample2); + const expected = `Tim. At 2:15 PM. with audio, file_example_MP3_700KB.mp3 `; + + expect(actual[0]).toBe(expected); + }); + + const sample3 = { + assets: [ + { + file_name: '', + file_type: '', + isAudio: jest.fn(), + isButton: jest.fn(), + isDownloadable: jest.fn(), + isFile: jest.fn(), + isImage: jest.fn(), + isLocation: jest.fn(), + isText: jest.fn().mockReturnValue(true), + isVideo: jest.fn(), + key: '', + size: '', + text: 'Hello, this is a text message', + type: 'Text', + }, + ], + displayTimestampShort: '10:15 PM', + headerSenderName: 'Virgil', + }; + it(`returns the expected aria label for a text message`, () => { + const actual = getMessageAriaLabel(sample3); + const expected = `Virgil. Hello, this is a text message At 10:15 PM.`; + + expect(actual[0]).toBe(expected); + }); + }); +}); diff --git a/src/script/util/conversationMessages.ts b/src/script/util/conversationMessages.ts index a4090657141..f088e6fa610 100644 --- a/src/script/util/conversationMessages.ts +++ b/src/script/util/conversationMessages.ts @@ -17,8 +17,11 @@ * */ +import {Asset} from 'src/script/entity/message/Asset'; +import type {FileAsset as FileAssetType} from 'src/script/entity/message/FileAsset'; import {isSameDay, differenceInMinutes} from 'Util/TimeUtil'; +import {AssetType} from '../assets/AssetType'; import {Message} from '../entity/message/Message'; export enum MessageMarkerType { @@ -68,3 +71,37 @@ export function getMessageMarkerType( return MessageMarkerType.NONE; } + +interface MessageDataType { + headerSenderName: string; + displayTimestampShort: string; + assets: Asset[]; +} +/** + * Return a string that should be announced for screen reader users. + * Screen reader aria-label would help user understand the message based on type + * + * @param headerSenderName The message sender name + * @param message The message we want to render + * @param assets The message meta data + */ +export function getMessageAriaLabel({headerSenderName, displayTimestampShort, assets}: MessageDataType): string[] { + return assets.map((asset: Asset) => { + switch (asset.type) { + case AssetType.FILE: + if ((asset as FileAssetType).isFile()) { + return `${headerSenderName}. At ${displayTimestampShort}. with file attachment, ${asset.file_name} `; + } + if ((asset as FileAssetType).isAudio()) { + return `${headerSenderName}. At ${displayTimestampShort}. with audio, ${asset.file_name} `; + } + if ((asset as FileAssetType).isVideo()) { + return `${headerSenderName}. At ${displayTimestampShort}. with video, ${asset.file_name} `; + } + case AssetType.IMAGE: + return `${headerSenderName}. At ${displayTimestampShort}. with image, ${asset.file_name} `; + default: + return `${headerSenderName}. ${asset.text} At ${displayTimestampShort}.`; + } + }); +} diff --git a/src/script/util/useDisposableRef/useDisposableRef.ts b/src/script/util/useDisposableRef/useDisposableRef.ts index 7d9603d7221..a623cadc7b6 100644 --- a/src/script/util/useDisposableRef/useDisposableRef.ts +++ b/src/script/util/useDisposableRef/useDisposableRef.ts @@ -26,13 +26,14 @@ import {useLayoutEffect, useRef} from 'react'; * @param dependencies List of dependencies that should re trigger the initFunction */ export function useDisposableRef(init: (element: HTMLElement) => () => void, dependencies?: unknown[]) { - const elementRef = useRef(null!); + const elementRef = useRef(null!); useLayoutEffect(() => { return elementRef.current ? init(elementRef.current) : () => {}; }, dependencies); - return (element: HTMLElement | null) => { + return (element: HTMLDivElement | null) => { elementRef.current = element; + return elementRef.current; }; } diff --git a/src/style/content/conversation/message-list.less b/src/style/content/conversation/message-list.less index 727fe18ae02..b999f4a0c76 100644 --- a/src/style/content/conversation/message-list.less +++ b/src/style/content/conversation/message-list.less @@ -311,6 +311,14 @@ } } +.message-wrapper { + outline-offset: -0.1rem; +} + +.message-mention { + outline-offset: 0.4rem; +} + // MESSAGE - BODY .message-body { position: relative; From 721c6185f42121c8fbec0660876ee96cb70a6b84 Mon Sep 17 00:00:00 2001 From: Thomas Belin Date: Mon, 21 Nov 2022 18:14:29 +0100 Subject: [PATCH 004/329] fix: Fix image placeholder ratio (#14156) --- src/script/components/Image.tsx | 6 ++++-- .../Message/ContentMessage/asset/ImageAsset.tsx | 3 +-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/script/components/Image.tsx b/src/script/components/Image.tsx index 5788939d5c4..d56adac8969 100644 --- a/src/script/components/Image.tsx +++ b/src/script/components/Image.tsx @@ -33,6 +33,7 @@ import {TeamState} from '../team/TeamState'; export interface ImageProps extends React.HTMLProps { aspectRatio?: number; + width?: string; asset: AssetRemoteData; assetRepository?: AssetRepository; click?: (asset: AssetRemoteData, event: React.MouseEvent) => void; @@ -48,6 +49,7 @@ const Image: React.FC = ({ assetRepository = container.resolve(AssetRepository), teamState = container.resolve(TeamState), aspectRatio, + width, ...props }) => { const [isInViewport, setIsInViewport] = useState(false); @@ -78,9 +80,9 @@ const Image: React.FC = ({ window.URL.revokeObjectURL(assetSrc); } }; - }, [isInViewport]); + }, [asset, assetRepository, assetSrc, isFileSharingReceivingEnabled, isInViewport]); - const style = aspectRatio ? {aspectRatio: aspectRatio.toString(), width: '100%'} : undefined; + const style = aspectRatio ? {aspectRatio: `${aspectRatio}`, maxWidth: '100%', width} : undefined; return !isFileSharingReceivingEnabled ? ( ) : ( diff --git a/src/script/components/MessagesList/Message/ContentMessage/asset/ImageAsset.tsx b/src/script/components/MessagesList/Message/ContentMessage/asset/ImageAsset.tsx index 89661cec371..e7df3c8038a 100644 --- a/src/script/components/MessagesList/Message/ContentMessage/asset/ImageAsset.tsx +++ b/src/script/components/MessagesList/Message/ContentMessage/asset/ImageAsset.tsx @@ -88,7 +88,7 @@ const ImageAsset: React.FC = ({asset, message, onClick, teamSta }); return ( -
    +
    {isFileSharingReceivingEnabled ? ( = ({asset, message, onClick, teamSta {imageAltText} From 8981fb7e9145adcabd5eae19ef4b285b64737367 Mon Sep 17 00:00:00 2001 From: Thomas Belin Date: Mon, 21 Nov 2022 18:29:21 +0100 Subject: [PATCH 005/329] runfix: Avoid infinite re-render of images --- src/script/components/Image.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/script/components/Image.tsx b/src/script/components/Image.tsx index d56adac8969..4f06658630d 100644 --- a/src/script/components/Image.tsx +++ b/src/script/components/Image.tsx @@ -80,7 +80,7 @@ const Image: React.FC = ({ window.URL.revokeObjectURL(assetSrc); } }; - }, [asset, assetRepository, assetSrc, isFileSharingReceivingEnabled, isInViewport]); + }, [asset, assetRepository, isFileSharingReceivingEnabled, isInViewport]); const style = aspectRatio ? {aspectRatio: `${aspectRatio}`, maxWidth: '100%', width} : undefined; return !isFileSharingReceivingEnabled ? ( From 8ac28d48bb0ae770e6da5b2b18921a0738daaa40 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 22 Nov 2022 09:03:27 +0100 Subject: [PATCH 006/329] chore(deps): Bump einaregilsson/beanstalk-deploy from 20 to 21 (#14120) --- .github/workflows/test_build_deploy.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/test_build_deploy.yml b/.github/workflows/test_build_deploy.yml index 1c621d8d2a8..d47e922137d 100644 --- a/.github/workflows/test_build_deploy.yml +++ b/.github/workflows/test_build_deploy.yml @@ -114,7 +114,7 @@ jobs: # https://wire-webapp-avs.zinfra.io/ - name: Deploy avs build to Elastic Beanstalk if: env.BRANCH_NAME == 'avs' - uses: einaregilsson/beanstalk-deploy@v20 + uses: einaregilsson/beanstalk-deploy@v21 with: application_name: ${{env.AWS_APPLICATION_NAME}} aws_access_key: ${{secrets.WEBTEAM_AWS_ACCESS_KEY_ID}} @@ -131,7 +131,7 @@ jobs: # Stage 1: https://wire-webapp-edge.zinfra.io/ - name: Deploy edge build to Elastic Beanstalk if: env.BRANCH_NAME == 'dev' - uses: einaregilsson/beanstalk-deploy@v20 + uses: einaregilsson/beanstalk-deploy@v21 with: application_name: ${{env.AWS_APPLICATION_NAME}} aws_access_key: ${{secrets.WEBTEAM_AWS_ACCESS_KEY_ID}} @@ -148,7 +148,7 @@ jobs: # Stage 2: https://wire-webapp-dev.zinfra.io/ - name: Deploy dev build to Elastic Beanstalk if: env.BRANCH_NAME == 'dev' - uses: einaregilsson/beanstalk-deploy@v20 + uses: einaregilsson/beanstalk-deploy@v21 with: application_name: ${{env.AWS_APPLICATION_NAME}} aws_access_key: ${{secrets.WEBTEAM_AWS_ACCESS_KEY_ID}} @@ -165,7 +165,7 @@ jobs: # Stage 3: https://wire-webapp-staging.zinfra.io/ - name: Deploy staging build to Elastic Beanstalk if: contains(env.TAG, 'staging') - uses: einaregilsson/beanstalk-deploy@v20 + uses: einaregilsson/beanstalk-deploy@v21 with: application_name: ${{env.AWS_APPLICATION_NAME}} aws_access_key: ${{secrets.WEBTEAM_AWS_ACCESS_KEY_ID}} @@ -182,7 +182,7 @@ jobs: # Stage 4: https://wire-webapp-master.zinfra.io/ - name: Deploy master build to Elastic Beanstalk if: env.BRANCH_NAME == 'master' - uses: einaregilsson/beanstalk-deploy@v20 + uses: einaregilsson/beanstalk-deploy@v21 with: application_name: ${{env.AWS_APPLICATION_NAME}} aws_access_key: ${{secrets.WEBTEAM_AWS_ACCESS_KEY_ID}} @@ -199,7 +199,7 @@ jobs: # Stage 5: https://app.wire.com/ - name: Deploy production build to Elastic Beanstalk if: contains(env.TAG, 'production') - uses: einaregilsson/beanstalk-deploy@v20 + uses: einaregilsson/beanstalk-deploy@v21 with: application_name: ${{env.AWS_APPLICATION_NAME}} aws_access_key: ${{secrets.WEBTEAM_AWS_ACCESS_KEY_ID}} @@ -216,7 +216,7 @@ jobs: # Stage 6: https://mobile.wire.com - name: Deploy mobile build to Elastic Beanstalk if: env.BRANCH_NAME == 'mobile' - uses: einaregilsson/beanstalk-deploy@v20 + uses: einaregilsson/beanstalk-deploy@v21 with: application_name: ${{env.AWS_APPLICATION_NAME}} aws_access_key: ${{secrets.WEBTEAM_AWS_ACCESS_KEY_ID}} @@ -233,7 +233,7 @@ jobs: # Stage 7: https://wire-webapp-qa.zinfra.io/ - name: Deploy acc build to Elastic Beanstalk if: env.BRANCH_NAME == 'acc' - uses: einaregilsson/beanstalk-deploy@v20 + uses: einaregilsson/beanstalk-deploy@v21 with: application_name: ${{env.AWS_APPLICATION_NAME}} aws_access_key: ${{secrets.WEBTEAM_AWS_ACCESS_KEY_ID}} From c3ee391f1b917727eb218ae1793091e05b5346b0 Mon Sep 17 00:00:00 2001 From: Otto the Bot Date: Tue, 22 Nov 2022 09:03:40 +0100 Subject: [PATCH 007/329] chore: Update translations (#14105) --- 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 | 11 +++++++---- src/i18n/el-GR.json | 5 ++++- src/i18n/en-US.json | 8 ++++---- 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 | 11 +++++++---- 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, 186 insertions(+), 54 deletions(-) diff --git a/src/i18n/ar-SA.json b/src/i18n/ar-SA.json index 8545fbf55ce..a01594c7f6f 100644 --- a/src/i18n/ar-SA.json +++ b/src/i18n/ar-SA.json @@ -654,6 +654,8 @@ "login.subhead": "أدخل اسم المستخدم أو عنوان بريدك الإلكتروني.", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "Edited: {{edited}}", "messageDetailsNoLikes": "No one has liked this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Self-deleting message", "tooltipConversationFile": "إضافة ملف", "tooltipConversationInfo": "Conversation info", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more people are typing", "tooltipConversationInputOneUserTyping": "{{user1}} is typing", "tooltipConversationInputPlaceholder": "اكتب الرسالة", "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "افتح موقعًا آخر لإعادة تعيين كلمة مرورك", "tooltipPreferencesPicture": "غيّر صورتك…", "tooltipPreferencesRename": "غيّر اسمك", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "إغلاق (Esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", diff --git a/src/i18n/bn-BD.json b/src/i18n/bn-BD.json index 46dc72c0891..32a841849e5 100644 --- a/src/i18n/bn-BD.json +++ b/src/i18n/bn-BD.json @@ -654,6 +654,8 @@ "login.subhead": "Enter your email address or username.", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "Edited: {{edited}}", "messageDetailsNoLikes": "No one has liked this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Self-deleting message", "tooltipConversationFile": "Add file", "tooltipConversationInfo": "Conversation info", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more people are typing", "tooltipConversationInputOneUserTyping": "{{user1}} is typing", "tooltipConversationInputPlaceholder": "Type a message", "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "Open another website to reset your password", "tooltipPreferencesPicture": "Change your picture…", "tooltipPreferencesRename": "Change your name", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "Close (Esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", diff --git a/src/i18n/ca-ES.json b/src/i18n/ca-ES.json index 46dc72c0891..32a841849e5 100644 --- a/src/i18n/ca-ES.json +++ b/src/i18n/ca-ES.json @@ -654,6 +654,8 @@ "login.subhead": "Enter your email address or username.", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "Edited: {{edited}}", "messageDetailsNoLikes": "No one has liked this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Self-deleting message", "tooltipConversationFile": "Add file", "tooltipConversationInfo": "Conversation info", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more people are typing", "tooltipConversationInputOneUserTyping": "{{user1}} is typing", "tooltipConversationInputPlaceholder": "Type a message", "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "Open another website to reset your password", "tooltipPreferencesPicture": "Change your picture…", "tooltipPreferencesRename": "Change your name", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "Close (Esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", diff --git a/src/i18n/cs-CZ.json b/src/i18n/cs-CZ.json index fe0f01df5b0..a5c7c05fcd4 100644 --- a/src/i18n/cs-CZ.json +++ b/src/i18n/cs-CZ.json @@ -654,6 +654,8 @@ "login.subhead": "Enter your email address or username.", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "Edited: {{edited}}", "messageDetailsNoLikes": "No one has liked this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Self-deleting message", "tooltipConversationFile": "Přidat soubor", "tooltipConversationInfo": "Conversation info", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more people are typing", "tooltipConversationInputOneUserTyping": "{{user1}} is typing", "tooltipConversationInputPlaceholder": "Napsat zprávu", "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "Pro změnu hesla otevřete další webovou stránku", "tooltipPreferencesPicture": "Změnit obrázek…", "tooltipPreferencesRename": "Změnit jméno", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "Zavřít (Esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", diff --git a/src/i18n/da-DK.json b/src/i18n/da-DK.json index 21befbeb489..17b876fb7ae 100644 --- a/src/i18n/da-DK.json +++ b/src/i18n/da-DK.json @@ -654,6 +654,8 @@ "login.subhead": "Enter your email address or username.", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "Edited: {{edited}}", "messageDetailsNoLikes": "No one has liked this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Self-deleting message", "tooltipConversationFile": "Tilføj fil", "tooltipConversationInfo": "Conversation info", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more people are typing", "tooltipConversationInputOneUserTyping": "{{user1}} is typing", "tooltipConversationInputPlaceholder": "Skriv en besked", "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "Åbn en anden hjemmeside for at nulstille din adgangskode", "tooltipPreferencesPicture": "Ændre dit billede…", "tooltipPreferencesRename": "Ændre dit navn", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "Luk (Esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", diff --git a/src/i18n/de-DE.json b/src/i18n/de-DE.json index 882a258f3bf..55186ca3628 100644 --- a/src/i18n/de-DE.json +++ b/src/i18n/de-DE.json @@ -73,7 +73,7 @@ "accessibility.chooseAccountColor": "Wählen Sie Ihre Profilfarbe", "accessibility.closeNotificationsLabel": "Benachrichtigungseinstellungen schließen", "accessibility.conversation.goBack": "Zurück zu Unterhaltungsinfo", - "accessibility.conversation.sectionLabel": "Conversation List", + "accessibility.conversation.sectionLabel": "Unterhaltungsliste", "accessibility.conversationAssetImageAlt": "Bild von {{username}} vom {{messageDate}}", "accessibility.conversationContextMenuOpenLabel": "Messaging-Optionen öffnen", "accessibility.conversationDetailsActionDevicesLabel": "Geräte anzeigen", @@ -654,6 +654,8 @@ "login.subhead": "E-Mail-Adresse oder Benutzernamen eingeben.", "login.twoFactorLoginSubHead": "Bitte prüfen Sie Ihren Posteingang und geben Sie den Bestätigungscode unten ein.", "login.twoFactorLoginTitle": "E-Mail-Adresse bestätigen", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Wiedergabe", "messageDetailsEdited": "Bearbeitet: {{edited}}", "messageDetailsNoLikes": "Niemand hat diese Nachricht bisher mit Gefällt mir markiert.", "messageDetailsNoReceipts": "Niemand hat diese Nachricht bisher gelesen.", @@ -1174,10 +1176,10 @@ "tooltipConversationEphemeral": "Selbstlöschende Nachricht", "tooltipConversationFile": "Datei senden", "tooltipConversationInfo": "Info zur Unterhaltung", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", - "tooltipConversationInputOneUserTyping": "{{user1}} is typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} und {{count}} weitere Personen tippen", + "tooltipConversationInputOneUserTyping": "{{user1}} tippt", "tooltipConversationInputPlaceholder": "Eine Nachricht schreiben", - "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", + "tooltipConversationInputTwoUserTyping": "{{user1}} und {{user2}} tippen", "tooltipConversationPeople": "Unterhaltungsübersicht ({{shortcut}})", "tooltipConversationPicture": "Bild senden", "tooltipConversationPing": "Ping", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "Öffnen Sie eine andere Website, um Ihr Passwort zurückzusetzen", "tooltipPreferencesPicture": "Ändern Sie Ihr Bild…", "tooltipPreferencesRename": "Ändern Sie Ihren Namen", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "Schließen (Esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Bitte verwenden Sie {brandName} stattdessen in Ihrer Desktop-App.", diff --git a/src/i18n/el-GR.json b/src/i18n/el-GR.json index bc3d10b9b22..227a8eaf175 100644 --- a/src/i18n/el-GR.json +++ b/src/i18n/el-GR.json @@ -654,6 +654,8 @@ "login.subhead": "Enter your email address or username.", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "Edited: {{edited}}", "messageDetailsNoLikes": "No one has liked this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Self-deleting message", "tooltipConversationFile": "Προσθήκη αρχείου", "tooltipConversationInfo": "Conversation info", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more people are typing", "tooltipConversationInputOneUserTyping": "{{user1}} is typing", "tooltipConversationInputPlaceholder": "Πληκτρολογηση μηνυματος", "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "Ανοίξτε άλλη ιστοσελίδα για να επαναφέρετε τον κωδικό πρόσβασης σας", "tooltipPreferencesPicture": "Επιλέξτε εικόνα...", "tooltipPreferencesRename": "Επιλέξτε το όνομα σας", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "Κλείσιμο (Esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", diff --git a/src/i18n/en-US.json b/src/i18n/en-US.json index 868ed174443..32a841849e5 100644 --- a/src/i18n/en-US.json +++ b/src/i18n/en-US.json @@ -654,6 +654,8 @@ "login.subhead": "Enter your email address or username.", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "Edited: {{edited}}", "messageDetailsNoLikes": "No one has liked this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", @@ -1192,11 +1194,11 @@ "tooltipConversationsPreferences": "Open preferences", "tooltipConversationsSilence": "Mute ({{shortcut}})", "tooltipConversationsStart": "Start conversation ({{shortcut}})", - "tooltipPreferencesTabs": "Preferences tabs", "tooltipPreferencesContactsMacos": "Share all your contacts from the macOS Contacts app", "tooltipPreferencesPassword": "Open another website to reset your password", "tooltipPreferencesPicture": "Change your picture…", "tooltipPreferencesRename": "Change your name", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "Close (Esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", @@ -1263,7 +1265,5 @@ "wireLinux": "{{brandName}} for Linux", "wireMacos": "{{brandName}} for macOS", "wireWindows": "{{brandName}} for Windows", - "wire_for_web": "{{brandName}} for Web", - "mediaBtnPlay": "Play", - "mediaBtnPause": "Pause" + "wire_for_web": "{{brandName}} for Web" } diff --git a/src/i18n/es-ES.json b/src/i18n/es-ES.json index 62a91694175..f87827ad507 100644 --- a/src/i18n/es-ES.json +++ b/src/i18n/es-ES.json @@ -654,6 +654,8 @@ "login.subhead": "Escriba su dirección de correo o nombre de usuario.", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "Edited: {{edited}}", "messageDetailsNoLikes": "No one has liked this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Self-deleting message", "tooltipConversationFile": "Añadir archivo", "tooltipConversationInfo": "Conversation info", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more people are typing", "tooltipConversationInputOneUserTyping": "{{user1}} is typing", "tooltipConversationInputPlaceholder": "Escriba un mensaje", "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "Abrir otra página web para restablecer su contraseña", "tooltipPreferencesPicture": "Cambiar tu foto…", "tooltipPreferencesRename": "Cambiar tu nombre", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "Cerrar (Esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", diff --git a/src/i18n/et-EE.json b/src/i18n/et-EE.json index bddc3043ad9..dba9d8aaeb0 100644 --- a/src/i18n/et-EE.json +++ b/src/i18n/et-EE.json @@ -654,6 +654,8 @@ "login.subhead": "Sisesta oma e-posti aadress või kasutajanimi.", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "Muudetud: {{edited}}", "messageDetailsNoLikes": "Keegi pole seda sõnumit veel meeldivaks märkinud.", "messageDetailsNoReceipts": "Keegi pole seda sõnumit veel lugenud.", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Self-deleting message", "tooltipConversationFile": "Lisa fail", "tooltipConversationInfo": "Conversation info", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more people are typing", "tooltipConversationInputOneUserTyping": "{{user1}} is typing", "tooltipConversationInputPlaceholder": "Kirjuta sõnum", "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "Ava teine veebileht oma parooli lähtestamiseks", "tooltipPreferencesPicture": "Muuda oma pilti…", "tooltipPreferencesRename": "Muuda oma nime", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "Sulge (Esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", diff --git a/src/i18n/fa-IR.json b/src/i18n/fa-IR.json index f13899d2fa3..aca31469329 100644 --- a/src/i18n/fa-IR.json +++ b/src/i18n/fa-IR.json @@ -654,6 +654,8 @@ "login.subhead": "Enter your email address or username.", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "Edited: {{edited}}", "messageDetailsNoLikes": "No one has liked this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Self-deleting message", "tooltipConversationFile": "اضافه کردن فایل", "tooltipConversationInfo": "Conversation info", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more people are typing", "tooltipConversationInputOneUserTyping": "{{user1}} is typing", "tooltipConversationInputPlaceholder": "پیام خود را بنویسید", "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "صفحه‌ای دیگر برای بازنشانی رمزعبور خود باز کنید", "tooltipPreferencesPicture": "تغییر عکس شما…", "tooltipPreferencesRename": "تغییر نام شما", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "بستن (Esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", diff --git a/src/i18n/fi-FI.json b/src/i18n/fi-FI.json index 5bb6f45d542..e92e0b8c187 100644 --- a/src/i18n/fi-FI.json +++ b/src/i18n/fi-FI.json @@ -654,6 +654,8 @@ "login.subhead": "Enter your email address or username.", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "Edited: {{edited}}", "messageDetailsNoLikes": "No one has liked this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Self-deleting message", "tooltipConversationFile": "Lisää tiedosto", "tooltipConversationInfo": "Conversation info", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more people are typing", "tooltipConversationInputOneUserTyping": "{{user1}} is typing", "tooltipConversationInputPlaceholder": "Kirjoita viesti", "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "Avaa toinen nettisivu vaihtaaksesi salasanasi", "tooltipPreferencesPicture": "Vaihda kuvasi…", "tooltipPreferencesRename": "Vaihda nimesi", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "Sulje (Esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", diff --git a/src/i18n/fr-FR.json b/src/i18n/fr-FR.json index 9ab376ef63d..c4fbbff0abd 100644 --- a/src/i18n/fr-FR.json +++ b/src/i18n/fr-FR.json @@ -654,6 +654,8 @@ "login.subhead": "Entrez votre adresse email ou votre identifiant.", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "Édité : {{edited}}", "messageDetailsNoLikes": "Personne n’a encore aimé ce message.", "messageDetailsNoReceipts": "Personne n’a encore lu ce message.", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Self-deleting message", "tooltipConversationFile": "Ajouter un fichier", "tooltipConversationInfo": "Conversation info", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more people are typing", "tooltipConversationInputOneUserTyping": "{{user1}} is typing", "tooltipConversationInputPlaceholder": "Écrivez un message", "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "Ouvre une page web pour réinitialiser votre mot de passe", "tooltipPreferencesPicture": "Changez votre image de profil…", "tooltipPreferencesRename": "Changez votre nom", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "Fermer (Échap)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", diff --git a/src/i18n/ga-IE.json b/src/i18n/ga-IE.json index 46dc72c0891..32a841849e5 100644 --- a/src/i18n/ga-IE.json +++ b/src/i18n/ga-IE.json @@ -654,6 +654,8 @@ "login.subhead": "Enter your email address or username.", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "Edited: {{edited}}", "messageDetailsNoLikes": "No one has liked this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Self-deleting message", "tooltipConversationFile": "Add file", "tooltipConversationInfo": "Conversation info", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more people are typing", "tooltipConversationInputOneUserTyping": "{{user1}} is typing", "tooltipConversationInputPlaceholder": "Type a message", "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "Open another website to reset your password", "tooltipPreferencesPicture": "Change your picture…", "tooltipPreferencesRename": "Change your name", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "Close (Esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", diff --git a/src/i18n/he-IL.json b/src/i18n/he-IL.json index 46dc72c0891..32a841849e5 100644 --- a/src/i18n/he-IL.json +++ b/src/i18n/he-IL.json @@ -654,6 +654,8 @@ "login.subhead": "Enter your email address or username.", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "Edited: {{edited}}", "messageDetailsNoLikes": "No one has liked this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Self-deleting message", "tooltipConversationFile": "Add file", "tooltipConversationInfo": "Conversation info", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more people are typing", "tooltipConversationInputOneUserTyping": "{{user1}} is typing", "tooltipConversationInputPlaceholder": "Type a message", "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "Open another website to reset your password", "tooltipPreferencesPicture": "Change your picture…", "tooltipPreferencesRename": "Change your name", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "Close (Esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", diff --git a/src/i18n/hi-IN.json b/src/i18n/hi-IN.json index e0193843b54..49286f1736b 100644 --- a/src/i18n/hi-IN.json +++ b/src/i18n/hi-IN.json @@ -654,6 +654,8 @@ "login.subhead": "Enter your email address or username.", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "Edited: {{edited}}", "messageDetailsNoLikes": "No one has liked this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Self-deleting message", "tooltipConversationFile": "Add file", "tooltipConversationInfo": "Conversation info", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more people are typing", "tooltipConversationInputOneUserTyping": "{{user1}} is typing", "tooltipConversationInputPlaceholder": "Type a message", "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "दूसरा वेबसाइट खोले अपना पासवर्ड रिसेट करें के लिए", "tooltipPreferencesPicture": "अपने चित्र को बदलें...", "tooltipPreferencesRename": "अपने नाम को बदलें", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "Close (Esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", diff --git a/src/i18n/hr-HR.json b/src/i18n/hr-HR.json index 66858a1bdf0..9890362cf55 100644 --- a/src/i18n/hr-HR.json +++ b/src/i18n/hr-HR.json @@ -654,6 +654,8 @@ "login.subhead": "Enter your email address or username.", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "Uređeno: {{edited}}", "messageDetailsNoLikes": "Nikome se još nije svidjela poruka.", "messageDetailsNoReceipts": "Nitko još nije pročitao ovu poruku.", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Self-deleting message", "tooltipConversationFile": "Dodaj datoteku", "tooltipConversationInfo": "Conversation info", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more people are typing", "tooltipConversationInputOneUserTyping": "{{user1}} is typing", "tooltipConversationInputPlaceholder": "Upiši poruku", "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "Otvori web stranicu za ponovno postavljanje lozinke", "tooltipPreferencesPicture": "Promjena slike…", "tooltipPreferencesRename": "Promijeni ime", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "Zatvori (Esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", diff --git a/src/i18n/hu-HU.json b/src/i18n/hu-HU.json index 2f9d9ecc372..4bb1f5b3c37 100644 --- a/src/i18n/hu-HU.json +++ b/src/i18n/hu-HU.json @@ -654,6 +654,8 @@ "login.subhead": "Add meg az e-mail címed vagy felhasználóneved.", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "Szerkesztve: {{edited}}", "messageDetailsNoLikes": "Még senkinek nem tetszett ez az üzenet.", "messageDetailsNoReceipts": "Még senki nem olvasta el az üzenetet.", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Self-deleting message", "tooltipConversationFile": "Fájl hozzáadása", "tooltipConversationInfo": "Conversation info", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more people are typing", "tooltipConversationInputOneUserTyping": "{{user1}} is typing", "tooltipConversationInputPlaceholder": "Üzenet írása", "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "Nyiss meg egy másik weboldalt jelszavad visszaállításához", "tooltipPreferencesPicture": "Profilkép módosítása…", "tooltipPreferencesRename": "Név módosítása", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "Bezárás (Esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", diff --git a/src/i18n/id-ID.json b/src/i18n/id-ID.json index 4a3ddd6c94a..72a4a175b97 100644 --- a/src/i18n/id-ID.json +++ b/src/i18n/id-ID.json @@ -654,6 +654,8 @@ "login.subhead": "Enter your email address or username.", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "Edited: {{edited}}", "messageDetailsNoLikes": "No one has liked this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Self-deleting message", "tooltipConversationFile": "Tambah berkas", "tooltipConversationInfo": "Conversation info", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more people are typing", "tooltipConversationInputOneUserTyping": "{{user1}} is typing", "tooltipConversationInputPlaceholder": "Mengetik pesan", "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "Buka situs web lain untuk mengganti kata sandi Anda", "tooltipPreferencesPicture": "Mengubah gambar Anda…", "tooltipPreferencesRename": "Ubah nama Anda", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "Tutup (Esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", diff --git a/src/i18n/is-IS.json b/src/i18n/is-IS.json index 46dc72c0891..32a841849e5 100644 --- a/src/i18n/is-IS.json +++ b/src/i18n/is-IS.json @@ -654,6 +654,8 @@ "login.subhead": "Enter your email address or username.", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "Edited: {{edited}}", "messageDetailsNoLikes": "No one has liked this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Self-deleting message", "tooltipConversationFile": "Add file", "tooltipConversationInfo": "Conversation info", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more people are typing", "tooltipConversationInputOneUserTyping": "{{user1}} is typing", "tooltipConversationInputPlaceholder": "Type a message", "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "Open another website to reset your password", "tooltipPreferencesPicture": "Change your picture…", "tooltipPreferencesRename": "Change your name", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "Close (Esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", diff --git a/src/i18n/it-IT.json b/src/i18n/it-IT.json index 94365bc13f5..8d6facb0f34 100644 --- a/src/i18n/it-IT.json +++ b/src/i18n/it-IT.json @@ -654,6 +654,8 @@ "login.subhead": "Enter your email address or username.", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "Edited: {{edited}}", "messageDetailsNoLikes": "No one has liked this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Self-deleting message", "tooltipConversationFile": "Aggiungi file", "tooltipConversationInfo": "Conversation info", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more people are typing", "tooltipConversationInputOneUserTyping": "{{user1}} is typing", "tooltipConversationInputPlaceholder": "Digita un messaggio", "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "Apri un altro sito per reimpostare la password", "tooltipPreferencesPicture": "Cambia la tua foto…", "tooltipPreferencesRename": "Cambia il tuo nome", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "Chiudi (Esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", diff --git a/src/i18n/ja-JP.json b/src/i18n/ja-JP.json index ba504d9b08d..37e346daa48 100644 --- a/src/i18n/ja-JP.json +++ b/src/i18n/ja-JP.json @@ -654,6 +654,8 @@ "login.subhead": "メールアドレスまたはユーザー名を入力してください", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "編集済: {{edited}}", "messageDetailsNoLikes": "まだ、誰もこのメッセージにいいねしていません。", "messageDetailsNoReceipts": "まだ、誰もこのメッセージを読んでいません。", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Self-deleting message", "tooltipConversationFile": "ファイルを追加", "tooltipConversationInfo": "Conversation info", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more people are typing", "tooltipConversationInputOneUserTyping": "{{user1}} is typing", "tooltipConversationInputPlaceholder": "メッセージを入力", "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "パスワードをリセットするための別のウェブサイトを開く", "tooltipPreferencesPicture": "あなたの写真を変更する...", "tooltipPreferencesRename": "名前を変更する", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "閉じる (Esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", diff --git a/src/i18n/lt-LT.json b/src/i18n/lt-LT.json index 87e857fcdf9..c590e0b41c8 100644 --- a/src/i18n/lt-LT.json +++ b/src/i18n/lt-LT.json @@ -654,6 +654,8 @@ "login.subhead": "Įrašykite savo el. pašto adresą arba naudotojo vardą.", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "Taisyta: {{edited}}", "messageDetailsNoLikes": "Kol kas ši žinutė niekam nepatiko.", "messageDetailsNoReceipts": "Kol kas niekas neperskaitė šios žinutės.", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Self-deleting message", "tooltipConversationFile": "Pridėti failą", "tooltipConversationInfo": "Conversation info", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more people are typing", "tooltipConversationInputOneUserTyping": "{{user1}} is typing", "tooltipConversationInputPlaceholder": "Rašykite žinutę", "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "Atverti kitą svetainę, skirtą slaptažodžio atstatymui", "tooltipPreferencesPicture": "Pakeisti savo paveikslą…", "tooltipPreferencesRename": "Pakeisti savo vardą", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "Užverti (Esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", diff --git a/src/i18n/lv-LV.json b/src/i18n/lv-LV.json index e5eff30f0ff..3cc584d9213 100644 --- a/src/i18n/lv-LV.json +++ b/src/i18n/lv-LV.json @@ -654,6 +654,8 @@ "login.subhead": "Enter your email address or username.", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "Edited: {{edited}}", "messageDetailsNoLikes": "No one has liked this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Self-deleting message", "tooltipConversationFile": "Add file", "tooltipConversationInfo": "Conversation info", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more people are typing", "tooltipConversationInputOneUserTyping": "{{user1}} is typing", "tooltipConversationInputPlaceholder": "Type a message", "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "Open another website to reset your password", "tooltipPreferencesPicture": "Change your picture…", "tooltipPreferencesRename": "Change your name", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "Close (Esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", diff --git a/src/i18n/ms-MY.json b/src/i18n/ms-MY.json index 46dc72c0891..32a841849e5 100644 --- a/src/i18n/ms-MY.json +++ b/src/i18n/ms-MY.json @@ -654,6 +654,8 @@ "login.subhead": "Enter your email address or username.", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "Edited: {{edited}}", "messageDetailsNoLikes": "No one has liked this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Self-deleting message", "tooltipConversationFile": "Add file", "tooltipConversationInfo": "Conversation info", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more people are typing", "tooltipConversationInputOneUserTyping": "{{user1}} is typing", "tooltipConversationInputPlaceholder": "Type a message", "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "Open another website to reset your password", "tooltipPreferencesPicture": "Change your picture…", "tooltipPreferencesRename": "Change your name", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "Close (Esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", diff --git a/src/i18n/nl-NL.json b/src/i18n/nl-NL.json index 6b6dfdb116e..66a906a14e1 100644 --- a/src/i18n/nl-NL.json +++ b/src/i18n/nl-NL.json @@ -654,6 +654,8 @@ "login.subhead": "Enter your email address or username.", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "Edited: {{edited}}", "messageDetailsNoLikes": "No one has liked this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Self-deleting message", "tooltipConversationFile": "Bestand toevoegen", "tooltipConversationInfo": "Conversation info", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more people are typing", "tooltipConversationInputOneUserTyping": "{{user1}} is typing", "tooltipConversationInputPlaceholder": "Typ een bericht", "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "Open andere website om je wachtwoord te resetten", "tooltipPreferencesPicture": "Verander je foto…", "tooltipPreferencesRename": "Wijzig je naam", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "Sluiten (esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", diff --git a/src/i18n/no-NO.json b/src/i18n/no-NO.json index c0d9ea7c112..2b30bf9fcfc 100644 --- a/src/i18n/no-NO.json +++ b/src/i18n/no-NO.json @@ -654,6 +654,8 @@ "login.subhead": "Enter your email address or username.", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "Edited: {{edited}}", "messageDetailsNoLikes": "No one has liked this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Self-deleting message", "tooltipConversationFile": "Add file", "tooltipConversationInfo": "Conversation info", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more people are typing", "tooltipConversationInputOneUserTyping": "{{user1}} is typing", "tooltipConversationInputPlaceholder": "Type a message", "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "Open another website to reset your password", "tooltipPreferencesPicture": "Change your picture…", "tooltipPreferencesRename": "Change your name", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "Lukk (Esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", diff --git a/src/i18n/pl-PL.json b/src/i18n/pl-PL.json index 343a6e9d8bf..195ccf3eaa4 100644 --- a/src/i18n/pl-PL.json +++ b/src/i18n/pl-PL.json @@ -654,6 +654,8 @@ "login.subhead": "Enter your email address or username.", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "Edited: {{edited}}", "messageDetailsNoLikes": "No one has liked this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Self-deleting message", "tooltipConversationFile": "Dodaj plik", "tooltipConversationInfo": "Conversation info", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more people are typing", "tooltipConversationInputOneUserTyping": "{{user1}} is typing", "tooltipConversationInputPlaceholder": "Wpisz wiadomość", "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "Otwórz stronę resetowania hasła", "tooltipPreferencesPicture": "Zmień swój obraz…", "tooltipPreferencesRename": "Zmień swoją nazwę", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "Zamknij (Esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", diff --git a/src/i18n/pt-BR.json b/src/i18n/pt-BR.json index dff869b13c8..8f53b550534 100644 --- a/src/i18n/pt-BR.json +++ b/src/i18n/pt-BR.json @@ -89,7 +89,7 @@ "accessibility.conversationStatusUnreadPing": "Ping perdido", "accessibility.conversationStatusUnreadReply": "Resposta não lida", "accessibility.giphyModal.close": "Fechar a janela 'GIF'", - "accessibility.giphyModal.loading": "Loading giphy", + "accessibility.giphyModal.loading": "Carregando giphy", "accessibility.giphyModal.selectGif": "Selecionar gif", "accessibility.giphyModal.sendGif": "Enviar gif", "accessibility.giphyModal.showGifs": "Abrir todos os gifs", @@ -654,6 +654,8 @@ "login.subhead": "Digite seu endereço de e-mail ou nome de usuário.", "login.twoFactorLoginSubHead": "Por favor, verifique no seu e-mail {email} o código de verificação e insira-o abaixo.", "login.twoFactorLoginTitle": "Verifique sua conta", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "Editado: {{edited}}", "messageDetailsNoLikes": "Ninguém curtiu esta mensagem ainda.", "messageDetailsNoReceipts": "Ninguém leu esta mensagem ainda.", @@ -1174,10 +1176,10 @@ "tooltipConversationEphemeral": "Auto-exclusão de mensagem", "tooltipConversationFile": "Adicionar arquivo", "tooltipConversationInfo": "Informações da conversa", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", - "tooltipConversationInputOneUserTyping": "{{user1}} is typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} e mais {{count}} pessoas estão digitando", + "tooltipConversationInputOneUserTyping": "{{user1}} está digitando", "tooltipConversationInputPlaceholder": "Digite uma mensagem", - "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", + "tooltipConversationInputTwoUserTyping": "{{user1}} e {{user2}} estão digitando", "tooltipConversationPeople": "Pessoas ({{shortcut}})", "tooltipConversationPicture": "Adicionar foto", "tooltipConversationPing": "Ping", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "Abrir outro site para redefinir sua senha", "tooltipPreferencesPicture": "Alterar sua foto…", "tooltipPreferencesRename": "Altere seu nome", + "tooltipPreferencesTabs": "Abas de preferências", "tooltipSearchClose": "Fechar (Esc)", "unavailableUser": "Nome de usuário indisponível", "unsupported.desktopOnlyMessage": "Em vez disso, use o aplicativo do {brandName} para desktop.", diff --git a/src/i18n/pt-PT.json b/src/i18n/pt-PT.json index d1c9a765a1c..3c4e9156a15 100644 --- a/src/i18n/pt-PT.json +++ b/src/i18n/pt-PT.json @@ -654,6 +654,8 @@ "login.subhead": "Digite seu endereço de e-mail ou nome de usuário.", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "Edited: {{edited}}", "messageDetailsNoLikes": "No one has liked this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Self-deleting message", "tooltipConversationFile": "Adicionar ficheiro", "tooltipConversationInfo": "Conversation info", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more people are typing", "tooltipConversationInputOneUserTyping": "{{user1}} is typing", "tooltipConversationInputPlaceholder": "Escreva uma mensagem", "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "Abrir um outro site para alterar a sua palavra-passe", "tooltipPreferencesPicture": "Mude sua fotografia…", "tooltipPreferencesRename": "Mudar o seu nome", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "Fechar (Esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", diff --git a/src/i18n/ro-RO.json b/src/i18n/ro-RO.json index 3ee46972989..001cc6f26fb 100644 --- a/src/i18n/ro-RO.json +++ b/src/i18n/ro-RO.json @@ -654,6 +654,8 @@ "login.subhead": "Enter your email address or username.", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "Edited: {{edited}}", "messageDetailsNoLikes": "No one has liked this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Self-deleting message", "tooltipConversationFile": "Adaugă fișier", "tooltipConversationInfo": "Conversation info", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more people are typing", "tooltipConversationInputOneUserTyping": "{{user1}} is typing", "tooltipConversationInputPlaceholder": "Scrie un mesaj", "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "Deschide un alt site web pentru a reseta parola", "tooltipPreferencesPicture": "Schimbă poza de profil…", "tooltipPreferencesRename": "Schimbă numele tău", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "Închide (Esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", diff --git a/src/i18n/ru-RU.json b/src/i18n/ru-RU.json index 6b226451212..c396ef43c10 100644 --- a/src/i18n/ru-RU.json +++ b/src/i18n/ru-RU.json @@ -654,6 +654,8 @@ "login.subhead": "Введите свой email или псевдоним.", "login.twoFactorLoginSubHead": "Пожалуйста, введите ниже код проверки, отправленный на ваш email {email}.", "login.twoFactorLoginTitle": "Подтвердите учетную запись", + "mediaBtnPause": "Пауза", + "mediaBtnPlay": "Воспроизвести", "messageDetailsEdited": "Изменено: {{edited}}", "messageDetailsNoLikes": "Сообщение еще никому не понравилось.", "messageDetailsNoReceipts": "Сообщение еще никем не прочитано.", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Самоудаляющееся сообщение", "tooltipConversationFile": "Добавить файл", "tooltipConversationInfo": "Информация о беседе", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} и еще {{count}} пишут", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} и еще {{count}} участников пишут", "tooltipConversationInputOneUserTyping": "{{user1}} пишет", "tooltipConversationInputPlaceholder": "Введите сообщение", "tooltipConversationInputTwoUserTyping": "{{user1}} и {{user2}} пишут", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "Открыть страницу сброса пароля", "tooltipPreferencesPicture": "Изменить свое фото…", "tooltipPreferencesRename": "Изменить свое имя", + "tooltipPreferencesTabs": "Настройки вкладок", "tooltipSearchClose": "Закрыть (Esc)", "unavailableUser": "Псевдоним недоступен", "unsupported.desktopOnlyMessage": "Необходимо использовать {brandName} на вашем компьютере.", diff --git a/src/i18n/si-LK.json b/src/i18n/si-LK.json index 46dc72c0891..32a841849e5 100644 --- a/src/i18n/si-LK.json +++ b/src/i18n/si-LK.json @@ -654,6 +654,8 @@ "login.subhead": "Enter your email address or username.", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "Edited: {{edited}}", "messageDetailsNoLikes": "No one has liked this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Self-deleting message", "tooltipConversationFile": "Add file", "tooltipConversationInfo": "Conversation info", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more people are typing", "tooltipConversationInputOneUserTyping": "{{user1}} is typing", "tooltipConversationInputPlaceholder": "Type a message", "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "Open another website to reset your password", "tooltipPreferencesPicture": "Change your picture…", "tooltipPreferencesRename": "Change your name", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "Close (Esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", diff --git a/src/i18n/sk-SK.json b/src/i18n/sk-SK.json index 77992d3351b..e78e54db69c 100644 --- a/src/i18n/sk-SK.json +++ b/src/i18n/sk-SK.json @@ -654,6 +654,8 @@ "login.subhead": "Enter your email address or username.", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "Edited: {{edited}}", "messageDetailsNoLikes": "No one has liked this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Self-deleting message", "tooltipConversationFile": "Pridať súbor", "tooltipConversationInfo": "Conversation info", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more people are typing", "tooltipConversationInputOneUserTyping": "{{user1}} is typing", "tooltipConversationInputPlaceholder": "Napísať správu", "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "Pre zmenu hesla otvorte ďalšiu webovú stránku", "tooltipPreferencesPicture": "Zmeniť obrázok…", "tooltipPreferencesRename": "Zmeniť Vaše meno", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "Zavrieť (Esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", diff --git a/src/i18n/sl-SI.json b/src/i18n/sl-SI.json index b06e9c810c5..06da2c06980 100644 --- a/src/i18n/sl-SI.json +++ b/src/i18n/sl-SI.json @@ -654,6 +654,8 @@ "login.subhead": "Enter your email address or username.", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "Edited: {{edited}}", "messageDetailsNoLikes": "No one has liked this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Self-deleting message", "tooltipConversationFile": "Dodaj zbirko", "tooltipConversationInfo": "Conversation info", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more people are typing", "tooltipConversationInputOneUserTyping": "{{user1}} is typing", "tooltipConversationInputPlaceholder": "Napiši sporočilo", "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "Odpri drugo spletno stran za ponastavitev gesla", "tooltipPreferencesPicture": "Spremenite vašo sliko…", "tooltipPreferencesRename": "Spremenite vaše ime", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "Zapri (Esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", diff --git a/src/i18n/sr-SP.json b/src/i18n/sr-SP.json index a8c53f52c89..aec9dd2ede2 100644 --- a/src/i18n/sr-SP.json +++ b/src/i18n/sr-SP.json @@ -654,6 +654,8 @@ "login.subhead": "Унесите своју адресу е-поште или корисничко име.", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "Измењено: {{edited}}", "messageDetailsNoLikes": "Нико још није лајковао ову поруку", "messageDetailsNoReceipts": "Још нико није прочитао ову поруку.", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Self-deleting message", "tooltipConversationFile": "додај фајл", "tooltipConversationInfo": "Conversation info", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more people are typing", "tooltipConversationInputOneUserTyping": "{{user1}} is typing", "tooltipConversationInputPlaceholder": "унесите поруку", "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "Отворите други веб сајт за ресет лозинке", "tooltipPreferencesPicture": "Измените своју слику…", "tooltipPreferencesRename": "Промените име", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "Затвори (Esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", diff --git a/src/i18n/sv-SE.json b/src/i18n/sv-SE.json index f1240289e50..bc490b50e60 100644 --- a/src/i18n/sv-SE.json +++ b/src/i18n/sv-SE.json @@ -654,6 +654,8 @@ "login.subhead": "Enter your email address or username.", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "Edited: {{edited}}", "messageDetailsNoLikes": "No one has liked this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Self-deleting message", "tooltipConversationFile": "Lägg till fil", "tooltipConversationInfo": "Conversation info", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more people are typing", "tooltipConversationInputOneUserTyping": "{{user1}} is typing", "tooltipConversationInputPlaceholder": "Skriv ett meddelande", "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "Öppna en annan webbplats för att återställa ditt lösenord", "tooltipPreferencesPicture": "Ändra din bild…", "tooltipPreferencesRename": "Ändra ditt namn", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "Stäng (Esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", diff --git a/src/i18n/th-TH.json b/src/i18n/th-TH.json index 46dc72c0891..32a841849e5 100644 --- a/src/i18n/th-TH.json +++ b/src/i18n/th-TH.json @@ -654,6 +654,8 @@ "login.subhead": "Enter your email address or username.", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "Edited: {{edited}}", "messageDetailsNoLikes": "No one has liked this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Self-deleting message", "tooltipConversationFile": "Add file", "tooltipConversationInfo": "Conversation info", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more people are typing", "tooltipConversationInputOneUserTyping": "{{user1}} is typing", "tooltipConversationInputPlaceholder": "Type a message", "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "Open another website to reset your password", "tooltipPreferencesPicture": "Change your picture…", "tooltipPreferencesRename": "Change your name", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "Close (Esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", diff --git a/src/i18n/tr-TR.json b/src/i18n/tr-TR.json index fd54131a0d0..e2850373050 100644 --- a/src/i18n/tr-TR.json +++ b/src/i18n/tr-TR.json @@ -654,6 +654,8 @@ "login.subhead": "E-posta adresi veya kullanıcı adı girin.", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "{{edited}}’da düzenlenmiş", "messageDetailsNoLikes": "Bu mesajı henüz kimse beğenmemiş.", "messageDetailsNoReceipts": "Bu mesajı henüz kimse okumamış.", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Self-deleting message", "tooltipConversationFile": "Dosya Ekle", "tooltipConversationInfo": "Conversation info", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more people are typing", "tooltipConversationInputOneUserTyping": "{{user1}} is typing", "tooltipConversationInputPlaceholder": "Bir mesaj yazın", "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "Şifreyi sıfırlamak için yeni bir pencere aç", "tooltipPreferencesPicture": "Resminizi değiştirin…", "tooltipPreferencesRename": "İsminizi değiştirin", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "Kapat (Esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", diff --git a/src/i18n/uk-UA.json b/src/i18n/uk-UA.json index 0cef0195ebd..0f9df39bd38 100644 --- a/src/i18n/uk-UA.json +++ b/src/i18n/uk-UA.json @@ -654,6 +654,8 @@ "login.subhead": "Введіть адресу електронної пошти та ваше ім'я.", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "Відредаговане: {{edited}}", "messageDetailsNoLikes": "Це повідомлення поки що ніхто не лайкнув.", "messageDetailsNoReceipts": "Це повідомлення поки що ніхто не переглянув.", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Self-deleting message", "tooltipConversationFile": "Додати файл", "tooltipConversationInfo": "Conversation info", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more people are typing", "tooltipConversationInputOneUserTyping": "{{user1}} is typing", "tooltipConversationInputPlaceholder": "Напишіть повідомлення", "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "Відкрийте нову вкладку в браузері, щоб змінити ваш пароль", "tooltipPreferencesPicture": "Змініть своє фото…", "tooltipPreferencesRename": "Змініть своє ім’я", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "Закрити (Esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", diff --git a/src/i18n/uz-UZ.json b/src/i18n/uz-UZ.json index 46dc72c0891..32a841849e5 100644 --- a/src/i18n/uz-UZ.json +++ b/src/i18n/uz-UZ.json @@ -654,6 +654,8 @@ "login.subhead": "Enter your email address or username.", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "Edited: {{edited}}", "messageDetailsNoLikes": "No one has liked this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Self-deleting message", "tooltipConversationFile": "Add file", "tooltipConversationInfo": "Conversation info", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more people are typing", "tooltipConversationInputOneUserTyping": "{{user1}} is typing", "tooltipConversationInputPlaceholder": "Type a message", "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "Open another website to reset your password", "tooltipPreferencesPicture": "Change your picture…", "tooltipPreferencesRename": "Change your name", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "Close (Esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", diff --git a/src/i18n/vi-VN.json b/src/i18n/vi-VN.json index 46dc72c0891..32a841849e5 100644 --- a/src/i18n/vi-VN.json +++ b/src/i18n/vi-VN.json @@ -654,6 +654,8 @@ "login.subhead": "Enter your email address or username.", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "Edited: {{edited}}", "messageDetailsNoLikes": "No one has liked this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Self-deleting message", "tooltipConversationFile": "Add file", "tooltipConversationInfo": "Conversation info", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more people are typing", "tooltipConversationInputOneUserTyping": "{{user1}} is typing", "tooltipConversationInputPlaceholder": "Type a message", "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "Open another website to reset your password", "tooltipPreferencesPicture": "Change your picture…", "tooltipPreferencesRename": "Change your name", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "Close (Esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", diff --git a/src/i18n/zh-CN.json b/src/i18n/zh-CN.json index 3c963a6210f..bcb646a7ff5 100644 --- a/src/i18n/zh-CN.json +++ b/src/i18n/zh-CN.json @@ -654,6 +654,8 @@ "login.subhead": "Enter your email address or username.", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "Edited: {{edited}}", "messageDetailsNoLikes": "没有人喜欢这个消息。", "messageDetailsNoReceipts": "No one has read this message yet.", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Self-deleting message", "tooltipConversationFile": "添加文件", "tooltipConversationInfo": "Conversation info", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more people are typing", "tooltipConversationInputOneUserTyping": "{{user1}} is typing", "tooltipConversationInputPlaceholder": "输入一条消息", "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "打开另一个网站来重置您的密码", "tooltipPreferencesPicture": "更改头像", "tooltipPreferencesRename": "更改名字", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "关闭(Esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", diff --git a/src/i18n/zh-HK.json b/src/i18n/zh-HK.json index 46dc72c0891..32a841849e5 100644 --- a/src/i18n/zh-HK.json +++ b/src/i18n/zh-HK.json @@ -654,6 +654,8 @@ "login.subhead": "Enter your email address or username.", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "Edited: {{edited}}", "messageDetailsNoLikes": "No one has liked this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Self-deleting message", "tooltipConversationFile": "Add file", "tooltipConversationInfo": "Conversation info", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more people are typing", "tooltipConversationInputOneUserTyping": "{{user1}} is typing", "tooltipConversationInputPlaceholder": "Type a message", "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "Open another website to reset your password", "tooltipPreferencesPicture": "Change your picture…", "tooltipPreferencesRename": "Change your name", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "Close (Esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", diff --git a/src/i18n/zh-TW.json b/src/i18n/zh-TW.json index 9ebb00cef9f..96c47ee8bec 100644 --- a/src/i18n/zh-TW.json +++ b/src/i18n/zh-TW.json @@ -654,6 +654,8 @@ "login.subhead": "Enter your email address or username.", "login.twoFactorLoginSubHead": "Please check your email {email} for the verification code and enter it below.", "login.twoFactorLoginTitle": "Verify your account", + "mediaBtnPause": "Pause", + "mediaBtnPlay": "Play", "messageDetailsEdited": "Edited: {{edited}}", "messageDetailsNoLikes": "No one has liked this message yet.", "messageDetailsNoReceipts": "No one has read this message yet.", @@ -1174,7 +1176,7 @@ "tooltipConversationEphemeral": "Self-deleting message", "tooltipConversationFile": "新增檔案", "tooltipConversationInfo": "Conversation info", - "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more are typing", + "tooltipConversationInputMoreThanTwoUserTyping": "{{user1}} and {{count}} more people are typing", "tooltipConversationInputOneUserTyping": "{{user1}} is typing", "tooltipConversationInputPlaceholder": "請輸入一段訊息", "tooltipConversationInputTwoUserTyping": "{{user1}} and {{user2}} are typing", @@ -1196,6 +1198,7 @@ "tooltipPreferencesPassword": "開啟另一個網站來重設您的密碼", "tooltipPreferencesPicture": "更換您的圖片...", "tooltipPreferencesRename": "改變你的名字", + "tooltipPreferencesTabs": "Preferences tabs", "tooltipSearchClose": "關閉 (Esc)", "unavailableUser": "Username unavailable", "unsupported.desktopOnlyMessage": "Please use {brandName} on your desktop app instead.", From 8fc2fd09b513fb4aee9f8a27c6a44d31683c8cf2 Mon Sep 17 00:00:00 2001 From: Thomas Belin Date: Tue, 22 Nov 2022 09:14:41 +0100 Subject: [PATCH 008/329] runfix: Retrict image asset height (#14157) --- .../Message/ContentMessage/asset/ImageAsset.tsx | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/script/components/MessagesList/Message/ContentMessage/asset/ImageAsset.tsx b/src/script/components/MessagesList/Message/ContentMessage/asset/ImageAsset.tsx index e7df3c8038a..a33571695bb 100644 --- a/src/script/components/MessagesList/Message/ContentMessage/asset/ImageAsset.tsx +++ b/src/script/components/MessagesList/Message/ContentMessage/asset/ImageAsset.tsx @@ -19,6 +19,7 @@ import React, {useEffect, useState} from 'react'; +import {CSSObject} from '@emotion/react'; import cx from 'classnames'; import {container} from 'tsyringe'; @@ -87,8 +88,16 @@ const ImageAsset: React.FC = ({asset, message, onClick, teamSta username: `${message.user().name()}`, }); + const imageContainerStyle: CSSObject = { + aspectRatio: `${asset.ratio}`, + maxWidth: '100%', + width: asset.width, + maxHeight: '80vh', + height: asset.height, + }; + return ( -
    +
    {isFileSharingReceivingEnabled ? ( Date: Tue, 22 Nov 2022 13:26:33 +0330 Subject: [PATCH 009/329] runfix: Show correct count in typing indicator and add data-uie-names (#14158) --- .../TypingIndicator/TypingIndicator.tsx | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/src/script/components/InputBar/TypingIndicator/TypingIndicator.tsx b/src/script/components/InputBar/TypingIndicator/TypingIndicator.tsx index 0b0542892cc..af8339522b8 100644 --- a/src/script/components/InputBar/TypingIndicator/TypingIndicator.tsx +++ b/src/script/components/InputBar/TypingIndicator/TypingIndicator.tsx @@ -46,7 +46,7 @@ const TypingIndicator: FC = ({conversationId}) => { } return ( -
    +
    {users.slice(0, 3).map((user, index) => ( = ({conversationId}) => { /> ))}
    - {usersCount === 1 && t('tooltipConversationInputOneUserTyping' as StringIdentifer, {user1: users[0].name()})} - {usersCount === 2 && - t('tooltipConversationInputTwoUserTyping' as StringIdentifer, { - user1: users[0].name(), - user2: users[1].name(), - })} - {usersCount > 2 && - t('tooltipConversationInputMoreThanTwoUserTyping' as StringIdentifer, { - user1: users[0].name(), - count: usersCount.toString(), - })} + + {usersCount === 1 && t('tooltipConversationInputOneUserTyping' as StringIdentifer, {user1: users[0].name()})} + {usersCount === 2 && + t('tooltipConversationInputTwoUserTyping' as StringIdentifer, { + user1: users[0].name(), + user2: users[1].name(), + })} + {usersCount > 2 && + t('tooltipConversationInputMoreThanTwoUserTyping' as StringIdentifer, { + user1: users[0].name(), + count: (usersCount - 1).toString(), + })} +
    From f60c4a3d38f8b687865859c96a623b61d3ec5b61 Mon Sep 17 00:00:00 2001 From: Arjita Date: Tue, 22 Nov 2022 11:30:13 +0100 Subject: [PATCH 010/329] feat: refactoring of text message renderer, fix interactive elements focus order, make chat user avatar keyboard accessible (#14153) * fix: code review fix and chat area focus improvements(ACCC-268) handle all interactive elements focus with a function hanlde media elements seperately as they have a loading state make Avatar keyboard accessible handle reply messsage focus * fix: replace clickhandler with my new function(ACC-268) * refactor: create a message event function(ACC-268) * Update src/script/components/Avatar.tsx Co-authored-by: Thomas Belin * Update src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer.tsx Co-authored-by: Thomas Belin * Update src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer.tsx Co-authored-by: Thomas Belin * Update src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer.tsx Co-authored-by: Thomas Belin * fix: code review comments and refactoring detect message type from current target as we can't pass element type to avoid creating a new function reference handle Quote message focus state change mention message element type from span to div with role button as its an interactive element lint error test fix Co-authored-by: Thomas Belin --- src/script/components/Avatar.tsx | 24 ++- .../components/Conversation/Conversation.tsx | 28 ++-- .../Message/ContentMessage/MessageQuote.tsx | 17 +- .../ContentMessage/asset/AudioAsset.tsx | 3 + .../asset/FileAssetComponent.tsx | 4 +- .../asset/TextMessageRenderer.test.tsx | 41 ++--- .../asset/TextMessageRenderer.tsx | 148 +++++++++--------- .../ContentMessage/asset/VideoAsset.tsx | 3 + .../asset/controls/MediaButton.tsx | 4 + .../Message/ContentMessage/asset/index.tsx | 15 +- .../Message/ContentMessage/index.tsx | 8 +- .../components/MessagesList/Message/index.tsx | 15 +- .../components/MessagesList/MessageList.tsx | 10 +- src/script/components/avatar/UserAvatar.tsx | 11 +- src/script/util/focusUtil.ts | 63 ++++++++ src/script/util/messageRenderer.ts | 6 +- .../content/conversation/message-list.less | 1 + test/unit_tests/util/messageRendererSpec.js | 14 +- 18 files changed, 247 insertions(+), 168 deletions(-) create mode 100644 src/script/util/focusUtil.ts diff --git a/src/script/components/Avatar.tsx b/src/script/components/Avatar.tsx index e98156cfb44..48fedb777ed 100644 --- a/src/script/components/Avatar.tsx +++ b/src/script/components/Avatar.tsx @@ -17,9 +17,10 @@ * */ -import {FC, HTMLProps, MouseEvent as ReactMouseEvent} from 'react'; +import {FC, HTMLProps, MouseEvent as ReactMouseEvent, KeyboardEvent as ReactKeyBoardEvent} from 'react'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; +import {handleKeyDown} from 'Util/KeyboardUtil'; import {ServiceAvatar} from './avatar/ServiceAvatar'; import {TemporaryGuestAvatar} from './avatar/TemporaryGuestAvatar'; @@ -86,9 +87,16 @@ const Avatar: FC = ({ participant, ...props }) => { - const clickHandler = (event: ReactMouseEvent) => { - if (event.currentTarget.parentNode) { - onAvatarClick?.(participant, event.currentTarget.parentNode); + const handleAvatarInteraction = ( + event: ReactMouseEvent | ReactKeyBoardEvent, + ) => { + const parentNode = event.currentTarget.parentNode; + if (parentNode) { + if ('key' in event) { + handleKeyDown(event, () => onAvatarClick?.(participant, parentNode)); + return; + } + onAvatarClick?.(participant, parentNode); } }; @@ -105,7 +113,9 @@ const Avatar: FC = ({ ]); if (isServiceEntity(participant)) { - return ; + return ( + + ); } const isMe = participant?.isMe; @@ -131,7 +141,7 @@ const Avatar: FC = ({ = ({ avatarSize={avatarSize} noBadge={noBadge} noFilter={noFilter} - onClick={clickHandler} + onAvatarInteraction={handleAvatarInteraction} participant={participant} state={avatarState} {...props} diff --git a/src/script/components/Conversation/Conversation.tsx b/src/script/components/Conversation/Conversation.tsx index 65567d40cf1..649990a7903 100644 --- a/src/script/components/Conversation/Conversation.tsx +++ b/src/script/components/Conversation/Conversation.tsx @@ -57,7 +57,7 @@ import {PanelState} from '../../page/RightSidebar'; import {RootContext} from '../../page/RootProvider'; import {TeamState} from '../../team/TeamState'; import {UserState} from '../../user/UserState'; -import {ElementType} from '../MessagesList/Message/ContentMessage/asset/TextMessageRenderer'; +import {ElementType, MessageDetails} from '../MessagesList/Message/ContentMessage/asset/TextMessageRenderer'; type ReadMessageBuffer = {conversation: ConversationEntity; message: Message}; @@ -181,14 +181,14 @@ export const Conversation: FC = ({ } }; - const handleEmailClick = (event: Event) => { - safeMailOpen((event.target as HTMLAnchorElement).href); + const handleEmailClick = (event: Event, messageDetails: MessageDetails) => { + safeMailOpen(messageDetails.href!); event.preventDefault(); return false; }; - const handleMarkdownLinkClick = (event: Event) => { - const href = (event.target as HTMLAnchorElement).href; + const handleMarkdownLinkClick = (event: Event, messageDetails: MessageDetails) => { + const href = messageDetails.href!; PrimaryModal.show(PrimaryModal.type.CONFIRM, { primaryAction: { action: () => safeWindowOpen(href), @@ -203,10 +203,9 @@ export const Conversation: FC = ({ return false; }; - const userMentionClick = (event: Event) => { - const target = event.currentTarget as HTMLElement; - const userId = target?.dataset.userId; - const domain = target?.dataset.userDomain; + const userMentionClick = (messageDetails: MessageDetails) => { + const userId = messageDetails.userId; + const domain = messageDetails.userDomain; if (userId) { (async () => { @@ -227,6 +226,11 @@ export const Conversation: FC = ({ messageEntity: ContentMessage | Text, event: MouseEvent | KeyboardEvent, elementType: ElementType, + messageDetails: { + href: ''; + userId: ''; + userDomain: ''; + }, ) => { if (isMouseEvent(event) && event.button === btnRightClick) { // Default browser behavior on right click @@ -235,13 +239,13 @@ export const Conversation: FC = ({ switch (elementType) { case 'email': - handleEmailClick(event); + handleEmailClick(event, messageDetails); break; case 'markdownLink': - handleMarkdownLinkClick(event); + handleMarkdownLinkClick(event, messageDetails); break; case 'mention': - userMentionClick(event); + userMentionClick(messageDetails); break; } diff --git a/src/script/components/MessagesList/Message/ContentMessage/MessageQuote.tsx b/src/script/components/MessagesList/Message/ContentMessage/MessageQuote.tsx index 4bbadd743bd..45678920168 100644 --- a/src/script/components/MessagesList/Message/ContentMessage/MessageQuote.tsx +++ b/src/script/components/MessagesList/Message/ContentMessage/MessageQuote.tsx @@ -27,7 +27,6 @@ import {WebAppEvents} from '@wireapp/webapp-events'; import {Icon} from 'Components/Icon'; import {Image} from 'Components/Image'; -import {Text} from 'src/script/entity/message/Text'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; import {includesOnlyEmojis} from 'Util/EmojiUtil'; import {t} from 'Util/LocalizerUtil'; @@ -37,9 +36,10 @@ import {AudioAsset} from './asset/AudioAsset'; import {FileAsset} from './asset/FileAssetComponent'; import {LocationAsset} from './asset/LocationAsset'; import {RenderShowMsgBtn} from './asset/RenderShowMsgBtn'; -import {TextMessageRenderer, ElementType} from './asset/TextMessageRenderer'; +import {TextMessageRenderer} from './asset/TextMessageRenderer'; import {VideoAsset} from './asset/VideoAsset'; +import {MessageActions} from '..'; import type {Conversation} from '../../../../entity/Conversation'; import type {ContentMessage} from '../../../../entity/message/ContentMessage'; import type {User} from '../../../../entity/User'; @@ -50,7 +50,7 @@ export interface QuoteProps { conversation: Conversation; findMessage: (conversation: Conversation, messageId: string) => Promise; focusMessage: (id: string) => void; - handleClickOnMessage: (message: Text, event: MouseEvent | KeyboardEvent, elementType: ElementType) => void; + handleClickOnMessage: MessageActions['onClickMessage']; quote: QuoteEntity; selfId: QualifiedId; showDetail: (message: ContentMessage, event: ReactMouseEvent) => void; @@ -137,7 +137,7 @@ const Quote: FC = ({ interface QuotedMessageProps { focusMessage: (id: string) => void; - handleClickOnMessage: (message: Text, event: MouseEvent | KeyboardEvent, elementType: ElementType) => void; + handleClickOnMessage: MessageActions['onClickMessage']; quotedMessage: ContentMessage; selfId: QualifiedId; showDetail: (message: ContentMessage, event: ReactMouseEvent) => void; @@ -239,11 +239,17 @@ const QuotedMessage: FC = ({ message={quotedMessage} // className="message-quote__video" data-uie-name="media-video-quote" + isCurrentConversationFocused={focusConversation} /> )} {asset.isAudio() && ( - + )} {asset.isFile() && ( @@ -251,6 +257,7 @@ const QuotedMessage: FC = ({ message={quotedMessage} // className="message-quote__file" data-uie-name="media-file-quote" + isCurrentConversationFocused={focusConversation} /> )} diff --git a/src/script/components/MessagesList/Message/ContentMessage/asset/AudioAsset.tsx b/src/script/components/MessagesList/Message/ContentMessage/asset/AudioAsset.tsx index b7742e2a1af..00d386fea93 100644 --- a/src/script/components/MessagesList/Message/ContentMessage/asset/AudioAsset.tsx +++ b/src/script/components/MessagesList/Message/ContentMessage/asset/AudioAsset.tsx @@ -48,6 +48,7 @@ export interface AudioAssetProps { hasHeader?: boolean; message: ContentMessage; teamState?: TeamState; + isCurrentConversationFocused?: boolean; } const AudioAsset: React.FC = ({ @@ -55,6 +56,7 @@ const AudioAsset: React.FC = ({ className, hasHeader = false, teamState = container.resolve(TeamState), + isCurrentConversationFocused = true, }) => { const asset = message.getFirstAsset() as FileAsset; const [audioElement, setAudioElement] = useEffectRef(); @@ -129,6 +131,7 @@ const AudioAsset: React.FC = ({ cancel={cancelUpload} transferState={transferState} uploadProgress={uploadProgress} + isCurrentConversationFocused={isCurrentConversationFocused} /> {transferState !== AssetTransferState.UPLOADING && audioElement && ( diff --git a/src/script/components/MessagesList/Message/ContentMessage/asset/FileAssetComponent.tsx b/src/script/components/MessagesList/Message/ContentMessage/asset/FileAssetComponent.tsx index 29be0374120..a0e25290920 100644 --- a/src/script/components/MessagesList/Message/ContentMessage/asset/FileAssetComponent.tsx +++ b/src/script/components/MessagesList/Message/ContentMessage/asset/FileAssetComponent.tsx @@ -41,12 +41,14 @@ export interface FileAssetProps { hasHeader?: boolean; message: ContentMessage; teamState?: TeamState; + isCurrentConversationFocused?: boolean; } const FileAsset: React.FC = ({ message, hasHeader = false, teamState = container.resolve(TeamState), + isCurrentConversationFocused = true, }) => { const asset = message.getFirstAsset() as FileAssetType; @@ -88,7 +90,7 @@ const FileAsset: React.FC = ({ data-uie-name="file" data-uie-value={asset.file_name} role="button" - tabIndex={0} + tabIndex={isCurrentConversationFocused ? 0 : -1} aria-label={`${t('conversationContextMenuDownload')} ${fileName}.${fileExtension}`} onClick={() => { if (isUploaded) { diff --git a/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer.test.tsx b/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer.test.tsx index 13abbb18e2e..d0f8c53b6fc 100644 --- a/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer.test.tsx +++ b/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer.test.tsx @@ -18,11 +18,11 @@ */ import {fireEvent, render} from '@testing-library/react'; -import ko from 'knockout'; import {PROTO_MESSAGE_TYPE} from 'src/script/cryptography/ProtoMessageType'; import {LinkPreview} from 'src/script/entity/message/LinkPreview'; -import type {Text} from 'src/script/entity/message/Text'; +import {Text} from 'src/script/entity/message/Text'; +import {createRandomUuid} from 'Util/util'; import {TextMessageRenderer} from './TextMessageRenderer'; @@ -36,25 +36,10 @@ const mention = { userId: '1', }; -const asset: Text = { - isAudio: jest.fn(), - isButton: jest.fn(), - isDownloadable: jest.fn(), - isFile: jest.fn(), - isImage: jest.fn(), - isLocation: jest.fn(), - isText: jest.fn(), - isUserMentioned: jest.fn(), - isVideo: jest.fn(), - key: '1234', - mentions: ko.observableArray([new MentionEntity(mention.startIndex, mention.length, mention.userId, mention.domain)]), - previews: ko.observableArray([new LinkPreview()]), - render: jest.fn(), - should_render_text: ko.pureComputed(jest.fn()), - size: '', - text: 'this is a default txt message', - type: 'text', -}; +const textAsset = new Text(createRandomUuid()); +textAsset.mentions([new MentionEntity(mention.startIndex, mention.length, mention.userId, mention.domain)]); +textAsset.previews([new LinkPreview()]); + describe('TextMessageRenderer', () => { it('renders a text message', () => { const onClickElement = jest.fn(); @@ -65,7 +50,7 @@ describe('TextMessageRenderer', () => { onMessageClick={onClickElement} isCurrentConversationFocused msgClass="" - asset={asset} + asset={textAsset} />, ); const txtMsgElement = getByText(txtMsg); @@ -80,14 +65,14 @@ describe('TextMessageRenderer', () => { it('renders and trigger click/keydown event of mention message correcly', () => { const onClickElement = jest.fn(); - const text = `@jj yes it is`; + const text = `
    @jj
    yes it is`; const {getByTestId} = render( , ); const mention = getByTestId('label-other-mention'); @@ -103,7 +88,7 @@ describe('TextMessageRenderer', () => { const linkTxt = 'this is a link'; const text = `${linkTxt}`; - asset.text = linkTxt; + textAsset.text = linkTxt; const {getByText} = render( { onMessageClick={onClickElement} isCurrentConversationFocused msgClass="" - asset={asset} + asset={textAsset} />, ); const linkElem = getByText(linkTxt); @@ -129,7 +114,7 @@ describe('TextMessageRenderer', () => { const linkTxt = 'this is a link'; const text = `${linkTxt}`; - asset.text = linkTxt; + textAsset.text = linkTxt; const {getByText} = render( { onMessageClick={onClickElement} isCurrentConversationFocused={false} msgClass="" - asset={asset} + asset={textAsset} />, ); const linkElem = getByText(linkTxt); diff --git a/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer.tsx b/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer.tsx index f31e61297a1..589b74eea56 100644 --- a/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer.tsx +++ b/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer.tsx @@ -20,13 +20,19 @@ import {useEffect, useRef, FC} from 'react'; import {Text} from 'src/script/entity/message/Text'; +import {getAllFocusableElements, setElementsTabIndex} from 'Util/focusUtil'; import {handleKeyDown} from 'Util/KeyboardUtil'; import {useDisposableRef} from 'Util/useDisposableRef'; export type ElementType = 'markdownLink' | 'email' | 'mention'; interface TextMessageRendererProps { - onMessageClick: (asset: Text, event: MouseEvent | KeyboardEvent, elementType: ElementType) => void; + onMessageClick: ( + asset: Text, + event: MouseEvent | KeyboardEvent, + elementType: ElementType, + messageDetails: MessageDetails, + ) => void; text: string; isCurrentConversationFocused: boolean; msgClass: string; @@ -36,6 +42,11 @@ interface TextMessageRendererProps { setCanShowMore?: (showMore: boolean) => void; } const events = ['click', 'keydown', 'auxclick']; +export interface MessageDetails { + href?: string; + userId?: string; + userDomain?: string; +} export const TextMessageRenderer: FC = ({ text, @@ -66,100 +77,83 @@ export const TextMessageRenderer: FC = ({ if (!containerRef.current) { return undefined; } - const emailLinks = containerRef.current && [...containerRef.current.querySelectorAll('[data-email-link]')]; - const linkTargets = containerRef.current && [...containerRef.current.querySelectorAll('a[data-md-link]')]; - const msgLinkTargets = containerRef.current && [...containerRef.current.querySelectorAll('[data-uie-name]')]; - const hasMentions = asset && asset.mentions().length; - const msgMention = hasMentions - ? containerRef.current && [...containerRef.current.querySelectorAll('.message-mention')] - : null; - - // set tabindex for each interactive element based on the element focus state - if (msgMention) { - msgMention.forEach(mention => { - mention.setAttribute('tabindex', isCurrentConversationFocused ? '0' : '-1'); - }); - } - if (linkTargets.length) { - linkTargets.forEach(link => { - link.setAttribute('tabindex', isCurrentConversationFocused ? '0' : '-1'); - }); - } + const interactiveMsgElements = getAllFocusableElements(containerRef.current); + setElementsTabIndex(interactiveMsgElements, isCurrentConversationFocused); - if (msgLinkTargets.length) { - msgLinkTargets.forEach(link => { - link.setAttribute('tabindex', isCurrentConversationFocused ? '0' : '-1'); - }); - } - - if (emailLinks.length) { - emailLinks?.forEach(emailLink => { - emailLink.setAttribute('tabindex', isCurrentConversationFocused ? '0' : '-1'); - }); - } + const emailLinks = [...containerRef.current.querySelectorAll('[data-email-link]')]; + const markdownLinkTargets = [...containerRef.current.querySelectorAll('[data-md-link]')]; + const hasMentions = asset && asset.mentions().length; + const msgMentions = hasMentions ? [...containerRef.current.querySelectorAll('.message-mention')] : []; - const handleKeyEvent = (event: KeyboardEvent, elementType: ElementType) => { + const handleKeyEvent = (event: KeyboardEvent, elementType: ElementType, messageDetails: MessageDetails) => { if (isCurrentConversationFocused) { - handleKeyDown(event, () => onMessageClick(asset, event, elementType)); + handleKeyDown(event, () => onMessageClick(asset, event, elementType, messageDetails)); } }; - const handleClickEmail = (event: Event) => { - return event.type === 'keydown' - ? handleKeyEvent(event as KeyboardEvent, 'email') - : onMessageClick(asset, event as MouseEvent, 'email'); - }; - emailLinks?.forEach(emailLink => { - events.forEach(eventName => { - emailLink.addEventListener(eventName, handleClickEmail); - }); - }); - - const handleClickLink = (event: Event) => { - return event.type === 'keydown' - ? handleKeyEvent(event as KeyboardEvent, 'markdownLink') - : onMessageClick(asset, event as MouseEvent, 'markdownLink'); - }; - - linkTargets?.forEach(msgLink => { - events.forEach(eventName => { - msgLink.addEventListener(eventName, handleClickLink); - }); - }); - - const handleClickMention = (event: Event) => { - return event.type === 'keydown' - ? handleKeyEvent(event as KeyboardEvent, 'mention') - : onMessageClick(asset, event as MouseEvent, 'mention'); + const handleMsgEvent = (event: Event) => { + const currentTarget = event.currentTarget as HTMLElement; + const markdownLinkTarget = currentTarget?.dataset.mdLink; + const emailLink = currentTarget?.dataset.emailLink; + const msgMention = currentTarget?.dataset.userId; + + if (emailLink) { + const href = (event.target as HTMLAnchorElement).href; + const emailDetails = { + href: href, + }; + + return event.type === 'keydown' + ? handleKeyEvent(event as KeyboardEvent, 'email', emailDetails) + : onMessageClick(asset, event as MouseEvent, 'email', emailDetails); + } else if (markdownLinkTarget) { + const href = (event.target as HTMLAnchorElement).href; + const markdownLinkDetails = { + href: href, + }; + + return event.type === 'keydown' + ? handleKeyEvent(event as KeyboardEvent, 'markdownLink', markdownLinkDetails) + : onMessageClick(asset, event as MouseEvent, 'markdownLink', markdownLinkDetails); + } else if (msgMention) { + const mentionMsgDetails = { + userId: currentTarget?.dataset.userId, + userDomain: currentTarget?.dataset.userDomain, + }; + + return event.type === 'keydown' + ? handleKeyEvent(event as KeyboardEvent, 'mention', mentionMsgDetails) + : onMessageClick(asset, event as MouseEvent, 'mention', mentionMsgDetails); + } }; - msgMention?.forEach(mention => { - events.forEach(eventName => { - mention.addEventListener(eventName, handleClickMention); - }); - }); - - return () => { - emailLinks?.forEach(emailLink => { + function addEventListener(elements: Element[]) { + elements?.forEach(element => { events.forEach(eventName => { - emailLink.removeEventListener(eventName, handleClickEmail); + element.addEventListener(eventName, handleMsgEvent); }); }); + } - linkTargets?.forEach(msgLink => { + function removeEventListener(elements: Element[]) { + elements?.forEach(element => { events.forEach(eventName => { - msgLink.removeEventListener(eventName, handleClickLink); + element.removeEventListener(eventName, handleMsgEvent); }); }); + } - msgMention?.forEach(mention => { - events.forEach(eventName => { - mention.removeEventListener(eventName, handleClickMention); - }); - }); + addEventListener(emailLinks); + addEventListener(markdownLinkTargets); + addEventListener(msgMentions); + + return () => { + removeEventListener(emailLinks); + removeEventListener(markdownLinkTargets); + removeEventListener(msgMentions); }; - }, [onMessageClick, asset, isCurrentConversationFocused, containerRef]); + }, [onMessageClick, asset, isCurrentConversationFocused]); return (
    = ({ @@ -52,6 +53,7 @@ const VideoAsset: React.FC = ({ isQuote, teamState = container.resolve(TeamState), assetRepository = container.resolve(AssetRepository), + isCurrentConversationFocused = true, }) => { const asset = message.getFirstAsset() as FileAsset; const {isObfuscated} = useKoSubscribableChildren(message, ['isObfuscated']); @@ -190,6 +192,7 @@ const VideoAsset: React.FC = ({ cancel={() => (isUploading ? cancelUpload() : asset.cancelDownload())} transferState={transferState} uploadProgress={uploadProgress} + isCurrentConversationFocused={isCurrentConversationFocused} />
    diff --git a/src/script/components/MessagesList/Message/ContentMessage/asset/controls/MediaButton.tsx b/src/script/components/MessagesList/Message/ContentMessage/asset/controls/MediaButton.tsx index 86e770f3fa1..29e3cca46b5 100644 --- a/src/script/components/MessagesList/Message/ContentMessage/asset/controls/MediaButton.tsx +++ b/src/script/components/MessagesList/Message/ContentMessage/asset/controls/MediaButton.tsx @@ -38,6 +38,7 @@ export interface MediaButtonProps { play: () => void; transferState: AssetTransferState; uploadProgress: number; + isCurrentConversationFocused?: boolean; } const MediaButton: React.FC = ({ @@ -49,6 +50,7 @@ const MediaButton: React.FC = ({ play, pause = noop, cancel = noop, + isCurrentConversationFocused = true, }) => { const [isPlaying, setIsPlaying] = useState(false); const onPlay = () => setIsPlaying(true); @@ -85,6 +87,7 @@ const MediaButton: React.FC = ({ onClick={play} data-uie-name="do-play-media" aria-label={t('mediaBtnPlay')} + tabIndex={isCurrentConversationFocused ? 0 : -1} /> )} {isUploaded && isPlaying && ( @@ -94,6 +97,7 @@ const MediaButton: React.FC = ({ onClick={pause} data-uie-name="do-pause-media" aria-label={t('mediaBtnPause')} + tabIndex={isCurrentConversationFocused ? 0 : -1} /> )} {isDownloading && ( diff --git a/src/script/components/MessagesList/Message/ContentMessage/asset/index.tsx b/src/script/components/MessagesList/Message/ContentMessage/asset/index.tsx index 209b045a342..8d8d63ac3e3 100644 --- a/src/script/components/MessagesList/Message/ContentMessage/asset/index.tsx +++ b/src/script/components/MessagesList/Message/ContentMessage/asset/index.tsx @@ -18,6 +18,7 @@ */ import {QualifiedId} from '@wireapp/api-client/lib/user'; +import cx from 'classnames'; import {Asset} from 'src/script/entity/message/Asset'; import type {FileAsset as FileAssetType} from 'src/script/entity/message/FileAsset'; @@ -70,9 +71,11 @@ const ContentAsset = ({ @@ -88,7 +91,7 @@ const ContentAsset = ({ if ((asset as FileAssetType).isFile()) { return (
    - +
    ); } @@ -96,7 +99,7 @@ const ContentAsset = ({ if ((asset as FileAssetType).isAudio()) { return (
    - +
    ); } @@ -104,7 +107,7 @@ const ContentAsset = ({ if ((asset as FileAssetType).isVideo()) { return (
    - +
    ); } diff --git a/src/script/components/MessagesList/Message/ContentMessage/index.tsx b/src/script/components/MessagesList/Message/ContentMessage/index.tsx index 8d0aa309de8..b008c27d6fe 100644 --- a/src/script/components/MessagesList/Message/ContentMessage/index.tsx +++ b/src/script/components/MessagesList/Message/ContentMessage/index.tsx @@ -29,7 +29,7 @@ import {ContentMessage} from 'src/script/entity/message/ContentMessage'; import {Message} from 'src/script/entity/message/Message'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; import {getMessageAriaLabel} from 'Util/conversationMessages'; -import {isTabKey, KEY} from 'Util/KeyboardUtil'; +import {KEY} from 'Util/KeyboardUtil'; import {t} from 'Util/LocalizerUtil'; import {setContextMenuPosition} from 'Util/util'; @@ -164,12 +164,6 @@ const ContentMessageComponent: React.FC = ({ const newEvent = setContextMenuPosition(event); showContextMenu(newEvent, menuEntries, 'message-options-menu'); } - - // context menu is the last tabbale element of a message, next tab press should - // focus on the message input bar - if (isTabKey(event)) { - handleFocus(totalMessage - 1); - } }; const [messageAriaLabel] = getMessageAriaLabel({ diff --git a/src/script/components/MessagesList/Message/index.tsx b/src/script/components/MessagesList/Message/index.tsx index ce373585935..55cec2005b0 100644 --- a/src/script/components/MessagesList/Message/index.tsx +++ b/src/script/components/MessagesList/Message/index.tsx @@ -28,7 +28,7 @@ import {useKoSubscribableChildren} from 'Util/ComponentUtil'; import {getMessageMarkerType, MessageMarkerType} from 'Util/conversationMessages'; import {isTabKey} from 'Util/KeyboardUtil'; -import {ElementType} from './ContentMessage/asset/TextMessageRenderer'; +import {ElementType, MessageDetails} from './ContentMessage/asset/TextMessageRenderer'; import {MessageTime} from './MessageTime'; import {MessageWrapper} from './MessageWrapper'; @@ -49,7 +49,12 @@ export interface MessageActions { onClickImage: (message: ContentMessage, event: React.UIEvent) => void; onClickInvitePeople: () => void; onClickLikes: (message: BaseMessage) => void; - onClickMessage: (message: ContentMessage | Text, event: MouseEvent | KeyboardEvent, elementType: ElementType) => void; + onClickMessage: ( + asset: Text, + event: MouseEvent | KeyboardEvent, + elementType: ElementType, + messageDetails: MessageDetails, + ) => void; onClickParticipants: (participants: User[]) => void; onClickReceipts: (message: BaseMessage) => void; onClickResetSession: (messageError: DecryptErrorMessage) => void; @@ -97,6 +102,7 @@ const Message: React.FC< focusConversation, handleFocus, handleArrowKeyDown, + index, } = props; const messageElementRef = useRef(null); const messageRef = useRef(null); @@ -115,6 +121,9 @@ const Message: React.FC< } if (isMarked) { scrollTo?.({center: true, element: messageElementRef.current}); + + // for reply message, focus on the original message when original message link is clicked for keyboard users + handleFocus(index); } else if (markerType === MessageMarkerType.UNREAD) { scrollTo?.({element: messageElementRef.current}, true); } @@ -143,7 +152,7 @@ const Message: React.FC< if (focusConversation) { messageRef.current?.focus(); } - }, [focusConversation]); + }, [focusConversation, message]); const getTimestampClass = (): string => { const classes = { diff --git a/src/script/components/MessagesList/MessageList.tsx b/src/script/components/MessagesList/MessageList.tsx index 9b9711aa2da..88ae48eb18c 100644 --- a/src/script/components/MessagesList/MessageList.tsx +++ b/src/script/components/MessagesList/MessageList.tsx @@ -27,14 +27,12 @@ import {ContentMessage} from 'src/script/entity/message/ContentMessage'; import {DecryptErrorMessage} from 'src/script/entity/message/DecryptErrorMessage'; import {MemberMessage} from 'src/script/entity/message/MemberMessage'; import {Message as MessageEntity} from 'src/script/entity/message/Message'; -import {Text} from 'src/script/entity/message/Text'; import {User} from 'src/script/entity/User'; import {useRoveFocus} from 'src/script/hooks/useRoveFocus'; import {ServiceEntity} from 'src/script/integration/ServiceEntity'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; -import {Message} from './Message'; -import {ElementType} from './Message/ContentMessage/asset/TextMessageRenderer'; +import {Message, MessageActions} from './Message'; import {Conversation as ConversationEntity, Conversation} from '../../entity/Conversation'; import {isMemberMessage, isContentMessage} from '../../guards/Message'; @@ -57,11 +55,7 @@ interface MessagesListParams { deleteMessageEveryone: (conversation: Conversation, message: MessageEntity) => void; }; messageRepository: MessageRepository; - onClickMessage: ( - message: ContentMessage | Text, - event: MouseEvent | KeyboardEvent, - elementType: ElementType, - ) => boolean; + onClickMessage: MessageActions['onClickMessage']; onLoading: (isLoading: boolean) => void; resetSession: (messageError: DecryptErrorMessage) => void; selfUser: User; diff --git a/src/script/components/avatar/UserAvatar.tsx b/src/script/components/avatar/UserAvatar.tsx index a5bcf852f61..09b245dacb4 100644 --- a/src/script/components/avatar/UserAvatar.tsx +++ b/src/script/components/avatar/UserAvatar.tsx @@ -17,7 +17,7 @@ * */ -import React from 'react'; +import React, {MouseEvent as ReactMouseEvent, KeyboardEvent as ReactKeyBoardEvent} from 'react'; import {COLOR} from '@wireapp/react-ui-kit'; @@ -39,7 +39,9 @@ export interface UserAvatarProps extends React.HTMLProps { avatarAlt?: string; noBadge?: boolean; noFilter?: boolean; - onClick?: (event: React.MouseEvent) => void; + onAvatarInteraction?: ( + event: ReactMouseEvent | ReactKeyBoardEvent, + ) => void; participant: User; state: STATE; } @@ -57,7 +59,7 @@ const UserAvatar: React.FunctionComponent = ({ noBadge, noFilter, state, - onClick, + onAvatarInteraction, ...props }) => { const isImageGrey = !noFilter && [STATE.BLOCKED, STATE.IGNORED, STATE.PENDING, STATE.UNKNOWN].includes(state); @@ -84,7 +86,8 @@ const UserAvatar: React.FunctionComponent = ({ data-uie-name="element-avatar-user" data-uie-value={participant.id} data-uie-status={state} - onClick={onClick} + onClick={onAvatarInteraction} + onKeyDown={onAvatarInteraction} title={name} {...props} > diff --git a/src/script/util/focusUtil.ts b/src/script/util/focusUtil.ts new file mode 100644 index 00000000000..550365858b7 --- /dev/null +++ b/src/script/util/focusUtil.ts @@ -0,0 +1,63 @@ +/* + * Wire + * Copyright (C) 2018 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/. + * + */ + +/** + * Returns back a NodeList of focusable elements + * that exist within the passed parent HTMLElement, or + * an empty array if no parent passed. + * + * @param {HTMLElement} parent HTML element + * @param {Array} customSelector List of selectors not in the default list(optional) + * @returns {(NodeList|Array)} The focusable elements that we can find + */ +export const getAllFocusableElements = ( + parent: Element, + customSelector: string[] = [], +): NodeListOf | [] => { + if (!parent) { + console.warn('You need to pass a parent HTMLElement'); + return []; // Return array so length queries will work + } + + const defaultSelectors = `button:not([disabled]), [role="button"], [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"]):not([disabled]), details:not([disabled]), summary:not(:disabled)`; + const selectors = customSelector.length ? `${defaultSelectors}, ${[...customSelector]}` : `${defaultSelectors}`; + return parent.querySelectorAll(selectors); +}; + +/** + * Set tabindex for each interactive element based on the element's current focus + * @param elements list of elements + * @param isCurrentConversationFocused current message focus state + */ +export const setElementsTabIndex = (elements: NodeListOf | [], isCurrentConversationFocused: boolean) => { + if (elements.length) { + elements.forEach(element => { + setElementTabIndex(element, isCurrentConversationFocused); + }); + } +}; + +/** + * Set tabindex for a single element based on the element's current focus + * @param element an element + * @param isCurrentConversationFocused current message focus state + */ +export const setElementTabIndex = (element: Element, isCurrentConversationFocused: boolean) => { + element.setAttribute('tabindex', isCurrentConversationFocused ? '0' : '-1'); +}; diff --git a/src/script/util/messageRenderer.ts b/src/script/util/messageRenderer.ts index 1cc405b8bb0..131b1fefa55 100644 --- a/src/script/util/messageRenderer.ts +++ b/src/script/util/messageRenderer.ts @@ -78,15 +78,15 @@ export const renderMessage = (message: string, selfId: QualifiedId | null, menti const renderMention = (mentionData: MentionText) => { const elementClasses = mentionData.isSelfMentioned ? ' self-mention' : ''; let elementAttributes = mentionData.isSelfMentioned - ? ' data-uie-name="label-self-mention"' - : ` data-uie-name="label-other-mention" data-user-id="${escape(mentionData.userId)}"`; + ? ' data-uie-name="label-self-mention" role="button"' + : ` data-uie-name="label-other-mention" data-user-id="${escape(mentionData.userId)}" role="button"`; if (!mentionData.isSelfMentioned && mentionData.domain) { elementAttributes += ` data-user-domain="${escape(mentionData.domain)}"`; } const mentionText = mentionData.text.replace(/^@/, ''); const content = `@${escape(mentionText)}`; - return `${content}`; + return `
    ${content}
    `; }; const mentionTexts: Record = {}; diff --git a/src/style/content/conversation/message-list.less b/src/style/content/conversation/message-list.less index b999f4a0c76..fe3b677e89a 100644 --- a/src/style/content/conversation/message-list.less +++ b/src/style/content/conversation/message-list.less @@ -94,6 +94,7 @@ } .message-mention { + display: inline-block; color: var(--accent-color); .text-medium; diff --git a/test/unit_tests/util/messageRendererSpec.js b/test/unit_tests/util/messageRendererSpec.js index e6d4004bc3b..47ee3a3f433 100644 --- a/test/unit_tests/util/messageRendererSpec.js +++ b/test/unit_tests/util/messageRendererSpec.js @@ -258,14 +258,14 @@ describe('renderMessage', () => { const tests = [ { expected: - 'bonjour @felix', + 'bonjour
    @felix
    ', mentions: [{length: 6, startIndex: 8, userId: 'user-id'}], testCase: 'replaces single mention in simple text', text: 'bonjour @felix', }, { expected: - 'bonjour @felix, tu vas bien @felix?', + 'bonjour
    @felix
    , tu vas bien
    @felix
    ?', mentions: [ {length: 6, startIndex: 8, userId: 'user-id'}, {length: 6, startIndex: 28, userId: 'user-id'}, @@ -275,21 +275,21 @@ describe('renderMessage', () => { }, { expected: - 'salut @`I am a **pain** in the __a**__`', + 'salut
    @`I am a **pain** in the __a**__`
    ', mentions: [{length: 33, startIndex: 6, userId: 'pain-id'}], testCase: "doesn't parse markdown in user names", text: 'salut @`I am a **pain** in the __a**__`', }, { expected: - 'salut @you', + 'salut
    @you
    ', mentions: [{length: 4, startIndex: 10, userId: 'pain-id'}], testCase: 'parses markdown outside of mentions', text: '**salut** @you', }, { expected: - 'salut @you and @toi', + 'salut
    @you
    and
    @toi
    ', mentions: [ {length: 4, startIndex: 10, userId: 'self-id'}, {length: 4, startIndex: 19, userId: 'toi-id'}, @@ -299,7 +299,7 @@ describe('renderMessage', () => { }, { expected: - 'salut
    @you\n
    ', + 'salut
    @you
    \n
    ', mentions: [{length: 4, startIndex: 10, userId: 'pain-id'}], testCase: 'displays mention inside code block', text: 'salut\n```\n@you\n```', @@ -322,7 +322,7 @@ describe('renderMessage', () => { it('does not try to match mention to self id if no userId given', () => { const expected = - 'hey @user'; + 'hey
    @user
    '; const mentions = [{length: 5, startIndex: 4, userId: 'pain-id'}]; const mentionEntities = mentions.map(mention => { const mentionEntity = new MentionEntity(mention.startIndex, mention.length, mention.userId); From ca533fa696d4860fe0ff05ef195b3577b48f3cb3 Mon Sep 17 00:00:00 2001 From: Amir Ghezelbash Date: Tue, 22 Nov 2022 14:22:18 +0330 Subject: [PATCH 011/329] runfix: Correct focus order in preferences (ACC-303) (#14159) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * runfix: Correct focus order in preferences * two variables * Update src/script/page/LeftSidebar/panels/Preferences.tsx Co-authored-by: Przemysław Jóźwik Co-authored-by: Przemysław Jóźwik --- .../page/LeftSidebar/panels/Preferences.tsx | 7 +++++++ src/script/page/MainContent/MainContent.tsx | 4 +++- .../preferences/components/PreferencesPage.tsx | 16 ++-------------- 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/src/script/page/LeftSidebar/panels/Preferences.tsx b/src/script/page/LeftSidebar/panels/Preferences.tsx index 160820bf836..0bea75afb24 100644 --- a/src/script/page/LeftSidebar/panels/Preferences.tsx +++ b/src/script/page/LeftSidebar/panels/Preferences.tsx @@ -37,6 +37,7 @@ import { } from '../../../notification/PreferenceNotificationRepository'; import {TeamRepository} from '../../../team/TeamRepository'; import {ContentViewModel} from '../../../view_model/ContentViewModel'; +import {ANIMATED_PAGE_TRANSITION_DURATION} from '../../MainContent'; import {useAppMainState, ViewType} from '../../state'; import {ContentState, useAppState} from '../../useAppState'; @@ -127,6 +128,12 @@ const Preferences: React.FC = ({ const onClickSelect = (item: typeof items[number]) => { setCurrentView(ViewType.CENTRAL_COLUMN); contentViewModel.switchContent(item.id); + + setTimeout(() => { + const centerColumn = document.getElementById('center-column'); + const nextElementToFocus = centerColumn?.querySelector("[tabindex='0']") as HTMLElement | null; + nextElementToFocus?.focus(); + }, ANIMATED_PAGE_TRANSITION_DURATION + 1); }; useEffect(() => { diff --git a/src/script/page/MainContent/MainContent.tsx b/src/script/page/MainContent/MainContent.tsx index 985e402e78f..6461ae857e0 100644 --- a/src/script/page/MainContent/MainContent.tsx +++ b/src/script/page/MainContent/MainContent.tsx @@ -49,8 +49,10 @@ import {PanelState} from '../RightSidebar'; import {RootContext} from '../RootProvider'; import {ContentState, useAppState} from '../useAppState'; +export const ANIMATED_PAGE_TRANSITION_DURATION = 500; + const Animated: FC<{children: ReactNode}> = ({children, ...rest}) => ( - + {children} ); diff --git a/src/script/page/MainContent/panels/preferences/components/PreferencesPage.tsx b/src/script/page/MainContent/panels/preferences/components/PreferencesPage.tsx index 489d1f0de9b..84fa27bb0d8 100644 --- a/src/script/page/MainContent/panels/preferences/components/PreferencesPage.tsx +++ b/src/script/page/MainContent/panels/preferences/components/PreferencesPage.tsx @@ -17,7 +17,7 @@ * */ -import {useContext, FC, useCallback} from 'react'; +import {useContext, FC} from 'react'; import {IconButton, IconButtonVariant, useMatchMedia} from '@wireapp/react-ui-kit'; @@ -41,20 +41,8 @@ const PreferencesPage: FC = ({title, children}) => { const goHome = () => root?.content.loadPreviousContent(); - const containerRef = useCallback((element: HTMLDivElement | null) => { - const nextElementToFocus = element?.querySelector("[tabindex='0']") as HTMLElement | null; - if (nextElementToFocus) { - nextElementToFocus.focus(); - } - }, []); - return ( -
    +
    {smBreakpoint && isCentralColumn && ( Date: Wed, 23 Nov 2022 09:29:56 +0100 Subject: [PATCH 012/329] feat: Register Self and Team MLS conversations on app load [FS-1007 FS-1006] (#14130) --- package.json | 2 +- .../conversation/ConversationSelectors.ts | 36 ++++++ src/script/conversation/ConversationState.ts | 9 +- src/script/entity/Conversation.ts | 1 + src/script/main/app.ts | 7 +- src/script/mls/MLSConversations.test.ts | 122 ++++++++++++++++++ src/script/mls/MLSConversations.ts | 68 ++++++++-- src/script/properties/PropertiesRepository.ts | 1 + yarn.lock | 20 +-- 9 files changed, 244 insertions(+), 22 deletions(-) create mode 100644 src/script/conversation/ConversationSelectors.ts create mode 100644 src/script/mls/MLSConversations.test.ts diff --git a/package.json b/package.json index de1746606ff..7e9810130a6 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "@types/eslint": "^8.4.10", "@wireapp/antiscroll-2": "1.3.1", "@wireapp/avs": "8.2.17", - "@wireapp/core": "37.0.3", + "@wireapp/core": "37.1.1", "@wireapp/react-ui-kit": "9.0.2", "@wireapp/store-engine-dexie": "2.0.3", "@wireapp/store-engine-sqleet": "1.8.9", diff --git a/src/script/conversation/ConversationSelectors.ts b/src/script/conversation/ConversationSelectors.ts new file mode 100644 index 00000000000..cffd3ac2c88 --- /dev/null +++ b/src/script/conversation/ConversationSelectors.ts @@ -0,0 +1,36 @@ +/* + * Wire + * Copyright (C) 2022 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 {CONVERSATION_TYPE, ConversationProtocol} from '@wireapp/api-client/lib/conversation/'; + +import {Conversation} from '../entity/Conversation'; + +export type MLSConversation = Conversation & {groupId: string}; + +export function isMLSConversation(conversation: Conversation): conversation is MLSConversation { + return !!conversation.groupId && conversation.protocol === ConversationProtocol.MLS; +} + +export function isSelfConversation(conversation: Conversation): boolean { + return conversation.type() === CONVERSATION_TYPE.SELF; +} + +export function isTeamConversation(conversation: Conversation): boolean { + return conversation.type() === CONVERSATION_TYPE.GLOBAL_TEAM; +} diff --git a/src/script/conversation/ConversationState.ts b/src/script/conversation/ConversationState.ts index 86292b2d061..9fa7ede3c18 100644 --- a/src/script/conversation/ConversationState.ts +++ b/src/script/conversation/ConversationState.ts @@ -18,7 +18,6 @@ */ import {ConnectionStatus} from '@wireapp/api-client/lib/connection/'; -import {CONVERSATION_TYPE} from '@wireapp/api-client/lib/conversation/'; import {QualifiedId} from '@wireapp/api-client/lib/user'; import ko from 'knockout'; import {container, singleton} from 'tsyringe'; @@ -26,6 +25,8 @@ import {container, singleton} from 'tsyringe'; import {matchQualifiedIds} from 'Util/QualifiedId'; import {sortGroupsByLastEvent} from 'Util/util'; +import {isMLSConversation, isSelfConversation} from './ConversationSelectors'; + import {Conversation} from '../entity/Conversation'; import {User} from '../entity/User'; import {TeamState} from '../team/TeamState'; @@ -48,6 +49,7 @@ export class ConversationState { public readonly filteredConversations: ko.PureComputed; public readonly archivedConversations: ko.PureComputed; public readonly selfConversation: ko.PureComputed; + public readonly selfMLSConversation: ko.PureComputed; public readonly connectedUsers: ko.PureComputed; public readonly sortedConversations: ko.PureComputed; @@ -58,7 +60,10 @@ export class ConversationState { ) { this.sortedConversations = ko.pureComputed(() => this.filteredConversations().sort(sortGroupsByLastEvent)); this.selfConversation = ko.pureComputed(() => - this.conversations().find(conversation => conversation.type() === CONVERSATION_TYPE.SELF), + this.conversations().find(conversation => !isMLSConversation(conversation) && isSelfConversation(conversation)), + ); + this.selfMLSConversation = ko.pureComputed(() => + this.conversations().find(conversation => isMLSConversation(conversation) && isSelfConversation(conversation)), ); this.visibleConversations = ko.pureComputed(() => { diff --git a/src/script/entity/Conversation.ts b/src/script/entity/Conversation.ts index 7610af01c9f..08b4e2f02d4 100644 --- a/src/script/entity/Conversation.ts +++ b/src/script/entity/Conversation.ts @@ -140,6 +140,7 @@ export class Conversation { public readonly isLeavable: ko.PureComputed; public readonly isMutable: ko.PureComputed; public readonly isRequest: ko.PureComputed; + /** @deprecated use isSelfConversation from conversationSelectors */ public readonly isSelf: ko.PureComputed; public readonly isTeamOnly: ko.PureComputed; public readonly last_event_timestamp: ko.Observable; diff --git a/src/script/main/app.ts b/src/script/main/app.ts index d6346184941..748b9744658 100644 --- a/src/script/main/app.ts +++ b/src/script/main/app.ts @@ -83,7 +83,7 @@ import {IntegrationRepository} from '../integration/IntegrationRepository'; import {IntegrationService} from '../integration/IntegrationService'; import {startNewVersionPolling} from '../lifecycle/newVersionHandler'; import {MediaRepository} from '../media/MediaRepository'; -import {initMLSConversations} from '../mls'; +import {initMLSConversations, registerUninitializedConversations} from '../mls'; import {NotificationRepository} from '../notification/NotificationRepository'; import {PreferenceNotificationRepository} from '../notification/PreferenceNotificationRepository'; import {PermissionRepository} from '../permission/PermissionRepository'; @@ -450,6 +450,11 @@ export class App { }); const notificationsCount = eventRepository.notificationsTotal; + if (supportsMLS()) { + // Once all the messages have been processed and the message sending queue freed we can now add the potential `self` and `team` conversations + await registerUninitializedConversations(conversationEntities, selfUser, clientEntity().id, this.core); + } + telemetry.timeStep(AppInitTimingsStep.UPDATED_FROM_NOTIFICATIONS); telemetry.addStatistic(AppInitStatisticsValue.NOTIFICATIONS, notificationsCount, 100); diff --git a/src/script/mls/MLSConversations.test.ts b/src/script/mls/MLSConversations.test.ts new file mode 100644 index 00000000000..306a3cda9ed --- /dev/null +++ b/src/script/mls/MLSConversations.test.ts @@ -0,0 +1,122 @@ +/* + * Wire + * Copyright (C) 2018 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 {ConversationProtocol, CONVERSATION_TYPE} from '@wireapp/api-client/lib/conversation'; + +import {randomUUID} from 'crypto'; + +import {Account} from '@wireapp/core'; + +import {initMLSConversations, registerUninitializedConversations} from './MLSConversations'; +import {mlsConversationState} from './mlsConversationState'; + +import {Conversation} from '../entity/Conversation'; +import {User} from '../entity/User'; + +function createConversation(protocol: ConversationProtocol, type?: CONVERSATION_TYPE) { + const conversation = new Conversation(randomUUID(), '', protocol); + if (protocol === ConversationProtocol.MLS) { + conversation.groupId = `groupid-${randomUUID()}`; + conversation.epoch = 0; + } + if (type) { + conversation.type(type); + } + return conversation; +} + +function createConversations( + nbConversations: number, + protocol: ConversationProtocol = ConversationProtocol.MLS, + type?: CONVERSATION_TYPE, +) { + return Array.from(new Array(nbConversations)).map(() => createConversation(protocol, type)); +} + +function mockCore() { + return { + configureMLSCallbacks: jest.fn(), + service: {mls: {registerConversation: jest.fn()}}, + } as unknown as Account; +} + +describe('MLSConversations', () => { + beforeEach(() => { + jest.spyOn(mlsConversationState.getState(), 'sendExternalToPendingJoin').mockReturnValue(undefined); + }); + + describe('initMLSConversations', () => { + it('joins all the MLS conversations', async () => { + const nbProteusConversations = 5 + Math.ceil(Math.random() * 10); + const nbMLSConversations = 5 + Math.ceil(Math.random() * 10); + + const proteusConversations = createConversations(nbProteusConversations, ConversationProtocol.PROTEUS); + const mlsConversations = createConversations(nbMLSConversations); + const conversations = [...proteusConversations, ...mlsConversations]; + + await initMLSConversations(conversations, new User(), new Account(), {} as any); + + expect(mlsConversationState.getState().sendExternalToPendingJoin).toHaveBeenCalledWith( + mlsConversations, + expect.any(Function), + expect.any(Function), + ); + }); + + it('register all uninitiated conversations', async () => { + const core = mockCore(); + const nbProteusConversations = 5 + Math.ceil(Math.random() * 10); + const nbMLSConversations = 5 + Math.ceil(Math.random() * 10); + + const proteusConversations = createConversations(nbProteusConversations, ConversationProtocol.PROTEUS); + const selfConversation = createConversation(ConversationProtocol.MLS, CONVERSATION_TYPE.SELF); + + const teamConversation = createConversation(ConversationProtocol.MLS, CONVERSATION_TYPE.GLOBAL_TEAM); + + const mlsConversations = createConversations(nbMLSConversations); + const conversations = [...proteusConversations, teamConversation, ...mlsConversations, selfConversation]; + + await registerUninitializedConversations(conversations, new User(), 'client-1', core); + + expect(core.service!.mls.registerConversation).toHaveBeenCalledTimes(2); + }); + + it('does not register self and team conversation that have epoch > 0', async () => { + const core = mockCore(); + const nbProteusConversations = 5 + Math.ceil(Math.random() * 10); + const nbMLSConversations = 5 + Math.ceil(Math.random() * 10); + + const proteusConversations = createConversations(nbProteusConversations, ConversationProtocol.PROTEUS); + const selfConversation = createConversation(ConversationProtocol.MLS); + selfConversation.epoch = 1; + selfConversation.type(CONVERSATION_TYPE.SELF); + + const teamConversation = createConversation(ConversationProtocol.MLS); + teamConversation.epoch = 2; + teamConversation.type(CONVERSATION_TYPE.GLOBAL_TEAM); + + const mlsConversations = createConversations(nbMLSConversations); + const conversations = [...proteusConversations, teamConversation, ...mlsConversations, selfConversation]; + + await initMLSConversations(conversations, new User(), core, {} as any); + + expect(core.service!.mls.registerConversation).toHaveBeenCalledTimes(0); + }); + }); +}); diff --git a/src/script/mls/MLSConversations.ts b/src/script/mls/MLSConversations.ts index 2377449d406..2f4dc2ffe4c 100644 --- a/src/script/mls/MLSConversations.ts +++ b/src/script/mls/MLSConversations.ts @@ -24,22 +24,26 @@ import {arrayToBase64} from 'Util/util'; import {mlsConversationState} from './mlsConversationState'; import {ConversationRepository} from '../conversation/ConversationRepository'; +import { + isMLSConversation, + isSelfConversation, + isTeamConversation, + MLSConversation, +} from '../conversation/ConversationSelectors'; import {Conversation} from '../entity/Conversation'; import {User} from '../entity/User'; +type MLSConversationRepository = Pick< + ConversationRepository, + 'findConversationByGroupId' | 'getConversationById' | 'conversationRoleRepository' +>; + export async function initMLSConversations( conversations: Conversation[], selfUser: User, core: Account, - conversationRepository: ConversationRepository, + conversationRepository: MLSConversationRepository, ): Promise { - // We send external proposal to all the MLS conversations that are in an unknown state (not established nor pendingWelcome) - await mlsConversationState.getState().sendExternalToPendingJoin( - conversations, - groupId => core.service!.conversation.isMLSConversationEstablished(groupId), - conversationId => core.service!.conversation.joinByExternalCommit(conversationId), - ); - core.configureMLSCallbacks({ authorize: groupIdBytes => { const groupId = arrayToBase64(groupIdBytes); @@ -57,4 +61,52 @@ export async function initMLSConversations( // This is enforced by backend, no need to implement this on the client side. userAuthorize: () => true, }); + + const mlsConversations = conversations.filter(isMLSConversation); + await joinNewConversations(mlsConversations, core); +} + +/** + * Will join all the conversation that the current user is part of but that are not joined by the current user's device + * + * @param conversations - all the conversations that the user is part of + * @param core - the instance of the core + */ +async function joinNewConversations(conversations: MLSConversation[], core: Account): Promise { + // We send external proposal to all the MLS conversations that are in an unknown state (not established nor pendingWelcome) + await mlsConversationState.getState().sendExternalToPendingJoin( + conversations, + groupId => core.service!.conversation.isMLSConversationEstablished(groupId), + conversationId => core.service!.conversation.joinByExternalCommit(conversationId), + ); +} + +/** + * Will register special conversations agains the core. + * The self conversation and the team conversation as special conversation that are created by noone and, thus, need to be manually created by the first device that detects them + * + * @param conversations all the conversations the user is part of + * @param core instance of the core + */ +export async function registerUninitializedConversations( + conversations: Conversation[], + selfUser: User, + selfClientId: string, + core: Account, +): Promise { + const uninitializedConversations = conversations.filter( + (conversation): conversation is MLSConversation => + isMLSConversation(conversation) && + conversation.epoch === 0 && + (isSelfConversation(conversation) || isTeamConversation(conversation)), + ); + + await Promise.all( + uninitializedConversations.map(conversation => + core.service?.mls.registerConversation(conversation.groupId, [selfUser.qualifiedId], { + user: selfUser, + client: selfClientId, + }), + ), + ); } diff --git a/src/script/properties/PropertiesRepository.ts b/src/script/properties/PropertiesRepository.ts index e98c3185ddf..6c2ccc768e4 100644 --- a/src/script/properties/PropertiesRepository.ts +++ b/src/script/properties/PropertiesRepository.ts @@ -79,6 +79,7 @@ export class PropertiesRepository { replace_inline: true, }, interface: { + font_size: '', theme: 'default', view_folders: false, }, diff --git a/yarn.lock b/yarn.lock index 4271c249888..7e69aa07a78 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4167,9 +4167,9 @@ __metadata: languageName: node linkType: hard -"@wireapp/api-client@npm:^22.5.0": - version: 22.5.0 - resolution: "@wireapp/api-client@npm:22.5.0" +"@wireapp/api-client@npm:^22.6.1": + version: 22.6.1 + resolution: "@wireapp/api-client@npm:22.6.1" dependencies: "@wireapp/commons": ^5.0.3 "@wireapp/priority-queue": ^2.0.3 @@ -4182,7 +4182,7 @@ __metadata: spark-md5: 3.0.2 tough-cookie: 4.1.2 ws: 8.10.0 - checksum: 175c20690002ba770b3c0e8a26ef4cec48d97de1c33702c94752bde76ec8b86e8afdf78000dfa5d77a6f49a3d06ee7f9df374d76483f23289e0a9a324ec0f6ef + checksum: a1cbc2cc80f44dfc88886a89425acda0f91834ec2182dafa6ef9dab030b3963e5db9847553661213e305a3b355090cb2cda3dcafc622bc693f1c85c93bd9817c languageName: node linkType: hard @@ -4235,11 +4235,11 @@ __metadata: languageName: node linkType: hard -"@wireapp/core@npm:37.0.3": - version: 37.0.3 - resolution: "@wireapp/core@npm:37.0.3" +"@wireapp/core@npm:37.1.1": + version: 37.1.1 + resolution: "@wireapp/core@npm:37.1.1" dependencies: - "@wireapp/api-client": ^22.5.0 + "@wireapp/api-client": ^22.6.1 "@wireapp/commons": ^5.0.3 "@wireapp/core-crypto": 0.6.0-pre.4 "@wireapp/cryptobox": 12.8.0 @@ -4254,7 +4254,7 @@ __metadata: logdown: 3.3.1 long: ^5.2.0 uuidjs: 4.2.12 - checksum: e3a1e69cd34c687800b29f9e60181dc2ad28132a62e69c87b6e03e550ce3a400107bfe7b3e6a145383378b0a381bffb1cb6051602c8ac26130658a571f9c4492 + checksum: 19994abdec60930ad75bf46888f1bcf8e2e3db1f80457d43f48e30fae3709d4fe600453213d87f44ac9403251f25565b9683731f2bd1b1053c561da8d371138c languageName: node linkType: hard @@ -16526,7 +16526,7 @@ __metadata: "@wireapp/antiscroll-2": 1.3.1 "@wireapp/avs": 8.2.17 "@wireapp/copy-config": 2.0.3 - "@wireapp/core": 37.0.3 + "@wireapp/core": 37.1.1 "@wireapp/eslint-config": 2.1.0 "@wireapp/prettier-config": 0.5.2 "@wireapp/react-ui-kit": 9.0.2 From 27d9a230365439ad8b442ee18d1e767336f6fb78 Mon Sep 17 00:00:00 2001 From: Thomas Belin Date: Wed, 23 Nov 2022 11:52:20 +0100 Subject: [PATCH 013/329] refactor: Improve ConversationState API for selfConversation (#14161) --- .../components/userDevices/DeviceDetails.tsx | 2 +- .../conversation/ConversationRepository.ts | 12 +-- .../conversation/ConversationState.test.ts | 91 +++++++++++++++++++ src/script/conversation/ConversationState.ts | 31 ++++++- src/script/conversation/MessageRepository.ts | 20 +--- .../devices/DevicesPreferences.tsx | 2 +- 6 files changed, 130 insertions(+), 28 deletions(-) create mode 100644 src/script/conversation/ConversationState.test.ts diff --git a/src/script/components/userDevices/DeviceDetails.tsx b/src/script/components/userDevices/DeviceDetails.tsx index b5a84a9ec8d..26f460d1fe6 100644 --- a/src/script/components/userDevices/DeviceDetails.tsx +++ b/src/script/components/userDevices/DeviceDetails.tsx @@ -89,7 +89,7 @@ const DeviceDetails: React.FC = ({ const clickToResetSession = () => { const _resetProgress = () => window.setTimeout(() => setIsResettingSession(false), MotionDuration.LONG); - const conversation = user.isMe ? conversationState.selfConversation() : conversationState.activeConversation(); + const conversation = user.isMe ? conversationState.getSelfConversation() : conversationState.activeConversation(); setIsResettingSession(true); if (conversation) { messageRepository diff --git a/src/script/conversation/ConversationRepository.ts b/src/script/conversation/ConversationRepository.ts index ad149fc0b79..3441da092c0 100644 --- a/src/script/conversation/ConversationRepository.ts +++ b/src/script/conversation/ConversationRepository.ts @@ -1965,8 +1965,7 @@ export class ConversationRepository { `Handling event '${type}' in conversation '${conversationId.id}/${conversationId.domain}' (Source: ${eventSource})`, ); - const selfConversation = this.conversationState.selfConversation(); - const inSelfConversation = selfConversation && matchQualifiedIds(conversationId, selfConversation.qualifiedId); + const inSelfConversation = this.conversationState.isSelfConversation(conversationId); if (inSelfConversation) { const typesInSelfConversation = [ CONVERSATION_EVENT.MEMBER_UPDATE, @@ -2589,8 +2588,7 @@ export class ConversationRepository { } const isBackendEvent = eventData.otr_archived_ref || eventData.otr_muted_ref; - const selfConversation = this.conversationState.selfConversation(); - const inSelfConversation = selfConversation && matchQualifiedIds(selfConversation, conversationId); + const inSelfConversation = this.conversationState.isSelfConversation(conversationId); if (!inSelfConversation && conversation && !isBackendEvent) { this.logger.warn( `A conversation update message was not sent in the selfConversation. Skipping conversation update`, @@ -2722,11 +2720,11 @@ export class ConversationRepository { * @returns Resolves when the event was handled */ private async onMessageHidden(eventJson: MessageHiddenEvent) { - const {conversation: conversationId, data: eventData, from} = eventJson; + const {conversation, qualified_conversation, data: eventData, from} = eventJson; + const conversationId = qualified_conversation || {id: conversation, domain: ''}; try { - const inSelfConversation = - !this.conversationState.selfConversation() || conversationId === this.conversationState.selfConversation()?.id; + const inSelfConversation = this.conversationState.isSelfConversation(conversationId); if (!inSelfConversation) { throw new ConversationError( ConversationError.TYPE.WRONG_CONVERSATION, diff --git a/src/script/conversation/ConversationState.test.ts b/src/script/conversation/ConversationState.test.ts new file mode 100644 index 00000000000..c3a420d883d --- /dev/null +++ b/src/script/conversation/ConversationState.test.ts @@ -0,0 +1,91 @@ +/* + * Wire + * Copyright (C) 2022 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 {ConversationProtocol, CONVERSATION_TYPE} from '@wireapp/api-client/lib/conversation'; + +import {randomUUID} from 'crypto'; + +import {ConversationState} from './ConversationState'; + +import {Conversation} from '../entity/Conversation'; +import {TeamState} from '../team/TeamState'; +import {UserState} from '../user/UserState'; + +function createConversationState() { + return new ConversationState(new UserState(), new TeamState()); +} + +function createConversation(protocol?: ConversationProtocol, type?: CONVERSATION_TYPE) { + const conversation = new Conversation(randomUUID(), '', protocol); + if (protocol === ConversationProtocol.MLS) { + conversation.groupId = `groupid-${randomUUID()}`; + conversation.epoch = 0; + } + if (type) { + conversation.type(type); + } + return conversation; +} + +describe('ConversationState', () => { + const selfProteusConversation = createConversation(ConversationProtocol.PROTEUS, CONVERSATION_TYPE.SELF); + const selfMLSConversation = createConversation(ConversationProtocol.MLS, CONVERSATION_TYPE.SELF); + const regularConversation = createConversation(); + + describe('getSelfConversation', () => { + it('throws if no self conversation are set', () => { + const conversationState = createConversationState(); + expect(() => conversationState.getSelfConversation()).toThrow('proteus'); + expect(() => conversationState.getSelfConversation(true)).toThrow('MLS'); + }); + + it('finds the MLS and proteus self conversations', () => { + const conversationState = createConversationState(); + conversationState.conversations([selfProteusConversation, selfMLSConversation, regularConversation]); + expect(conversationState.getSelfConversation()).toBe(selfProteusConversation); + expect(conversationState.getSelfConversation(true)).toBe(selfMLSConversation); + }); + }); + + describe('isSelfConversation', () => { + it('returns false if not self conversations are set', () => { + const conversationState = createConversationState(); + expect(conversationState.isSelfConversation(regularConversation.qualifiedId)).toBeFalsy(); + expect(conversationState.isSelfConversation(selfMLSConversation.qualifiedId)).toBeFalsy(); + expect(conversationState.isSelfConversation(selfProteusConversation.qualifiedId)).toBeFalsy(); + }); + + it('detects self proteus and mls conversations', () => { + const conversationState = createConversationState(); + + const conversations = [ + createConversation(ConversationProtocol.MLS), + regularConversation, + selfProteusConversation, + selfMLSConversation, + ]; + + conversationState.conversations(conversations); + + expect(conversationState.isSelfConversation(regularConversation.qualifiedId)).toBeFalsy(); + expect(conversationState.isSelfConversation(selfMLSConversation.qualifiedId)).toBeTruthy(); + expect(conversationState.isSelfConversation(selfProteusConversation.qualifiedId)).toBeTruthy(); + }); + }); +}); diff --git a/src/script/conversation/ConversationState.ts b/src/script/conversation/ConversationState.ts index 9fa7ede3c18..2a6afb85ca8 100644 --- a/src/script/conversation/ConversationState.ts +++ b/src/script/conversation/ConversationState.ts @@ -48,8 +48,8 @@ export class ConversationState { public readonly visibleConversations: ko.PureComputed; public readonly filteredConversations: ko.PureComputed; public readonly archivedConversations: ko.PureComputed; - public readonly selfConversation: ko.PureComputed; - public readonly selfMLSConversation: ko.PureComputed; + private readonly selfProteusConversation: ko.PureComputed; + private readonly selfMLSConversation: ko.PureComputed; public readonly connectedUsers: ko.PureComputed; public readonly sortedConversations: ko.PureComputed; @@ -59,7 +59,7 @@ export class ConversationState { private readonly teamState = container.resolve(TeamState), ) { this.sortedConversations = ko.pureComputed(() => this.filteredConversations().sort(sortGroupsByLastEvent)); - this.selfConversation = ko.pureComputed(() => + this.selfProteusConversation = ko.pureComputed(() => this.conversations().find(conversation => !isMLSConversation(conversation) && isSelfConversation(conversation)), ); this.selfMLSConversation = ko.pureComputed(() => @@ -111,6 +111,22 @@ export class ConversationState { }); } + getSelfConversation(useMLS: boolean = false): Conversation { + if (!useMLS) { + const proteusConversation = this.selfProteusConversation(); + if (!proteusConversation) { + throw new Error('No proteus self conversation'); + } + return proteusConversation; + } + + const mlsConversation = this.selfMLSConversation(); + if (!mlsConversation) { + throw new Error('No MLS self conversation'); + } + return mlsConversation; + } + /** * returns true if the conversation should be visible to the user * @param conversation the conversation to check visibility @@ -121,6 +137,7 @@ export class ConversationState { this.visibleConversations().some(conv => matchQualifiedIds(conv.qualifiedId, conversation.qualifiedId)) ); } + /** * Get unarchived conversation with the most recent event. * @param allConversations Search all conversations @@ -144,6 +161,14 @@ export class ConversationState { }); } + isSelfConversation(conversationId: QualifiedId): boolean { + const selfConversationIds: QualifiedId[] = [this.selfProteusConversation(), this.selfMLSConversation()] + .filter((conversation): conversation is Conversation => !!conversation) + .map(conversation => conversation.qualifiedId); + + return selfConversationIds.some(selfConversation => matchQualifiedIds(selfConversation, conversationId)); + } + findConversationByGroupId(groupId: string): Conversation | undefined { return this.conversations().find(conversation => conversation.groupId === groupId); } diff --git a/src/script/conversation/MessageRepository.ts b/src/script/conversation/MessageRepository.ts index 3f87f9c8db8..1ae8fb3b0e2 100644 --- a/src/script/conversation/MessageRepository.ts +++ b/src/script/conversation/MessageRepository.ts @@ -969,10 +969,7 @@ export class MessageRepository { */ public async deleteMessage(conversation: Conversation, message: Message): Promise { try { - const selfConversation = this.conversationState.selfConversation(); - if (!selfConversation) { - throw new Error('cannot delete message as selfConversation is not defined'); - } + const selfConversation = this.conversationState.getSelfConversation(); const payload = MessageBuilder.buildHideMessage({ conversationId: conversation.id, messageId: message.id, @@ -997,10 +994,7 @@ export class MessageRepository { */ public async updateClearedTimestamp(conversation: Conversation): Promise { const timestamp = conversation.getLastKnownTimestamp(this.serverTimeHandler.toServerTimestamp()); - const selfConversation = this.conversationState.selfConversation(); - if (!selfConversation) { - throw new Error('cannot clear conversation as selfConversation is not defined'); - } + const selfConversation = this.conversationState.getSelfConversation(); if (timestamp && conversation.setTimestamp(timestamp, Conversation.TIMESTAMP_TYPE.CLEARED)) { const payload = MessageBuilder.buildClearedMessage(conversation.qualifiedId); await this.sendAndInjectMessage(payload, selfConversation, {skipInjection: true}); @@ -1241,10 +1235,7 @@ export class MessageRepository { * @param conversation Conversation to be marked as read */ public async markAsRead(conversation: Conversation) { - const selfConversation = this.conversationState.selfConversation(); - if (!selfConversation) { - throw new Error('cannot mark as read as selfConversation is not defined'); - } + const selfConversation = this.conversationState.getSelfConversation(); const timestamp = conversation.last_read_timestamp(); const payload = MessageBuilder.buildLastReadMessage(conversation.qualifiedId, timestamp); await this.sendAndInjectMessage(payload, selfConversation, {skipInjection: true}); @@ -1262,10 +1253,7 @@ export class MessageRepository { * @param countlyId Countly new ID */ public async sendCountlySync(countlyId: string) { - const selfConversation = this.conversationState.selfConversation(); - if (!selfConversation) { - throw new Error('cannot mark as read as selfConversation is not defined'); - } + const selfConversation = this.conversationState.getSelfConversation(); const payload = MessageBuilder.buildDataTransferMessage(countlyId); await this.sendAndInjectMessage(payload, selfConversation, {skipInjection: true}); this.logger.info(`Sent countly sync message with ID ${countlyId}`); diff --git a/src/script/page/MainContent/panels/preferences/devices/DevicesPreferences.tsx b/src/script/page/MainContent/panels/preferences/devices/DevicesPreferences.tsx index b8742d70aa8..bb028ffcfee 100644 --- a/src/script/page/MainContent/panels/preferences/devices/DevicesPreferences.tsx +++ b/src/script/page/MainContent/panels/preferences/devices/DevicesPreferences.tsx @@ -153,7 +153,7 @@ const DevicesPreferences: React.FC = ({ }} onClose={() => setSelectedDevice(undefined)} onVerify={(device, verified) => verifyDevice(self.qualifiedId, device, verified)} - onResetSession={device => resetSession(self.qualifiedId, device, conversationState.selfConversation())} + onResetSession={device => resetSession(self.qualifiedId, device, conversationState.getSelfConversation())} /> ); } From 8c606731a32da3d5af38c3a4a8810f37f826ae31 Mon Sep 17 00:00:00 2001 From: Amir Ghezelbash Date: Wed, 23 Nov 2022 15:21:45 +0330 Subject: [PATCH 014/329] feat: Adjust styles for typing indicator (ACC-309) (#14160) * feat: Adjust styles for typing indicator (ACC-309) * absolute position --- .../TypingIndicator/TypingIndicator.styles.ts | 41 ++++++++++++------- .../TypingIndicator/TypingIndicator.tsx | 9 ++-- 2 files changed, 32 insertions(+), 18 deletions(-) diff --git a/src/script/components/InputBar/TypingIndicator/TypingIndicator.styles.ts b/src/script/components/InputBar/TypingIndicator/TypingIndicator.styles.ts index a84e699482b..67c02561f41 100644 --- a/src/script/components/InputBar/TypingIndicator/TypingIndicator.styles.ts +++ b/src/script/components/InputBar/TypingIndicator/TypingIndicator.styles.ts @@ -22,18 +22,25 @@ import {css, CSSObject, keyframes} from '@emotion/react'; export const wrapperStyles: CSSObject = { display: 'flex', alignItems: 'center', - marginBottom: '12px', - marginLeft: '18px', + marginLeft: 15, color: 'var(--text-input-placeholder)', - fontSize: '14px', + fontSize: 11, fontWeight: 500, + paddingTop: 2, + backgroundColor: 'var(--app-bg)', + padding: 5, + position: 'absolute', + bottom: 56, + borderTopLeftRadius: 4, + borderTopRightRadius: 4, }; export const indicatorAnimationWrapperStyles: CSSObject = { width: 38, height: 16, - marginLeft: 4, + marginLeft: 2, position: 'relative', + bottom: 3, }; const animationStyles: CSSObject = { @@ -47,8 +54,8 @@ const animationStyles: CSSObject = { const dotStyles: CSSObject = { ...animationStyles, position: 'absolute', - width: 4, - height: 4, + width: 2, + height: 2, backgroundColor: 'var(--text-input-placeholder)', borderRadius: '100%', bottom: 0, @@ -60,11 +67,11 @@ const editIconKeyFrams = keyframes({ '0%': { transform: 'translateX(0px) rotate(0deg)', }, - '9%': {transform: 'translateX(5px) rotate(-5deg)'}, - '34%': {transform: 'translateX(10px) rotate(5deg)'}, - '59%': {transform: 'translateX(15px) rotate(-5deg)'}, - '84%': {transform: 'translateX(25px) rotate(5deg)'}, - '100%': {transform: 'translateX(25px) rotate(5deg)'}, + '9%': {transform: 'translateX(2px) rotate(-5deg)'}, + '34%': {transform: 'translateX(5px) rotate(5deg)'}, + '59%': {transform: 'translateX(7px) rotate(-5deg)'}, + '84%': {transform: 'translateX(12px) rotate(5deg)'}, + '100%': {transform: 'translateX(12px) rotate(5deg)'}, }); const dot1KeyFrames = keyframes({ @@ -92,8 +99,8 @@ export const editIconStyles = css` animation: ${editIconKeyFrams}; bottom: 0; fill: var(--text-input-placeholder); - position: absolute; ${animationStyles} + position: absolute; `; export const dotOneStyles = css` @@ -104,12 +111,18 @@ export const dotOneStyles = css` export const dotTwoStyles = css` animation: ${dot2KeyFrames}; - left: 8px; + left: 4px; ${dotStyles}; `; export const dotThreeStyles = css` animation: ${dot3KeyFrames}; - left: 16px; + left: 8px; ${dotStyles}; `; + +export const indicatorTitleStyles = css` + height: 16px; + position: relative; + top: 1px; +`; diff --git a/src/script/components/InputBar/TypingIndicator/TypingIndicator.tsx b/src/script/components/InputBar/TypingIndicator/TypingIndicator.tsx index af8339522b8..e2e9736da35 100644 --- a/src/script/components/InputBar/TypingIndicator/TypingIndicator.tsx +++ b/src/script/components/InputBar/TypingIndicator/TypingIndicator.tsx @@ -30,6 +30,7 @@ import { dotTwoStyles, editIconStyles, indicatorAnimationWrapperStyles, + indicatorTitleStyles, wrapperStyles, } from './TypingIndicator.styles'; @@ -47,18 +48,18 @@ const TypingIndicator: FC = ({conversationId}) => { return (
    -
    +
    {users.slice(0, 3).map((user, index) => ( 0 ? {marginLeft: -15} : {}} participant={user} - avatarSize={AVATAR_SIZE.X_SMALL} + avatarSize={AVATAR_SIZE.XXX_SMALL} /> ))}
    - + {usersCount === 1 && t('tooltipConversationInputOneUserTyping' as StringIdentifer, {user1: users[0].name()})} {usersCount === 2 && t('tooltipConversationInputTwoUserTyping' as StringIdentifer, { @@ -75,7 +76,7 @@ const TypingIndicator: FC = ({conversationId}) => {
    - +
    ); From 24f8a38b74291efbb63dc9636c77c919bba58cd9 Mon Sep 17 00:00:00 2001 From: Thomas Belin Date: Wed, 23 Nov 2022 15:08:37 +0100 Subject: [PATCH 015/329] chore: Add debug function for sending status (#14162) --- package.json | 2 +- src/script/util/DebugUtil.ts | 4 ++++ yarn.lock | 30 +++++++++++++++--------------- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/package.json b/package.json index 7e9810130a6..4a49572d5b6 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "@types/eslint": "^8.4.10", "@wireapp/antiscroll-2": "1.3.1", "@wireapp/avs": "8.2.17", - "@wireapp/core": "37.1.1", + "@wireapp/core": "37.2.0", "@wireapp/react-ui-kit": "9.0.2", "@wireapp/store-engine-dexie": "2.0.3", "@wireapp/store-engine-sqleet": "1.8.9", diff --git a/src/script/util/DebugUtil.ts b/src/script/util/DebugUtil.ts index 764709fe715..a2326ef1c2a 100644 --- a/src/script/util/DebugUtil.ts +++ b/src/script/util/DebugUtil.ts @@ -172,6 +172,10 @@ export class DebugUtil { }; } + isSendingMessage(): boolean { + return this.core.service!.conversation.isSendingMessage(); + } + async getLastMessagesFromDatabase( amount = 10, conversationId = this.conversationState.activeConversation().id, diff --git a/yarn.lock b/yarn.lock index 7e69aa07a78..bb8298a9a1d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4167,9 +4167,9 @@ __metadata: languageName: node linkType: hard -"@wireapp/api-client@npm:^22.6.1": - version: 22.6.1 - resolution: "@wireapp/api-client@npm:22.6.1" +"@wireapp/api-client@npm:^22.7.0": + version: 22.7.0 + resolution: "@wireapp/api-client@npm:22.7.0" dependencies: "@wireapp/commons": ^5.0.3 "@wireapp/priority-queue": ^2.0.3 @@ -4182,7 +4182,7 @@ __metadata: spark-md5: 3.0.2 tough-cookie: 4.1.2 ws: 8.10.0 - checksum: a1cbc2cc80f44dfc88886a89425acda0f91834ec2182dafa6ef9dab030b3963e5db9847553661213e305a3b355090cb2cda3dcafc622bc693f1c85c93bd9817c + checksum: f8c17729cc2ff32c23af26ac2259785d8b593532175d5592a496673d9fdd42bc628bcbbac5db768b183669f8fb93f18b27cc12b9a22272b277fe849ebd40a8ca languageName: node linkType: hard @@ -4235,15 +4235,15 @@ __metadata: languageName: node linkType: hard -"@wireapp/core@npm:37.1.1": - version: 37.1.1 - resolution: "@wireapp/core@npm:37.1.1" +"@wireapp/core@npm:37.2.0": + version: 37.2.0 + resolution: "@wireapp/core@npm:37.2.0" dependencies: - "@wireapp/api-client": ^22.6.1 + "@wireapp/api-client": ^22.7.0 "@wireapp/commons": ^5.0.3 "@wireapp/core-crypto": 0.6.0-pre.4 "@wireapp/cryptobox": 12.8.0 - "@wireapp/promise-queue": ^2.0.3 + "@wireapp/promise-queue": ^2.1.0 "@wireapp/protocol-messaging": 1.42.0 "@wireapp/store-engine-dexie": ^2.0.3 axios: 1.1.2 @@ -4254,7 +4254,7 @@ __metadata: logdown: 3.3.1 long: ^5.2.0 uuidjs: 4.2.12 - checksum: 19994abdec60930ad75bf46888f1bcf8e2e3db1f80457d43f48e30fae3709d4fe600453213d87f44ac9403251f25565b9683731f2bd1b1053c561da8d371138c + checksum: 5c8c01424e2bbca84e7951e9de0209e6c2fc88603edf92f3e420a4daa750d0e6ee988ffc841f691e739aa74620c4fcd25b5a11e5a9de638effd5a9b02ae5b583 languageName: node linkType: hard @@ -4334,10 +4334,10 @@ __metadata: languageName: node linkType: hard -"@wireapp/promise-queue@npm:^2.0.3": - version: 2.0.3 - resolution: "@wireapp/promise-queue@npm:2.0.3" - checksum: 7945ef95828ee4262fddf6ed4b907c443538de76795a4130b2ee49878e155fcdaec9f44bcab7c45a2bb4e5ccfef204d6d92c89b9b9be3f1e7a5efd5aea1d4d92 +"@wireapp/promise-queue@npm:^2.1.0": + version: 2.1.0 + resolution: "@wireapp/promise-queue@npm:2.1.0" + checksum: 6785d8e21d4b57fc8b4848276678b83c9f0483897d9b4147ebc79b72a178e81187356fff2a07cfdd61e1cde36aeb1e0651d036ec372a26bde2a31ca63afde703 languageName: node linkType: hard @@ -16526,7 +16526,7 @@ __metadata: "@wireapp/antiscroll-2": 1.3.1 "@wireapp/avs": 8.2.17 "@wireapp/copy-config": 2.0.3 - "@wireapp/core": 37.1.1 + "@wireapp/core": 37.2.0 "@wireapp/eslint-config": 2.1.0 "@wireapp/prettier-config": 0.5.2 "@wireapp/react-ui-kit": 9.0.2 From 3f2eee3eb975d5c30fc66c896f9b4149be0f8fc2 Mon Sep 17 00:00:00 2001 From: Virgile <78490891+V-Gira@users.noreply.github.com> Date: Thu, 24 Nov 2022 11:22:42 +0100 Subject: [PATCH 016/329] refactor: change px values to rem values for font variables [ACC-68] (#14017) * refactor: change px values to rem values for font variables [ACC-68] * replace font size px values by rem values in tsx files * replace 12px by variable in less files * replace 11px by variable in less files * replace 14px by variable in less files * replace 16px by variable in less files * replace 24px by variable in less files * replace rest of px values by variable in less files * replace lineheight px values by rem values in tsx files * replace lineheight px values by existing variables in less files * change a em value to px since it should'nt react to font-size change * fix input bar control responsivity to font size * refactor other lineheight px values to rem * refactor forgotten px value * bump ui-kit to 9.0.10 * bump ui-kit to 9.0.11: fix typing issues * bump ui-kit to 9.0.12: missing ref --- package.json | 2 +- .../auth/component/WirelessContainer.tsx | 2 +- src/script/auth/page/ConversationJoin.tsx | 6 +-- .../auth/page/ConversationJoinInvalid.tsx | 2 +- src/script/auth/page/Index.tsx | 2 +- src/script/auth/page/SingleSignOn.tsx | 4 +- src/script/components/ModalComponent.tsx | 2 +- .../components/TextInput/TextInput.styles.ts | 2 +- src/script/components/calling/ButtonGroup.tsx | 2 +- .../components/calling/GroupVideoGrid.tsx | 2 +- .../components/calling/GroupVideoGridTile.tsx | 2 +- src/script/components/input/ClassifiedBar.tsx | 2 +- .../ConversationProtocolDetails.tsx | 4 +- .../AccentColorPicker/AccentColorPicker.tsx | 4 +- .../accountPreferences/AccountInput.tsx | 2 +- .../AvailabilityButtons.tsx | 2 +- .../MessageTimerButton/MessageTimerButton.tsx | 2 +- src/style/common/badge.less | 2 +- src/style/common/bubble.less | 2 +- src/style/common/button-round.less | 2 +- src/style/common/button.less | 2 +- src/style/common/checkbox.less | 6 +-- src/style/common/context.less | 2 +- src/style/common/hint.less | 2 +- src/style/common/label.less | 2 +- src/style/common/modal.less | 4 +- src/style/common/tooltip.less | 8 ++-- src/style/common/variables.less | 42 +++++++++---------- src/style/components/full-search.less | 4 +- src/style/components/group-video-grid.less | 4 +- src/style/components/info-toggle.less | 10 ++--- src/style/components/legal-hold-dot.less | 4 +- .../components/list/participant-item.less | 2 +- src/style/components/mention-suggestions.less | 8 ++-- .../components/message-timer-button.less | 4 +- .../components/panel-participant-details.less | 12 +++--- src/style/components/search-input.less | 4 +- src/style/components/search-list.less | 4 +- src/style/components/user-list.less | 4 +- src/style/content/connect-requests.less | 2 +- src/style/content/conversation/input-bar.less | 18 ++++---- .../content/conversation/message-list.less | 28 ++++++------- .../content/conversation/message-quote.less | 10 ++--- src/style/content/conversation/title-bar.less | 2 +- src/style/content/history-export-import.less | 12 +++--- src/style/content/preferences.less | 2 +- src/style/content/preferences/account.less | 2 +- src/style/content/preferences/av.less | 6 +-- src/style/content/preferences/devices.less | 2 +- src/style/foundation/video-calling.less | 6 +-- src/style/list/conversation-list-cell.less | 2 +- src/style/list/start-ui.less | 20 ++++----- src/style/list/temporary-guest.less | 10 ++--- src/style/modal/invite-modal.less | 2 +- src/style/modal/legal-hold-modal.less | 6 +-- src/style/modal/service-modal.less | 4 +- src/style/panel/add-participants.less | 6 +-- src/style/panel/guest-options.less | 4 +- src/style/panel/message-details.less | 2 +- src/style/panel/panel.less | 2 +- src/style/panel/participant-devices.less | 6 +-- src/style/support.less | 4 +- yarn.lock | 20 ++++----- 63 files changed, 179 insertions(+), 177 deletions(-) diff --git a/package.json b/package.json index 4a49572d5b6..184daa09be0 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "@wireapp/antiscroll-2": "1.3.1", "@wireapp/avs": "8.2.17", "@wireapp/core": "37.2.0", - "@wireapp/react-ui-kit": "9.0.2", + "@wireapp/react-ui-kit": "9.0.12", "@wireapp/store-engine-dexie": "2.0.3", "@wireapp/store-engine-sqleet": "1.8.9", "@wireapp/webapp-events": "0.15.2", diff --git a/src/script/auth/component/WirelessContainer.tsx b/src/script/auth/component/WirelessContainer.tsx index 77b25f0fa28..dbd7bb9f4fc 100644 --- a/src/script/auth/component/WirelessContainer.tsx +++ b/src/script/auth/component/WirelessContainer.tsx @@ -59,7 +59,7 @@ const WirelessContainer: React.FC = ({showCookiePolicyBanner, onCookiePol ) => onCookiePolicyBannerClose?.(event)} href={Config.getConfig().URL.PRIVACY_POLICY} - style={{fontSize: '16px'}} + style={{fontSize: '1rem'}} target="_blank" textTransform="none" bold={false} diff --git a/src/script/auth/page/ConversationJoin.tsx b/src/script/auth/page/ConversationJoin.tsx index 5c58600cacb..3d406e268dc 100644 --- a/src/script/auth/page/ConversationJoin.tsx +++ b/src/script/auth/page/ConversationJoin.tsx @@ -231,7 +231,7 @@ const ConversationJoinComponent = ({

    - + {_(conversationJoinStrings.fullConversationSubhead)} @@ -247,7 +247,7 @@ const ConversationJoinComponent = ({ }} /> - +
    @@ -305,7 +305,7 @@ const ConversationJoinComponent = ({ }) : _(conversationJoinStrings.headline, {brandName: Config.getConfig().BRAND_NAME})} - + {_(conversationJoinStrings.existentAccountSubhead)}
    @@ -225,7 +225,7 @@ const SingleSignOnComponent = ({hasDefaultSSOCode}: Props & ConnectedProps & Dis center style={{ color: COLOR.WHITE, - fontSize: '14px', + fontSize: '0.875rem', fontWeight: 600, marginTop: '24px', textDecoration: 'underline', diff --git a/src/script/components/ModalComponent.tsx b/src/script/components/ModalComponent.tsx index d542ba28f4f..907f19443eb 100644 --- a/src/script/components/ModalComponent.tsx +++ b/src/script/components/ModalComponent.tsx @@ -66,7 +66,7 @@ const ModalContentStyles: CSSObject = { cursor: 'default', display: 'flex', flexDirection: 'column', - fontSize: 14, + fontSize: '0.875rem', margin: 'auto', maxHeight: 615, overflow: 'hidden', diff --git a/src/script/components/TextInput/TextInput.styles.ts b/src/script/components/TextInput/TextInput.styles.ts index e00f472fe8b..72453aa653c 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: '14px', + lineHeight: '0.875rem', position: 'absolute', textTransform: 'unset', }; diff --git a/src/script/components/calling/ButtonGroup.tsx b/src/script/components/calling/ButtonGroup.tsx index 40f644b6f42..5ea6aaae4af 100644 --- a/src/script/components/calling/ButtonGroup.tsx +++ b/src/script/components/calling/ButtonGroup.tsx @@ -66,7 +66,7 @@ const buttonGroupItemStyles: CSSObject = { backgroundColor: 'var(--app-bg-secondary)', color: 'var(--main-color)', cursor: 'pointer', - fontSize: 11, + fontSize: '0.6875rem', fontWeight: 500, padding: '10px 12px', }; diff --git a/src/script/components/calling/GroupVideoGrid.tsx b/src/script/components/calling/GroupVideoGrid.tsx index d26ee65a682..35096b1aaa0 100644 --- a/src/script/components/calling/GroupVideoGrid.tsx +++ b/src/script/components/calling/GroupVideoGrid.tsx @@ -138,7 +138,7 @@ const GroupVideoGrid: React.FunctionComponent = ({ width: 32, }} /> -
    +
    {t('noActiveSpeakers')}
    diff --git a/src/script/components/calling/GroupVideoGridTile.tsx b/src/script/components/calling/GroupVideoGridTile.tsx index 7eba2da738b..20c06427210 100644 --- a/src/script/components/calling/GroupVideoGridTile.tsx +++ b/src/script/components/calling/GroupVideoGridTile.tsx @@ -153,7 +153,7 @@ const GroupVideoGridTile: React.FC = ({
    {t('videoCallPaused')} diff --git a/src/script/components/input/ClassifiedBar.tsx b/src/script/components/input/ClassifiedBar.tsx index 298b4fa497d..d710dfd8095 100644 --- a/src/script/components/input/ClassifiedBar.tsx +++ b/src/script/components/input/ClassifiedBar.tsx @@ -45,7 +45,7 @@ const barStyle = (highContrast: boolean): CSSObject => ({ borderWidth: '1px 0', color: `var(--${highContrast ? 'app-bg' : 'background'})`, display: 'flex', - fontSize: 11, + fontSize: '0.6875rem', fontWeight: 600, height: '16px', justifyContent: 'center', diff --git a/src/script/components/panel/ConversationProtocolDetails/ConversationProtocolDetails.tsx b/src/script/components/panel/ConversationProtocolDetails/ConversationProtocolDetails.tsx index effbe6f56cc..c3579130dc0 100644 --- a/src/script/components/panel/ConversationProtocolDetails/ConversationProtocolDetails.tsx +++ b/src/script/components/panel/ConversationProtocolDetails/ConversationProtocolDetails.tsx @@ -61,13 +61,13 @@ export interface ConversationProtocolDetailsProps { } const titleStyles: CSSObject = { - fontSize: 14, + fontSize: '0.875rem', fontWeight: 400, }; const subTitleStyles: CSSObject = { color: 'var(--gray-70)', - fontSize: 12, + fontSize: '0.75rem', fontWeight: 400, marginBottom: 16, wordBreak: 'break-all', diff --git a/src/script/page/AccentColorPicker/AccentColorPicker.tsx b/src/script/page/AccentColorPicker/AccentColorPicker.tsx index e29d282c5b3..a76d1d8c9f7 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: '14px', + lineHeight: '0.875rem', margin: '20px 0 6px', padding: 0, textAlign: 'center', @@ -129,7 +129,7 @@ const AccentColorPicker: React.FunctionComponent = ({use diff --git a/src/script/page/MainContent/panels/preferences/accountPreferences/AccountInput.tsx b/src/script/page/MainContent/panels/preferences/accountPreferences/AccountInput.tsx index 98e637540f4..477d68cda54 100644 --- a/src/script/page/MainContent/panels/preferences/accountPreferences/AccountInput.tsx +++ b/src/script/page/MainContent/panels/preferences/accountPreferences/AccountInput.tsx @@ -139,7 +139,7 @@ const AccountInput: FC = ({ alignItems: 'center', display: 'flex', height: 32, - lineHeight: '14px', + lineHeight: '0.875rem', position: 'relative', }} data-uie-name={labelUie} diff --git a/src/script/page/MainContent/panels/preferences/accountPreferences/AvailabilityButtons.tsx b/src/script/page/MainContent/panels/preferences/accountPreferences/AvailabilityButtons.tsx index 7331d7a38ee..ecc37a79c74 100644 --- a/src/script/page/MainContent/panels/preferences/accountPreferences/AvailabilityButtons.tsx +++ b/src/script/page/MainContent/panels/preferences/accountPreferences/AvailabilityButtons.tsx @@ -45,7 +45,7 @@ const iconStyles: CSSObject = { }; const headerStyles: CSSObject = { - lineHeight: '14px', + lineHeight: '0.875rem', margin: '37px 0 6px', padding: 0, }; diff --git a/src/script/page/message-list/MessageTimerButton/MessageTimerButton.tsx b/src/script/page/message-list/MessageTimerButton/MessageTimerButton.tsx index e11f7ed5c5a..c4950f81f55 100644 --- a/src/script/page/message-list/MessageTimerButton/MessageTimerButton.tsx +++ b/src/script/page/message-list/MessageTimerButton/MessageTimerButton.tsx @@ -118,7 +118,7 @@ const MessageTimerButton: React.FC = ({
    ) ) : ( - + )} diff --git a/src/style/common/badge.less b/src/style/common/badge.less index 8f43add3492..93df8eb6b72 100644 --- a/src/style/common/badge.less +++ b/src/style/common/badge.less @@ -27,7 +27,7 @@ justify-content: center; padding: 3px 6px; border-radius: 6px; - font-size: 12px; + font-size: @font-size-small; &.disabled { cursor: default; diff --git a/src/style/common/bubble.less b/src/style/common/bubble.less index 6a3381807ed..179d0c64d22 100644 --- a/src/style/common/bubble.less +++ b/src/style/common/bubble.less @@ -33,7 +33,7 @@ height: 40px; color: var(--background); cursor: pointer; - line-height: 40px; + line-height: 2.5rem; user-select: none; &.hover, diff --git a/src/style/common/button-round.less b/src/style/common/button-round.less index d3227a3822a..01b4ff57528 100644 --- a/src/style/common/button-round.less +++ b/src/style/common/button-round.less @@ -192,7 +192,7 @@ height: 28px; margin-left: 10px; color: var(--background); - line-height: 28px; + line-height: 1.75rem; } } diff --git a/src/style/common/button.less b/src/style/common/button.less index 28a59bca8e0..2ccb988a22a 100644 --- a/src/style/common/button.less +++ b/src/style/common/button.less @@ -188,7 +188,7 @@ -webkit-appearance: none; background: none; cursor: pointer; - line-height: 24px; + line-height: @line-height-lg; outline: 0; &.disabled { diff --git a/src/style/common/checkbox.less b/src/style/common/checkbox.less index 4fb94bf6f91..6e2838456a1 100644 --- a/src/style/common/checkbox.less +++ b/src/style/common/checkbox.less @@ -62,7 +62,7 @@ display: inline-block; padding-left: 36px; cursor: pointer; - line-height: 22px; + line-height: 1.375rem; text-transform: none; user-select: none; .text-light; @@ -86,7 +86,7 @@ color: var(--white); content: '\e102'; font-family: 'Wire' !important; - font-size: 14px; + font-size: @font-size-medium; line-height: 1; opacity: 0; } @@ -98,7 +98,7 @@ > div { color: var(--main-color) !important; - line-height: 16px; + line-height: @line-height-sm; } } } diff --git a/src/style/common/context.less b/src/style/common/context.less index 51961e588e4..374d33089e4 100644 --- a/src/style/common/context.less +++ b/src/style/common/context.less @@ -30,7 +30,7 @@ margin: 0; background-color: var(--modal-bg); box-shadow: 0 0 1px 0 fade(#000, 8%), 0 8px 24px 0 fade(#000, 16%); - font-size: 12px; + font-size: @font-size-small; font-weight: @font-weight-regular; line-height: @line-height-xl; overflow-y: auto; diff --git a/src/style/common/hint.less b/src/style/common/hint.less index 7617d50a62e..de87a9627eb 100644 --- a/src/style/common/hint.less +++ b/src/style/common/hint.less @@ -24,7 +24,7 @@ background-color: var(--foreground); color: #fff; font-size: @font-size-xs; - line-height: 16px; + line-height: @line-height-sm; } // search hint diff --git a/src/style/common/label.less b/src/style/common/label.less index 5f76c821625..45d48d4180c 100644 --- a/src/style/common/label.less +++ b/src/style/common/label.less @@ -42,7 +42,7 @@ } .label-nocase-xs { - font-size: 12px; + font-size: @font-size-small; font-weight: @font-weight-regular; text-transform: none; } diff --git a/src/style/common/modal.less b/src/style/common/modal.less index e2955dd88d1..7fea2c214c3 100644 --- a/src/style/common/modal.less +++ b/src/style/common/modal.less @@ -265,7 +265,7 @@ animation: scaleIn 0.35s @ease-out-quart; background-color: var(--white); cursor: default; - font-size: 16px; + font-size: @font-size-base; justify-self: center; overflow-y: hidden; @@ -457,7 +457,7 @@ margin: 8px 0 24px; color: var(--gray-80); font-size: @font-size-small; - line-height: 14px; + line-height: @line-height-xs; } &__cta { diff --git a/src/style/common/tooltip.less b/src/style/common/tooltip.less index 507d02ad2ce..6c10023977b 100644 --- a/src/style/common/tooltip.less +++ b/src/style/common/tooltip.less @@ -33,9 +33,9 @@ box-shadow: 0 2px 16px 0 rgba(0, 0, 0, 0.12); color: var(--background); content: attr(data-tooltip); - font-size: 12px; + font-size: @font-size-small; font-weight: @font-weight-regular; - line-height: 14px; + line-height: @line-height-xs; opacity: 0; pointer-events: none; text-align: center; @@ -71,7 +71,7 @@ min-width: 0; padding: 4px; color: var(--background-fade-48); - font-size: 11px; + font-size: @font-size-xsmall; font-weight: @font-weight-light; transform: translate(0, 16px); white-space: nowrap; @@ -88,7 +88,7 @@ padding: 2px; background-color: #fff; color: #9fa1a2; - font-size: 11px; + font-size: @font-size-xsmall; font-weight: @font-weight-light; transform: translate(-50%, 4px); white-space: nowrap; diff --git a/src/style/common/variables.less b/src/style/common/variables.less index 1c15b995af5..ba3d13260bb 100644 --- a/src/style/common/variables.less +++ b/src/style/common/variables.less @@ -93,27 +93,27 @@ @font-family-base: emoji, BlinkMacSystemFont, -apple-system, Helvetica Neue, Arial, sans-serif; @font-family-ephemeral: Redacted Script; -@font-size-xxs: 8px; -@font-size-xs: 11px; -@font-size-sm: 16px; -@font-size-md: 20px; -@font-size-lg: 24px; -@font-size-xl: 32px; -@font-size-xxl: 56px; - -@font-size-xsmall: 11px; -@font-size-small: 12px; -@font-size-medium: 14px; -@font-size-base: 16px; -@font-size-large: 20px; -@font-size-xlarge: 24px; - -@line-height-xs: 11px; -@line-height-sm: 16px; -@line-height-md: 20px; -@line-height-lg: 24px; -@line-height-xl: 32px; -@line-height-xxl: 64px; +@font-size-xxs: 0.5rem; +@font-size-xs: 0.6875rem; +@font-size-sm: 1rem; +@font-size-md: 1.25rem; +@font-size-lg: 1.5rem; +@font-size-xl: 2rem; +@font-size-xxl: 3.5rem; + +@font-size-xsmall: 0.6875rem; +@font-size-small: 0.75rem; +@font-size-medium: 0.875rem; +@font-size-base: 1rem; +@font-size-large: 1.25rem; +@font-size-xlarge: 1.5rem; + +@line-height-xs: 0.6875rem; +@line-height-sm: 1rem; +@line-height-md: 1.25rem; +@line-height-lg: 1.5rem; +@line-height-xl: 2rem; +@line-height-xxl: 4rem; @font-weight-bold: 700; @font-weight-semibold: 600; diff --git a/src/style/components/full-search.less b/src/style/components/full-search.less index 721746ce1ee..80dbbd861a4 100644 --- a/src/style/components/full-search.less +++ b/src/style/components/full-search.less @@ -45,7 +45,7 @@ height: 24px; background-color: transparent; color: var(--background); - line-height: 24px; + line-height: @line-height-lg; &::placeholder { .label-xs; @@ -53,7 +53,7 @@ height: 24px; padding-left: 8px; color: var(--foreground-fade-48); - line-height: 24px; + line-height: @line-height-lg; } } } diff --git a/src/style/components/group-video-grid.less b/src/style/components/group-video-grid.less index 81f0a3f5553..5527c447522 100644 --- a/src/style/components/group-video-grid.less +++ b/src/style/components/group-video-grid.less @@ -41,7 +41,7 @@ justify-content: center; background-color: var(--foreground-fade-16); color: var(--background); - font-size: 12px; + font-size: @font-size-small; font-weight: 600; text-align: center; text-transform: uppercase; @@ -199,7 +199,7 @@ z-index: 1; max-width: 50%; color: #fff; - font-size: 14px; + font-size: @font-size-medium; font-weight: @font-weight-bold; text-align: center; } diff --git a/src/style/components/info-toggle.less b/src/style/components/info-toggle.less index c77725c918e..071632d6572 100644 --- a/src/style/components/info-toggle.less +++ b/src/style/components/info-toggle.less @@ -37,15 +37,15 @@ .info-toggle__row { display: flex; justify-content: space-between; - font-size: 16px; - line-height: 24px; + font-size: @font-size-base; + line-height: @line-height-lg; } .info-toggle__details { margin-top: 10px; margin-bottom: 0; - font-size: 11px; - line-height: 16px; + font-size: @font-size-xsmall; + line-height: @line-height-sm; } .slider.disabled { @@ -67,7 +67,7 @@ margin: 0 2px 0; color: var(--gray-90); font-size: @font-size-small; - line-height: 14px; + line-height: @line-height-xs; } } } diff --git a/src/style/components/legal-hold-dot.less b/src/style/components/legal-hold-dot.less index ab337343ef1..ae3cdf31f9f 100644 --- a/src/style/components/legal-hold-dot.less +++ b/src/style/components/legal-hold-dot.less @@ -70,8 +70,8 @@ &--text { margin-left: 6px; - font-size: 11px; - line-height: 13px; + font-size: @font-size-xsmall; + line-height: 0.8125rem; } .pending-icon { diff --git a/src/style/components/list/participant-item.less b/src/style/components/list/participant-item.less index 8eee3b196c5..86e63139b44 100644 --- a/src/style/components/list/participant-item.less +++ b/src/style/components/list/participant-item.less @@ -114,7 +114,7 @@ height: @avatar-diameter-m; flex: 1 1; align-items: center; - line-height: 16px; + line-height: @line-height-sm; &__text { display: flex; diff --git a/src/style/components/mention-suggestions.less b/src/style/components/mention-suggestions.less index 8009b204db6..5c0fbaaee77 100644 --- a/src/style/components/mention-suggestions.less +++ b/src/style/components/mention-suggestions.less @@ -57,15 +57,15 @@ &__name { margin-right: 4px; - font-size: 14px; - line-height: 14px; + font-size: @font-size-medium; + line-height: @line-height-xs; } &__username, &__remaining { color: var(--background-fade-40); - font-size: 12px; - line-height: 14px; + font-size: @font-size-small; + line-height: @line-height-xs; } &__guest-badge { diff --git a/src/style/components/message-timer-button.less b/src/style/components/message-timer-button.less index d1b632dcdb1..2386bba0b0f 100644 --- a/src/style/components/message-timer-button.less +++ b/src/style/components/message-timer-button.less @@ -40,7 +40,7 @@ font-size: @font-size-xs; font-weight: @font-weight-bold; letter-spacing: -1px; - line-height: 18px; + line-height: 1.125rem; text-align: center; svg path { @@ -66,5 +66,5 @@ right: -9px; background-color: var(--app-bg-secondary); letter-spacing: 0; - line-height: 14px; + line-height: @line-height-xs; } diff --git a/src/style/components/panel-participant-details.less b/src/style/components/panel-participant-details.less index 93b879a1e66..21b71ec0878 100644 --- a/src/style/components/panel-participant-details.less +++ b/src/style/components/panel-participant-details.less @@ -68,7 +68,7 @@ &__provider-name { width: 100%; margin: 8px 0 0; - font-size: 12px; + font-size: @font-size-small; font-weight: @font-weight-regular; text-align: center; white-space: pre; @@ -83,7 +83,7 @@ display: flex; align-items: center; justify-content: center; - font-size: 11px; + font-size: @font-size-xsmall; font-weight: @font-weight-bold; text-transform: uppercase; &:not(:last-of-type) { @@ -114,13 +114,13 @@ justify-content: center; margin-top: 8px; color: var(--background-fade-56); - font-size: 12px; + font-size: @font-size-small; font-weight: @font-weight-bold; } &__availability { justify-content: center; - font-size: 11px; + font-size: @font-size-xsmall; font-weight: @font-weight-bold; text-transform: uppercase; } @@ -136,7 +136,7 @@ } &__service-description { - font-size: 14px; + font-size: @font-size-medium; font-weight: @font-weight-light; } @@ -147,7 +147,7 @@ margin-bottom: 14px; background-color: var(--background); color: var(--app-bg); - font-size: 12px; + font-size: @font-size-small; font-weight: @font-weight-bold; text-transform: uppercase; } diff --git a/src/style/components/search-input.less b/src/style/components/search-input.less index 213fa28d276..d3a88bd4d74 100644 --- a/src/style/components/search-input.less +++ b/src/style/components/search-input.less @@ -80,8 +80,8 @@ appearance: none; background: var(--text-input-background); color: currentColor; - font-size: 16px; - line-height: 24px; + font-size: @font-size-base; + line-height: @line-height-lg; outline: none; .text-light; diff --git a/src/style/components/search-list.less b/src/style/components/search-list.less index 5604448cea2..cff7d5ee366 100644 --- a/src/style/components/search-list.less +++ b/src/style/components/search-list.less @@ -132,7 +132,7 @@ .search-list-item-content-info { display: flex; font-size: @font-size-xs; - line-height: 16px; + line-height: @line-height-sm; opacity: 0.56; } @@ -179,7 +179,7 @@ &::before { margin-left: 3px; color: var(--white); - font-size: 14px; + font-size: @font-size-medium; opacity: 0; } diff --git a/src/style/components/user-list.less b/src/style/components/user-list.less index c2f742112a9..6a80ef80b14 100644 --- a/src/style/components/user-list.less +++ b/src/style/components/user-list.less @@ -26,7 +26,7 @@ service-list { .text-center; margin: 106px 18px; - line-height: 24px; + line-height: @line-height-lg; white-space: pre; } &__header { @@ -35,7 +35,7 @@ service-list { &__no-admin { margin: 8px 16px; color: #c0c0c0; - font-size: 11px; + font-size: @font-size-xsmall; } } } diff --git a/src/style/content/connect-requests.less b/src/style/content/connect-requests.less index 92df7a3b542..3cd0b34bda2 100644 --- a/src/style/content/connect-requests.less +++ b/src/style/content/connect-requests.less @@ -64,7 +64,7 @@ .connect-request-name { max-width: 100%; font-size: @font-size-lg; - line-height: 42px; + line-height: 2.625rem; } .connect-request-username { diff --git a/src/style/content/conversation/input-bar.less b/src/style/content/conversation/input-bar.less index 2f02a3c210e..18d04d8b824 100644 --- a/src/style/content/conversation/input-bar.less +++ b/src/style/content/conversation/input-bar.less @@ -52,8 +52,8 @@ min-height: @conversation-input-line-height; max-height: @conversation-input-max-height; flex: 1 1; - margin-top: (@conversation-input-min-height - @conversation-input-line-height) / 2; - margin-bottom: (@conversation-input-min-height - @conversation-input-line-height) / 2; + margin-top: calc((@conversation-input-min-height - @conversation-input-line-height) / 2); + margin-bottom: calc((@conversation-input-min-height - @conversation-input-line-height) / 2); background-color: transparent; font-weight: inherit; line-height: @conversation-input-line-height; @@ -137,6 +137,8 @@ .controls-right-button { .button-icon-primary; + display: flex; + @media (max-width: @screen-md-min) { width: 75px; margin-bottom: 5px; @@ -164,7 +166,7 @@ color: var(--white); > svg { - margin-left: 0.3em; + margin-left: 4px; } > * { @@ -277,7 +279,7 @@ border-radius: 8px; background-color: var(--modal-bg); box-shadow: 0 8px 30px 0 rgba(0, 0, 0, 0.08); - font-size: 12px; + font-size: @font-size-small; font-weight: @font-weight-regular; line-height: @line-height-xl; } @@ -319,7 +321,7 @@ &__sender-name { display: flex; align-items: center; - font-size: 12px; + font-size: @font-size-small; font-weight: @font-weight-bold; .edit-icon { @@ -337,14 +339,14 @@ overflow: hidden; max-width: @conversation-message-max-width; margin-top: 4px; - font-size: 14px; + font-size: @font-size-medium; font-weight: @font-weight-light; text-overflow: ellipsis; white-space: nowrap; &__text { height: 17px; - line-height: 17px; + line-height: 1.0625rem; pre { margin: 0; @@ -379,7 +381,7 @@ } & + span { - font-size: 11px; + font-size: @font-size-xsmall; text-transform: uppercase; } } diff --git a/src/style/content/conversation/message-list.less b/src/style/content/conversation/message-list.less index fe3b677e89a..7704dbddd06 100644 --- a/src/style/content/conversation/message-list.less +++ b/src/style/content/conversation/message-list.less @@ -99,7 +99,7 @@ .text-medium; .mention-at-sign { - font-size: 14px; + font-size: @font-size-medium; } &.self-mention { @@ -176,7 +176,7 @@ min-width: 0; // fixes ellipsis not working with flexbox (FF) flex: 1; align-items: center; - font-size: 12px; + font-size: @font-size-small; font-weight: @font-weight-regular; white-space: normal; @@ -223,7 +223,7 @@ .message-header-label-icon { margin-left: 8px; - font-size: 8px; + font-size: @font-size-xxs; } .message-header-icon-guest, @@ -264,7 +264,7 @@ padding-top: 8px; // TODO margin top is not working because of collapsing margins border-bottom: 1px solid @separator-color; margin-bottom: 16px; - line-height: 40px; + line-height: 2.5rem; user-select: none; .message-header-icon { @@ -348,7 +348,7 @@ .text-large { font-size: 40px; - line-height: 40px; + line-height: 2.5rem; } .iframe-container { @@ -440,7 +440,7 @@ .message-footer-text { color: var(--gray-70); - font-size: 11px; + font-size: @font-size-xsmall; body.theme-dark & { color: var(--gray-60); @@ -623,7 +623,7 @@ .message-services-warning { color: @w-red; - font-size: 12px; + font-size: @font-size-small; font-weight: @font-weight-regular; } @@ -645,7 +645,7 @@ margin: 0; font-size: @font-size-lg; font-weight: normal; - line-height: 42px; + line-height: 2.625rem; text-align: center; word-break: break-all; } @@ -677,7 +677,7 @@ .message-member-footer { padding-top: 16px; margin-left: 72px; - font-size: 12px; + font-size: @font-size-small; font-weight: @font-weight-regular; } @@ -696,21 +696,21 @@ margin-top: 16px; background-color: @separator-color; cursor: pointer; - font-size: 14px; + font-size: @font-size-medium; font-weight: @font-weight-bold; - line-height: 16px; + line-height: @line-height-sm; } .message-member-footer-message { font-weight: @font-weight-regular; - line-height: 16px; + line-height: @line-height-sm; } .message-member-footer-description { margin-top: 8px; color: var(--background-fade-40); font-weight: @font-weight-regular; - line-height: 16px; + line-height: @line-height-sm; } // PING MESSAGE @@ -820,7 +820,7 @@ .message-header-decrypt-reset-session-action { height: 12px; - font-size: 11px; + font-size: @font-size-xsmall; } .message-header-decrypt-reset-session-spinner { diff --git a/src/style/content/conversation/message-quote.less b/src/style/content/conversation/message-quote.less index 6fa8e498837..8e16abe4fe2 100644 --- a/src/style/content/conversation/message-quote.less +++ b/src/style/content/conversation/message-quote.less @@ -3,7 +3,7 @@ padding-right: var(--conversation-message-timestamp-width); padding-left: @conversation-message-sender-width + 16; margin-bottom: 10px; - font-size: 14px; + font-size: @font-size-medium; line-height: 1.5em; &::before { @@ -27,7 +27,7 @@ &__sender { margin-bottom: 4px; cursor: pointer; - font-size: 12px; + font-size: @font-size-small; font-weight: @font-weight-bold; svg { @@ -53,7 +53,7 @@ } &--large { - font-size: 32px; + font-size: @font-size-xl; } &--full { @@ -71,7 +71,7 @@ display: block; color: @w-blue; cursor: pointer; - font-size: 12px; + font-size: @font-size-small; font-weight: @font-weight-regular; user-select: none; @@ -105,7 +105,7 @@ display: block; margin-top: 4px; cursor: pointer; - font-size: 12px; + font-size: @font-size-small; font-weight: @font-weight-regular; opacity: 0.4; diff --git a/src/style/content/conversation/title-bar.less b/src/style/content/conversation/title-bar.less index f4d3cc52dde..528a775be48 100644 --- a/src/style/content/conversation/title-bar.less +++ b/src/style/content/conversation/title-bar.less @@ -65,7 +65,7 @@ body.theme-dark { border-radius: 6px; background-color: var(--accent-color); box-shadow: 0 2px 16px 0 fade(#000, 8%); - font-size: 12px; + font-size: @font-size-small; font-weight: @font-weight-light; strong { diff --git a/src/style/content/history-export-import.less b/src/style/content/history-export-import.less index cb37e034f44..4590d6da9d8 100644 --- a/src/style/content/history-export-import.less +++ b/src/style/content/history-export-import.less @@ -20,9 +20,9 @@ margin-bottom: 56px; cursor: pointer; - font-size: 14px; + font-size: @font-size-medium; font-weight: @font-weight-regular; - line-height: 16px; + line-height: @line-height-sm; user-select: none; } @@ -46,16 +46,16 @@ &__headline { padding: 0; margin: 0; - font-size: 14px; + font-size: @font-size-medium; font-weight: @font-weight-bold; - line-height: 24px; + line-height: @line-height-lg; } &__info { margin: 8px 0 0; - font-size: 14px; + font-size: @font-size-medium; font-weight: @font-weight-regular; - line-height: 24px; + line-height: @line-height-lg; } &__buttons { diff --git a/src/style/content/preferences.less b/src/style/content/preferences.less index 5fea3c4b1b5..08df3a7fbe1 100644 --- a/src/style/content/preferences.less +++ b/src/style/content/preferences.less @@ -69,7 +69,7 @@ body.theme-dark { .preferences-detail { margin-top: 10px; font-size: @font-size-small; - line-height: 14px; + line-height: @line-height-xs; &-intended { margin-left: 2rem; diff --git a/src/style/content/preferences/account.less b/src/style/content/preferences/account.less index fe5dfbdd896..0d8de8519f7 100644 --- a/src/style/content/preferences/account.less +++ b/src/style/content/preferences/account.less @@ -104,7 +104,7 @@ .preferences-leave-disclaimer { margin-top: 16px; - font-size: 12px; + font-size: @font-size-small; font-weight: @font-weight-regular; line-height: initial; } diff --git a/src/style/content/preferences/av.less b/src/style/content/preferences/av.less index 86b9e1bda46..32ec7a77197 100644 --- a/src/style/content/preferences/av.less +++ b/src/style/content/preferences/av.less @@ -35,7 +35,7 @@ top: 17px !important; width: 48px; height: 48px; - line-height: 48px !important; + line-height: 3rem !important; } .preferences-av-meter { @@ -100,7 +100,7 @@ body.theme-dark { align-items: center; justify-content: center; background-color: var(--foreground-fade-16); - font-size: 12px; + font-size: @font-size-small; font-weight: 600; text-align: center; @@ -110,7 +110,7 @@ body.theme-dark { margin-top: 16px; background-color: @separator-color; cursor: pointer; - font-size: 14px; + font-size: @font-size-medium; font-weight: 600; } } diff --git a/src/style/content/preferences/devices.less b/src/style/content/preferences/devices.less index d3e8f9fa53e..56e486ce97a 100644 --- a/src/style/content/preferences/devices.less +++ b/src/style/content/preferences/devices.less @@ -93,7 +93,7 @@ .preferences-devices-id { font-size: @font-size-small; - line-height: 14px; + line-height: @line-height-xs; text-transform: uppercase; span:first-child { diff --git a/src/style/foundation/video-calling.less b/src/style/foundation/video-calling.less index efb154d3d37..a02461905cc 100644 --- a/src/style/foundation/video-calling.less +++ b/src/style/foundation/video-calling.less @@ -77,7 +77,7 @@ @media (max-height: @screen-height-sm) { height: 30px; - line-height: 12px; + line-height: 0.8rem; } &__info-bar { @@ -118,7 +118,7 @@ &__fit-info { width: 100%; color: #fff; - font-size: 11px; + font-size: @font-size-xsmall; font-weight: @font-weight-regular; text-align: center; text-transform: uppercase; @@ -175,7 +175,7 @@ left: 50%; margin: 0; color: var(--main-color); - font-size: 11px; + font-size: @font-size-xsmall; font-weight: @font-weight-regular; transform: translateX(-50%); white-space: nowrap; diff --git a/src/style/list/conversation-list-cell.less b/src/style/list/conversation-list-cell.less index ee2430faa2b..c67046e11df 100644 --- a/src/style/list/conversation-list-cell.less +++ b/src/style/list/conversation-list-cell.less @@ -187,7 +187,7 @@ body.theme-dark { } .conversation-list-cell-badge { - font-size: 12px; + font-size: @font-size-small; } .conversation-list-cell-context-menu { diff --git a/src/style/list/start-ui.less b/src/style/list/start-ui.less index 9918a33ae63..9bfebf98518 100644 --- a/src/style/list/start-ui.less +++ b/src/style/list/start-ui.less @@ -152,13 +152,13 @@ body.theme-dark { flex-shrink: 0; padding: 0; margin: 0; - font-size: 14px; + font-size: @font-size-medium; font-weight: @font-weight-regular; .left-list-item { height: 56px; min-height: 56px; - line-height: 56px; + line-height: 3.5rem; } .left-column { @@ -191,7 +191,7 @@ body.theme-dark { .text-light; margin-top: 72px; margin-bottom: 16px; - line-height: 24px; + line-height: @line-height-lg; text-align: center; white-space: pre; @@ -212,7 +212,7 @@ body.theme-dark { &__text { padding: 8px 40px; - font-size: 16px; + font-size: @font-size-base; font-weight: @font-weight-bold; text-align: center; } @@ -251,7 +251,7 @@ body.theme-dark .start-ui-list-header { background-color: var(--accent-color); color: var(--white); cursor: pointer; - line-height: 24px; + line-height: @line-height-lg; } .start-ui-import-icon { @@ -309,7 +309,7 @@ body.theme-dark .start-ui-list-header { &__info { max-width: 200px; margin-top: 16px; - font-size: 12px; + font-size: @font-size-small; font-weight: 600; text-align: center; } @@ -322,7 +322,7 @@ body.theme-dark .start-ui-list-header { margin-top: 16px; background-color: rgba(255, 255, 255, 0.24); cursor: pointer; - font-size: 14px; + font-size: @font-size-medium; font-weight: 600; &--alternate { @@ -349,7 +349,7 @@ body.theme-dark .start-ui-list-header { &__text { margin-top: 24px; - font-size: 12px; + font-size: @font-size-small; font-weight: @font-weight-bold; text-align: center; white-space: pre; @@ -367,7 +367,7 @@ body.theme-dark .start-ui-list-header { border: none; border-radius: 4px; background-color: rgba(186, 200, 209, 0.24); - font-size: 14px; + font-size: @font-size-medium; font-weight: @font-weight-bold; & + button { @@ -390,7 +390,7 @@ body.theme-dark .start-ui-list-header { &__text, &__link { color: #9fa1a2; - font-size: 12px; + font-size: @font-size-small; } &__link { diff --git a/src/style/list/temporary-guest.less b/src/style/list/temporary-guest.less index 3561a8c6a77..4ab609af971 100644 --- a/src/style/list/temporary-guest.less +++ b/src/style/list/temporary-guest.less @@ -21,15 +21,15 @@ &__description { margin: 24px 0; color: var(--foreground); - font-size: 24px; - line-height: 32px; + font-size: @font-size-xlarge; + line-height: @line-height-xl; } &__create-account { .button-reset-default; color: @w-blue; cursor: pointer; - font-size: 14px; + font-size: @font-size-medium; } &__footer { @@ -39,10 +39,10 @@ justify-content: space-between; padding: 0 16px 20px; color: var(--background); - font-size: 14px; + font-size: @font-size-medium; &__info-text { - line-height: 16px; + line-height: @line-height-sm; word-break: break-word; &__time { diff --git a/src/style/modal/invite-modal.less b/src/style/modal/invite-modal.less index bf55d9c9350..de5c1459d66 100644 --- a/src/style/modal/invite-modal.less +++ b/src/style/modal/invite-modal.less @@ -26,7 +26,7 @@ &__info { margin: 16px; - font-size: 12px; + font-size: @font-size-small; font-weight: 600; text-align: center; } diff --git a/src/style/modal/legal-hold-modal.less b/src/style/modal/legal-hold-modal.less index bafedb23660..a1fb244fb36 100644 --- a/src/style/modal/legal-hold-modal.less +++ b/src/style/modal/legal-hold-modal.less @@ -34,7 +34,7 @@ &__headline { margin: 32px 0; - font-size: 24px; + font-size: @font-size-xlarge; font-weight: @font-weight-bold; text-align: center; } @@ -50,12 +50,12 @@ &__subjects { margin-top: 32px; color: var(--background-fade-56); - font-size: 11px; + font-size: @font-size-xsmall; text-transform: uppercase; } &__loading-button { - line-height: 44px; + line-height: 2.75rem; svg path { fill: #fff; diff --git a/src/style/modal/service-modal.less b/src/style/modal/service-modal.less index 50b3e8bfe51..3600359d3b9 100644 --- a/src/style/modal/service-modal.less +++ b/src/style/modal/service-modal.less @@ -7,8 +7,8 @@ &__provider { margin-top: 4px; - font-size: 12px; - line-height: 16px; + font-size: @font-size-small; + line-height: @line-height-sm; opacity: 0.56; } &__body { diff --git a/src/style/panel/add-participants.less b/src/style/panel/add-participants.less index 5ed112ec516..86ff89df079 100644 --- a/src/style/panel/add-participants.less +++ b/src/style/panel/add-participants.less @@ -46,19 +46,19 @@ } &__service-name { - font-size: 24px; + font-size: @font-size-xlarge; font-weight: @font-weight-regular; } &__service-provider { color: var(--background-fade-40); - font-size: 12px; + font-size: @font-size-small; font-weight: @font-weight-regular; } &__service-description { padding: 16px; - font-size: 14px; + font-size: @font-size-medium; font-weight: @font-weight-light; } diff --git a/src/style/panel/guest-options.less b/src/style/panel/guest-options.less index f4ea781a410..e5ebe0059d3 100644 --- a/src/style/panel/guest-options.less +++ b/src/style/panel/guest-options.less @@ -54,7 +54,7 @@ &__link { min-height: 104px; padding: 16px; - font-size: 16px; - line-height: 24px; + font-size: @font-size-base; + line-height: @line-height-lg; } } diff --git a/src/style/panel/message-details.less b/src/style/panel/message-details.less index 47e8d7ef644..36c4461fa3c 100644 --- a/src/style/panel/message-details.less +++ b/src/style/panel/message-details.less @@ -28,7 +28,7 @@ align-items: center; justify-content: center; color: var(--background-fade-32); - font-size: 16px; + font-size: @font-size-base; font-weight: @font-weight-bold; &__icon { diff --git a/src/style/panel/panel.less b/src/style/panel/panel.less index b17914b3dda..eeb659ad6fb 100644 --- a/src/style/panel/panel.less +++ b/src/style/panel/panel.less @@ -433,7 +433,7 @@ &__info { margin: 2px 0; color: var(--background-fade-40); - font-size: 12px; + font-size: @font-size-small; font-weight: @font-weight-regular; text-align: center; } diff --git a/src/style/panel/participant-devices.less b/src/style/panel/participant-devices.less index 59532481402..bbb59556b9a 100644 --- a/src/style/panel/participant-devices.less +++ b/src/style/panel/participant-devices.less @@ -22,7 +22,7 @@ height: 72px; margin-bottom: 32px; font-family: monospace; - line-height: 22px; + line-height: 1.375rem; } &__header { @@ -38,7 +38,7 @@ margin: 8px 0; color: @w-blue; cursor: pointer; - font-size: 11px; + font-size: @font-size-xsmall; font-weight: @font-weight-bold; text-transform: uppercase; } @@ -68,7 +68,7 @@ } &__reset-session { - font-size: 11px; + font-size: @font-size-xsmall; text-transform: uppercase; } diff --git a/src/style/support.less b/src/style/support.less index 73ea120e158..5eea4a9184c 100644 --- a/src/style/support.less +++ b/src/style/support.less @@ -40,7 +40,7 @@ html { padding: 0; margin: 0; font-family: @font-family-base; - font-size: 16px; + font-size: @font-size-base; font-weight: 300; } @@ -80,7 +80,7 @@ p { .footer { margin-top: 96px; - font-size: 14px; + font-size: @font-size-medium; p { margin-bottom: 4px; diff --git a/yarn.lock b/yarn.lock index bb8298a9a1d..1abe442efc0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4365,14 +4365,14 @@ __metadata: languageName: node linkType: hard -"@wireapp/react-ui-kit@npm:9.0.2": - version: 9.0.2 - resolution: "@wireapp/react-ui-kit@npm:9.0.2" +"@wireapp/react-ui-kit@npm:9.0.12": + version: 9.0.12 + resolution: "@wireapp/react-ui-kit@npm:9.0.12" dependencies: "@types/color": 3.0.3 color: 4.2.3 emotion-normalize: 11.0.1 - react-select: 5.5.4 + react-select: 5.6.0 react-transition-group: 4.4.5 peerDependencies: "@emotion/react": 11.10.4 @@ -4382,7 +4382,7 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 04f96815be901dfb38cefeeb51ce2ea2d26f0899d1ff4bb533ac520e0aee2443f82984ce38c9a16e88638b2f343b6af4d6656a2bde321b3746f66540fb9b4fdf + checksum: 37bf430631892dea613fa94f2e8f887fe55b72e6eb31e6b51bfa3c6f5c10390aa519b15dc02c4604f8d2c2c3d5edbb7ad049cc98af65f11f59054a3156c54b87 languageName: node linkType: hard @@ -13698,9 +13698,9 @@ __metadata: languageName: node linkType: hard -"react-select@npm:5.5.4": - version: 5.5.4 - resolution: "react-select@npm:5.5.4" +"react-select@npm:5.6.0": + version: 5.6.0 + resolution: "react-select@npm:5.6.0" dependencies: "@babel/runtime": ^7.12.0 "@emotion/cache": ^11.4.0 @@ -13714,7 +13714,7 @@ __metadata: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 3870bef752f8242dd9fed6d3445da525623d2a022801e40999af597f36d416e5deb7db1ba690b4d5aff70d8a00b17ae9200c6001bfc7c6812c0e7b0f4de79454 + checksum: d0a51e618168f3f275fbf96e23eb88ac6066006bcca136e293327f6eddd0b419ef02aaa847bf1670c5f07c8e9d9fc4b975fcae833085e11fc41e29e2b802a75b languageName: node linkType: hard @@ -16529,7 +16529,7 @@ __metadata: "@wireapp/core": 37.2.0 "@wireapp/eslint-config": 2.1.0 "@wireapp/prettier-config": 0.5.2 - "@wireapp/react-ui-kit": 9.0.2 + "@wireapp/react-ui-kit": 9.0.12 "@wireapp/store-engine": ^5.0.3 "@wireapp/store-engine-dexie": 2.0.3 "@wireapp/store-engine-sqleet": 1.8.9 From d430e37e7a590251ef98f8bfe78f78927d9872ec Mon Sep 17 00:00:00 2001 From: Amir Ghezelbash Date: Thu, 24 Nov 2022 16:29:32 +0330 Subject: [PATCH 017/329] fix: Discard typing events after 1 minute (#14165) * fix: Discard typing events after 1 minute * change naming --- src/script/components/InputBar/InputBar.tsx | 4 ++-- .../TypingIndicator/TypingIndicator.state.tsx | 16 ++++++++++----- .../TypingIndicator/TypingIndicator.test.tsx | 20 +++++++++---------- .../InputBar/TypingIndicator/index.ts | 4 ++++ .../conversation/ConversationRepository.ts | 18 +++++++++++++---- 5 files changed, 41 insertions(+), 21 deletions(-) diff --git a/src/script/components/InputBar/InputBar.tsx b/src/script/components/InputBar/InputBar.tsx index 170f84e9fe9..16cd5e9a2a8 100644 --- a/src/script/components/InputBar/InputBar.tsx +++ b/src/script/components/InputBar/InputBar.tsx @@ -67,6 +67,7 @@ import {formatBytes, getSelectionPosition} from 'Util/util'; import {getRichTextInput} from './getRichTextInput'; import {PastedFileControls} from './PastedFileControls'; import {ReplyBar} from './ReplyBar'; +import {TYPING_TIMEOUT} from './TypingIndicator'; import {TypingIndicator} from './TypingIndicator/TypingIndicator'; import {AssetRepository} from '../../assets/AssetRepository'; @@ -91,7 +92,6 @@ import {UserState} from '../../user/UserState'; const CONFIG = { ...Config.getConfig(), PING_TIMEOUT: TIME_IN_MILLIS.SECOND * 2, - IS_TYPING_TIMEOUT: TIME_IN_MILLIS.SECOND * 10, }; const showWarningModal = (title: string, message: string): void => { @@ -409,7 +409,7 @@ const InputBar = ({ let timerId: number; if (inputValue.length > 0) { setIsTyping(true); - timerId = window.setTimeout(() => setIsTyping(false), CONFIG.IS_TYPING_TIMEOUT); + timerId = window.setTimeout(() => setIsTyping(false), TYPING_TIMEOUT); } else { setIsTyping(false); } diff --git a/src/script/components/InputBar/TypingIndicator/TypingIndicator.state.tsx b/src/script/components/InputBar/TypingIndicator/TypingIndicator.state.tsx index 9111e0b70d2..a1f75541f3b 100644 --- a/src/script/components/InputBar/TypingIndicator/TypingIndicator.state.tsx +++ b/src/script/components/InputBar/TypingIndicator/TypingIndicator.state.tsx @@ -24,19 +24,21 @@ import {User} from '../../../entity/User'; type TypingUser = { conversationId: string; user: User; + timerId: number; }; type TypingIndicatorState = { typingUsers: TypingUser[]; addTypingUser: (user: TypingUser) => void; - removeTypingUser: (user: TypingUser) => void; + removeTypingUser: (user: User, conversationId: string) => void; getTypingUsersInConversation: (conversationId: string) => User[]; clearTypingUsers: () => void; + getTypingUser: (user: User, conversationId: string) => TypingUser | undefined; }; const useTypingIndicatorState = create((set, get) => ({ typingUsers: [], - addTypingUser: ({conversationId, user}) => + addTypingUser: ({conversationId, user, timerId}) => set(state => { if ( state.typingUsers.find( @@ -45,12 +47,16 @@ const useTypingIndicatorState = create((set, get) => ({ ) { return state; } - return {typingUsers: [...state.typingUsers, {conversationId, user}]}; + return {typingUsers: [...state.typingUsers, {conversationId, user, timerId}]}; }), - removeTypingUser: ({conversationId, user: {id}}) => + getTypingUser: (user, conversationId) => + get().typingUsers.find( + typingUser => typingUser.conversationId === conversationId && typingUser.user.id === user.id, + ), + removeTypingUser: (user, conversationId) => set(state => ({ typingUsers: state.typingUsers.filter( - typingUser => !(typingUser.conversationId === conversationId && typingUser.user.id === id), + typingUser => !(typingUser.conversationId === conversationId && typingUser.user.id === user.id), ), })), getTypingUsersInConversation: conversationId => diff --git a/src/script/components/InputBar/TypingIndicator/TypingIndicator.test.tsx b/src/script/components/InputBar/TypingIndicator/TypingIndicator.test.tsx index eb5640e4a85..a7522a0cfea 100644 --- a/src/script/components/InputBar/TypingIndicator/TypingIndicator.test.tsx +++ b/src/script/components/InputBar/TypingIndicator/TypingIndicator.test.tsx @@ -50,9 +50,9 @@ describe('TypingIndicator', () => { const {addTypingUser} = useTypingIndicatorState.getState(); - addTypingUser({conversationId: 'test-conversation-id', user: new User('test-id-1')}); - addTypingUser({conversationId: 'test-conversation-id', user: new User('test-id-2')}); - addTypingUser({conversationId: 'test-conversation-id', user: new User('test-id-3')}); + addTypingUser({conversationId: 'test-conversation-id', user: new User('test-id-1'), timerId: 0}); + addTypingUser({conversationId: 'test-conversation-id', user: new User('test-id-2'), timerId: 0}); + addTypingUser({conversationId: 'test-conversation-id', user: new User('test-id-3'), timerId: 0}); const {container} = render(); @@ -71,9 +71,9 @@ describe('TypingIndicator', () => { const {addTypingUser} = useTypingIndicatorState.getState(); act(() => { - addTypingUser({conversationId: 'test-conversation-id', user: new User('test-id-1')}); - addTypingUser({conversationId: 'test-conversation-id', user: new User('test-id-2')}); - addTypingUser({conversationId: 'test-conversation-id', user: new User('test-id-3')}); + addTypingUser({conversationId: 'test-conversation-id', user: new User('test-id-1'), timerId: 0}); + addTypingUser({conversationId: 'test-conversation-id', user: new User('test-id-2'), timerId: 0}); + addTypingUser({conversationId: 'test-conversation-id', user: new User('test-id-3'), timerId: 0}); }); expect(container.querySelectorAll('[data-uie-name="element-avatar-user"]').length).toBe(3); @@ -91,15 +91,15 @@ describe('TypingIndicator', () => { const {addTypingUser, removeTypingUser} = useTypingIndicatorState.getState(); act(() => { - addTypingUser({conversationId: 'test-conversation-id', user: new User('test-id-1')}); - addTypingUser({conversationId: 'test-conversation-id', user: new User('test-id-2')}); - addTypingUser({conversationId: 'test-conversation-id', user: new User('test-id-3')}); + addTypingUser({conversationId: 'test-conversation-id', user: new User('test-id-1'), timerId: 0}); + addTypingUser({conversationId: 'test-conversation-id', user: new User('test-id-2'), timerId: 0}); + addTypingUser({conversationId: 'test-conversation-id', user: new User('test-id-3'), timerId: 0}); }); expect(container.querySelectorAll('[data-uie-name="element-avatar-user"]').length).toBe(3); act(() => { - removeTypingUser({conversationId: 'test-conversation-id', user: new User('test-id-3')}); + removeTypingUser(new User('test-id-3'), 'test-conversation-id'); }); expect(container.querySelectorAll('[data-uie-name="element-avatar-user"]').length).toBe(2); diff --git a/src/script/components/InputBar/TypingIndicator/index.ts b/src/script/components/InputBar/TypingIndicator/index.ts index 8189de7dbbc..3154396ef02 100644 --- a/src/script/components/InputBar/TypingIndicator/index.ts +++ b/src/script/components/InputBar/TypingIndicator/index.ts @@ -17,6 +17,10 @@ * */ +import {TIME_IN_MILLIS} from 'Util/TimeUtil'; + export * from './TypingIndicator'; export {useTypingIndicatorState} from './TypingIndicator.state'; + +export const TYPING_TIMEOUT = TIME_IN_MILLIS.SECOND * 10; diff --git a/src/script/conversation/ConversationRepository.ts b/src/script/conversation/ConversationRepository.ts index 3441da092c0..6cb458003cf 100644 --- a/src/script/conversation/ConversationRepository.ts +++ b/src/script/conversation/ConversationRepository.ts @@ -49,7 +49,7 @@ import {flatten} from 'underscore'; import {Asset as ProtobufAsset, Confirmation, LegalHoldStatus} from '@wireapp/protocol-messaging'; import {WebAppEvents} from '@wireapp/webapp-events'; -import {useTypingIndicatorState} from 'Components/InputBar/TypingIndicator'; +import {TYPING_TIMEOUT, useTypingIndicatorState} from 'Components/InputBar/TypingIndicator'; import {getNextItem} from 'Util/ArrayUtil'; import {allowsAllFiles, getFileExtensionOrName, isAllowedFile} from 'Util/FileTypeUtil'; import {replaceLink, t} from 'Util/LocalizerUtil'; @@ -2849,15 +2849,25 @@ export class ConversationRepository { } const conversationId = conversationEntity.id; - const {addTypingUser, removeTypingUser} = useTypingIndicatorState.getState(); - const typingUser = {conversationId, user: qualifiedUser}; + const {addTypingUser, getTypingUser, removeTypingUser} = useTypingIndicatorState.getState(); + + const oldUser = getTypingUser(qualifiedUser, conversationId); + if (oldUser) { + window.clearTimeout(oldUser.timerId); + } if (eventJson.data.status === CONVERSATION_TYPING.STARTED) { + const timerId = window.setTimeout(() => { + removeTypingUser(qualifiedUser, conversationId); + }, TYPING_TIMEOUT * 6); // 10000 * 6 => 1 minute + + const typingUser = {conversationId, user: qualifiedUser, timerId}; + addTypingUser(typingUser); } if (eventJson.data.status === CONVERSATION_TYPING.STOPPED) { - removeTypingUser(typingUser); + removeTypingUser(qualifiedUser, conversationId); } return {conversationEntity}; From 233c4b7565203783a97077f1360ef3aecff98239 Mon Sep 17 00:00:00 2001 From: Thomas Belin Date: Thu, 24 Nov 2022 16:16:36 +0100 Subject: [PATCH 018/329] chore: Upgrade @wireapp/core to improve mapping (#14167) --- package.json | 2 +- src/script/auth/module/action/WebSocketAction.ts | 4 ++-- src/script/calling/CallingRepository.ts | 4 ++-- src/script/conversation/MessageRepository.test.ts | 6 +++--- src/script/conversation/MessageRepository.ts | 14 +++++++------- src/script/event/EventRepository.ts | 5 ++--- src/script/event/EventSource.ts | 6 +++--- yarn.lock | 10 +++++----- 8 files changed, 25 insertions(+), 26 deletions(-) diff --git a/package.json b/package.json index 184daa09be0..c5c62fbd02e 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "@types/eslint": "^8.4.10", "@wireapp/antiscroll-2": "1.3.1", "@wireapp/avs": "8.2.17", - "@wireapp/core": "37.2.0", + "@wireapp/core": "37.2.1", "@wireapp/react-ui-kit": "9.0.12", "@wireapp/store-engine-dexie": "2.0.3", "@wireapp/store-engine-sqleet": "1.8.9", diff --git a/src/script/auth/module/action/WebSocketAction.ts b/src/script/auth/module/action/WebSocketAction.ts index c6d0b17c68c..6ac35cba8ae 100644 --- a/src/script/auth/module/action/WebSocketAction.ts +++ b/src/script/auth/module/action/WebSocketAction.ts @@ -17,7 +17,7 @@ * */ -import * as Events from '@wireapp/api-client/lib/event/'; +import {USER_EVENT} from '@wireapp/api-client/lib/event/'; import {ConnectionState, HttpClient} from '@wireapp/api-client/lib/http/'; import {PayloadBundle, PayloadBundleType} from '@wireapp/core/lib/conversation/'; import type {UserUpdateMessage} from '@wireapp/core/lib/conversation/message/UserMessage'; @@ -47,7 +47,7 @@ export class WebSocketAction { let data: PayloadBundle | void; try { switch (event.type) { - case Events.USER_EVENT.UPDATE: { + case USER_EVENT.UPDATE: { data = UserMapper.mapUserEvent(event, apiClient.context!.userId, source); } // Note: We do not want to update the last message timestamp diff --git a/src/script/calling/CallingRepository.ts b/src/script/calling/CallingRepository.ts index b55ccadd91a..2e6554979b0 100644 --- a/src/script/calling/CallingRepository.ts +++ b/src/script/calling/CallingRepository.ts @@ -21,7 +21,7 @@ import type {CallConfigData} from '@wireapp/api-client/lib/account/CallConfigDat import type {QualifiedUserClients, UserClients} from '@wireapp/api-client/lib/conversation'; import type {QualifiedId} from '@wireapp/api-client/lib/user'; import type {WebappProperties} from '@wireapp/api-client/lib/user/data'; -import {PayloadBundleState} from '@wireapp/core/lib/conversation'; +import {MessageSendingState} from '@wireapp/core/lib/conversation'; import {flattenQualifiedUserClients, flattenUserClients} from '@wireapp/core/lib/conversation/message/UserClientsUtil'; import {isQualifiedUserClients} from '@wireapp/core/lib/util'; import {amplify} from 'amplify'; @@ -1117,7 +1117,7 @@ export class CallingRepository { } const message = await this.messageRepository.sendCallingMessage(conversation, content, options); - if (message.state === PayloadBundleState.CANCELLED) { + if (message.state === MessageSendingState.CANCELLED) { // If the user has cancelled message sending because of a degradation warning, we abort the call this.abortCall( conversationId, diff --git a/src/script/conversation/MessageRepository.test.ts b/src/script/conversation/MessageRepository.test.ts index a56e2a741ad..eaf1a022fbc 100644 --- a/src/script/conversation/MessageRepository.test.ts +++ b/src/script/conversation/MessageRepository.test.ts @@ -20,7 +20,7 @@ import {ConnectionStatus} from '@wireapp/api-client/lib/connection/'; import {CONVERSATION_TYPE} from '@wireapp/api-client/lib/conversation/'; import {ConversationProtocol} from '@wireapp/api-client/lib/conversation/NewConversation'; -import {PayloadBundleState} from '@wireapp/core/lib/conversation'; +import {MessageSendingState} from '@wireapp/core/lib/conversation'; import {container} from 'tsyringe'; import {LegalHoldStatus} from '@wireapp/protocol-messaging'; @@ -128,7 +128,7 @@ describe('MessageRepository', () => { const successPayload = { sentAt: new Date().toISOString(), id: createRandomUuid(), - state: PayloadBundleState.OUTGOING_SENT, + state: MessageSendingState.OUTGOING_SENT, }; describe('sendPing', () => { @@ -207,7 +207,7 @@ describe('MessageRepository', () => { conversation.addMessage(msgToDelete); const [messageRepository, {core}] = await buildMessageRepository(); spyOn(core.service!.conversation, 'send').and.returnValue( - Promise.resolve({state: PayloadBundleState.OUTGOING_SENT, sentAt: new Date().toISOString()}), + Promise.resolve({state: MessageSendingState.OUTGOING_SENT, sentAt: new Date().toISOString()}), ); await expect(messageRepository.deleteMessageForEveryone(conversation, msgToDelete)).rejects.toMatchObject({ diff --git a/src/script/conversation/MessageRepository.ts b/src/script/conversation/MessageRepository.ts index 1ae8fb3b0e2..9d5a4d408f8 100644 --- a/src/script/conversation/MessageRepository.ts +++ b/src/script/conversation/MessageRepository.ts @@ -25,7 +25,7 @@ import { UserClients, } from '@wireapp/api-client/lib/conversation'; import {QualifiedId, RequestCancellationError, User as APIClientUser} from '@wireapp/api-client/lib/user'; -import {MessageTargetMode, PayloadBundleState, ReactionType} from '@wireapp/core/lib/conversation'; +import {MessageSendingState, MessageTargetMode, ReactionType} from '@wireapp/core/lib/conversation'; import { AudioMetaData, EditedTextContent, @@ -336,7 +336,7 @@ export class MessageRepository { quote: quoteEntity, }; const {state} = await this.sendText(textPayload); - if (state !== PayloadBundleState.CANCELLED) { + if (state !== MessageSendingState.CANCELLED) { await this.handleLinkPreview(textPayload); } } @@ -375,7 +375,7 @@ export class MessageRepository { originalMessageId: originalMessage.id, }; const {state} = await this.sendEdit(messagePayload); - if (state !== PayloadBundleState.CANCELLED) { + if (state !== MessageSendingState.CANCELLED) { await this.handleLinkPreview(messagePayload); } } @@ -472,7 +472,7 @@ export class MessageRepository { ): Promise { const uploadStarted = Date.now(); const {id, state} = await this.sendAssetMetadata(conversation, file, asImage); - if (state === PayloadBundleState.CANCELLED) { + if (state === MessageSendingState.CANCELLED) { throw new ConversationError( ConversationError.TYPE.DEGRADED_CONVERSATION_CANCELLATION, ConversationError.MESSAGE.DEGRADED_CONVERSATION_CANCELLATION, @@ -754,12 +754,12 @@ export class MessageRepository { const shouldProceedSending = await injectOptimisticEvent(); if (shouldProceedSending === false) { - return {id: payload.messageId, state: PayloadBundleState.CANCELLED}; + return {id: payload.messageId, state: MessageSendingState.CANCELLED}; } const result = await this.conversationService.send(sendOptions); - if (result.state === PayloadBundleState.OUTGOING_SENT) { + if (result.state === MessageSendingState.OUTGOING_SENT) { handleSuccess(result.sentAt); } return result; @@ -875,7 +875,7 @@ export class MessageRepository { targetMode: MessageTargetMode.USERS, }; const {state} = await this.sendAndInjectMessage(confirmationMessage, conversationEntity, sendingOptions); - if (state === PayloadBundleState.CANCELLED) { + if (state === MessageSendingState.CANCELLED) { this.sendAndInjectMessage(confirmationMessage, conversationEntity, { ...sendingOptions, // If the message was auto cancelled because of a mismatch, we will force sending the message only to the clients we know of (ignoring unverified clients) diff --git a/src/script/event/EventRepository.ts b/src/script/event/EventRepository.ts index b09369676ae..f968f029879 100644 --- a/src/script/event/EventRepository.ts +++ b/src/script/event/EventRepository.ts @@ -18,8 +18,7 @@ */ import {CONVERSATION_EVENT, USER_EVENT} from '@wireapp/api-client/lib/event/'; -import {PayloadBundleSource} from '@wireapp/core/lib/conversation'; -import {HandledEventPayload} from '@wireapp/core/lib/notification'; +import {NotificationSource, HandledEventPayload} from '@wireapp/core/lib/notification'; import {amplify} from 'amplify'; import ko from 'knockout'; import {container} from 'tsyringe'; @@ -158,7 +157,7 @@ export class EventRepository { } }; - private readonly handleIncomingEvent = async (payload: HandledEventPayload, source: PayloadBundleSource) => { + private readonly handleIncomingEvent = async (payload: HandledEventPayload, source: NotificationSource) => { try { await this.handleEvent({...payload, event: payload.event as EventRecord}, source); } catch (error) { diff --git a/src/script/event/EventSource.ts b/src/script/event/EventSource.ts index 64bbbecad0d..2ab40544a6c 100644 --- a/src/script/event/EventSource.ts +++ b/src/script/event/EventSource.ts @@ -17,12 +17,12 @@ * */ -import {PayloadBundleSource} from '@wireapp/core/lib/conversation'; +import {NotificationSource} from '@wireapp/core/lib/notification'; enum WebAppEventSource { BACKEND_RESPONSE = 'backend_response', INJECTED = 'injected', } -export type EventSource = PayloadBundleSource | WebAppEventSource; -export const EventSource = {...WebAppEventSource, ...PayloadBundleSource}; +export type EventSource = NotificationSource | WebAppEventSource; +export const EventSource = {...WebAppEventSource, ...NotificationSource}; diff --git a/yarn.lock b/yarn.lock index 1abe442efc0..008b9fe7476 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4235,9 +4235,9 @@ __metadata: languageName: node linkType: hard -"@wireapp/core@npm:37.2.0": - version: 37.2.0 - resolution: "@wireapp/core@npm:37.2.0" +"@wireapp/core@npm:37.2.1": + version: 37.2.1 + resolution: "@wireapp/core@npm:37.2.1" dependencies: "@wireapp/api-client": ^22.7.0 "@wireapp/commons": ^5.0.3 @@ -4254,7 +4254,7 @@ __metadata: logdown: 3.3.1 long: ^5.2.0 uuidjs: 4.2.12 - checksum: 5c8c01424e2bbca84e7951e9de0209e6c2fc88603edf92f3e420a4daa750d0e6ee988ffc841f691e739aa74620c4fcd25b5a11e5a9de638effd5a9b02ae5b583 + checksum: 070d02030dde19bdd626d4451fe23d6dc6bcc5017660a466841cd8c101587fea71ab0a94a037bd4a0fce65940c8b488514e19060a15f41b3794a9a5aef31dfc6 languageName: node linkType: hard @@ -16526,7 +16526,7 @@ __metadata: "@wireapp/antiscroll-2": 1.3.1 "@wireapp/avs": 8.2.17 "@wireapp/copy-config": 2.0.3 - "@wireapp/core": 37.2.0 + "@wireapp/core": 37.2.1 "@wireapp/eslint-config": 2.1.0 "@wireapp/prettier-config": 0.5.2 "@wireapp/react-ui-kit": 9.0.12 From 35e4515a7a33db89477a01b1e364a3e6fb335a58 Mon Sep 17 00:00:00 2001 From: Thomas Belin Date: Thu, 24 Nov 2022 16:42:00 +0100 Subject: [PATCH 019/329] runfix: Update window title live as unread conversations change (#14168) --- src/script/conversation/ConversationState.ts | 4 ++++ src/script/page/useWindowTitle.ts | 5 ++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/script/conversation/ConversationState.ts b/src/script/conversation/ConversationState.ts index 2a6afb85ca8..cf5682cd633 100644 --- a/src/script/conversation/ConversationState.ts +++ b/src/script/conversation/ConversationState.ts @@ -50,6 +50,7 @@ export class ConversationState { public readonly archivedConversations: ko.PureComputed; private readonly selfProteusConversation: ko.PureComputed; private readonly selfMLSConversation: ko.PureComputed; + public readonly unreadConversations: ko.PureComputed; public readonly connectedUsers: ko.PureComputed; public readonly sortedConversations: ko.PureComputed; @@ -71,6 +72,9 @@ export class ConversationState { conversation => !conversation.is_cleared() && !conversation.is_archived(), ); }); + this.unreadConversations = ko.pureComputed(() => { + return this.visibleConversations().filter(conversationEntity => conversationEntity.hasUnread()); + }); this.archivedConversations = ko.pureComputed(() => { return this.sortedConversations().filter(conversation => conversation.is_archived()); diff --git a/src/script/page/useWindowTitle.ts b/src/script/page/useWindowTitle.ts index 6567de0a36f..0eac61cc52a 100644 --- a/src/script/page/useWindowTitle.ts +++ b/src/script/page/useWindowTitle.ts @@ -49,11 +49,10 @@ export const useWindowTitle = () => { const [updateWindowTitle, setUpdateWindowTitle] = useState(false); const {connectRequests: connectionRequests} = useKoSubscribableChildren(userState, ['connectRequests']); - const {activeConversation, visibleConversations} = useKoSubscribableChildren(conversationState, [ + const {activeConversation, unreadConversations} = useKoSubscribableChildren(conversationState, [ 'activeConversation', - 'visibleConversations', + 'unreadConversations', ]); - const unreadConversations = visibleConversations.filter(conversationEntity => conversationEntity.hasUnread()); const updateFavicon = useCallback( (unreadCount: number) => { From 55b091b0be7be6544a37e30fb7a217252079b8ec Mon Sep 17 00:00:00 2001 From: Sebastian Willenborg Date: Mon, 28 Nov 2022 09:12:18 +0100 Subject: [PATCH 020/329] fix: use correct type for InternalErrorRoute (#14172) --- server/routes/error/ErrorRoutes.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/routes/error/ErrorRoutes.ts b/server/routes/error/ErrorRoutes.ts index f68b1d86a4b..47a9bf3377a 100644 --- a/server/routes/error/ErrorRoutes.ts +++ b/server/routes/error/ErrorRoutes.ts @@ -30,7 +30,7 @@ const logger = logdown('@wireapp/wire-webapp/routes/error/errorRoutes', { markdown: false, }); -const InternalErrorRoute = (): express.ErrorRequestHandler => (err, req, res) => { +const InternalErrorRoute = (): express.ErrorRequestHandler => (err, req, res, next) => { logger.error(`[${formatDate()}] ${err.stack}`); const error = { code: HTTP_STATUS.INTERNAL_SERVER_ERROR, From cbfe006937cfb8a78c9ae0b3c5e3276fee207caa Mon Sep 17 00:00:00 2001 From: Virgile <78490891+V-Gira@users.noreply.github.com> Date: Mon, 28 Nov 2022 12:05:24 +0100 Subject: [PATCH 021/329] runfix: prevent overlapping added users (#14174) --- src/script/components/SearchInput.tsx | 6 +++++- src/style/components/search-input.less | 1 - 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/script/components/SearchInput.tsx b/src/script/components/SearchInput.tsx index 37ba190f4fb..c89653dade0 100644 --- a/src/script/components/SearchInput.tsx +++ b/src/script/components/SearchInput.tsx @@ -67,7 +67,11 @@ const SearchInput: React.FC = ({ const placeHolderText = emptyInput && noSelectedUsers ? placeholder : ''; return ( - +
    diff --git a/src/style/components/search-input.less b/src/style/components/search-input.less index d3a88bd4d74..59a45e0f681 100644 --- a/src/style/components/search-input.less +++ b/src/style/components/search-input.less @@ -19,7 +19,6 @@ .search-outer { overflow: hidden; - min-height: 48px; padding: 0 12px; } From e74038efa0262a213af5f553983f123f2f124a27 Mon Sep 17 00:00:00 2001 From: Thomas Belin Date: Mon, 28 Nov 2022 16:51:00 +0100 Subject: [PATCH 022/329] runfix: Avoid setting fixed height to images (#14176) --- .../MessagesList/Message/ContentMessage/asset/ImageAsset.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/script/components/MessagesList/Message/ContentMessage/asset/ImageAsset.tsx b/src/script/components/MessagesList/Message/ContentMessage/asset/ImageAsset.tsx index a33571695bb..9c8aefeffae 100644 --- a/src/script/components/MessagesList/Message/ContentMessage/asset/ImageAsset.tsx +++ b/src/script/components/MessagesList/Message/ContentMessage/asset/ImageAsset.tsx @@ -93,7 +93,6 @@ const ImageAsset: React.FC = ({asset, message, onClick, teamSta maxWidth: '100%', width: asset.width, maxHeight: '80vh', - height: asset.height, }; return ( From fdafd2af2a5ff57b88121ea1a4073253ad87437f Mon Sep 17 00:00:00 2001 From: Timothy LeBon Date: Mon, 28 Nov 2022 17:04:36 +0100 Subject: [PATCH 023/329] runfix: use length for sidebar state instead of at for backcompat (#14177) --- src/script/components/InputBar/InputBar.tsx | 3 ++- src/script/page/AppMain.tsx | 2 +- src/script/page/RightSidebar/RightSidebar.tsx | 3 ++- src/script/page/state.ts | 3 ++- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/script/components/InputBar/InputBar.tsx b/src/script/components/InputBar/InputBar.tsx index 16cd5e9a2a8..8266f7cf8b9 100644 --- a/src/script/components/InputBar/InputBar.tsx +++ b/src/script/components/InputBar/InputBar.tsx @@ -177,7 +177,8 @@ const InputBar = ({ const [editedMention, setEditedMention] = useState<{startIndex: number; term: string} | undefined>(undefined); const {rightSidebar} = useAppMainState.getState(); - const currentState = rightSidebar.history.at(-1); + const lastItem = rightSidebar.history.length - 1; + const currentState = rightSidebar.history[lastItem]; const isRightSidebarOpen = !!currentState; const availabilityIsNone = availability === Availability.Type.NONE; diff --git a/src/script/page/AppMain.tsx b/src/script/page/AppMain.tsx index 09048149b1d..74accdb0114 100644 --- a/src/script/page/AppMain.tsx +++ b/src/script/page/AppMain.tsx @@ -95,7 +95,7 @@ const AppMain: FC = ({ const {isActivatedAccount} = useKoSubscribableChildren(userState, ['isActivatedAccount']); const {history, entity: currentEntity, close: closeRightSidebar, goTo} = useAppMainState(state => state.rightSidebar); - const currentState = history.at(-1); + const currentState = history[history.length - 1]; const toggleRightSidebar = (panelState: PanelState, params: RightSidebarParams, compareEntityId = false) => { const isDifferentState = currentState !== panelState; diff --git a/src/script/page/RightSidebar/RightSidebar.tsx b/src/script/page/RightSidebar/RightSidebar.tsx index 5dba6ccc490..cd06e5f6f2a 100644 --- a/src/script/page/RightSidebar/RightSidebar.tsx +++ b/src/script/page/RightSidebar/RightSidebar.tsx @@ -113,7 +113,8 @@ const RightSidebar: FC = ({ const [animatePanelToLeft, setAnimatePanelToLeft] = useState(true); const {rightSidebar} = useAppMainState.getState(); - const currentState = rightSidebar.history.at(-1); + const lastItem = rightSidebar.history.length - 1; + const currentState = rightSidebar.history[lastItem]; const userEntity = currentEntity && isUserEntity(currentEntity) ? currentEntity : null; const userServiceEntity = currentEntity && isUserServiceEntity(currentEntity) ? currentEntity : null; diff --git a/src/script/page/state.ts b/src/script/page/state.ts index 7e7652d7aba..4c97f77fd4e 100644 --- a/src/script/page/state.ts +++ b/src/script/page/state.ts @@ -80,7 +80,8 @@ const useAppMainState = create((set, get) => ({ goTo: (panel: PanelState, params: RightSidebarParams) => { return set(state => { const {rightSidebar} = state; - const previousState = rightSidebar.history.at(-1); + const lastItem = rightSidebar.history.length - 1; + const previousState = rightSidebar.history[lastItem]; const replacedNewState = previousState === panel ? rightSidebar.history.slice(0, -1) : rightSidebar.history; return { From cce972e13d80d4e5f5f4b66cc9f3ebcabd1b46d8 Mon Sep 17 00:00:00 2001 From: Virgile <78490891+V-Gira@users.noreply.github.com> Date: Mon, 28 Nov 2022 17:34:38 +0100 Subject: [PATCH 024/329] runfix: show typing indicator on different input bar height (#14178) --- .../InputBar/TypingIndicator/TypingIndicator.styles.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/script/components/InputBar/TypingIndicator/TypingIndicator.styles.ts b/src/script/components/InputBar/TypingIndicator/TypingIndicator.styles.ts index 67c02561f41..2392d566460 100644 --- a/src/script/components/InputBar/TypingIndicator/TypingIndicator.styles.ts +++ b/src/script/components/InputBar/TypingIndicator/TypingIndicator.styles.ts @@ -30,7 +30,7 @@ export const wrapperStyles: CSSObject = { backgroundColor: 'var(--app-bg)', padding: 5, position: 'absolute', - bottom: 56, + top: -26, borderTopLeftRadius: 4, borderTopRightRadius: 4, }; From 2d7cf292e99cc635737b8f315bf4e599ab4f024c Mon Sep 17 00:00:00 2001 From: Otto the Bot Date: Tue, 29 Nov 2022 10:27:34 +0100 Subject: [PATCH 025/329] chore: Update translations (#14173) --- src/i18n/pt-BR.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/i18n/pt-BR.json b/src/i18n/pt-BR.json index 8f53b550534..2761f4a42b1 100644 --- a/src/i18n/pt-BR.json +++ b/src/i18n/pt-BR.json @@ -654,8 +654,8 @@ "login.subhead": "Digite seu endereço de e-mail ou nome de usuário.", "login.twoFactorLoginSubHead": "Por favor, verifique no seu e-mail {email} o código de verificação e insira-o abaixo.", "login.twoFactorLoginTitle": "Verifique sua conta", - "mediaBtnPause": "Pause", - "mediaBtnPlay": "Play", + "mediaBtnPause": "Pausar", + "mediaBtnPlay": "Reproduzir", "messageDetailsEdited": "Editado: {{edited}}", "messageDetailsNoLikes": "Ninguém curtiu esta mensagem ainda.", "messageDetailsNoReceipts": "Ninguém leu esta mensagem ainda.", From 6df9170ffce98f516b754ddc55829a485104580a Mon Sep 17 00:00:00 2001 From: Thomas Belin Date: Tue, 29 Nov 2022 15:54:02 +0100 Subject: [PATCH 026/329] runfix: Avoid sending legal hold update to self conversations (#14182) --- src/script/conversation/ConversationState.ts | 5 ++++- src/script/entity/Conversation.ts | 3 ++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/script/conversation/ConversationState.ts b/src/script/conversation/ConversationState.ts index cf5682cd633..60be4b59430 100644 --- a/src/script/conversation/ConversationState.ts +++ b/src/script/conversation/ConversationState.ts @@ -89,7 +89,10 @@ export class ConversationState { ConnectionStatus.PENDING, ]; - if (conversationEntity.isSelf() || states_to_filter.includes(conversationEntity.connection().status())) { + if ( + isSelfConversation(conversationEntity) || + states_to_filter.includes(conversationEntity.connection().status()) + ) { return false; } diff --git a/src/script/entity/Conversation.ts b/src/script/entity/Conversation.ts index 08b4e2f02d4..c798e22be59 100644 --- a/src/script/entity/Conversation.ts +++ b/src/script/entity/Conversation.ts @@ -54,6 +54,7 @@ import {Config} from '../Config'; import {ConnectionEntity} from '../connection/ConnectionEntity'; import {ACCESS_STATE} from '../conversation/AccessState'; import {ConversationRepository} from '../conversation/ConversationRepository'; +import {isSelfConversation} from '../conversation/ConversationSelectors'; import {ConversationStatus} from '../conversation/ConversationStatus'; import {ConversationVerificationState} from '../conversation/ConversationVerificationState'; import {NOTIFICATION_STATE} from '../conversation/NotificationSetting'; @@ -345,7 +346,7 @@ export class Conversation { this.blockLegalHoldMessage = false; this.legalHoldStatus.subscribe(legalHoldStatus => { - if (!this.blockLegalHoldMessage && this.hasInitializedUsers()) { + if (!this.blockLegalHoldMessage && !isSelfConversation(this) && this.hasInitializedUsers()) { amplify.publish(WebAppEvents.CONVERSATION.INJECT_LEGAL_HOLD_MESSAGE, { conversationEntity: this, legalHoldStatus, From 3061d8bfc548a9168c8db267c3a66967474259fa Mon Sep 17 00:00:00 2001 From: Virgile <78490891+V-Gira@users.noreply.github.com> Date: Wed, 30 Nov 2022 09:55:27 +0100 Subject: [PATCH 027/329] chore: update localization strings (#14184) --- src/i18n/en-US.json | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/i18n/en-US.json b/src/i18n/en-US.json index 32a841849e5..bc37154a267 100644 --- a/src/i18n/en-US.json +++ b/src/i18n/en-US.json @@ -266,7 +266,7 @@ "connectionRequestConnect": "Connect", "connectionRequestIgnore": "Ignore", "conversationAssetDownloading": "Downloading…", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "Upload Failed", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "Ok", "modalAcknowledgeHeadline": "Something went wrong", "modalAppLockForgotGoBackButton": "Go back", - "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passphrase. If you have forgotten your passphrase, you can reset this client.", - "modalAppLockForgotTitle": "Forgot your app lock passphrase?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Reset this client", - "modalAppLockLockedError": "Wrong passphrase", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Access as new device", "modalAppLockLockedTitle": "Enter passcode to unlock {{brandName}}", "modalAppLockLockedUnlockButton": "Unlock", "modalAppLockPasscode": "Passcode", - "modalAppLockSetupAcceptButton": "Set passphrase", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Your organization needs to lock your app when {{brandName}} is not in use to keep the team safe.[br]Create a passlock to unlock {{brandName}}. Please, remember it, as it can not be recovered.", "modalAppLockSetupChangeTitle": "There was a change at {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "A digit", "modalAppLockSetupLong": "At least {{minPasswordLength}} characters long", "modalAppLockSetupLower": "A lowercase letter", - "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passphrase.[br]Make sure to remember this passphrase as there is no way to recover it.", - "modalAppLockSetupSecondPlaceholder": "Repeat passphrase", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "A special character", - "modalAppLockSetupTitle": "Set app lock passphrase", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "An uppercase letter", "modalAppLockWipeConfirmConfirmButton": "Reset this client", "modalAppLockWipeConfirmGoBackButton": "Go back", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "Privacy", "preferencesAccountReadReceiptsCheckbox": "Read receipts", "preferencesAccountReadReceiptsDetail": "When this is off, you won’t be able to see read receipts from other people. This setting does not apply to group conversations.", - "preferencesAccountResetAppLockPassphrase": "Reset app lock passphrase", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "Reset password", - "preferencesAccountSetAppLockPassphrase": "Set app lock passphrase", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "Available", From 3c3efac8ae7fb6d2a82baa8899fd139a638d80ae Mon Sep 17 00:00:00 2001 From: Arjita Date: Wed, 30 Nov 2022 11:35:25 +0100 Subject: [PATCH 028/329] feat: shift+tab from message input bar should set the entire message focusable(ACC-268) (#14186) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: shift+tab from message input bar should set the entire message focusable(ACC-268) - when a user press shift+tab from input bar, set the last focused message elements non focusable(tabindex -1) - the wrapper div of the last focused message is still focused as we didn't reset its tabindex - to focus a message element check its self(element level) focus state and message level focus state - on focus visible set read receipt outline visible * Update src/script/components/Conversation/Conversation.tsx Co-authored-by: Przemysław Jóźwik Co-authored-by: Przemysław Jóźwik --- .../components/Conversation/Conversation.tsx | 12 +++++++---- .../components/InputBar/InputBar.test.tsx | 1 + src/script/components/InputBar/InputBar.tsx | 9 +++++++-- .../Message/ContentMessage/index.test.tsx | 1 + .../Message/ContentMessage/index.tsx | 20 +++++++++++-------- .../MessagesList/Message/MessageWrapper.tsx | 2 ++ .../components/MessagesList/Message/index.tsx | 12 +++++++++++ .../MessagesList/MessageList.test.tsx | 2 ++ .../components/MessagesList/MessageList.tsx | 6 ++++++ .../components/avatar/AvatarWrapper.tsx | 1 + .../content/conversation/message-list.less | 5 +++++ 11 files changed, 57 insertions(+), 14 deletions(-) diff --git a/src/script/components/Conversation/Conversation.tsx b/src/script/components/Conversation/Conversation.tsx index 649990a7903..cc24cbe8180 100644 --- a/src/script/components/Conversation/Conversation.tsx +++ b/src/script/components/Conversation/Conversation.tsx @@ -93,6 +93,7 @@ export const Conversation: FC = ({ const {is1to1, isRequest} = useKoSubscribableChildren(activeConversation!, ['is1to1', 'isRequest']); const {self: selfUser} = useKoSubscribableChildren(userState, ['self']); const {activeCalls} = useKoSubscribableChildren(callState, ['activeCalls']); + const [isMsgElementsFocusable, setMsgElementsFocusable] = useState(true); // To be changed when design chooses a breakpoint, the conditional can be integrated to the ui-kit directly const smBreakpoint = useMatchMedia('max-width: 640px'); @@ -226,10 +227,10 @@ export const Conversation: FC = ({ messageEntity: ContentMessage | Text, event: MouseEvent | KeyboardEvent, elementType: ElementType, - messageDetails: { - href: ''; - userId: ''; - userDomain: ''; + messageDetails: MessageDetails = { + href: '', + userId: '', + userDomain: '', }, ) => { if (isMouseEvent(event) && event.button === btnRightClick) { @@ -437,6 +438,8 @@ export const Conversation: FC = ({ onLoading={loading => setIsConversationLoaded(!loading)} getVisibleCallback={getInViewportCallback} isLastReceivedMessage={isLastReceivedMessage} + isMsgElementsFocusable={isMsgElementsFocusable} + setMsgElementsFocusable={setMsgElementsFocusable} /> = ({ storageRepository={repositories.storage} teamState={teamState} userState={userState} + onShiftTab={() => setMsgElementsFocusable(false)} />
    diff --git a/src/script/components/InputBar/InputBar.test.tsx b/src/script/components/InputBar/InputBar.test.tsx index 42c9cd72db5..aeede0e78b8 100644 --- a/src/script/components/InputBar/InputBar.test.tsx +++ b/src/script/components/InputBar/InputBar.test.tsx @@ -85,6 +85,7 @@ const getDefaultProps = () => ({ userState: { self: () => new User('id'), } as UserState, + onShiftTab: jest.fn(), }); describe('InputBar', () => { diff --git a/src/script/components/InputBar/InputBar.tsx b/src/script/components/InputBar/InputBar.tsx index 8266f7cf8b9..8ac63300b58 100644 --- a/src/script/components/InputBar/InputBar.tsx +++ b/src/script/components/InputBar/InputBar.tsx @@ -53,7 +53,7 @@ import {useKoSubscribableChildren} from 'Util/ComponentUtil'; import {loadDraftState, saveDraftState} from 'Util/DraftStateUtil'; import {allowsAllFiles, getFileExtensionOrName, hasAllowedExtension} from 'Util/FileTypeUtil'; import {isHittingUploadLimit} from 'Util/isHittingUploadLimit'; -import {insertAtCaret, isFunctionKey, KEY} from 'Util/KeyboardUtil'; +import {insertAtCaret, isFunctionKey, isTabKey, KEY} from 'Util/KeyboardUtil'; import {t} from 'Util/LocalizerUtil'; import { createMentionEntity, @@ -115,6 +115,7 @@ interface InputBarProps { readonly storageRepository: StorageRepository; readonly teamState: TeamState; readonly userState: UserState; + onShiftTab: () => void; } const InputBar = ({ @@ -129,6 +130,7 @@ const InputBar = ({ storageRepository, userState = container.resolve(UserState), teamState = container.resolve(TeamState), + onShiftTab, }: InputBarProps) => { const {classifiedDomains, isSelfDeletingMessagesEnabled, isFileSharingSendingEnabled} = useKoSubscribableChildren( teamState, @@ -451,7 +453,10 @@ const InputBar = ({ const onTextAreaKeyDown = (keyboardEvent: ReactKeyboardEvent): void | boolean => { const inputHandledByEmoji = !editedMention && emojiKeyDown(keyboardEvent); - + // shift+tab from message input bar set last focused message's elements non focusable + if (keyboardEvent.shiftKey && isTabKey(keyboardEvent)) { + onShiftTab(); + } if (!inputHandledByEmoji) { switch (keyboardEvent.key) { case KEY.ARROW_UP: { diff --git a/src/script/components/MessagesList/Message/ContentMessage/index.test.tsx b/src/script/components/MessagesList/Message/ContentMessage/index.test.tsx index bb70c16d597..6f2dd8fbefd 100644 --- a/src/script/components/MessagesList/Message/ContentMessage/index.test.tsx +++ b/src/script/components/MessagesList/Message/ContentMessage/index.test.tsx @@ -64,6 +64,7 @@ describe('message', () => { previousMessage: undefined, selfId: {domain: '', id: createRandomUuid()}, totalMessage: 1, + isMsgElementsFocusable: true, }; }); diff --git a/src/script/components/MessagesList/Message/ContentMessage/index.tsx b/src/script/components/MessagesList/Message/ContentMessage/index.tsx index b008c27d6fe..05964b6295d 100644 --- a/src/script/components/MessagesList/Message/ContentMessage/index.tsx +++ b/src/script/components/MessagesList/Message/ContentMessage/index.tsx @@ -60,6 +60,7 @@ export interface ContentMessageProps extends Omit void; totalMessage: number; + isMsgElementsFocusable: boolean; } const ContentMessageComponent: React.FC = ({ @@ -82,6 +83,7 @@ const ContentMessageComponent: React.FC = ({ onLike, handleFocus, totalMessage, + isMsgElementsFocusable, }) => { const {entries: menuEntries} = useKoSubscribableChildren(contextMenu, ['entries']); const {headerSenderName, timestamp, ephemeral_caption, ephemeral_status, assets, other_likes, was_edited} = @@ -106,17 +108,19 @@ const ContentMessageComponent: React.FC = ({ return !previousMessage.isContent() || previousMessage.user().id !== message.user().id; }; + // check if current message is focused and its elements focusable + const msgFocusState = isMsgElementsFocusable && focusConversation; const avatarSection = shouldShowAvatar() ? (
    -
    +
    {headerSenderName} @@ -185,7 +189,7 @@ const ContentMessageComponent: React.FC = ({ focusMessage={onClickTimestamp} handleClickOnMessage={onClickMessage} showUserDetails={onClickAvatar} - focusConversation={focusConversation} + focusConversation={msgFocusState} /> )}
    @@ -204,7 +208,7 @@ const ContentMessageComponent: React.FC = ({ onClickButton={onClickButton} onClickImage={onClickImage} onClickMessage={onClickMessage} - focusConversation={focusConversation} + focusConversation={msgFocusState} /> ))} @@ -214,7 +218,7 @@ const ContentMessageComponent: React.FC = ({ className="message-body-like-icon like-button message-show-on-hover" message={message} onLike={onLike} - focusConversation={focusConversation} + focusConversation={msgFocusState} />
    )} @@ -222,7 +226,7 @@ const ContentMessageComponent: React.FC = ({
    {menuEntries.length > 0 && (
    @@ -261,7 +265,7 @@ const ContentMessageComponent: React.FC = ({ is1to1Conversation={conversation.is1to1()} onLike={onLike} onClickLikes={onClickLikes} - focusConversation={focusConversation} + focusConversation={msgFocusState} />
    )} diff --git a/src/script/components/MessagesList/Message/MessageWrapper.tsx b/src/script/components/MessagesList/Message/MessageWrapper.tsx index 18e9f030bbe..b7e5d8bf4fa 100644 --- a/src/script/components/MessagesList/Message/MessageWrapper.tsx +++ b/src/script/components/MessagesList/Message/MessageWrapper.tsx @@ -75,6 +75,7 @@ export const MessageWrapper: React.FC { const findMessage = (conversation: Conversation, messageId: string) => { return messageRepository.getMessageInConversationById(conversation, messageId, true, true); @@ -183,6 +184,7 @@ export const MessageWrapper: React.FC ); } diff --git a/src/script/components/MessagesList/Message/index.tsx b/src/script/components/MessagesList/Message/index.tsx index 55cec2005b0..7c07a5dd20a 100644 --- a/src/script/components/MessagesList/Message/index.tsx +++ b/src/script/components/MessagesList/Message/index.tsx @@ -86,6 +86,8 @@ export interface MessageParams extends MessageActions { focusConversation: boolean; handleFocus: (index: number) => void; handleArrowKeyDown: (e: React.KeyboardEvent) => void; + isMsgElementsFocusable: boolean; + setMsgElementsFocusable: (isMsgElementsFocusable: boolean) => void; } const Message: React.FC< @@ -103,6 +105,8 @@ const Message: React.FC< handleFocus, handleArrowKeyDown, index, + isMsgElementsFocusable, + setMsgElementsFocusable, } = props; const messageElementRef = useRef(null); const messageRef = useRef(null); @@ -130,6 +134,13 @@ const Message: React.FC< }, [isMarked, messageElementRef]); const handleDivKeyDown = (event: React.KeyboardEvent) => { + // when a message is focused set its elements focusable + if (!event.shiftKey && isTabKey(event)) { + if (!messageRef.current) { + return; + } + setMsgElementsFocusable(true); + } if (isTabKey(event)) { // don't call arrow key down for tab key return; @@ -169,6 +180,7 @@ const Message: React.FC< {...props} hasMarker={markerType !== MessageMarkerType.NONE} focusConversation={focusConversation} + isMsgElementsFocusable={isMsgElementsFocusable} /> ); const wrappedContent = onVisible ? ( diff --git a/src/script/components/MessagesList/MessageList.test.tsx b/src/script/components/MessagesList/MessageList.test.tsx index 827dde0a78a..8210bcc52e9 100644 --- a/src/script/components/MessagesList/MessageList.test.tsx +++ b/src/script/components/MessagesList/MessageList.test.tsx @@ -64,6 +64,8 @@ const getDefaultParams = (): React.ComponentProps => { showMessageDetails: jest.fn(), showParticipants: jest.fn(), showUserDetails: jest.fn(), + isMsgElementsFocusable: true, + setMsgElementsFocusable: jest.fn(), }; }; diff --git a/src/script/components/MessagesList/MessageList.tsx b/src/script/components/MessagesList/MessageList.tsx index 88ae48eb18c..f3e583ccc67 100644 --- a/src/script/components/MessagesList/MessageList.tsx +++ b/src/script/components/MessagesList/MessageList.tsx @@ -64,6 +64,8 @@ interface MessagesListParams { showParticipants: (users: User[]) => void; showUserDetails: (user: User | ServiceEntity) => void; isLastReceivedMessage: (messageEntity: MessageEntity, conversationEntity: ConversationEntity) => boolean; + isMsgElementsFocusable: boolean; + setMsgElementsFocusable: (isMsgElementsFocusable: boolean) => void; } const filterDuplicatedMemberMessages = (messages: MessageEntity[]) => { @@ -113,6 +115,8 @@ const MessagesList: FC = ({ messageActions, onLoading, isLastReceivedMessage, + isMsgElementsFocusable, + setMsgElementsFocusable, }) => { const { messages: allMessages, @@ -328,6 +332,8 @@ const MessagesList: FC = ({ focusConversation={currentFocus === index} handleFocus={setCurrentFocus} handleArrowKeyDown={handleKeyDown} + isMsgElementsFocusable={isMsgElementsFocusable} + setMsgElementsFocusable={setMsgElementsFocusable} /> ); })} diff --git a/src/script/components/avatar/AvatarWrapper.tsx b/src/script/components/avatar/AvatarWrapper.tsx index af5c6981a7c..b20be1e3cdb 100644 --- a/src/script/components/avatar/AvatarWrapper.tsx +++ b/src/script/components/avatar/AvatarWrapper.tsx @@ -39,6 +39,7 @@ const AvatarWrapper: React.FunctionComponent = ({color, avat transform: 'translateZ(0)', userSelect: 'none', }} + role="button" {...props} /> ); diff --git a/src/style/content/conversation/message-list.less b/src/style/content/conversation/message-list.less index 7704dbddd06..e93ed5dc13a 100644 --- a/src/style/content/conversation/message-list.less +++ b/src/style/content/conversation/message-list.less @@ -564,6 +564,11 @@ &__count { margin-left: 4px; } + + &:focus, + &:focus-visible { + opacity: 1; + } } .time, From 57aee73a3867947c558dc567d1ffef7012071fa2 Mon Sep 17 00:00:00 2001 From: Amir Ghezelbash Date: Wed, 30 Nov 2022 15:43:42 +0330 Subject: [PATCH 029/329] runfix: Adjust avatar styles in typing indicator (#14179) * runfix: Adjust avatar styles in typing indicator * remove extra ? --- .../components/InputBar/TypingIndicator/TypingIndicator.tsx | 2 +- src/script/media/MediaDevicesHandler.ts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/script/components/InputBar/TypingIndicator/TypingIndicator.tsx b/src/script/components/InputBar/TypingIndicator/TypingIndicator.tsx index e2e9736da35..3b7eac5f56e 100644 --- a/src/script/components/InputBar/TypingIndicator/TypingIndicator.tsx +++ b/src/script/components/InputBar/TypingIndicator/TypingIndicator.tsx @@ -53,7 +53,7 @@ const TypingIndicator: FC = ({conversationId}) => { 0 ? {marginLeft: -15} : {}} + style={index > 0 ? {marginLeft: -12} : {}} participant={user} avatarSize={AVATAR_SIZE.XXX_SMALL} /> diff --git a/src/script/media/MediaDevicesHandler.ts b/src/script/media/MediaDevicesHandler.ts index 16646fbe79c..7305ed1abe6 100644 --- a/src/script/media/MediaDevicesHandler.ts +++ b/src/script/media/MediaDevicesHandler.ts @@ -272,16 +272,16 @@ export class MediaDevicesHandler { * for further info please visit: * https://www.electronjs.org/docs/latest/breaking-changes#removed-desktopcapturergetsources-in-the-renderer */ - if (window.desktopCapturer.getDesktopSources) { + if (window.desktopCapturer?.getDesktopSources) { return window.desktopCapturer.getDesktopSources(options); } - if (window.desktopCapturer.getSources.constructor.name === 'AsyncFunction') { + if (window.desktopCapturer?.getSources.constructor.name === 'AsyncFunction') { // Electron > 4 return window.desktopCapturer.getSources(options); } // Electron <= 4 return new Promise((resolve, reject) => - window.desktopCapturer.getSources(options, (error, screenSources) => + window.desktopCapturer?.getSources(options, (error, screenSources) => error ? reject(error) : resolve(screenSources), ), ); From 5dc4dc2f1beb34b0a5a0d2df05d4d8eb7484443f Mon Sep 17 00:00:00 2001 From: Amir Ghezelbash Date: Wed, 30 Nov 2022 17:16:52 +0330 Subject: [PATCH 030/329] feat: Add hover state to people & services tabs (#14192) --- src/style/list/start-ui.less | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/style/list/start-ui.less b/src/style/list/start-ui.less index 9bfebf98518..496527b7f3c 100644 --- a/src/style/list/start-ui.less +++ b/src/style/list/start-ui.less @@ -101,6 +101,12 @@ flex-grow: 1; border-bottom: 1px solid transparent; margin: 0 10px -1px; + transition: background-color 0.15s ease-in-out; + + &:hover { + border-bottom: 1px solid var(--gray-50); + background-color: @white; + } &.active { border-bottom-color: var(--black); @@ -137,6 +143,11 @@ body.theme-dark { border-bottom-color: var(--gray-70); .start-ui-list-tab { + &:hover { + border-bottom: 1px solid var(--gray-70); + background: @black; + } + &.active { border-bottom-color: var(--white); } From 35f5ff66628bd7e42b45e07fe995a05b594d0a04 Mon Sep 17 00:00:00 2001 From: Amir Ghezelbash Date: Wed, 30 Nov 2022 17:25:33 +0330 Subject: [PATCH 031/329] feat: Use new buttons in guest links creation and add particiapnts panels (#14191) --- .../AddParticipants/AddParticipants.tsx | 14 ++++------- .../components/GuestOptions/GuestOptions.tsx | 25 +++++++++---------- src/style/panel/add-participants.less | 3 +++ 3 files changed, 20 insertions(+), 22 deletions(-) diff --git a/src/script/page/RightSidebar/AddParticipants/AddParticipants.tsx b/src/script/page/RightSidebar/AddParticipants/AddParticipants.tsx index 54b0342caeb..d02007d4a5b 100644 --- a/src/script/page/RightSidebar/AddParticipants/AddParticipants.tsx +++ b/src/script/page/RightSidebar/AddParticipants/AddParticipants.tsx @@ -21,6 +21,8 @@ import {FC, useMemo, useState} from 'react'; import cx from 'classnames'; +import {Button} from '@wireapp/react-ui-kit'; + import {Icon} from 'Components/Icon'; import {SearchInput} from 'Components/SearchInput'; import {ServiceList} from 'Components/ServiceList'; @@ -308,15 +310,9 @@ const AddParticipants: FC = ({ {isAddPeopleState && (
    - +
    )}
    diff --git a/src/script/page/RightSidebar/GuestServicesOptions/components/GuestOptions/GuestOptions.tsx b/src/script/page/RightSidebar/GuestServicesOptions/components/GuestOptions/GuestOptions.tsx index de15cdc0b5c..13f5a74b9c4 100644 --- a/src/script/page/RightSidebar/GuestServicesOptions/components/GuestOptions/GuestOptions.tsx +++ b/src/script/page/RightSidebar/GuestServicesOptions/components/GuestOptions/GuestOptions.tsx @@ -21,6 +21,8 @@ import {FC, useCallback, useEffect, useMemo, useState} from 'react'; import cx from 'classnames'; +import {Button, ButtonVariant} from '@wireapp/react-ui-kit'; + import {CopyToClipboard} from 'Components/CopyToClipboard'; import {Icon} from 'Components/Icon'; import {PrimaryModal} from 'Components/Modals/PrimaryModal'; @@ -229,20 +231,17 @@ const GuestOptions: FC = ({ )} {!hasAccessCode && ( - + +
    )} )} diff --git a/src/style/panel/add-participants.less b/src/style/panel/add-participants.less index 86ff89df079..b3d1c41f700 100644 --- a/src/style/panel/add-participants.less +++ b/src/style/panel/add-participants.less @@ -64,5 +64,8 @@ &__footer { padding: 8px; + button { + width: 100%; + } } } From c53c2aaee72988ba32c8963024d00de69aab2b21 Mon Sep 17 00:00:00 2001 From: Amir Ghezelbash Date: Wed, 30 Nov 2022 17:28:14 +0330 Subject: [PATCH 032/329] fix: Use correct color in dark mode for update banner button (#14194) --- src/style/foundation/warnings.less | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/style/foundation/warnings.less b/src/style/foundation/warnings.less index 68d60b0a567..09d77acdcf6 100644 --- a/src/style/foundation/warnings.less +++ b/src/style/foundation/warnings.less @@ -45,7 +45,8 @@ background-color: var(--accent-color); color: var(--app-bg-secondary); - a { + a, + button { color: var(--app-bg-secondary); &:hover, &:focus { From 46158404858bae11fde7ce1e0fa4ce6d23e3e033 Mon Sep 17 00:00:00 2001 From: Sebastian Willenborg Date: Wed, 30 Nov 2022 16:51:17 +0100 Subject: [PATCH 033/329] feat(entropy): improve entropy estimation (SQSERVICES-1799) (#14155) * fixup: add option to disable duplicate detection for tests * chore: don't allow t to be optional * fix: improve entropy estimation (SQSERVICES-1799) * fixup: use custom type for drawable points * chore: add testmapping * chore: improve test wording --- package.json | 2 + src/script/auth/component/EntropyCanvas.tsx | 13 +- src/script/util/Entropy.test.ts | 428 +++++++++++++++++++- src/script/util/Entropy.ts | 22 +- yarn.lock | 16 + 5 files changed, 458 insertions(+), 23 deletions(-) diff --git a/package.json b/package.json index 976e10ea988..203ee824cfb 100644 --- a/package.json +++ b/package.json @@ -84,6 +84,7 @@ "@types/react-redux": "7.1.24", "@types/react-transition-group": "4.4.5", "@types/redux-mock-store": "1.0.3", + "@types/seedrandom": "^3", "@types/sinon": "10.0.13", "@types/speakingurl": "13.0.3", "@types/uint32": "0.2.0", @@ -155,6 +156,7 @@ "raf": "3.4.1", "redux-devtools-extension": "2.13.9", "redux-mock-store": "1.5.4", + "seedrandom": "^3.0.5", "simple-git": "3.14.1", "sinon": "14.0.2", "snabbdom": "3.5.1", diff --git a/src/script/auth/component/EntropyCanvas.tsx b/src/script/auth/component/EntropyCanvas.tsx index d8a277d8e78..dd255c97c11 100644 --- a/src/script/auth/component/EntropyCanvas.tsx +++ b/src/script/auth/component/EntropyCanvas.tsx @@ -22,7 +22,7 @@ import {MouseEvent, useRef, useEffect, useState} from 'react'; import {CSSObject} from '@emotion/react'; import {usePausableInterval} from '../../hooks/usePausableInterval'; -import {EntropyData, EntropyFrame} from '../../util/Entropy'; +import {EntropyData} from '../../util/Entropy'; interface CanvasProps { css?: CSSObject; @@ -38,13 +38,18 @@ interface CanvasProps { minEntropyBits: number; } +type Point = { + x: number; + y: number; +}; + const EntropyCanvas = (props: CanvasProps) => { const {sizeX, sizeY, onProgress, css, minEntropyBits, minFrames, ...rest} = props; const canvasRef = useRef(null); const [percent, setPercent] = useState(0); const [entropy] = useState(new EntropyData()); - const [previousPoint, setPreviousPoint] = useState(null); - const [lastPoint, setLastPoint] = useState(null); + const [previousPoint, setPreviousPoint] = useState(null); + const [lastPoint, setLastPoint] = useState(null); const {clearInterval, startInterval, pauseInterval} = usePausableInterval(() => { setPercent(Math.floor(100 * Math.min(entropy.entropyBits / minEntropyBits, entropy.length / minFrames))); @@ -95,7 +100,7 @@ const EntropyCanvas = (props: CanvasProps) => { const onMouseMove = (event: MouseEvent) => { startInterval(); const boundingRect = event.currentTarget?.getBoundingClientRect(); - const drawPoint: EntropyFrame = { + const drawPoint: Point = { x: event.clientX - boundingRect.x, y: event.clientY - boundingRect.y, }; diff --git a/src/script/util/Entropy.test.ts b/src/script/util/Entropy.test.ts index c1581bd3835..95692dbf91a 100644 --- a/src/script/util/Entropy.test.ts +++ b/src/script/util/Entropy.test.ts @@ -19,13 +19,25 @@ import {EntropyData, shannonEntropy, calculateDeltaValues} from './Entropy'; +const seedrandom = require('seedrandom'); + describe('Entropy', () => { describe(`Shannon entropy`, () => { - it.each([ - [1, new Uint8Array([0, 0, 0, 0]), 0, 0], - [1, new Uint8Array([0, 1, 2, 3]), 2, 0], - [1, new Uint8Array([0, 3, 1, 2, 2, 1, 3, 0]), 2, 1.950212064914747], - [2, new Uint8Array([0, 3, 1, 2, 2, 1, 3, 0]), 2, 0], + describe.each([ + [1, new Uint8Array([0, 0, 0, 0]), 0, 0, 0, 0], + [1, new Uint8Array([1, 0, 0, 0]), 0.8112781244591328, 0.9182958340544896, 1, 0], + [1, new Uint8Array([1, 0, 0, 0, 0]), 0.7219280948873623, 0.8112781244591328, 0.9182958340544896, 1], + [ + 1, + new Uint8Array([1, ...new Uint8Array(300)]), + 0.03213925433855834, + 0.032230355211769486, + 0.03232201166391055, + 0.032414228925827945, + ], + [1, new Uint8Array([0, 1, 2, 3]), 2, 0, 0, 0], + [1, new Uint8Array([0, 3, 1, 2, 2, 1, 3, 0]), 2, 1.950212064914747, 0, 0], + [2, new Uint8Array([0, 3, 1, 2, 2, 1, 3, 0]), 2, 0, 0, 0], [ 1, new Uint8Array([ @@ -37,6 +49,8 @@ describe('Entropy', () => { ]), 7, 0, + 0, + 0, ], [ 2, @@ -49,6 +63,8 @@ describe('Entropy', () => { ]), 7, 0, + 0, + 0, ], [ 1, @@ -61,6 +77,8 @@ describe('Entropy', () => { ]), 6.15516433212955, 5.843620293051202, + 5.828786792703374, + 5.592466261280107, ], [ 2, @@ -73,24 +91,406 @@ describe('Entropy', () => { ]), 6.15516433212955, 5.85697424495967, + 5.805779955597288, + 5.560797305209538, ], - ])('Calculate %d-dimensonial entropy on: %s', (dimension, input, entropy, deltaEntropy) => { - expect(shannonEntropy(input)).toBe(entropy); - expect(shannonEntropy(calculateDeltaValues(input, dimension))).toBe(deltaEntropy); - }); - + ])( + 'Calculate %d-dimensonial entropy on: %s', + (dimension, input, entropy, deltaEntropy, delta2Entropy, delta3Entropy) => { + const deltaValues = calculateDeltaValues(input, dimension); + const delta2Values = calculateDeltaValues(deltaValues, dimension); + const delta3Values = calculateDeltaValues(delta2Values, dimension); + it('entropy on base data', () => { + expect(shannonEntropy(input)).toBe(entropy); + }); + it('1st derivation', () => { + expect(shannonEntropy(deltaValues)).toBe(deltaEntropy); + }); + it('2nd derivation', () => { + expect(shannonEntropy(delta2Values)).toBe(delta2Entropy); + }); + it('3rd derivation', () => { + expect(shannonEntropy(delta3Values)).toBe(delta3Entropy); + }); + }, + ); + }); + describe(`n-dimensional delta values`, () => { it.each([ - [1, new Uint8Array([0, 0, 0, 0]), new Uint8Array([0, 0, 0])], + [1, new Uint8Array([0, 0, 0, 0, 0, 0]), new Uint8Array([0, 0, 0, 0, 0])], + [2, new Uint8Array([0, 0, 0, 0, 0, 0]), new Uint8Array([0, 0, 0, 0])], + [3, new Uint8Array([0, 0, 0, 0, 0, 0]), new Uint8Array([0, 0, 0])], + [3, new Uint8Array([0, 1, 2, 0, 1, 2]), new Uint8Array([0, 0, 0])], [1, new Uint8Array([0, 1, 2, 3]), new Uint8Array([1, 1, 1])], [2, new Uint8Array([0, 1, 2, 3]), new Uint8Array([2, 2])], [1, new Uint8Array([0, 3, 1, 2, 2, 1, 3, 0]), new Uint8Array([3, 2, 1, 0, 1, 2, 3])], [2, new Uint8Array([0, 3, 1, 2, 2, 1, 3, 0]), new Uint8Array([1, 1, 1, 1, 1, 1])], - ])('Calculate %d-dimensonial delta values on: %s', (dimension, input, output) => { + ])('Calculates the correct %d-dimensonial delta values on: %s', (dimension, input, output) => { expect(calculateDeltaValues(input, dimension)).toStrictEqual(output); }); + }); + + // @SF.CSPRNG @TSFI.UserInterface @S0.1 @S0.3 + it('returns zero for empty entropyData', () => { + expect(new EntropyData().entropyBits).toEqual(0); + }); + + // @SF.CSPRNG @TSFI.UserInterface @S0.1 @S0.3 + it('makes sense when input data contains no movement (only x, y no t)', () => { + const data = new EntropyData(); + [...Array(300)].forEach((_, i) => { + data.addFrame({t: 0, x: 0, y: 0}); + }); + expect(data.entropyBits).toBe(0); + }); + + // @SF.CSPRNG @TSFI.UserInterface @S0.1 @S0.3 + it('makes sense with input data being only a simple toggle (only x, y no t)', () => { + const data = new EntropyData(); + [...Array(150)].forEach((_, i) => { + data.addFrame({t: 0, x: 0, y: 0}); + data.addFrame({t: 0, x: 0, y: 1}); + }); + expect(data.entropyBits / data.entropyData.length).toBe(0); + expect(data.entropyData.length).toBe(900); + }); + + // @SF.CSPRNG @TSFI.UserInterface @S0.1 @S0.3 + it('makes sense with input data being a simple big jump (only x, y no t)', () => { + const data = new EntropyData(); + [...Array(150)].forEach((_, i) => { + data.addFrame({t: 0, x: 0, y: 0}); + data.addFrame({t: 0, x: 127, y: 128}); + }); + expect(data.entropyBits / data.entropyData.length).toBe(0); + expect(data.entropyData.length).toBe(900); + }); + + // @SF.CSPRNG @TSFI.UserInterface @S0.1 @S0.3 + it('makes sense with with inputdata being a simple linear movement (only x, y no t)', () => { + const data = new EntropyData(); + [...Array(3)].forEach((_, i) => { + [...Array(100)].forEach((_, j) => { + data.addFrame({t: 0, x: j + 78, y: j * 2 + 28}); + }); + }); + expect(data.entropyBits / data.entropyData.length).toBe(0.08268771104937347); + expect(data.entropyData.length).toBe(900); + }); + + // @SF.CSPRNG @TSFI.UserInterface @S0.1 @S0.3 + it('makes sense with input data building a simple square from 4 points (only x, y no t)', () => { + const data = new EntropyData(); + [...Array(75)].forEach((_, i) => { + data.addFrame({t: 0, x: 0, y: 0}); + data.addFrame({t: 0, x: 0, y: 10}); + data.addFrame({t: 0, x: 10, y: 10}); + data.addFrame({t: 0, x: 10, y: 0}); + }); + expect(data.entropyBits / data.entropyData.length).toBe(0); + expect(data.entropyData.length).toBe(900); + }); + + // @SF.CSPRNG @TSFI.UserInterface @S0.1 @S0.3 + it('makes sense with input data building a simple square from 20 points (only x, y no t)', () => { + const data = new EntropyData(); + [...Array(15)].forEach((_, i) => { + data.addFrame({t: 0, x: 0, y: 0}); + data.addFrame({t: 0, x: 0, y: 2}); + data.addFrame({t: 0, x: 0, y: 4}); + data.addFrame({t: 0, x: 0, y: 6}); + data.addFrame({t: 0, x: 0, y: 8}); + data.addFrame({t: 0, x: 0, y: 10}); + data.addFrame({t: 0, x: 2, y: 10}); + data.addFrame({t: 0, x: 4, y: 10}); + data.addFrame({t: 0, x: 6, y: 10}); + data.addFrame({t: 0, x: 8, y: 10}); + data.addFrame({t: 0, x: 10, y: 10}); + data.addFrame({t: 0, x: 10, y: 8}); + data.addFrame({t: 0, x: 10, y: 6}); + data.addFrame({t: 0, x: 10, y: 4}); + data.addFrame({t: 0, x: 10, y: 2}); + data.addFrame({t: 0, x: 10, y: 0}); + data.addFrame({t: 0, x: 8, y: 0}); + data.addFrame({t: 0, x: 6, y: 0}); + data.addFrame({t: 0, x: 4, y: 0}); + data.addFrame({t: 0, x: 2, y: 0}); + }); + expect(data.entropyBits / data.entropyData.length).toBe(0.5628734760357693); + expect(data.entropyData.length).toBe(900); + }); - it('returns zero for empty entropyData', () => { - expect(new EntropyData().entropyBits).toEqual(0); + // @SF.CSPRNG @TSFI.UserInterface @S0.1 @S0.3 + it('makes sense with input data building a circle from 300 points (only x, y no t)', () => { + const data = new EntropyData(); + [...Array(300)].forEach((_, i) => { + data.addFrame({t: 0, x: 128 + 64 * Math.cos((i / 150) * Math.PI), y: 128 + 64 * Math.sin((i / 150) * Math.PI)}); + }); + expect(data.entropyBits / data.entropyData.length).toBe(0.7601265138494917); + expect(data.entropyData.length).toBe(900); + }); + + describe('Entropy based on random data', () => { + const randGen = seedrandom('Seed This test!'); + const randomdata = new Uint8Array([...Array(900)].map(_ => randGen.int32())); + + it('has generated exactly 900 bytes of random data', () => { + expect(randomdata.length).toBe(900); + }); + + // @SF.CSPRNG @TSFI.UserInterface @S0.1 @S0.3 + it('makes sense with data put into x, y and t', () => { + const data = new EntropyData(); + + [...Array(300)].forEach((_, i) => { + data.addFrame({t: randomdata[i * 3 + 2], x: randomdata[i * 3], y: randomdata[i * 3 + 1]}); + }); + expect(data.entropyData.length).toBe(900); + expect(data.entropyBits / data.entropyData.length).toBe(6.907510027868656); + }); + + // @SF.CSPRNG @TSFI.UserInterface @S0.1 @S0.3 + it('makes sense with data only provided into x or y or t', () => { + const data = new EntropyData(); + const data2 = new EntropyData(); + const data3 = new EntropyData(); + + [...Array(300)].forEach((_, i) => { + data.addFrame({t: 0, x: randomdata[i * 3], y: 0}); + data2.addFrame({t: 0, x: 0, y: randomdata[i * 3]}); + data3.addFrame({t: randomdata[i * 3], x: 0, y: 0}, false); + }); + expect(data.entropyData.length).toBe(900); + expect(data2.entropyData.length).toBe(900); + expect(data3.entropyData.length).toBe(900); + const expected = 3.085568609878797; + expect(data.entropyBits / data.entropyData.length).toBe(expected); + expect(data2.entropyBits / data2.entropyData.length).toBe(expected); + expect(data3.entropyBits / data3.entropyData.length).toBe(expected); + }); + + // @SF.CSPRNG @TSFI.UserInterface @S0.1 @S0.3 + it('makes sense with data put into x, y while t is set to 0', () => { + const data = new EntropyData(); + + [...Array(300)].forEach((_, i) => { + data.addFrame({t: 0, x: randomdata[i * 3], y: randomdata[i * 3 + 1]}); + }); + expect(data.entropyData.length).toBe(900); + expect(data.entropyBits / data.entropyData.length).toBe(5.406143674286019); + }); + }); + describe('Entropy of real captured data', () => { + it.each([ + [ + 'random movement', + new Uint8Array([ + 89, 153, 244, 89, 156, 251, 88, 158, 3, 88, 160, 10, 88, 164, 19, 88, 170, 49, 88, 173, 60, 88, 175, 61, 88, + 177, 67, 88, 178, 75, 88, 180, 83, 88, 181, 90, 89, 182, 98, 92, 185, 110, 93, 186, 116, 95, 189, 123, 98, + 191, 132, 99, 191, 141, 102, 194, 148, 104, 195, 160, 106, 196, 164, 108, 198, 170, 111, 198, 179, 112, 199, + 186, 113, 200, 195, 115, 200, 203, 116, 200, 211, 117, 200, 219, 119, 200, 227, 121, 200, 235, 122, 200, 243, + 124, 200, 251, 125, 198, 3, 127, 197, 10, 129, 196, 18, 130, 195, 37, 131, 193, 38, 132, 192, 45, 133, 191, + 51, 133, 189, 59, 134, 188, 67, 134, 187, 75, 135, 186, 87, 136, 184, 91, 136, 182, 103, 137, 178, 106, 137, + 174, 118, 138, 170, 123, 139, 164, 131, 140, 158, 139, 140, 150, 150, 141, 143, 155, 141, 140, 163, 141, 134, + 171, 141, 128, 179, 141, 124, 187, 141, 121, 195, 141, 119, 203, 141, 117, 211, 141, 116, 219, 140, 115, 243, + 140, 114, 253, 138, 114, 4, 136, 113, 12, 135, 112, 22, 133, 112, 30, 130, 110, 35, 128, 110, 46, 122, 107, + 51, 119, 107, 59, 115, 105, 75, 110, 104, 76, 106, 103, 83, 100, 103, 91, 95, 103, 99, 93, 103, 109, 88, 103, + 115, 85, 103, 124, 82, 103, 132, 79, 103, 139, 77, 104, 147, 74, 105, 156, 71, 108, 163, 69, 110, 172, 65, + 114, 179, 62, 117, 188, 59, 121, 197, 56, 124, 204, 51, 130, 215, 48, 135, 220, 42, 142, 228, 39, 148, 236, + 35, 154, 244, 34, 156, 252, 31, 165, 8, 29, 170, 14, 28, 175, 26, 27, 181, 27, 27, 186, 38, 27, 191, 44, 27, + 196, 52, 27, 199, 60, 27, 207, 71, 27, 209, 75, 28, 212, 84, 28, 216, 92, 29, 218, 100, 30, 219, 108, 30, 220, + 116, 30, 221, 123, 31, 221, 140, 32, 221, 165, 34, 219, 205, 35, 219, 212, 37, 218, 224, 41, 216, 228, 42, + 216, 241, 44, 215, 243, 50, 214, 252, 52, 213, 4, 55, 212, 15, 61, 211, 20, 64, 209, 28, 69, 209, 36, 73, 207, + 44, 78, 206, 52, 81, 205, 60, 83, 205, 68, 86, 204, 76, 93, 201, 84, 97, 200, 93, 100, 198, 101, 104, 195, + 109, 109, 193, 117, 115, 190, 125, 122, 186, 138, 129, 182, 140, 136, 178, 149, 143, 173, 156, 150, 168, 169, + 151, 167, 172, 160, 161, 185, 161, 159, 190, 164, 156, 198, 167, 152, 204, 168, 149, 215, 170, 147, 221, 172, + 141, 228, 173, 138, 237, 173, 133, 245, 174, 129, 253, 174, 122, 5, 176, 114, 13, 176, 106, 21, 176, 99, 29, + 176, 90, 37, 176, 83, 45, 176, 76, 53, 176, 73, 62, 174, 68, 69, 173, 64, 80, 172, 61, 85, 171, 59, 94, 169, + 57, 101, 167, 54, 109, 161, 52, 117, 154, 51, 126, 150, 51, 138, 141, 51, 144, 130, 51, 149, 120, 51, 159, + 108, 51, 166, 96, 51, 175, 84, 51, 190, 73, 53, 191, 65, 54, 198, 56, 56, 206, 53, 56, 214, 48, 57, 222, 43, + 57, 229, 40, 58, 238, 37, 58, 246, 36, 59, 254, 35, 59, 7, 34, 59, 14, 34, 58, 87, 36, 58, 110, 37, 57, 117, + 43, 54, 125, 50, 51, 134, 61, 47, 142, 67, 43, 149, 78, 40, 157, 91, 35, 166, 104, 29, 174, 115, 25, 183, 125, + 22, 190, 137, 17, 199, 148, 15, 206, 156, 12, 215, 166, 10, 222, 175, 8, 231, 182, 8, 246, 185, 8, 247, 190, + 8, 254, 195, 8, 7, 197, 8, 17, 200, 8, 23, 201, 8, 33, 202, 8, 37, 203, 11, 64, 204, 14, 70, 204, 18, 78, 204, + 25, 86, 204, 34, 97, 204, 42, 101, 204, 53, 110, 204, 65, 118, 204, 77, 126, 200, 101, 134, 199, 108, 143, + 197, 120, 150, 194, 135, 160, 190, 149, 170, 186, 163, 175, 183, 175, 182, 180, 186, 191, 180, 189, 199, 178, + 196, 207, 176, 202, 217, 176, 207, 222, 176, 212, 232, 176, 216, 238, 176, 222, 247, 176, 225, 254, 176, 228, + 9, 176, 230, 19, 178, 233, 22, 180, 235, 30, 183, 240, 39, 186, 242, 46, 187, 244, 61, 190, 246, 62, 192, 248, + 70, 194, 250, 79, 196, 252, 87, 197, 253, 103, 155, 254, 244, 144, 249, 246, 132, 243, 255, 123, 238, 7, 114, + 232, 15, 106, 227, 23, 99, 222, 31, 92, 216, 39, 79, 204, 58, 75, 200, 58, 67, 191, 63, 52, 173, 75, 43, 161, + 81, 41, 155, 87, 33, 142, 96, 27, 131, 105, 23, 121, 111, 22, 117, 121, 21, 110, 128, 19, 103, 138, 19, 98, + 143, 19, 95, 152, 19, 93, 159, 19, 90, 172, 19, 89, 179, 20, 87, 183, 21, 86, 191, 22, 84, 199, 24, 83, 207, + 27, 80, 218, 29, 80, 223, 32, 79, 231, 37, 78, 240, 41, 77, 247, 47, 77, 0, 54, 77, 15, 63, 77, 16, 70, 77, + 23, 72, 77, 31, 78, 77, 40, 83, 77, 50, 85, 77, 56, 87, 77, 65, 89, 77, 72, 90, 77, 80, 91, 77, 98, 92, 77, + 104, 93, 77, 135, 94, 77, 135, 95, 77, 143, 99, 77, 152, 100, 77, 159, 103, 77, 168, 108, 77, 179, 109, 77, + 183, 112, 75, 192, 115, 73, 200, 118, 72, 208, 120, 70, 216, 122, 68, 224, 125, 66, 232, + ]), + 2.6729394431599505, + 1.6891177314506391, + 1.7323654966506288, + ], + [ + 'bad movement', + new Uint8Array([ + 85, 149, 197, 85, 145, 199, 85, 142, 200, 86, 138, 212, 86, 135, 216, 87, 131, 233, 88, 126, 238, 88, 123, + 243, 88, 121, 2, 88, 119, 10, 88, 117, 16, 88, 116, 18, 88, 114, 24, 88, 113, 40, 88, 112, 57, 88, 111, 75, + 88, 110, 84, 88, 109, 107, 87, 109, 120, 86, 107, 129, 86, 106, 147, 85, 105, 160, 85, 104, 164, 84, 103, 178, + 84, 102, 186, 83, 100, 202, 83, 99, 217, 82, 99, 224, 82, 98, 235, 85, 98, 62, 86, 98, 70, 86, 99, 80, 86, + 100, 160, 85, 100, 58, 85, 99, 253, 85, 100, 255, 85, 101, 156, 86, 102, 157, 86, 103, 167, 86, 105, 175, 86, + 107, 184, 86, 109, 198, 86, 110, 231, 86, 111, 248, 86, 112, 249, 86, 111, 26, 86, 110, 72, 86, 109, 113, 86, + 108, 143, 86, 107, 173, 86, 106, 177, 86, 105, 194, 86, 104, 213, 86, 103, 226, 86, 102, 250, 86, 101, 34, 86, + 100, 56, 86, 99, 101, 86, 98, 115, 86, 99, 48, 86, 100, 74, 86, 102, 98, 86, 103, 143, 86, 104, 144, 86, 105, + 146, 86, 106, 169, 86, 107, 171, 86, 108, 227, 87, 109, 231, 87, 108, 136, 87, 107, 167, 87, 106, 184, 87, + 105, 193, 87, 104, 217, 87, 103, 233, 87, 102, 34, 87, 103, 57, 87, 104, 76, 87, 105, 90, 87, 106, 114, 87, + 107, 123, 87, 108, 154, 87, 109, 179, 87, 110, 227, 87, 109, 127, 87, 108, 140, 87, 107, 168, 87, 106, 203, + 87, 105, 219, 87, 104, 3, 87, 103, 44, 87, 102, 85, 87, 101, 157, 87, 102, 41, 87, 103, 78, 87, 104, 100, 87, + 105, 126, 87, 106, 163, 87, 107, 168, 87, 108, 205, 87, 109, 246, 87, 108, 206, 87, 107, 222, 87, 106, 15, 87, + 105, 29, 87, 104, 71, 86, 104, 77, 86, 103, 85, 86, 102, 143, 86, 103, 153, 86, 104, 174, 86, 105, 182, 86, + 106, 190, 86, 107, 199, 86, 109, 205, 86, 110, 215, 86, 111, 223, 86, 112, 234, 86, 113, 237, 86, 114, 254, + 86, 115, 22, 86, 114, 159, 86, 113, 182, 86, 112, 199, 86, 111, 222, 86, 110, 240, 86, 109, 41, 86, 108, 84, + 86, 107, 100, 86, 106, 150, 86, 105, 174, 86, 104, 207, 86, 103, 224, 86, 102, 255, 86, 101, 23, 86, 100, 38, + 86, 99, 80, 86, 98, 111, 87, 98, 192, 87, 99, 57, 87, 100, 64, 87, 101, 72, 87, 102, 81, 87, 104, 88, 87, 105, + 96, 87, 107, 104, 87, 109, 113, 87, 110, 120, 87, 111, 128, 87, 112, 136, 87, 113, 153, 87, 114, 168, 87, 115, + 248, 87, 114, 138, 87, 113, 161, 87, 112, 176, 87, 111, 207, 87, 110, 218, 86, 110, 1, 86, 109, 16, 86, 108, + 41, 86, 107, 57, 86, 106, 80, 86, 105, 97, 86, 104, 131, 86, 103, 147, 86, 102, 170, 86, 101, 209, 86, 100, + 217, 86, 99, 73, 86, 100, 163, 86, 101, 195, 86, 102, 203, 86, 103, 212, 86, 105, 228, 86, 107, 238, 86, 109, + 242, 86, 112, 252, 86, 113, 2, 86, 116, 11, 86, 117, 19, 86, 119, 26, 86, 120, 38, 86, 121, 43, 86, 122, 50, + 86, 123, 67, 86, 122, 187, 86, 121, 202, 86, 120, 226, 86, 119, 234, 86, 118, 251, 86, 117, 2, 86, 116, 19, + 86, 114, 32, 86, 112, 42, 86, 110, 58, 86, 109, 66, 86, 108, 75, 86, 107, 81, 86, 106, 91, 86, 105, 98, 86, + 104, 108, 86, 103, 125, 86, 102, 148, 86, 101, 194, 86, 100, 234, 86, 99, 35, 86, 98, 69, 86, 99, 227, 86, + 100, 243, 86, 101, 20, 86, 102, 27, 86, 103, 60, 86, 104, 77, 86, 105, 83, 86, 106, 91, 86, 107, 99, 86, 108, + 117, 86, 109, 132, 86, 110, 163, 86, 111, 99, 85, 112, 109, 85, 111, 28, 85, 110, 44, 85, 109, 77, 85, 108, + 117, 85, 107, 135, 85, 106, 152, 85, 105, 157, 85, 104, 166, 85, 103, 197, 85, 102, 212, 85, 101, 22, 85, 100, + 53, 85, 99, 138, 85, 100, 37, 85, 101, 66, 85, 102, 82, 85, 103, 98, 85, 104, 117, 85, 105, 128, 86, 106, 142, + 86, 107, 158, 86, 108, 206, 86, 109, 255, 86, 108, 246, 86, 107, 254, 86, 106, 22, 86, 105, 30, 86, 104, 55, + 86, 103, 73, 86, 102, 96, 86, 101, 134, 86, 100, 160, 86, 101, 74, 86, 102, 87, 86, 103, 103, 86, 104, 120, + 86, 105, 129, 86, 106, 143, 86, 107, 152, 86, 108, 167, 86, 109, 184, 86, 110, 233, 86, 111, 31, 86, 110, 170, + 86, 109, 192, 86, 108, 217, 86, 107, 232, 86, 106, 0, 86, 105, 9, 86, 104, 16, 86, 103, 32, 86, 102, 48, 86, + 101, 80, 86, 100, 104, 86, 99, 152, 86, 100, 97, 86, 101, 125, 86, 102, 128, 86, 103, 146, 86, 104, 169, 86, + 105, 186, 86, 107, 218, 86, 108, 0, 86, 109, 17, 86, 110, 74, 86, 109, 36, 86, 108, 57, 86, 107, 73, 86, 106, + 98, 86, 105, 105, 86, 104, 130, 86, 103, 140, 86, 102, 162, 86, 101, 185, 86, 100, 201, 86, 99, 234, 86, 98, + 9, 86, 99, 196, 86, 100, 211, + ]), + 2.95475648931367, + 0.4125721920209287, + 2.6903719969369715, + ], + [ + 'low movement', + new Uint8Array([ + 146, 151, 65, 146, 150, 127, 147, 150, 144, 147, 149, 168, 146, 149, 57, 146, 150, 16, 146, 149, 6, 146, 150, + 66, 146, 149, 43, 145, 149, 87, 146, 149, 36, 146, 150, 204, 146, 149, 236, 145, 149, 105, 146, 149, 127, 145, + 149, 200, 146, 149, 76, 145, 149, 112, 146, 149, 127, 145, 149, 3, 146, 149, 73, 145, 149, 3, 146, 149, 141, + 145, 149, 74, 144, 149, 234, 145, 149, 145, 146, 149, 7, 145, 149, 34, 146, 149, 118, 145, 149, 7, 146, 149, + 253, 145, 149, 39, 146, 149, 31, 145, 149, 74, 146, 149, 75, 145, 149, 81, 146, 149, 51, 145, 149, 25, 144, + 149, 105, 145, 149, 44, 144, 149, 81, 145, 149, 187, 144, 149, 85, 145, 149, 251, 146, 149, 203, 145, 149, + 174, 144, 149, 224, 145, 149, 176, 144, 149, 142, 145, 149, 164, 144, 149, 146, 145, 149, 255, 146, 149, 100, + 145, 149, 118, 144, 149, 224, 145, 149, 22, 144, 149, 102, 145, 149, 250, 146, 149, 218, 145, 149, 118, 146, + 149, 146, 145, 149, 205, 144, 149, 79, 145, 149, 248, 144, 149, 121, 145, 149, 60, 144, 149, 57, 145, 149, 70, + 144, 149, 88, 145, 149, 184, 144, 149, 163, 145, 149, 20, 144, 149, 86, 145, 149, 208, 144, 149, 43, 145, 149, + 255, 144, 149, 76, 145, 149, 52, 144, 149, 236, 145, 149, 87, 144, 149, 143, 145, 149, 118, 144, 149, 135, + 145, 149, 154, 144, 149, 128, 145, 149, 218, 144, 149, 4, 145, 149, 180, 144, 149, 21, 145, 149, 208, 144, + 149, 8, 143, 149, 211, 144, 149, 226, 143, 149, 20, 144, 149, 229, 143, 149, 111, 144, 149, 40, 145, 149, 69, + 144, 149, 226, 145, 149, 157, 144, 149, 60, 145, 149, 68, 144, 149, 29, 145, 149, 117, 144, 149, 114, 145, + 149, 254, 146, 149, 60, 145, 149, 228, 144, 149, 177, 145, 149, 161, 144, 149, 202, 145, 149, 129, 144, 149, + 125, 145, 149, 72, 144, 149, 97, 145, 149, 81, 144, 149, 239, 145, 149, 150, 146, 149, 199, 145, 149, 37, 144, + 149, 57, 145, 149, 251, 144, 149, 164, 145, 149, 96, 144, 149, 108, 145, 149, 145, 144, 149, 10, 145, 149, 11, + 146, 149, 202, 145, 149, 165, 144, 149, 185, 145, 149, 167, 144, 149, 115, 145, 149, 181, 144, 149, 217, 143, + 149, 249, 144, 149, 136, 143, 149, 218, 144, 149, 168, 145, 149, 249, 144, 149, 148, 143, 149, 62, 142, 149, + 77, 143, 149, 21, 142, 149, 204, 143, 149, 102, 144, 149, 75, 143, 149, 0, 144, 149, 4, 143, 149, 222, 144, + 149, 101, 143, 149, 205, 144, 149, 224, 145, 149, 124, 144, 149, 120, 143, 149, 193, 144, 149, 80, 145, 149, + 31, 144, 149, 217, 143, 149, 41, 144, 149, 180, 143, 149, 231, 144, 149, 174, 144, 148, 26, 143, 148, 171, + 144, 148, 107, 144, 149, 62, 143, 149, 93, 144, 149, 156, 143, 149, 117, 144, 149, 50, 143, 149, 212, 142, + 149, 14, 141, 149, 29, 142, 149, 210, 143, 149, 230, 144, 149, 22, 145, 149, 101, 144, 149, 2, 143, 149, 144, + 144, 149, 32, 143, 149, 197, 144, 149, 105, 143, 149, 172, 144, 149, 102, 145, 149, 209, 144, 149, 98, 145, + 149, 147, 144, 149, 29, 145, 149, 17, 144, 149, 191, 143, 149, 217, 144, 149, 117, 145, 149, 35, 144, 149, + 130, 143, 149, 87, 144, 149, 222, 143, 149, 0, 144, 149, 160, 143, 149, 4, 144, 149, 172, 143, 149, 38, 144, + 149, 182, 145, 149, 222, 144, 149, 88, 143, 149, 36, 144, 149, 204, 143, 149, 111, 144, 149, 117, 143, 149, + 32, 144, 149, 41, 143, 149, 154, 144, 149, 157, 143, 149, 62, 142, 149, 42, 143, 149, 61, 144, 149, 58, 143, + 149, 3, 144, 149, 143, 143, 149, 11, 142, 149, 84, 141, 149, 44, 142, 149, 197, 142, 148, 220, 141, 148, 239, + 142, 148, 232, 143, 148, 102, 142, 148, 199, 141, 148, 232, 142, 148, 163, 143, 148, 81, 142, 148, 146, 141, + 148, 104, 142, 148, 160, 141, 148, 26, 142, 148, 212, 141, 148, 212, 142, 147, 45, 143, 147, 58, 142, 147, + 161, 143, 147, 196, 142, 147, 206, 143, 147, 40, 144, 147, 137, 143, 147, 225, 144, 147, 75, 143, 147, 27, + 144, 147, 27, 143, 147, 11, 144, 147, 78, 143, 147, 73, 144, 147, 42, 143, 147, 132, 144, 147, 242, 143, 147, + 85, 144, 147, 220, 143, 147, 26, 144, 147, 185, 143, 147, 249, 144, 147, 155, 143, 147, 236, 144, 147, 20, + 143, 147, 80, 142, 147, 116, 143, 147, 221, 142, 147, 97, 143, 147, 189, 142, 147, 86, 143, 147, 158, 142, + 147, 13, 143, 147, 104, 142, 147, 238, 143, 147, 86, 144, 147, 58, 143, 147, 206, 144, 147, 195, 143, 147, 40, + 144, 147, 137, 143, 147, 140, 142, 147, 217, 143, 147, 68, 142, 147, 203, 143, 147, 110, 142, 147, 227, 143, + 147, 99, 142, 147, 210, 143, 147, 25, 144, 147, 22, 143, 147, 124, 144, 147, 107, 143, 147, 109, 144, 147, 1, + 143, 147, 169, 144, 147, 136, 143, 147, 209, 142, 147, 232, 141, 147, 255, 142, 147, 89, 143, 147, 108, 142, + 147, 245, + ]), + 3.2135786101857895, + 0.20096855835227007, + 3.0467173362642037, + ], + [ + 'automated movement', + new Uint8Array([ + 95, 124, 66, 96, 123, 85, 98, 122, 117, 98, 121, 122, 99, 121, 128, 99, 120, 140, 100, 120, 145, 100, 119, + 153, 101, 118, 170, 102, 118, 174, 102, 117, 182, 103, 117, 201, 103, 116, 206, 104, 116, 212, 104, 115, 224, + 105, 115, 230, 105, 114, 237, 106, 114, 243, 106, 113, 146, 106, 112, 162, 106, 111, 183, 106, 110, 188, 106, + 109, 214, 106, 108, 231, 106, 107, 243, 106, 106, 13, 106, 105, 19, 106, 104, 43, 106, 103, 57, 106, 102, 75, + 106, 101, 100, 106, 100, 107, 106, 99, 131, 106, 98, 145, 106, 97, 166, 106, 96, 173, 106, 95, 191, 106, 94, + 209, 106, 93, 227, 106, 92, 252, 106, 91, 2, 106, 90, 31, 106, 89, 43, 106, 88, 59, 106, 87, 73, 106, 86, 92, + 106, 85, 117, 106, 84, 129, 106, 83, 146, 106, 82, 159, 106, 81, 177, 106, 80, 191, 106, 79, 213, 106, 78, + 232, 106, 77, 244, 106, 76, 6, 106, 75, 25, 106, 74, 44, 106, 73, 51, 106, 72, 75, 106, 71, 95, 106, 70, 105, + 107, 70, 122, 108, 70, 147, 109, 70, 159, 110, 70, 183, 111, 70, 188, 112, 70, 206, 113, 70, 225, 114, 70, + 242, 115, 70, 255, 116, 70, 17, 117, 70, 41, 118, 70, 53, 119, 70, 73, 120, 70, 87, 121, 70, 105, 122, 70, + 116, 123, 70, 142, 124, 70, 159, 125, 70, 172, 126, 70, 192, 127, 70, 205, 128, 70, 230, 129, 70, 235, 130, + 70, 3, 131, 70, 22, 132, 70, 34, 133, 70, 57, 134, 70, 63, 135, 70, 87, 136, 70, 100, 137, 70, 118, 138, 70, + 140, 139, 70, 145, 140, 70, 170, 141, 70, 182, 142, 70, 202, 143, 70, 215, 144, 70, 234, 145, 70, 1, 146, 70, + 13, 147, 70, 29, 148, 70, 41, 149, 70, 59, 149, 71, 83, 149, 72, 94, 149, 73, 119, 149, 74, 137, 149, 75, 149, + 149, 76, 167, 149, 77, 186, 149, 78, 206, 149, 79, 213, 149, 80, 235, 149, 81, 254, 149, 82, 16, 149, 83, 36, + 149, 84, 42, 149, 85, 67, 149, 86, 78, 149, 87, 104, 149, 88, 125, 149, 89, 137, 149, 90, 156, 149, 91, 166, + 149, 92, 191, 149, 93, 198, 149, 94, 222, 149, 95, 242, 149, 96, 253, 149, 97, 21, 149, 98, 27, 149, 99, 53, + 149, 100, 67, 149, 101, 85, 149, 102, 98, 149, 103, 117, 149, 104, 139, 149, 105, 154, 149, 106, 172, 149, + 107, 185, 149, 108, 203, 149, 109, 216, 149, 110, 240, 149, 111, 2, 149, 112, 14, 149, 113, 34, 149, 114, 45, + 148, 114, 63, 147, 114, 87, 146, 114, 95, 145, 114, 118, 144, 114, 131, 143, 114, 150, 142, 114, 173, 141, + 114, 178, 140, 114, 202, 139, 114, 214, 138, 114, 232, 137, 114, 244, 136, 114, 6, 135, 114, 31, 134, 114, 43, + 133, 114, 63, 132, 114, 74, 131, 114, 92, 130, 114, 110, 129, 114, 129, 128, 114, 154, 127, 114, 159, 126, + 114, 177, 125, 114, 197, 124, 114, 215, 123, 114, 220, 122, 114, 243, 121, 114, 14, 120, 114, 25, 119, 114, + 46, 118, 114, 57, 117, 114, 74, 116, 114, 87, 115, 114, 113, 114, 114, 135, 113, 114, 143, 112, 114, 164, 111, + 114, 174, 110, 114, 199, 109, 114, 204, 108, 114, 229, 107, 114, 242, 106, 114, 3, 106, 113, 14, 107, 113, 21, + 107, 112, 27, 108, 112, 46, 108, 111, 52, 109, 110, 60, 110, 109, 84, 111, 109, 88, 111, 108, 101, 112, 108, + 107, 112, 107, 113, 113, 107, 125, 113, 106, 137, 114, 105, 144, 115, 105, 157, 115, 104, 168, 116, 104, 175, + 116, 103, 180, 117, 102, 198, 118, 102, 210, 118, 101, 223, 119, 100, 227, 120, 100, 240, 120, 99, 251, 121, + 99, 1, 121, 98, 8, 122, 98, 11, 122, 97, 30, 123, 96, 36, 124, 95, 53, 125, 95, 65, 125, 94, 71, 126, 94, 84, + 126, 93, 91, 127, 93, 96, 127, 92, 114, 128, 91, 121, 129, 91, 127, 129, 90, 146, 130, 90, 152, 130, 89, 158, + 131, 89, 171, 131, 88, 177, 132, 88, 184, 132, 87, 190, 133, 86, 208, 134, 86, 218, 134, 85, 236, 135, 85, + 242, 135, 84, 248, 136, 84, 253, 136, 83, 9, 137, 83, 16, 137, 82, 21, 138, 81, 39, 139, 81, 45, 139, 80, 50, + 140, 80, 68, 140, 79, 76, 141, 79, 82, 141, 78, 95, 142, 78, 101, 142, 77, 109, 143, 77, 115, 143, 76, 129, + 144, 76, 134, 144, 75, 140, 145, 75, 157, 145, 74, 164, 146, 73, 169, 147, 73, 188, 147, 72, 194, 148, 72, + 200, 148, 71, 213, 149, 71, 218, 149, 70, 224, 149, 69, 137, 149, 68, 144, 149, 67, 167, 149, 66, 179, 149, + 65, 197, 149, 64, 221, 149, 63, 227, 149, 62, 250, 149, 61, 6, 149, 60, 26, 149, 59, 37, 149, 58, 56, 149, 57, + 78, 149, 56, 91, 149, 55, 114, 149, 54, 120, 149, 53, 138, 149, 52, 155, 149, 51, 173, 149, 50, 195, 149, 49, + 201, 149, 48, 225, 149, 47, 238, 149, 46, 254, 149, 45, 10, 149, 44, 28, 149, 43, 40, 149, 42, 66, 149, 41, + 83, 149, 40, 98, 149, 39, 115, 149, 38, 127, + ]), + 2.4080156603419205, + 0.36015925971968366, + 2.1966890259747025, + ], + ])('makes sense with data from %s', (title, inputdata, entropy, entropyNoTime, entropyOnlyTime) => { + expect(inputdata.length % 3).toBe(0); + expect(inputdata.length).toBeGreaterThanOrEqual(900); + const data = new EntropyData(); + const dataNoTime = new EntropyData(); + const dataOnlyTime = new EntropyData(); + for (let i = 0; i < inputdata.length; i += 3) { + const x = inputdata[i]; + const y = inputdata[i + 1]; + const t = inputdata[i + 2]; + data.addFrame({x, y, t}); + dataNoTime.addFrame({x: x, y: y, t: 0}); + dataOnlyTime.addFrame({x: 0, y: 0, t: t}, false); + } + expect(data.entropyData.length).toBe(inputdata.length); + expect(dataNoTime.entropyData.length).toBe(inputdata.length); + expect(dataOnlyTime.entropyData.length).toBe(inputdata.length); + expect(data.entropyBits / data.entropyData.length).toBe(entropy); + expect(dataNoTime.entropyBits / data.entropyData.length).toBe(entropyNoTime); + expect(dataOnlyTime.entropyBits / data.entropyData.length).toBe(entropyOnlyTime); }); }); }); diff --git a/src/script/util/Entropy.ts b/src/script/util/Entropy.ts index 3205e31dc18..59825e8e71a 100644 --- a/src/script/util/Entropy.ts +++ b/src/script/util/Entropy.ts @@ -20,7 +20,7 @@ export interface EntropyFrame { x: number; y: number; - t?: number; + t: number; } /** @@ -74,7 +74,7 @@ export class EntropyData { this.frames.reduce((acc: number[], val: EntropyFrame) => { acc.push(val.x); acc.push(val.y); - acc.push(val.t || 0); + acc.push(val.t); return acc; }, []), ); @@ -83,15 +83,27 @@ export class EntropyData { get entropyBits(): number { const entropyData = this.entropyData; const entropy = shannonEntropy(entropyData); - const deltaValues = calculateDeltaValues(entropyData, ~~(entropyData.length / this.frames.length)); + const valuesPerFrame = ~~(entropyData.length / this.frames.length); + // 1st derivation + const deltaValues = calculateDeltaValues(entropyData, valuesPerFrame); const deltaEntropy = shannonEntropy(deltaValues); + // 2nd derivation + const delta2Values = calculateDeltaValues(deltaValues, valuesPerFrame); + const delta2Entropy = shannonEntropy(delta2Values); + // 3rd derivation + const delta3Values = calculateDeltaValues(delta2Values, valuesPerFrame); + const delta3Entropy = shannonEntropy(delta3Values); - return Math.min(entropy * entropyData.length, deltaEntropy * deltaValues.length); + return Math.min(entropy, deltaEntropy, delta2Entropy, delta3Entropy) * entropyData.length; } - addFrame(value: EntropyFrame): void { + addFrame(value: EntropyFrame, duplicateCheck = true): void { + value.x &= 0xff; + value.y &= 0xff; + value.t &= 0xff; // skip duplicate entries if ( + duplicateCheck && this.frames.length > 0 && this.frames[this.frames.length - 1].x === value.x && this.frames[this.frames.length - 1].y === value.y diff --git a/yarn.lock b/yarn.lock index 008b9fe7476..a292a34f5f9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3682,6 +3682,13 @@ __metadata: languageName: node linkType: hard +"@types/seedrandom@npm:^3": + version: 3.0.2 + resolution: "@types/seedrandom@npm:3.0.2" + checksum: 02e585601cb9764cb0eb3f92b384512f8e171422acea3d5a801a41a8a06d475b60ae520eba469bcedf0ed8ad650415919cf30a9cd6bc57090613e61bedc071ed + languageName: node + linkType: hard + "@types/semver@npm:^7.3.12": version: 7.3.12 resolution: "@types/semver@npm:7.3.12" @@ -14393,6 +14400,13 @@ __metadata: languageName: node linkType: hard +"seedrandom@npm:^3.0.5": + version: 3.0.5 + resolution: "seedrandom@npm:3.0.5" + checksum: 728b56bc3bc1b9ddeabd381e449b51cb31bdc0aa86e27fcd0190cea8c44613d5bcb2f6bb63ed79f78180cbe791c20b8ec31a9627f7b7fc7f476fd2bdb7e2da9f + languageName: node + linkType: hard + "semver@npm:2 || 3 || 4 || 5, semver@npm:^5.6.0": version: 5.7.1 resolution: "semver@npm:5.7.1" @@ -16516,6 +16530,7 @@ __metadata: "@types/react-redux": 7.1.24 "@types/react-transition-group": 4.4.5 "@types/redux-mock-store": 1.0.3 + "@types/seedrandom": ^3 "@types/sinon": 10.0.13 "@types/speakingurl": 13.0.3 "@types/uint32": 0.2.0 @@ -16623,6 +16638,7 @@ __metadata: redux-logdown: 1.0.4 redux-mock-store: 1.5.4 redux-thunk: 2.4.2 + seedrandom: ^3.0.5 simple-git: 3.14.1 sinon: 14.0.2 snabbdom: 3.5.1 From 2f308999cf247ee34a50c9c32b5a03586f4d46d4 Mon Sep 17 00:00:00 2001 From: Arjita Date: Wed, 30 Nov 2022 17:04:07 +0100 Subject: [PATCH 034/329] fix: Remove title from conversation list cell, announce the message for screen reader only(ACC-314) (#14196) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: Remove title from conversation list cell, announce the keyboard shortcut for screen reader only(ACC-314) * Update src/script/components/list/ConversationListCell.tsx Co-authored-by: Przemysław Jóźwik * fix: lint error(ACC-314) Co-authored-by: Przemysław Jóźwik --- src/script/components/list/ConversationListCell.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/script/components/list/ConversationListCell.tsx b/src/script/components/list/ConversationListCell.tsx index 4d55be9fba2..58fbd614205 100644 --- a/src/script/components/list/ConversationListCell.tsx +++ b/src/script/components/list/ConversationListCell.tsx @@ -108,6 +108,7 @@ const ConversationListCell: React.FC = ({ const contextMenuRef = useRef(null); const [focusContextMenu, setContextMenuFocus] = useState(false); const [isContextMenuOpen, setContextMenuOpen] = useState(false); + const contextMenuKeyboardShortcut = `keyboard-shortcut-${conversation.id}`; const openContextMenu = (event: MouseEvent | React.MouseEvent) => { event.stopPropagation(); @@ -196,8 +197,9 @@ const ConversationListCell: React.FC = ({ data-uie-name="go-open-conversation" tabIndex={focusConversation ? 0 : -1} aria-label={t('accessibility.openConversation', displayName)} - title={t('accessibility.conversationOptionsMenuAccessKey')} + aria-describedby={contextMenuKeyboardShortcut} > +
    Date: Wed, 30 Nov 2022 16:05:23 +0000 Subject: [PATCH 035/329] chore(deps-dev): Bump jest and @types/jest (#14197) Bumps [jest](https://github.com/facebook/jest/tree/HEAD/packages/jest) and [@types/jest](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jest). These dependencies needed to be updated together. Updates `jest` from 29.2.2 to 29.3.1 - [Release notes](https://github.com/facebook/jest/releases) - [Changelog](https://github.com/facebook/jest/blob/main/CHANGELOG.md) - [Commits](https://github.com/facebook/jest/commits/v29.3.1/packages/jest) Updates `@types/jest` from 29.2.2 to 29.2.3 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/jest) --- updated-dependencies: - dependency-name: jest dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: "@types/jest" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 4 +- yarn.lock | 494 +++++++++++++++------------------------------------ 2 files changed, 143 insertions(+), 355 deletions(-) diff --git a/package.json b/package.json index 203ee824cfb..a60c99da32f 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,7 @@ "@types/fs-extra": "9.0.13", "@types/generate-changelog": "1.8.1", "@types/highlight.js": "10.1.0", - "@types/jest": "29.2.2", + "@types/jest": "29.2.3", "@types/jquery": "^3", "@types/js-cookie": "3.0.2", "@types/jsdom": "20.0.1", @@ -135,7 +135,7 @@ "husky": "7.0.4", "i18next-scanner": "4.1.0", "intersection-observer": "0.12.2", - "jest": "29.2.2", + "jest": "29.3.1", "jest-canvas-mock": "2.4.0", "jest-environment-jsdom": "29.2.2", "jest-jasmine2": "29.3.1", diff --git a/yarn.lock b/yarn.lock index a292a34f5f9..857ad03ace8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2350,20 +2350,6 @@ __metadata: languageName: node linkType: hard -"@jest/console@npm:^29.2.1": - version: 29.2.1 - resolution: "@jest/console@npm:29.2.1" - dependencies: - "@jest/types": ^29.2.1 - "@types/node": "*" - chalk: ^4.0.0 - jest-message-util: ^29.2.1 - jest-util: ^29.2.1 - slash: ^3.0.0 - checksum: b5f08dc60c32a0212d27782cda86dfeba6d53f24cd023e6e52257224948a17eec77db55782ba1b18e37f10b7ba2481464e6c658bafaba6f8f8f129f1e95c3496 - languageName: node - linkType: hard - "@jest/console@npm:^29.3.1": version: 29.3.1 resolution: "@jest/console@npm:29.3.1" @@ -2378,15 +2364,15 @@ __metadata: languageName: node linkType: hard -"@jest/core@npm:^29.2.2": - version: 29.2.2 - resolution: "@jest/core@npm:29.2.2" +"@jest/core@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/core@npm:29.3.1" dependencies: - "@jest/console": ^29.2.1 - "@jest/reporters": ^29.2.2 - "@jest/test-result": ^29.2.1 - "@jest/transform": ^29.2.2 - "@jest/types": ^29.2.1 + "@jest/console": ^29.3.1 + "@jest/reporters": ^29.3.1 + "@jest/test-result": ^29.3.1 + "@jest/transform": ^29.3.1 + "@jest/types": ^29.3.1 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 @@ -2394,20 +2380,20 @@ __metadata: exit: ^0.1.2 graceful-fs: ^4.2.9 jest-changed-files: ^29.2.0 - jest-config: ^29.2.2 - jest-haste-map: ^29.2.1 - jest-message-util: ^29.2.1 + jest-config: ^29.3.1 + jest-haste-map: ^29.3.1 + jest-message-util: ^29.3.1 jest-regex-util: ^29.2.0 - jest-resolve: ^29.2.2 - jest-resolve-dependencies: ^29.2.2 - jest-runner: ^29.2.2 - jest-runtime: ^29.2.2 - jest-snapshot: ^29.2.2 - jest-util: ^29.2.1 - jest-validate: ^29.2.2 - jest-watcher: ^29.2.2 + jest-resolve: ^29.3.1 + jest-resolve-dependencies: ^29.3.1 + jest-runner: ^29.3.1 + jest-runtime: ^29.3.1 + jest-snapshot: ^29.3.1 + jest-util: ^29.3.1 + jest-validate: ^29.3.1 + jest-watcher: ^29.3.1 micromatch: ^4.0.4 - pretty-format: ^29.2.1 + pretty-format: ^29.3.1 slash: ^3.0.0 strip-ansi: ^6.0.0 peerDependencies: @@ -2415,7 +2401,7 @@ __metadata: peerDependenciesMeta: node-notifier: optional: true - checksum: 47c867fce6484b9716d030e81819ef72effb23fa60ec3f46f631be7ced84fa10f50b409a933423add50a4ac917028c9b4ea7b62ba3a1fbd8b4516a2067bd1740 + checksum: e3ac9201e8a084ccd832b17877b56490402b919f227622bb24f9372931e77b869e60959d34144222ce20fb619d0a6a6be20b257adb077a6b0f430a4584a45b0f languageName: node linkType: hard @@ -2461,16 +2447,6 @@ __metadata: languageName: node linkType: hard -"@jest/expect@npm:^29.2.2": - version: 29.2.2 - resolution: "@jest/expect@npm:29.2.2" - dependencies: - expect: ^29.2.2 - jest-snapshot: ^29.2.2 - checksum: 85735d27a49b122083171b3001fc66c804d9f7e16143544d9363389838797fdef5cbc736c560014b63cc3601ad45058a75a4a275147e43d146fde23afd6b19ce - languageName: node - linkType: hard - "@jest/expect@npm:^29.3.1": version: 29.3.1 resolution: "@jest/expect@npm:29.3.1" @@ -2509,18 +2485,6 @@ __metadata: languageName: node linkType: hard -"@jest/globals@npm:^29.2.2": - version: 29.2.2 - resolution: "@jest/globals@npm:29.2.2" - dependencies: - "@jest/environment": ^29.2.2 - "@jest/expect": ^29.2.2 - "@jest/types": ^29.2.1 - jest-mock: ^29.2.2 - checksum: 94adec44b31b84cdd3f51abf1d824bb62acfa7e0d60b9f7a960fa8677ec5894389262bf6f7fc7fab5b4cce05e3337d0d117a2846faa27dfdff736d6a9585469d - languageName: node - linkType: hard - "@jest/globals@npm:^29.3.1": version: 29.3.1 resolution: "@jest/globals@npm:29.3.1" @@ -2533,15 +2497,15 @@ __metadata: languageName: node linkType: hard -"@jest/reporters@npm:^29.2.2": - version: 29.2.2 - resolution: "@jest/reporters@npm:29.2.2" +"@jest/reporters@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/reporters@npm:29.3.1" dependencies: "@bcoe/v8-coverage": ^0.2.3 - "@jest/console": ^29.2.1 - "@jest/test-result": ^29.2.1 - "@jest/transform": ^29.2.2 - "@jest/types": ^29.2.1 + "@jest/console": ^29.3.1 + "@jest/test-result": ^29.3.1 + "@jest/transform": ^29.3.1 + "@jest/types": ^29.3.1 "@jridgewell/trace-mapping": ^0.3.15 "@types/node": "*" chalk: ^4.0.0 @@ -2554,9 +2518,9 @@ __metadata: istanbul-lib-report: ^3.0.0 istanbul-lib-source-maps: ^4.0.0 istanbul-reports: ^3.1.3 - jest-message-util: ^29.2.1 - jest-util: ^29.2.1 - jest-worker: ^29.2.1 + jest-message-util: ^29.3.1 + jest-util: ^29.3.1 + jest-worker: ^29.3.1 slash: ^3.0.0 string-length: ^4.0.1 strip-ansi: ^6.0.0 @@ -2566,7 +2530,7 @@ __metadata: peerDependenciesMeta: node-notifier: optional: true - checksum: c8d8c4bd08c2f268bc2df4aba92d55b42cbec2cb0dbffcb33a455c147f80430ea962d3829225370f831e16ca66e55f31ff8e4687546dec05b520fd1ace7a8502 + checksum: 273e0c6953285f01151e9d84ac1e55744802a1ec79fb62dafeea16a49adfe7b24e7f35bef47a0214e5e057272dbfdacf594208286b7766046fd0f3cfa2043840 languageName: node linkType: hard @@ -2590,18 +2554,6 @@ __metadata: languageName: node linkType: hard -"@jest/test-result@npm:^29.2.1": - version: 29.2.1 - resolution: "@jest/test-result@npm:29.2.1" - dependencies: - "@jest/console": ^29.2.1 - "@jest/types": ^29.2.1 - "@types/istanbul-lib-coverage": ^2.0.0 - collect-v8-coverage: ^1.0.0 - checksum: 8f5f069dcfd54413559544f164950503d6cef587e3596a134a868c11e6b3fe6a99cc691732027500c962bdd22bc46685798b006a5b542359b30883e0d2489615 - languageName: node - linkType: hard - "@jest/test-result@npm:^29.3.1": version: 29.3.1 resolution: "@jest/test-result@npm:29.3.1" @@ -2614,38 +2566,15 @@ __metadata: languageName: node linkType: hard -"@jest/test-sequencer@npm:^29.2.2": - version: 29.2.2 - resolution: "@jest/test-sequencer@npm:29.2.2" - dependencies: - "@jest/test-result": ^29.2.1 - graceful-fs: ^4.2.9 - jest-haste-map: ^29.2.1 - slash: ^3.0.0 - checksum: 05a9a218e7ac8f574da3a2c5a85d420d3643124bbb31374675e57c6f6a49ffd942e79514d0f2fa173542e8e5ee7ec544e908aced9958d3523c895ba6c2c03691 - languageName: node - linkType: hard - -"@jest/transform@npm:^29.2.2": - version: 29.2.2 - resolution: "@jest/transform@npm:29.2.2" +"@jest/test-sequencer@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/test-sequencer@npm:29.3.1" dependencies: - "@babel/core": ^7.11.6 - "@jest/types": ^29.2.1 - "@jridgewell/trace-mapping": ^0.3.15 - babel-plugin-istanbul: ^6.1.1 - chalk: ^4.0.0 - convert-source-map: ^1.4.0 - fast-json-stable-stringify: ^2.1.0 + "@jest/test-result": ^29.3.1 graceful-fs: ^4.2.9 - jest-haste-map: ^29.2.1 - jest-regex-util: ^29.2.0 - jest-util: ^29.2.1 - micromatch: ^4.0.4 - pirates: ^4.0.4 + jest-haste-map: ^29.3.1 slash: ^3.0.0 - write-file-atomic: ^4.0.1 - checksum: ac12069100c260d1c46e5048bbad35bf0b5408592b918692b87a52c1c0c0e189c9f37ecf48dbcaa6f00ef083e1bc68201844999e1c0f66cd4d9b70127bf77537 + checksum: a8325b1ea0ce644486fb63bb67cedd3524d04e3d7b1e6c1e3562bf12ef477ecd0cf34044391b2a07d925e1c0c8b4e0f3285035ceca3a474a2c55980f1708caf3 languageName: node linkType: hard @@ -3419,13 +3348,13 @@ __metadata: languageName: node linkType: hard -"@types/jest@npm:29.2.2": - version: 29.2.2 - resolution: "@types/jest@npm:29.2.2" +"@types/jest@npm:29.2.3": + version: 29.2.3 + resolution: "@types/jest@npm:29.2.3" dependencies: expect: ^29.0.0 pretty-format: ^29.0.0 - checksum: 13b1a48858c8c451109c2838205fdcee6f41d672674d2f0e3cada35e94f133370aba4f4b5c3f5b174f3e16244d76d7d718afa7cc67d4d6f90d1b87951f4c87c3 + checksum: 55370906711b600a05b9e497c22aa74d80d8adcdbe4ac2f1bc9311f6f6ca0dd192862b6f38df6ac0d45e92396bcd796e377b1d8058c10bdfd584aeee580c3ce1 languageName: node linkType: hard @@ -5080,11 +5009,11 @@ __metadata: languageName: node linkType: hard -"babel-jest@npm:^29.2.2": - version: 29.2.2 - resolution: "babel-jest@npm:29.2.2" +"babel-jest@npm:^29.3.1": + version: 29.3.1 + resolution: "babel-jest@npm:29.3.1" dependencies: - "@jest/transform": ^29.2.2 + "@jest/transform": ^29.3.1 "@types/babel__core": ^7.1.14 babel-plugin-istanbul: ^6.1.1 babel-preset-jest: ^29.2.0 @@ -5093,7 +5022,7 @@ __metadata: slash: ^3.0.0 peerDependencies: "@babel/core": ^7.8.0 - checksum: 35f0eb895ab9218b55cacedbfe62dd94c99924d89a0a8096354c4fbb4c8465c0a2c4aba82e5bedf367def6c89635f4f134c7ebc22f07b6f9c930f7b43b7bbdde + checksum: 793848238a771a931ddeb5930b9ec8ab800522ac8d64933665698f4a39603d157e572e20b57d79610277e1df88d3ee82b180d59a21f3570388f602beeb38a595 languageName: node linkType: hard @@ -5938,7 +5867,7 @@ __metadata: languageName: node linkType: hard -"convert-source-map@npm:^1.4.0, convert-source-map@npm:^1.5.0, convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": +"convert-source-map@npm:^1.5.0, convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": version: 1.7.0 resolution: "convert-source-map@npm:1.7.0" dependencies: @@ -7733,7 +7662,7 @@ __metadata: languageName: node linkType: hard -"expect@npm:^29.0.0, expect@npm:^29.2.2": +"expect@npm:^29.0.0": version: 29.2.2 resolution: "expect@npm:29.2.2" dependencies: @@ -9640,47 +9569,47 @@ __metadata: languageName: node linkType: hard -"jest-circus@npm:^29.2.2": - version: 29.2.2 - resolution: "jest-circus@npm:29.2.2" +"jest-circus@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-circus@npm:29.3.1" dependencies: - "@jest/environment": ^29.2.2 - "@jest/expect": ^29.2.2 - "@jest/test-result": ^29.2.1 - "@jest/types": ^29.2.1 + "@jest/environment": ^29.3.1 + "@jest/expect": ^29.3.1 + "@jest/test-result": ^29.3.1 + "@jest/types": ^29.3.1 "@types/node": "*" chalk: ^4.0.0 co: ^4.6.0 dedent: ^0.7.0 is-generator-fn: ^2.0.0 - jest-each: ^29.2.1 - jest-matcher-utils: ^29.2.2 - jest-message-util: ^29.2.1 - jest-runtime: ^29.2.2 - jest-snapshot: ^29.2.2 - jest-util: ^29.2.1 + jest-each: ^29.3.1 + jest-matcher-utils: ^29.3.1 + jest-message-util: ^29.3.1 + jest-runtime: ^29.3.1 + jest-snapshot: ^29.3.1 + jest-util: ^29.3.1 p-limit: ^3.1.0 - pretty-format: ^29.2.1 + pretty-format: ^29.3.1 slash: ^3.0.0 stack-utils: ^2.0.3 - checksum: 0c292c4391c7a8455172343a47710882dd077c989946feaf3979771d3013b8c5ee0548f9c63ec063010dbee6ee6aa4dfc6a295720ff2bf31322de34164489b8b + checksum: 125710debd998ad9693893e7c1235e271b79f104033b8169d82afe0bc0d883f8f5245feef87adcbb22ad27ff749fd001aa998d11a132774b03b4e2b8af77d5d8 languageName: node linkType: hard -"jest-cli@npm:^29.2.2": - version: 29.2.2 - resolution: "jest-cli@npm:29.2.2" +"jest-cli@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-cli@npm:29.3.1" dependencies: - "@jest/core": ^29.2.2 - "@jest/test-result": ^29.2.1 - "@jest/types": ^29.2.1 + "@jest/core": ^29.3.1 + "@jest/test-result": ^29.3.1 + "@jest/types": ^29.3.1 chalk: ^4.0.0 exit: ^0.1.2 graceful-fs: ^4.2.9 import-local: ^3.0.2 - jest-config: ^29.2.2 - jest-util: ^29.2.1 - jest-validate: ^29.2.2 + jest-config: ^29.3.1 + jest-util: ^29.3.1 + jest-validate: ^29.3.1 prompts: ^2.0.1 yargs: ^17.3.1 peerDependencies: @@ -9690,34 +9619,34 @@ __metadata: optional: true bin: jest: bin/jest.js - checksum: 95ba7fde0a88d1fd347cd1db4810fbae096c87256b260f8deef7c4b12fd6722d2a31b0a2c0e321e5fc74215d06725195d04c32761279bc8571fe069fd0b0581a + checksum: 829895d33060042443bd1e9e87eb68993773d74f2c8a9b863acf53cece39d227ae0e7d76df2e9c5934c414bdf70ce398a34b3122cfe22164acb2499a74d7288d languageName: node linkType: hard -"jest-config@npm:^29.2.2": - version: 29.2.2 - resolution: "jest-config@npm:29.2.2" +"jest-config@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-config@npm:29.3.1" dependencies: "@babel/core": ^7.11.6 - "@jest/test-sequencer": ^29.2.2 - "@jest/types": ^29.2.1 - babel-jest: ^29.2.2 + "@jest/test-sequencer": ^29.3.1 + "@jest/types": ^29.3.1 + babel-jest: ^29.3.1 chalk: ^4.0.0 ci-info: ^3.2.0 deepmerge: ^4.2.2 glob: ^7.1.3 graceful-fs: ^4.2.9 - jest-circus: ^29.2.2 - jest-environment-node: ^29.2.2 + jest-circus: ^29.3.1 + jest-environment-node: ^29.3.1 jest-get-type: ^29.2.0 jest-regex-util: ^29.2.0 - jest-resolve: ^29.2.2 - jest-runner: ^29.2.2 - jest-util: ^29.2.1 - jest-validate: ^29.2.2 + jest-resolve: ^29.3.1 + jest-runner: ^29.3.1 + jest-util: ^29.3.1 + jest-validate: ^29.3.1 micromatch: ^4.0.4 parse-json: ^5.2.0 - pretty-format: ^29.2.1 + pretty-format: ^29.3.1 slash: ^3.0.0 strip-json-comments: ^3.1.1 peerDependencies: @@ -9728,7 +9657,7 @@ __metadata: optional: true ts-node: optional: true - checksum: 9da0013a1db22ecc594e86a7fea9475175d5ec9ed776ce237672e8be138cea21b68dd9677665c6b316ec4c1aa70a91537861e16ff8938dce44837e71d8f0b5db + checksum: 6e663f04ae1024a53a4c2c744499b4408ca9a8b74381dd5e31b11bb3c7393311ecff0fb61b06287768709eb2c9e5a2fd166d258f5a9123abbb4c5812f99c12fe languageName: node linkType: hard @@ -9765,19 +9694,6 @@ __metadata: languageName: node linkType: hard -"jest-each@npm:^29.2.1": - version: 29.2.1 - resolution: "jest-each@npm:29.2.1" - dependencies: - "@jest/types": ^29.2.1 - chalk: ^4.0.0 - jest-get-type: ^29.2.0 - jest-util: ^29.2.1 - pretty-format: ^29.2.1 - checksum: 877bd64a08ff4245400c4d84d65a6fb87898e53498b65f53915c7e66e66bf49a4559bc5ca584a3dab57251e88815f48c1053e40c0c1017fbb7d9813f40eb25b8 - languageName: node - linkType: hard - "jest-each@npm:^29.3.1": version: 29.3.1 resolution: "jest-each@npm:29.3.1" @@ -9812,17 +9728,17 @@ __metadata: languageName: node linkType: hard -"jest-environment-node@npm:^29.2.2": - version: 29.2.2 - resolution: "jest-environment-node@npm:29.2.2" +"jest-environment-node@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-environment-node@npm:29.3.1" dependencies: - "@jest/environment": ^29.2.2 - "@jest/fake-timers": ^29.2.2 - "@jest/types": ^29.2.1 + "@jest/environment": ^29.3.1 + "@jest/fake-timers": ^29.3.1 + "@jest/types": ^29.3.1 "@types/node": "*" - jest-mock: ^29.2.2 - jest-util: ^29.2.1 - checksum: 06046c31f664f37b2fcf2dd85fbb3818ab15ee12570f707a6fdfc6b6009cce2444564a531bbb44acc4eff06cc86dc1070786fe79fab1c5ba7f6a9ded482957f1 + jest-mock: ^29.3.1 + jest-util: ^29.3.1 + checksum: 16d4854bd2d35501bd4862ca069baf27ce9f5fd7642fdcab9d2dab49acd28c082d0c8882bf2bb28ed7bbaada486da577c814c9688ddc62d1d9f74a954fde996a languageName: node linkType: hard @@ -9833,29 +9749,6 @@ __metadata: languageName: node linkType: hard -"jest-haste-map@npm:^29.2.1": - version: 29.2.1 - resolution: "jest-haste-map@npm:29.2.1" - dependencies: - "@jest/types": ^29.2.1 - "@types/graceful-fs": ^4.1.3 - "@types/node": "*" - anymatch: ^3.0.3 - fb-watchman: ^2.0.0 - fsevents: ^2.3.2 - graceful-fs: ^4.2.9 - jest-regex-util: ^29.2.0 - jest-util: ^29.2.1 - jest-worker: ^29.2.1 - micromatch: ^4.0.4 - walker: ^1.0.8 - dependenciesMeta: - fsevents: - optional: true - checksum: 1880e5dd12b83c8ffbd527b80c81bd694a9018ed003d1ecc72ed4e1a0c2be0bc2a26a96c7439c4be8954912cd01ecaea807d2739b24d2ac7dd23f5aa672d9da1 - languageName: node - linkType: hard - "jest-haste-map@npm:^29.3.1": version: 29.3.1 resolution: "jest-haste-map@npm:29.3.1" @@ -9904,13 +9797,13 @@ __metadata: languageName: node linkType: hard -"jest-leak-detector@npm:^29.2.1": - version: 29.2.1 - resolution: "jest-leak-detector@npm:29.2.1" +"jest-leak-detector@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-leak-detector@npm:29.3.1" dependencies: jest-get-type: ^29.2.0 - pretty-format: ^29.2.1 - checksum: c30107ae583c7b1a30b8ac32f98997597ac5c46c243ef69a2b4bbaf803eefe0a696c6049a75434afdd0b0adbff418081a202903fcf00d38e4f8c1fe442c0f660 + pretty-format: ^29.3.1 + checksum: 0dd8ed31ae0b5a3d14f13f567ca8567f2663dd2d540d1e55511d3b3fd7f80a1d075392179674ebe9fab9be0b73678bf4d2f8bbbc0f4bdd52b9815259194da559 languageName: node linkType: hard @@ -10013,30 +9906,13 @@ __metadata: languageName: node linkType: hard -"jest-resolve-dependencies@npm:^29.2.2": - version: 29.2.2 - resolution: "jest-resolve-dependencies@npm:29.2.2" +"jest-resolve-dependencies@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-resolve-dependencies@npm:29.3.1" dependencies: jest-regex-util: ^29.2.0 - jest-snapshot: ^29.2.2 - checksum: 80a602beebe694444afc6f4ba7d32685d464bea75955ff74bee14640dfebe28a02080e94a9a49377e0815c86d045d653a4d6ce5a63a816347600ebd2c3f79084 - languageName: node - linkType: hard - -"jest-resolve@npm:^29.2.2": - version: 29.2.2 - resolution: "jest-resolve@npm:29.2.2" - dependencies: - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - jest-haste-map: ^29.2.1 - jest-pnp-resolver: ^1.2.2 - jest-util: ^29.2.1 - jest-validate: ^29.2.2 - resolve: ^1.20.0 - resolve.exports: ^1.1.0 - slash: ^3.0.0 - checksum: 2bfa5c64d4ed2e60fea6a398cd08db91e925e4efbac3bee7ec2b9561dc8b05b16f43c7a00b158e4facd3a7738b7beaf580f9ac486e3bdd6edb4fc91073042c08 + jest-snapshot: ^29.3.1 + checksum: 6ec4727a87c6e7954e93de9949ab9967b340ee2f07626144c273355f05a2b65fa47eb8dece2d6e5f4fd99cdb893510a3540aa5e14ba443f70b3feb63f6f98982 languageName: node linkType: hard @@ -10057,62 +9933,32 @@ __metadata: languageName: node linkType: hard -"jest-runner@npm:^29.2.2": - version: 29.2.2 - resolution: "jest-runner@npm:29.2.2" +"jest-runner@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-runner@npm:29.3.1" dependencies: - "@jest/console": ^29.2.1 - "@jest/environment": ^29.2.2 - "@jest/test-result": ^29.2.1 - "@jest/transform": ^29.2.2 - "@jest/types": ^29.2.1 + "@jest/console": ^29.3.1 + "@jest/environment": ^29.3.1 + "@jest/test-result": ^29.3.1 + "@jest/transform": ^29.3.1 + "@jest/types": ^29.3.1 "@types/node": "*" chalk: ^4.0.0 emittery: ^0.13.1 graceful-fs: ^4.2.9 jest-docblock: ^29.2.0 - jest-environment-node: ^29.2.2 - jest-haste-map: ^29.2.1 - jest-leak-detector: ^29.2.1 - jest-message-util: ^29.2.1 - jest-resolve: ^29.2.2 - jest-runtime: ^29.2.2 - jest-util: ^29.2.1 - jest-watcher: ^29.2.2 - jest-worker: ^29.2.1 + jest-environment-node: ^29.3.1 + jest-haste-map: ^29.3.1 + jest-leak-detector: ^29.3.1 + jest-message-util: ^29.3.1 + jest-resolve: ^29.3.1 + jest-runtime: ^29.3.1 + jest-util: ^29.3.1 + jest-watcher: ^29.3.1 + jest-worker: ^29.3.1 p-limit: ^3.1.0 source-map-support: 0.5.13 - checksum: 1bea17607f505a394af7c3ce8dca9af0f804bd96c52eb48fa2470ec396d52e8132a12a0550ef6e0ac3c175c9596e4a3c20b691bca9aea9cffa009f9833c6a009 - languageName: node - linkType: hard - -"jest-runtime@npm:^29.2.2": - version: 29.2.2 - resolution: "jest-runtime@npm:29.2.2" - dependencies: - "@jest/environment": ^29.2.2 - "@jest/fake-timers": ^29.2.2 - "@jest/globals": ^29.2.2 - "@jest/source-map": ^29.2.0 - "@jest/test-result": ^29.2.1 - "@jest/transform": ^29.2.2 - "@jest/types": ^29.2.1 - "@types/node": "*" - chalk: ^4.0.0 - cjs-module-lexer: ^1.0.0 - collect-v8-coverage: ^1.0.0 - glob: ^7.1.3 - graceful-fs: ^4.2.9 - jest-haste-map: ^29.2.1 - jest-message-util: ^29.2.1 - jest-mock: ^29.2.2 - jest-regex-util: ^29.2.0 - jest-resolve: ^29.2.2 - jest-snapshot: ^29.2.2 - jest-util: ^29.2.1 - slash: ^3.0.0 - strip-bom: ^4.0.0 - checksum: 82268a0091cf5ed8ea26bdeeb207cf2eff1c2130704313cd9132c65481d8e30845955b8af08fb73fac1c541573c0701fccd19d3394f24c8c36e0521e467815c8 + checksum: 61ad445d8a5f29573332f27a21fc942fb0d2a82bf901a0ea1035bf3bd7f349d1e425f71f54c3a3f89b292a54872c3248d395a2829d987f26b6025b15530ea5d2 languageName: node linkType: hard @@ -10146,38 +9992,6 @@ __metadata: languageName: node linkType: hard -"jest-snapshot@npm:^29.2.2": - version: 29.2.2 - resolution: "jest-snapshot@npm:29.2.2" - dependencies: - "@babel/core": ^7.11.6 - "@babel/generator": ^7.7.2 - "@babel/plugin-syntax-jsx": ^7.7.2 - "@babel/plugin-syntax-typescript": ^7.7.2 - "@babel/traverse": ^7.7.2 - "@babel/types": ^7.3.3 - "@jest/expect-utils": ^29.2.2 - "@jest/transform": ^29.2.2 - "@jest/types": ^29.2.1 - "@types/babel__traverse": ^7.0.6 - "@types/prettier": ^2.1.5 - babel-preset-current-node-syntax: ^1.0.0 - chalk: ^4.0.0 - expect: ^29.2.2 - graceful-fs: ^4.2.9 - jest-diff: ^29.2.1 - jest-get-type: ^29.2.0 - jest-haste-map: ^29.2.1 - jest-matcher-utils: ^29.2.2 - jest-message-util: ^29.2.1 - jest-util: ^29.2.1 - natural-compare: ^1.4.0 - pretty-format: ^29.2.1 - semver: ^7.3.5 - checksum: f2f86aa83ee2a785ff9da17b372b4132f2d94aa9499c21ade4034436b302be3c8d3d0612712738dd36f708b342b785e2fc2069ec0caeaf75c84d75cc501439df - languageName: node - linkType: hard - "jest-snapshot@npm:^29.3.1": version: 29.3.1 resolution: "jest-snapshot@npm:29.3.1" @@ -10238,20 +10052,6 @@ __metadata: languageName: node linkType: hard -"jest-validate@npm:^29.2.2": - version: 29.2.2 - resolution: "jest-validate@npm:29.2.2" - dependencies: - "@jest/types": ^29.2.1 - camelcase: ^6.2.0 - chalk: ^4.0.0 - jest-get-type: ^29.2.0 - leven: ^3.1.0 - pretty-format: ^29.2.1 - checksum: faa462777d3aa632f13feb2c23b3b263429f0bc7c6addc97e325d53a2dd954f01b05456ab730a1492b606c175457f72c8afad371f555bfaf5e0f6085b6f4cbb9 - languageName: node - linkType: hard - "jest-validate@npm:^29.3.1": version: 29.3.1 resolution: "jest-validate@npm:29.3.1" @@ -10266,19 +10066,19 @@ __metadata: languageName: node linkType: hard -"jest-watcher@npm:^29.2.2": - version: 29.2.2 - resolution: "jest-watcher@npm:29.2.2" +"jest-watcher@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-watcher@npm:29.3.1" dependencies: - "@jest/test-result": ^29.2.1 - "@jest/types": ^29.2.1 + "@jest/test-result": ^29.3.1 + "@jest/types": ^29.3.1 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 emittery: ^0.13.1 - jest-util: ^29.2.1 + jest-util: ^29.3.1 string-length: ^4.0.1 - checksum: 789a33d1374f546c83b8da2332f10b2d44c29ae1786352b91352ee4b2057cdc9b1734144a4a87adca3a7229b0aec237fd8bdf9796ff3c940da13cd83056444d7 + checksum: 60d189473486c73e9d540406a30189da5a3c67bfb0fb4ad4a83991c189135ef76d929ec99284ca5a505fe4ee9349ae3c99b54d2e00363e72837b46e77dec9642 languageName: node linkType: hard @@ -10304,18 +10104,6 @@ __metadata: languageName: node linkType: hard -"jest-worker@npm:^29.2.1": - version: 29.2.1 - resolution: "jest-worker@npm:29.2.1" - dependencies: - "@types/node": "*" - jest-util: ^29.2.1 - merge-stream: ^2.0.0 - supports-color: ^8.0.0 - checksum: 10365612fae02412376e963de9f069d854deaf5aec8ff818ce49c299cd0373256a387a2da68db8225fb0f18483f2cc9072a52d1846881d44b756b1e36bc7f4ed - languageName: node - linkType: hard - "jest-worker@npm:^29.3.1": version: 29.3.1 resolution: "jest-worker@npm:29.3.1" @@ -10328,14 +10116,14 @@ __metadata: languageName: node linkType: hard -"jest@npm:29.2.2": - version: 29.2.2 - resolution: "jest@npm:29.2.2" +"jest@npm:29.3.1": + version: 29.3.1 + resolution: "jest@npm:29.3.1" dependencies: - "@jest/core": ^29.2.2 - "@jest/types": ^29.2.1 + "@jest/core": ^29.3.1 + "@jest/types": ^29.3.1 import-local: ^3.0.2 - jest-cli: ^29.2.2 + jest-cli: ^29.3.1 peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -10343,7 +10131,7 @@ __metadata: optional: true bin: jest: bin/jest.js - checksum: 6b4c0af3b5a0fddee46e26c9a539d70a3945700c20444ad3568e14faba27e89671f972dfaa8a02225c4e02b6d422171535660f5e167b1eb765a0922aea82533b + checksum: 613f4ec657b14dd84c0056b2fef1468502927fd551bef0b19d4a91576a609678fb316c6a5b5fc6120dd30dd4ff4569070ffef3cb507db9bb0260b28ddaa18d7a languageName: node linkType: hard @@ -16513,7 +16301,7 @@ __metadata: "@types/fs-extra": 9.0.13 "@types/generate-changelog": 1.8.1 "@types/highlight.js": 10.1.0 - "@types/jest": 29.2.2 + "@types/jest": 29.2.3 "@types/jquery": ^3 "@types/js-cookie": 3.0.2 "@types/jsdom": 20.0.1 @@ -16597,7 +16385,7 @@ __metadata: husky: 7.0.4 i18next-scanner: 4.1.0 intersection-observer: 0.12.2 - jest: 29.2.2 + jest: 29.3.1 jest-canvas-mock: 2.4.0 jest-environment-jsdom: 29.2.2 jest-jasmine2: 29.3.1 From c33bbed34cf7468dd5444290699537a194e6a839 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 30 Nov 2022 16:05:41 +0000 Subject: [PATCH 036/329] chore(deps-dev): Bump postcss-scss from 4.0.5 to 4.0.6 (#14198) Bumps [postcss-scss](https://github.com/postcss/postcss-scss) from 4.0.5 to 4.0.6. - [Release notes](https://github.com/postcss/postcss-scss/releases) - [Changelog](https://github.com/postcss/postcss-scss/blob/main/CHANGELOG.md) - [Commits](https://github.com/postcss/postcss-scss/compare/4.0.5...4.0.6) --- updated-dependencies: - dependency-name: postcss-scss dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index a60c99da32f..45be89a9bc9 100644 --- a/package.json +++ b/package.json @@ -151,7 +151,7 @@ "postcss-less": "6.0.0", "postcss-loader": "^7.0.1", "postcss-preset-env": "^7.8.2", - "postcss-scss": "4.0.5", + "postcss-scss": "4.0.6", "prettier": "^2.7.1", "raf": "3.4.1", "redux-devtools-extension": "2.13.9", diff --git a/yarn.lock b/yarn.lock index 857ad03ace8..61995b5c62a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13003,12 +13003,12 @@ __metadata: languageName: node linkType: hard -"postcss-scss@npm:4.0.5": - version: 4.0.5 - resolution: "postcss-scss@npm:4.0.5" +"postcss-scss@npm:4.0.6": + version: 4.0.6 + resolution: "postcss-scss@npm:4.0.6" peerDependencies: - postcss: ^8.3.3 - checksum: 5cba2044db3a57ecec9ac64db28be42e145bae0e1c2e4322ef38674e4302b0854f5e16f91658b2bcff3d0f1dbbfb186a9871f988b16895c51993f431a74ed4db + postcss: ^8.4.19 + checksum: 133a1cba31e2e167f4e841e66ec6a798eaf44c7911f9182ade0b5b1e71a8198814aa390b8c9d5db6b01358115232e5b15b1a4f8c5198acfccfb1f3fdbd328cdf languageName: node linkType: hard @@ -16411,7 +16411,7 @@ __metadata: postcss-less: 6.0.0 postcss-loader: ^7.0.1 postcss-preset-env: ^7.8.2 - postcss-scss: 4.0.5 + postcss-scss: 4.0.6 prettier: ^2.7.1 raf: 3.4.1 react: 18.2.0 From da3b814129e00ff413d26ec673b4ed7cf0d715de Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 30 Nov 2022 16:06:04 +0000 Subject: [PATCH 037/329] chore(deps-dev): Bump @babel/core from 7.20.2 to 7.20.5 (#14199) Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.20.2 to 7.20.5. - [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.20.5/packages/babel-core) --- updated-dependencies: - dependency-name: "@babel/core" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 86 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 45be89a9bc9..5e571e755ec 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "zustand": "4.1.4" }, "devDependencies": { - "@babel/core": "7.20.2", + "@babel/core": "7.20.5", "@babel/eslint-parser": "7.19.1", "@babel/plugin-proposal-decorators": "7.20.2", "@babel/preset-env": "7.20.2", diff --git a/yarn.lock b/yarn.lock index 61995b5c62a..80494eff46b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -43,7 +43,30 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:7.20.2, @babel/core@npm:^7.11.1, @babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3": +"@babel/core@npm:7.20.5": + version: 7.20.5 + resolution: "@babel/core@npm:7.20.5" + dependencies: + "@ampproject/remapping": ^2.1.0 + "@babel/code-frame": ^7.18.6 + "@babel/generator": ^7.20.5 + "@babel/helper-compilation-targets": ^7.20.0 + "@babel/helper-module-transforms": ^7.20.2 + "@babel/helpers": ^7.20.5 + "@babel/parser": ^7.20.5 + "@babel/template": ^7.18.10 + "@babel/traverse": ^7.20.5 + "@babel/types": ^7.20.5 + convert-source-map: ^1.7.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.2.1 + semver: ^6.3.0 + checksum: 9547f1e6364bc58c3621e3b17ec17f0d034ff159e5a520091d9381608d40af3be4042dd27c20ad7d3e938422d75850ac56a3758d6801d65df701557af4bd244b + languageName: node + linkType: hard + +"@babel/core@npm:^7.11.1, @babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3": version: 7.20.2 resolution: "@babel/core@npm:7.20.2" dependencies: @@ -91,6 +114,17 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.20.5": + version: 7.20.5 + resolution: "@babel/generator@npm:7.20.5" + dependencies: + "@babel/types": ^7.20.5 + "@jridgewell/gen-mapping": ^0.3.2 + jsesc: ^2.5.1 + checksum: 31c10d1e122f08cf755a24bd6f5d197f47eceba03f1133759687d00ab72d210e60ba4011da42f368b6e9fa85cbfda7dc4adb9889c2c20cc5c34bb2d57c1deab7 + languageName: node + linkType: hard + "@babel/helper-annotate-as-pure@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-annotate-as-pure@npm:7.18.6" @@ -352,6 +386,17 @@ __metadata: languageName: node linkType: hard +"@babel/helpers@npm:^7.20.5": + version: 7.20.6 + resolution: "@babel/helpers@npm:7.20.6" + dependencies: + "@babel/template": ^7.18.10 + "@babel/traverse": ^7.20.5 + "@babel/types": ^7.20.5 + checksum: f03ec6eb2bf8dc7cdfe2569ee421fd9ba6c7bac6c862d90b608ccdd80281ebe858bc56ca175fc92b3ac50f63126b66bbd5ec86f9f361729289a20054518f1ac5 + languageName: node + linkType: hard + "@babel/highlight@npm:^7.18.6": version: 7.18.6 resolution: "@babel/highlight@npm:7.18.6" @@ -372,6 +417,15 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.20.5": + version: 7.20.5 + resolution: "@babel/parser@npm:7.20.5" + bin: + parser: ./bin/babel-parser.js + checksum: e8d514ce0aa74d56725bd102919a49fa367afef9cd8208cf52f670f54b061c4672f51b4b7980058ab1f5fe73615fe4dc90720ab47bbcebae07ad08d667eda318 + languageName: node + linkType: hard + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.18.6" @@ -1437,6 +1491,24 @@ __metadata: languageName: node linkType: hard +"@babel/traverse@npm:^7.20.5": + version: 7.20.5 + resolution: "@babel/traverse@npm:7.20.5" + dependencies: + "@babel/code-frame": ^7.18.6 + "@babel/generator": ^7.20.5 + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-function-name": ^7.19.0 + "@babel/helper-hoist-variables": ^7.18.6 + "@babel/helper-split-export-declaration": ^7.18.6 + "@babel/parser": ^7.20.5 + "@babel/types": ^7.20.5 + debug: ^4.1.0 + globals: ^11.1.0 + checksum: c7fed468614aab1cf762dda5df26e2cfcd2b1b448c9d3321ac44786c4ee773fb0e10357e6593c3c6a648ae2e0be6d90462d855998dc10e3abae84de99291e008 + languageName: node + linkType: hard + "@babel/types@npm:^7.0.0, @babel/types@npm:^7.18.10, @babel/types@npm:^7.18.6, @babel/types@npm:^7.18.9, @babel/types@npm:^7.19.0, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.2, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": version: 7.20.2 resolution: "@babel/types@npm:7.20.2" @@ -1448,6 +1520,17 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.20.5": + version: 7.20.5 + resolution: "@babel/types@npm:7.20.5" + dependencies: + "@babel/helper-string-parser": ^7.19.4 + "@babel/helper-validator-identifier": ^7.19.1 + to-fast-properties: ^2.0.0 + checksum: 773f0a1ad9f6ca5c5beaf751d1d8d81b9130de87689d1321fc911d73c3b1167326d66f0ae086a27fb5bfc8b4ee3ffebf1339be50d3b4d8015719692468c31f2d + languageName: node + linkType: hard + "@bcoe/v8-coverage@npm:^0.2.3": version: 0.2.3 resolution: "@bcoe/v8-coverage@npm:0.2.3" @@ -16280,7 +16363,7 @@ __metadata: version: 0.0.0-use.local resolution: "wire-webapp@workspace:." dependencies: - "@babel/core": 7.20.2 + "@babel/core": 7.20.5 "@babel/eslint-parser": 7.19.1 "@babel/plugin-proposal-decorators": 7.20.2 "@babel/preset-env": 7.20.2 From f86bc075fa689f10409ae0908e619568e59ffd71 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 30 Nov 2022 16:07:02 +0000 Subject: [PATCH 038/329] chore(deps-dev): Bump @babel/plugin-proposal-decorators (#14201) Bumps [@babel/plugin-proposal-decorators](https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-proposal-decorators) from 7.20.2 to 7.20.5. - [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.20.5/packages/babel-plugin-proposal-decorators) --- updated-dependencies: - dependency-name: "@babel/plugin-proposal-decorators" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 31 ++++++++++++++++++++++++------- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index 5e571e755ec..2dfe19461de 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "devDependencies": { "@babel/core": "7.20.5", "@babel/eslint-parser": "7.19.1", - "@babel/plugin-proposal-decorators": "7.20.2", + "@babel/plugin-proposal-decorators": "7.20.5", "@babel/preset-env": "7.20.2", "@babel/preset-react": "7.18.6", "@babel/preset-typescript": "7.18.6", diff --git a/yarn.lock b/yarn.lock index 80494eff46b..c33f68a4ad6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -158,7 +158,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.20.2": +"@babel/helper-create-class-features-plugin@npm:^7.18.6": version: 7.20.2 resolution: "@babel/helper-create-class-features-plugin@npm:7.20.2" dependencies: @@ -175,6 +175,23 @@ __metadata: languageName: node linkType: hard +"@babel/helper-create-class-features-plugin@npm:^7.20.5": + version: 7.20.5 + resolution: "@babel/helper-create-class-features-plugin@npm:7.20.5" + dependencies: + "@babel/helper-annotate-as-pure": ^7.18.6 + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-function-name": ^7.19.0 + "@babel/helper-member-expression-to-functions": ^7.18.9 + "@babel/helper-optimise-call-expression": ^7.18.6 + "@babel/helper-replace-supers": ^7.19.1 + "@babel/helper-split-export-declaration": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 51b0662cc44ae5fe3691ed552f97312006709ec3f5321a5e5b5a139a5743eaaf65987f30ee7c171af80ab77460fb57c1970b0b1583dd70d90b58e4433b117a1b + languageName: node + linkType: hard + "@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.19.0": version: 7.19.0 resolution: "@babel/helper-create-regexp-features-plugin@npm:7.19.0" @@ -489,18 +506,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-decorators@npm:7.20.2": - version: 7.20.2 - resolution: "@babel/plugin-proposal-decorators@npm:7.20.2" +"@babel/plugin-proposal-decorators@npm:7.20.5": + version: 7.20.5 + resolution: "@babel/plugin-proposal-decorators@npm:7.20.5" dependencies: - "@babel/helper-create-class-features-plugin": ^7.20.2 + "@babel/helper-create-class-features-plugin": ^7.20.5 "@babel/helper-plugin-utils": ^7.20.2 "@babel/helper-replace-supers": ^7.19.1 "@babel/helper-split-export-declaration": ^7.18.6 "@babel/plugin-syntax-decorators": ^7.19.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: bb00e2172a8c0b169f262222b7ca1a9cda4f7a3bc458bb71b39c9209aa261450c077f38c9b51e79fadd4d1962a993e7fd8712042d82658b1a052a084c53e32cd + checksum: 780696710dcd5f292a235dcc9dbb1fd6600a1b91c75b5c6efaf6d596520d54c750dabca5ebdb4592534f1572bdca3d424145741815554660335a10a4168ca19a languageName: node linkType: hard @@ -16365,7 +16382,7 @@ __metadata: dependencies: "@babel/core": 7.20.5 "@babel/eslint-parser": 7.19.1 - "@babel/plugin-proposal-decorators": 7.20.2 + "@babel/plugin-proposal-decorators": 7.20.5 "@babel/preset-env": 7.20.2 "@babel/preset-react": 7.18.6 "@babel/preset-typescript": 7.18.6 From 127fbadaa5fc86011fa93ef01a671c880ffbd933 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 30 Nov 2022 16:07:15 +0000 Subject: [PATCH 039/329] chore(deps): Bump @wireapp/webapp-events from 0.15.2 to 0.16.0 (#14202) Bumps [@wireapp/webapp-events](https://github.com/wireapp/wire-web-packages) from 0.15.2 to 0.16.0. - [Release notes](https://github.com/wireapp/wire-web-packages/releases) - [Commits](https://github.com/wireapp/wire-web-packages/compare/@wireapp/webapp-events@0.15.2...@wireapp/webapp-events@0.16.0) --- updated-dependencies: - dependency-name: "@wireapp/webapp-events" dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] 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 2dfe19461de..027ce29b404 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "@wireapp/react-ui-kit": "9.0.12", "@wireapp/store-engine-dexie": "2.0.3", "@wireapp/store-engine-sqleet": "1.8.9", - "@wireapp/webapp-events": "0.15.2", + "@wireapp/webapp-events": "0.16.0", "amplify": "https://github.com/wireapp/amplify#head=master", "classnames": "2.3.2", "copy-webpack-plugin": "11.0.0", diff --git a/yarn.lock b/yarn.lock index c33f68a4ad6..56db26315bd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4462,10 +4462,10 @@ __metadata: languageName: node linkType: hard -"@wireapp/webapp-events@npm:0.15.2": - version: 0.15.2 - resolution: "@wireapp/webapp-events@npm:0.15.2" - checksum: e7bc977eb481f50f7ef094af64c2342ac1af4e65ebe1335c109c105f2619feba833a9ea913f911d6c9217afe3fefe23acd7ef36733190b65b0f345953cfbd3d1 +"@wireapp/webapp-events@npm:0.16.0": + version: 0.16.0 + resolution: "@wireapp/webapp-events@npm:0.16.0" + checksum: 6cf1a5871dc97699409155d464f342b0b1c0ad30a1afc2f4ac5e67289fd566160a5504495492a9310da94efb13172cb5c519c031a39ea6253f6bb1320b4f6261 languageName: node linkType: hard @@ -16436,7 +16436,7 @@ __metadata: "@wireapp/store-engine": ^5.0.3 "@wireapp/store-engine-dexie": 2.0.3 "@wireapp/store-engine-sqleet": 1.8.9 - "@wireapp/webapp-events": 0.15.2 + "@wireapp/webapp-events": 0.16.0 adm-zip: 0.5.9 amplify: "https://github.com/wireapp/amplify#head=master" archiver: ^5.3.1 From c0ad48eda5be5bc165949ac04a2642f0c118413b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 30 Nov 2022 16:08:18 +0000 Subject: [PATCH 040/329] chore(deps-dev): Bump fake-indexeddb from 4.0.0 to 4.0.1 (#14204) Bumps [fake-indexeddb](https://github.com/dumbmatter/fakeIndexedDB) from 4.0.0 to 4.0.1. - [Release notes](https://github.com/dumbmatter/fakeIndexedDB/releases) - [Changelog](https://github.com/dumbmatter/fakeIndexedDB/blob/master/CHANGELOG.md) - [Commits](https://github.com/dumbmatter/fakeIndexedDB/compare/v4.0.0...v4.0.1) --- updated-dependencies: - dependency-name: fake-indexeddb dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] 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 027ce29b404..a77a78a9abf 100644 --- a/package.json +++ b/package.json @@ -129,7 +129,7 @@ "eslint-plugin-testing-library": "^5.9.1", "eslint-plugin-typescript-sort-keys": "2.1.0", "eslint-plugin-unused-imports": "^2.0.0", - "fake-indexeddb": "4.0.0", + "fake-indexeddb": "4.0.1", "generate-changelog": "1.8.0", "html-webpack-plugin": "^5.5.0", "husky": "7.0.4", diff --git a/yarn.lock b/yarn.lock index 56db26315bd..1cfb10633c7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7804,12 +7804,12 @@ __metadata: languageName: node linkType: hard -"fake-indexeddb@npm:4.0.0": - version: 4.0.0 - resolution: "fake-indexeddb@npm:4.0.0" +"fake-indexeddb@npm:4.0.1": + version: 4.0.1 + resolution: "fake-indexeddb@npm:4.0.1" dependencies: realistic-structured-clone: ^3.0.0 - checksum: 6f61d5ed77915cbb4b5c22f030f7017318edc84dbde0b24bd4e82fb4c311f30d02f890cb144aee6e7f296a917f3393ae3d989a28af6a304a3c2b2471ca7de151 + checksum: dd1c82111e3b97c262a647a29dc012209f8c3bed0fbe7ae9630927772842fe8d3276794ff196d0021a5e60563a25a4323eca622a6a7bc6575b62e074328a0c90 languageName: node linkType: hard @@ -16477,7 +16477,7 @@ __metadata: eslint-plugin-testing-library: ^5.9.1 eslint-plugin-typescript-sort-keys: 2.1.0 eslint-plugin-unused-imports: ^2.0.0 - fake-indexeddb: 4.0.0 + fake-indexeddb: 4.0.1 generate-changelog: 1.8.0 highlight.js: 11.6.0 html-webpack-plugin: ^5.5.0 From daae3937b1e0eef34a65e8cde0764db8d6fde437 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 30 Nov 2022 16:08:33 +0000 Subject: [PATCH 041/329] chore(deps-dev): Bump stylelint-config-prettier from 9.0.3 to 9.0.4 (#14205) Bumps [stylelint-config-prettier](https://github.com/prettier/stylelint-config-prettier) from 9.0.3 to 9.0.4. - [Release notes](https://github.com/prettier/stylelint-config-prettier/releases) - [Commits](https://github.com/prettier/stylelint-config-prettier/compare/v9.0.3...v9.0.4) --- updated-dependencies: - dependency-name: stylelint-config-prettier dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] 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 a77a78a9abf..fd4b7b06f0a 100644 --- a/package.json +++ b/package.json @@ -163,7 +163,7 @@ "style-loader": "^3.3.1", "stylelint": "14.15.0", "stylelint-config-idiomatic-order": "9.0.0", - "stylelint-config-prettier": "9.0.3", + "stylelint-config-prettier": "9.0.4", "svg-inline-loader": "0.8.2", "terser-webpack-plugin": "5.3.6", "text-encoding": "0.7.0", diff --git a/yarn.lock b/yarn.lock index 1cfb10633c7..8fcd8361d11 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14980,15 +14980,15 @@ __metadata: languageName: node linkType: hard -"stylelint-config-prettier@npm:9.0.3": - version: 9.0.3 - resolution: "stylelint-config-prettier@npm:9.0.3" +"stylelint-config-prettier@npm:9.0.4": + version: 9.0.4 + resolution: "stylelint-config-prettier@npm:9.0.4" peerDependencies: stylelint: ">=11.0.0" bin: stylelint-config-prettier: bin/check.js stylelint-config-prettier-check: bin/check.js - checksum: 9ff3f719daf3865878615ba52c31de6ef0a0d25d41cb58c41afe2f1c459a838997ff912cc4a5b4d401f92e2193667ff4d140b6d303cf8192e894b5cb454c41b9 + checksum: cf94f646f6b1756a9e41940524a8c276ec05be9a2a02907fee6cb4ebdc39e3a9049c96ec97e79cc3f3c0487f5870c81b3d68b0a65d1ee81cd9d7700420788cee languageName: node linkType: hard @@ -16534,7 +16534,7 @@ __metadata: style-loader: ^3.3.1 stylelint: 14.15.0 stylelint-config-idiomatic-order: 9.0.0 - stylelint-config-prettier: 9.0.3 + stylelint-config-prettier: 9.0.4 svg-inline-loader: 0.8.2 switch-path: 1.2.0 terser-webpack-plugin: 5.3.6 From 447c2eeed1e9dbc53549a8312d1d420d487b87c6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 30 Nov 2022 16:10:00 +0000 Subject: [PATCH 042/329] chore(deps-dev): Bump eslint-plugin-react from 7.31.10 to 7.31.11 (#14200) Bumps [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) from 7.31.10 to 7.31.11. - [Release notes](https://github.com/jsx-eslint/eslint-plugin-react/releases) - [Changelog](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/CHANGELOG.md) - [Commits](https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.31.10...v7.31.11) --- updated-dependencies: - dependency-name: eslint-plugin-react dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 201 +++++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 165 insertions(+), 38 deletions(-) diff --git a/package.json b/package.json index fd4b7b06f0a..bfeffb6e6ab 100644 --- a/package.json +++ b/package.json @@ -122,7 +122,7 @@ "eslint-plugin-jsx-a11y": "^6.6.1", "eslint-plugin-no-unsanitized": "^4.0.1", "eslint-plugin-prettier": "^4.2.1", - "eslint-plugin-react": "^7.31.10", + "eslint-plugin-react": "^7.31.11", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-simple-import-sort": "^8.0.0", "eslint-plugin-sort-keys-fix": "1.1.2", diff --git a/yarn.lock b/yarn.lock index 8fcd8361d11..6a796718a96 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4963,6 +4963,19 @@ __metadata: languageName: node linkType: hard +"array-includes@npm:^3.1.6": + version: 3.1.6 + resolution: "array-includes@npm:3.1.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + get-intrinsic: ^1.1.3 + is-string: ^1.0.7 + checksum: f22f8cd8ba8a6448d91eebdc69f04e4e55085d09232b5216ee2d476dab3ef59984e8d1889e662c6a0ed939dcb1b57fd05b2c0209c3370942fc41b752c82a2ca5 + languageName: node + linkType: hard + "array-timsort@npm:^1.0.3": version: 1.0.3 resolution: "array-timsort@npm:1.0.3" @@ -4988,15 +5001,28 @@ __metadata: languageName: node linkType: hard -"array.prototype.flatmap@npm:^1.3.0": - version: 1.3.0 - resolution: "array.prototype.flatmap@npm:1.3.0" +"array.prototype.flatmap@npm:^1.3.1": + version: 1.3.1 + resolution: "array.prototype.flatmap@npm:1.3.1" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.3 - es-abstract: ^1.19.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + es-shim-unscopables: ^1.0.0 + checksum: 8c1c43a4995f12cf12523436da28515184c753807b3f0bc2ca6c075f71c470b099e2090cc67dba8e5280958fea401c1d0c59e1db0143272aef6cd1103921a987 + languageName: node + linkType: hard + +"array.prototype.tosorted@npm:^1.1.1": + version: 1.1.1 + resolution: "array.prototype.tosorted@npm:1.1.1" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 es-shim-unscopables: ^1.0.0 - checksum: 818538f39409c4045d874be85df0dbd195e1446b14d22f95bdcfefea44ae77db44e42dcd89a559254ec5a7c8b338cfc986cc6d641e3472f9a5326b21eb2976a2 + get-intrinsic: ^1.1.3 + checksum: 7923324a67e70a2fc0a6e40237405d92395e45ebd76f5cb89c2a5cf1e66b47aca6baacd0cd628ffd88830b90d47fff268071493d09c9ae123645613dac2c2ca3 languageName: node linkType: hard @@ -7070,7 +7096,7 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.19.0, es-abstract@npm:^1.19.1, es-abstract@npm:^1.19.2, es-abstract@npm:^1.19.5": +"es-abstract@npm:^1.19.0, es-abstract@npm:^1.19.1, es-abstract@npm:^1.19.5": version: 1.20.1 resolution: "es-abstract@npm:1.20.1" dependencies: @@ -7101,6 +7127,38 @@ __metadata: languageName: node linkType: hard +"es-abstract@npm:^1.20.4": + version: 1.20.4 + resolution: "es-abstract@npm:1.20.4" + dependencies: + call-bind: ^1.0.2 + es-to-primitive: ^1.2.1 + function-bind: ^1.1.1 + function.prototype.name: ^1.1.5 + get-intrinsic: ^1.1.3 + get-symbol-description: ^1.0.0 + has: ^1.0.3 + has-property-descriptors: ^1.0.0 + has-symbols: ^1.0.3 + internal-slot: ^1.0.3 + is-callable: ^1.2.7 + is-negative-zero: ^2.0.2 + is-regex: ^1.1.4 + is-shared-array-buffer: ^1.0.2 + is-string: ^1.0.7 + is-weakref: ^1.0.2 + object-inspect: ^1.12.2 + object-keys: ^1.1.1 + object.assign: ^4.1.4 + regexp.prototype.flags: ^1.4.3 + safe-regex-test: ^1.0.0 + string.prototype.trimend: ^1.0.5 + string.prototype.trimstart: ^1.0.5 + unbox-primitive: ^1.0.2 + checksum: 89297cc785c31aedf961a603d5a07ed16471e435d3a1b6d070b54f157cf48454b95cda2ac55e4b86ff4fe3276e835fcffd2771578e6fa634337da49b26826141 + languageName: node + linkType: hard + "es-module-lexer@npm:^0.9.0": version: 0.9.0 resolution: "es-module-lexer@npm:0.9.0" @@ -7408,27 +7466,28 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-react@npm:^7.31.10": - version: 7.31.10 - resolution: "eslint-plugin-react@npm:7.31.10" +"eslint-plugin-react@npm:^7.31.11": + version: 7.31.11 + resolution: "eslint-plugin-react@npm:7.31.11" dependencies: - array-includes: ^3.1.5 - array.prototype.flatmap: ^1.3.0 + array-includes: ^3.1.6 + array.prototype.flatmap: ^1.3.1 + array.prototype.tosorted: ^1.1.1 doctrine: ^2.1.0 estraverse: ^5.3.0 jsx-ast-utils: ^2.4.1 || ^3.0.0 minimatch: ^3.1.2 - object.entries: ^1.1.5 - object.fromentries: ^2.0.5 - object.hasown: ^1.1.1 - object.values: ^1.1.5 + object.entries: ^1.1.6 + object.fromentries: ^2.0.6 + object.hasown: ^1.1.2 + object.values: ^1.1.6 prop-types: ^15.8.1 resolve: ^2.0.0-next.3 semver: ^6.3.0 - string.prototype.matchall: ^4.0.7 + string.prototype.matchall: ^4.0.8 peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - checksum: f013669c296483559a760648fa06425f161b1aff93c668f14c4561c933d22a7836b745b88a795c53cab929c71513d5fd1f2ffdddff915709f01b77ac25f5b71b + checksum: a3d612f6647bef33cf2a67c81a6b37b42c075300ed079cffecf5fb475c0d6ab855c1de340d1cbf361a0126429fb906dda597527235d2d12c4404453dbc712fc6 languageName: node linkType: hard @@ -8291,6 +8350,17 @@ __metadata: languageName: node linkType: hard +"get-intrinsic@npm:^1.1.3": + version: 1.1.3 + resolution: "get-intrinsic@npm:1.1.3" + dependencies: + function-bind: ^1.1.1 + has: ^1.0.3 + has-symbols: ^1.0.3 + checksum: 152d79e87251d536cf880ba75cfc3d6c6c50e12b3a64e1ea960e73a3752b47c69f46034456eae1b0894359ce3bc64c55c186f2811f8a788b75b638b06fab228a + languageName: node + linkType: hard + "get-own-enumerable-property-symbols@npm:^3.0.0": version: 3.0.2 resolution: "get-own-enumerable-property-symbols@npm:3.0.2" @@ -9148,6 +9218,13 @@ __metadata: languageName: node linkType: hard +"is-callable@npm:^1.2.7": + version: 1.2.7 + resolution: "is-callable@npm:1.2.7" + checksum: 61fd57d03b0d984e2ed3720fb1c7a897827ea174bd44402878e059542ea8c4aeedee0ea0985998aa5cc2736b2fa6e271c08587addb5b3959ac52cf665173d1ac + languageName: node + linkType: hard + "is-core-module@npm:^2.10.0, is-core-module@npm:^2.2.0, is-core-module@npm:^2.8.1, is-core-module@npm:^2.9.0": version: 2.11.0 resolution: "is-core-module@npm:2.11.0" @@ -11862,35 +11939,47 @@ __metadata: languageName: node linkType: hard -"object.entries@npm:^1.1.5": - version: 1.1.5 - resolution: "object.entries@npm:1.1.5" +"object.assign@npm:^4.1.4": + version: 4.1.4 + resolution: "object.assign@npm:4.1.4" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.3 - es-abstract: ^1.19.1 - checksum: d658696f74fd222060d8428d2a9fda2ce736b700cb06f6bdf4a16a1892d145afb746f453502b2fa55d1dca8ead6f14ddbcf66c545df45adadea757a6c4cd86c7 + define-properties: ^1.1.4 + has-symbols: ^1.0.3 + object-keys: ^1.1.1 + checksum: 76cab513a5999acbfe0ff355f15a6a125e71805fcf53de4e9d4e082e1989bdb81d1e329291e1e4e0ae7719f0e4ef80e88fb2d367ae60500d79d25a6224ac8864 languageName: node linkType: hard -"object.fromentries@npm:^2.0.5": - version: 2.0.5 - resolution: "object.fromentries@npm:2.0.5" +"object.entries@npm:^1.1.6": + version: 1.1.6 + resolution: "object.entries@npm:1.1.6" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.3 - es-abstract: ^1.19.1 - checksum: 61a0b565ded97b76df9e30b569729866e1824cce902f98e90bb106e84f378aea20163366f66dc75c9000e2aad2ed0caf65c6f530cb2abc4c0c0f6c982102db4b + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + checksum: 0f8c47517e6a9a980241eafe3b73de11e59511883173c2b93d67424a008e47e11b77c80e431ad1d8a806f6108b225a1cab9223e53e555776c612a24297117d28 languageName: node linkType: hard -"object.hasown@npm:^1.1.1": - version: 1.1.1 - resolution: "object.hasown@npm:1.1.1" +"object.fromentries@npm:^2.0.6": + version: 2.0.6 + resolution: "object.fromentries@npm:2.0.6" dependencies: + call-bind: ^1.0.2 define-properties: ^1.1.4 - es-abstract: ^1.19.5 - checksum: d8ed4907ce57f48b93e3b53c418fd6787bf226a51e8d698c91e39b78e80fe5b124cb6282f6a9d5be21cf9e2c7829ab10206dcc6112b7748860eefe641880c793 + es-abstract: ^1.20.4 + checksum: 453c6d694180c0c30df451b60eaf27a5b9bca3fb43c37908fd2b78af895803dc631242bcf05582173afa40d8d0e9c96e16e8874b39471aa53f3ac1f98a085d85 + languageName: node + linkType: hard + +"object.hasown@npm:^1.1.2": + version: 1.1.2 + resolution: "object.hasown@npm:1.1.2" + dependencies: + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + checksum: b936572536db0cdf38eb30afd2f1026a8b6f2cc5d2c4497c9d9bbb01eaf3e980dead4fd07580cfdd098e6383e5a9db8212d3ea0c6bdd2b5e68c60aa7e3b45566 languageName: node linkType: hard @@ -11905,6 +11994,17 @@ __metadata: languageName: node linkType: hard +"object.values@npm:^1.1.6": + version: 1.1.6 + resolution: "object.values@npm:1.1.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + checksum: f6fff9fd817c24cfd8107f50fb33061d81cd11bacc4e3dbb3852e9ff7692fde4dbce823d4333ea27cd9637ef1b6690df5fbb61f1ed314fa2959598dc3ae23d8e + languageName: node + linkType: hard + "once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.3.2, once@npm:^1.4.0": version: 1.4.0 resolution: "once@npm:1.4.0" @@ -14233,6 +14333,17 @@ __metadata: languageName: node linkType: hard +"safe-regex-test@npm:^1.0.0": + version: 1.0.0 + resolution: "safe-regex-test@npm:1.0.0" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.1.3 + is-regex: ^1.1.4 + checksum: bc566d8beb8b43c01b94e67de3f070fd2781685e835959bbbaaec91cc53381145ca91f69bd837ce6ec244817afa0a5e974fc4e40a2957f0aca68ac3add1ddd34 + languageName: node + linkType: hard + "safer-buffer@npm:>= 2.1.2 < 3.0.0": version: 2.1.2 resolution: "safer-buffer@npm:2.1.2" @@ -14770,7 +14881,7 @@ __metadata: languageName: node linkType: hard -"string.prototype.matchall@npm:^4.0.6, string.prototype.matchall@npm:^4.0.7": +"string.prototype.matchall@npm:^4.0.6": version: 4.0.7 resolution: "string.prototype.matchall@npm:4.0.7" dependencies: @@ -14786,6 +14897,22 @@ __metadata: languageName: node linkType: hard +"string.prototype.matchall@npm:^4.0.8": + version: 4.0.8 + resolution: "string.prototype.matchall@npm:4.0.8" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + get-intrinsic: ^1.1.3 + has-symbols: ^1.0.3 + internal-slot: ^1.0.3 + regexp.prototype.flags: ^1.4.3 + side-channel: ^1.0.4 + checksum: 952da3a818de42ad1c10b576140a5e05b4de7b34b8d9dbf00c3ac8c1293e9c0f533613a39c5cda53e0a8221f2e710bc2150e730b1c2278d60004a8a35726efb6 + languageName: node + linkType: hard + "string.prototype.trimend@npm:^1.0.5": version: 1.0.5 resolution: "string.prototype.trimend@npm:1.0.5" @@ -16470,7 +16597,7 @@ __metadata: eslint-plugin-jsx-a11y: ^6.6.1 eslint-plugin-no-unsanitized: ^4.0.1 eslint-plugin-prettier: ^4.2.1 - eslint-plugin-react: ^7.31.10 + eslint-plugin-react: ^7.31.11 eslint-plugin-react-hooks: ^4.6.0 eslint-plugin-simple-import-sort: ^8.0.0 eslint-plugin-sort-keys-fix: 1.1.2 From f0e9408fd84817674b6134948585cd7da32b3af7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 30 Nov 2022 16:10:58 +0000 Subject: [PATCH 043/329] chore(deps-dev): Bump cspell from 6.14.2 to 6.15.1 (#14209) Bumps [cspell](https://github.com/streetsidesoftware/cspell) from 6.14.2 to 6.15.1. - [Release notes](https://github.com/streetsidesoftware/cspell/releases) - [Changelog](https://github.com/streetsidesoftware/cspell/blob/main/CHANGELOG.md) - [Commits](https://github.com/streetsidesoftware/cspell/compare/v6.14.2...v6.15.1) --- updated-dependencies: - dependency-name: cspell dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 192 ++++++++++++++++++++++++++++----------------------- 2 files changed, 107 insertions(+), 87 deletions(-) diff --git a/package.json b/package.json index bfeffb6e6ab..7b8f011c29e 100644 --- a/package.json +++ b/package.json @@ -102,7 +102,7 @@ "babel-loader": "9.1.0", "caniuse-lite": "^1.0.30001431", "cross-env": "7.0.3", - "cspell": "6.14.2", + "cspell": "6.15.1", "css-loader": "^6.7.1", "cssnano": "^5.1.14", "dexie": "^3.2.2", diff --git a/yarn.lock b/yarn.lock index 6a796718a96..906c53c6e17 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1555,17 +1555,17 @@ __metadata: languageName: node linkType: hard -"@cspell/cspell-bundled-dicts@npm:6.14.2": - version: 6.14.2 - resolution: "@cspell/cspell-bundled-dicts@npm:6.14.2" +"@cspell/cspell-bundled-dicts@npm:6.15.1": + version: 6.15.1 + resolution: "@cspell/cspell-bundled-dicts@npm:6.15.1" dependencies: "@cspell/dict-ada": ^4.0.0 "@cspell/dict-aws": ^3.0.0 - "@cspell/dict-bash": ^4.0.0 + "@cspell/dict-bash": ^4.1.0 "@cspell/dict-companies": ^3.0.3 "@cspell/dict-cpp": ^4.0.0 "@cspell/dict-cryptocurrencies": ^3.0.1 - "@cspell/dict-csharp": ^4.0.1 + "@cspell/dict-csharp": ^4.0.2 "@cspell/dict-css": ^4.0.0 "@cspell/dict-dart": ^2.0.0 "@cspell/dict-django": ^4.0.0 @@ -1573,7 +1573,7 @@ __metadata: "@cspell/dict-dotnet": ^4.0.0 "@cspell/dict-elixir": ^4.0.0 "@cspell/dict-en-gb": 1.1.33 - "@cspell/dict-en_us": ^4.0.1 + "@cspell/dict-en_us": ^4.1.0 "@cspell/dict-filetypes": ^3.0.0 "@cspell/dict-fonts": ^3.0.0 "@cspell/dict-fullstack": ^3.0.0 @@ -1598,31 +1598,32 @@ __metadata: "@cspell/dict-scala": ^3.0.0 "@cspell/dict-software-terms": ^3.0.5 "@cspell/dict-sql": ^2.0.0 + "@cspell/dict-svelte": ^1.0.0 "@cspell/dict-swift": ^2.0.0 "@cspell/dict-typescript": ^3.0.1 "@cspell/dict-vue": ^3.0.0 - checksum: b0c3df9aa4e399993f1ec1acdaa156b159861360272cc48aae947e9edd54786984a49ec831344f49a42f2248a6a81e370ea6fb4a2300f23fbde51155b86fc2d5 + checksum: 18b392e5cb520867699de1a35241d521312afbf87841ee651524bdfb25d397fbc726165d205c6602d57a2dcee74a05dbe2c676c9aad9742540d9407963b87dc8 languageName: node linkType: hard -"@cspell/cspell-pipe@npm:6.14.2": - version: 6.14.2 - resolution: "@cspell/cspell-pipe@npm:6.14.2" - checksum: dfbf988a39ac80066b08083e74b8aec6b89f8c2432f0aaad2b062fb7ffe4dbd02ffd350adc85b16679bb7f123fd31e4207cdc49ec59536fd70d827cdb7df0c73 +"@cspell/cspell-pipe@npm:6.15.1": + version: 6.15.1 + resolution: "@cspell/cspell-pipe@npm:6.15.1" + checksum: e16543cb1670fd3ea66199c72d79e752ce868945aef067c41759aa790514c599d6a87d9170a367c9da114939258d46d118139c041300c2fe1004105d1801d5bb languageName: node linkType: hard -"@cspell/cspell-service-bus@npm:6.14.2": - version: 6.14.2 - resolution: "@cspell/cspell-service-bus@npm:6.14.2" - checksum: 1d09851a6e4af085074ee56ffb02b62b8adcf3d828e30d2cca44d8a6d7d440316b912d09a605c3a37be06623e23853217c8fc1fa49dd49f42edc4b03b1197d80 +"@cspell/cspell-service-bus@npm:6.15.1": + version: 6.15.1 + resolution: "@cspell/cspell-service-bus@npm:6.15.1" + checksum: a4f36b77f7833a3b7a15ce758114790549e0f3c5fbff8efeffa055275b19d1e1e645ffd37d32a16e2c3cea92e503bce384ccc74c8ff0ce98ec3f6f4e9b756f47 languageName: node linkType: hard -"@cspell/cspell-types@npm:6.14.2": - version: 6.14.2 - resolution: "@cspell/cspell-types@npm:6.14.2" - checksum: 8d2bef805055a09f50d83e0c7a5e86135c66653459b7bfa6d94ca11a158547a58af81e2646b0e5fc670c7eb4092ca90e9e6c7ef6910390fe6c3ce7ac11baf92e +"@cspell/cspell-types@npm:6.15.1": + version: 6.15.1 + resolution: "@cspell/cspell-types@npm:6.15.1" + checksum: 9e6e37ca69c84b5259f837a2a20e7a71a0695ad324bc89cda3c56811dfe9a3017c2a1bc9f36fe7ae0d0a6466a611f1883cfab27a4d0637142a21c94b522f8edf languageName: node linkType: hard @@ -1640,7 +1641,7 @@ __metadata: languageName: node linkType: hard -"@cspell/dict-bash@npm:^4.0.0": +"@cspell/dict-bash@npm:^4.1.0": version: 4.1.0 resolution: "@cspell/dict-bash@npm:4.1.0" checksum: 4d9f5ce9f27d56e259403e4ab5977550bb8ce3bffb9780fc39989445fd78a3523aee8d3692bbdc48202068b6357ed47cad30df366c70cfeef387a29f63b1f847 @@ -1668,10 +1669,10 @@ __metadata: languageName: node linkType: hard -"@cspell/dict-csharp@npm:^4.0.1": - version: 4.0.1 - resolution: "@cspell/dict-csharp@npm:4.0.1" - checksum: 68b02faa2662ddf1c86b7ddfff4027c490910d77d0e190cad0142346ac9991943729b04520c7c35ad78b7d095f7244ac25252a3538af00516ce5c7c532ef9787 +"@cspell/dict-csharp@npm:^4.0.2": + version: 4.0.2 + resolution: "@cspell/dict-csharp@npm:4.0.2" + checksum: d2ecb2aada51c5f0d6d557fd4f0c6eddb5b299e0955e066c49cd2afe96a1c6fe0afde699fdb885dd3183603a1efbd1d793b6a490b8d039256445b4b154b7375b languageName: node linkType: hard @@ -1724,7 +1725,7 @@ __metadata: languageName: node linkType: hard -"@cspell/dict-en_us@npm:^4.0.1": +"@cspell/dict-en_us@npm:^4.1.0": version: 4.1.0 resolution: "@cspell/dict-en_us@npm:4.1.0" checksum: 92cc628dea8f759ee868f77b6e5afc834bc2b4827c954aa0f29e32305a360c873a90a09915f1888ff73bc7d7845b208ccdf20064e3e88a39f6d83577f5dd1b74 @@ -1899,6 +1900,13 @@ __metadata: languageName: node linkType: hard +"@cspell/dict-svelte@npm:^1.0.0": + version: 1.0.0 + resolution: "@cspell/dict-svelte@npm:1.0.0" + checksum: 6eb3868eec808430d5516ba78a6b07414720e0e70a5883f81ecf7db60a7340b607c5239d59d09018642041e5dca1b0e936e325ddbebbf85cd25577c26ebd3528 + languageName: node + linkType: hard + "@cspell/dict-swift@npm:^2.0.0": version: 2.0.0 resolution: "@cspell/dict-swift@npm:2.0.0" @@ -1920,10 +1928,10 @@ __metadata: languageName: node linkType: hard -"@cspell/strong-weak-map@npm:6.14.2": - version: 6.14.2 - resolution: "@cspell/strong-weak-map@npm:6.14.2" - checksum: 36689665f2c05e33e8a258ec324413c95570f04747e282a835555266efd41892be57ce8bde0058de2800d36201bacb78944ef1f7e3bb39dcdd0a49f02def83c2 +"@cspell/strong-weak-map@npm:6.15.1": + version: 6.15.1 + resolution: "@cspell/strong-weak-map@npm:6.15.1" + checksum: 0b2577fe213b5ef5131cfd1d8b51e1fa1fd6fe1a4efa92cdc993ef7415997031a09ce4a2a0a2540b0df29dcc06fd1e5275efad1f8a1ce7ea463c34713469bb82 languageName: node linkType: hard @@ -6089,7 +6097,7 @@ __metadata: languageName: node linkType: hard -"cosmiconfig@npm:7.0.1, cosmiconfig@npm:^7.0.0, cosmiconfig@npm:^7.0.1": +"cosmiconfig@npm:7.0.1, cosmiconfig@npm:^7.0.0": version: 7.0.1 resolution: "cosmiconfig@npm:7.0.1" dependencies: @@ -6115,6 +6123,18 @@ __metadata: languageName: node linkType: hard +"cosmiconfig@npm:^8.0.0": + version: 8.0.0 + resolution: "cosmiconfig@npm:8.0.0" + dependencies: + import-fresh: ^3.2.1 + js-yaml: ^4.1.0 + parse-json: ^5.0.0 + path-type: ^4.0.0 + checksum: ff4cdf89ac1ae52e7520816622c21a9e04380d04b82d653f5139ec581aa4f7f29e096d46770bc76c4a63c225367e88a1dfa233ea791669a35101f5f9b972c7d1 + languageName: node + linkType: hard + "countly-sdk-web@npm:22.6.2": version: 22.6.2 resolution: "countly-sdk-web@npm:22.6.2" @@ -6192,79 +6212,79 @@ __metadata: languageName: node linkType: hard -"cspell-dictionary@npm:6.14.2": - version: 6.14.2 - resolution: "cspell-dictionary@npm:6.14.2" +"cspell-dictionary@npm:6.15.1": + version: 6.15.1 + resolution: "cspell-dictionary@npm:6.15.1" dependencies: - "@cspell/cspell-pipe": 6.14.2 - "@cspell/cspell-types": 6.14.2 - cspell-trie-lib: 6.14.2 + "@cspell/cspell-pipe": 6.15.1 + "@cspell/cspell-types": 6.15.1 + cspell-trie-lib: 6.15.1 fast-equals: ^4.0.3 gensequence: ^4.0.2 - checksum: 8998e30110e52178a3b201af0a871db7c1d888a6ffc1ccfd8f49797e9396c8bb9f99f4ff5cd0c562f49a2f286a87084de150fae62133401fd57263dec19f97a3 + checksum: c47a3a1e424581a2ce4b4f735ade2d089402e9ee8026ed59b667b9f0ffeb570bea67d2af8a09a7ec55c35a3eb3e78f13a8df9a604946e9cf94686908af6288ca languageName: node linkType: hard -"cspell-gitignore@npm:6.14.2": - version: 6.14.2 - resolution: "cspell-gitignore@npm:6.14.2" +"cspell-gitignore@npm:6.15.1": + version: 6.15.1 + resolution: "cspell-gitignore@npm:6.15.1" dependencies: - cspell-glob: 6.14.2 + cspell-glob: 6.15.1 find-up: ^5.0.0 bin: cspell-gitignore: bin.js - checksum: 4f7f1d944f4e3f5c7dc640a9c6d66d090a541180f11bfa1292ae423f367710279d6fe53163246e4232bafd3493299a80fb05d7e20e67297092a35c278689d826 + checksum: a867e4197d6712e45982363384dff87ceb539a2560bf6bf15e58d86e194582db3671a7877f322b38a89173e5d984964959e75570cdca68d6d39c4e745731cc65 languageName: node linkType: hard -"cspell-glob@npm:6.14.2": - version: 6.14.2 - resolution: "cspell-glob@npm:6.14.2" +"cspell-glob@npm:6.15.1": + version: 6.15.1 + resolution: "cspell-glob@npm:6.15.1" dependencies: micromatch: ^4.0.5 - checksum: 960ff44755cbf6bd0de22d6b288b1b6c76ba7f1583b21756995896d7161315d8895b6866b7c6b2f25d75da3210e24d701499a90ae229df6fba10a96e52e5391d + checksum: b1844e4918faf050b290fa7a8631ad99e44fd1f51ff497fb8a69f764e2d422a54ea89b0e9e56f2bffcbfc3a53783a66bb1168dce58fdf1d822db321d345d02fa languageName: node linkType: hard -"cspell-grammar@npm:6.14.2": - version: 6.14.2 - resolution: "cspell-grammar@npm:6.14.2" +"cspell-grammar@npm:6.15.1": + version: 6.15.1 + resolution: "cspell-grammar@npm:6.15.1" dependencies: - "@cspell/cspell-pipe": 6.14.2 - "@cspell/cspell-types": 6.14.2 + "@cspell/cspell-pipe": 6.15.1 + "@cspell/cspell-types": 6.15.1 bin: cspell-grammar: bin.js - checksum: 41fdc35d8ac128f23dbaf3fe2a01ed0b5115a0d2e1437dd9a93d55e14207d4a35c2e5603799fd57d522d0d1dee61325fdd0940c4b565c96589238ec3c31cf20b + checksum: ad368885ba4c1816ef32928304ccf41a30710a044fc607a2db0dc92f831078c37a177ceba9881e8c93c621f8622a576db0c3071df66039fba43ff6965f4f1f7c languageName: node linkType: hard -"cspell-io@npm:6.14.2": - version: 6.14.2 - resolution: "cspell-io@npm:6.14.2" +"cspell-io@npm:6.15.1": + version: 6.15.1 + resolution: "cspell-io@npm:6.15.1" dependencies: - "@cspell/cspell-service-bus": 6.14.2 + "@cspell/cspell-service-bus": 6.15.1 node-fetch: ^2.6.7 - checksum: 7ac3edc357b1926134bea1303ed2d0093ca009e18bb541c19917a98f0c892b203119e0bd36af602699b0be75ecf83f673f2539248e06829bf154259250784626 + checksum: 9ea62c652233e6a856deca371f740665c3e366adb773424789a798596d6d9796283036746cb33167b324f084bd463432c4a4f23c1bfbfcbb255a61e5a1a43d83 languageName: node linkType: hard -"cspell-lib@npm:6.14.2": - version: 6.14.2 - resolution: "cspell-lib@npm:6.14.2" +"cspell-lib@npm:6.15.1": + version: 6.15.1 + resolution: "cspell-lib@npm:6.15.1" dependencies: - "@cspell/cspell-bundled-dicts": 6.14.2 - "@cspell/cspell-pipe": 6.14.2 - "@cspell/cspell-types": 6.14.2 - "@cspell/strong-weak-map": 6.14.2 + "@cspell/cspell-bundled-dicts": 6.15.1 + "@cspell/cspell-pipe": 6.15.1 + "@cspell/cspell-types": 6.15.1 + "@cspell/strong-weak-map": 6.15.1 clear-module: ^4.1.2 comment-json: ^4.2.3 configstore: ^5.0.1 - cosmiconfig: ^7.0.1 - cspell-dictionary: 6.14.2 - cspell-glob: 6.14.2 - cspell-grammar: 6.14.2 - cspell-io: 6.14.2 - cspell-trie-lib: 6.14.2 + cosmiconfig: ^8.0.0 + cspell-dictionary: 6.15.1 + cspell-glob: 6.15.1 + cspell-grammar: 6.15.1 + cspell-io: 6.15.1 + cspell-trie-lib: 6.15.1 fast-equals: ^4.0.3 find-up: ^5.0.0 fs-extra: ^10.1.0 @@ -6274,32 +6294,32 @@ __metadata: resolve-global: ^1.0.0 vscode-languageserver-textdocument: ^1.0.7 vscode-uri: ^3.0.6 - checksum: 81365c372ee406ae3280b3178f8c669c8852d4c91fec5e1dd4bb36b4ed04f8ca68b72105a3cbcb776fb94be17201973613f5194bb9e9df66cfd93227ba989cc8 + checksum: 6a45f40811049d9c72fd299bb7241fb78887d3e102f05a9957c8c71de61b74e009f909437fe349f9cf7d7e90636aa2cc5e15943a306738b38e633779ecd5851c languageName: node linkType: hard -"cspell-trie-lib@npm:6.14.2": - version: 6.14.2 - resolution: "cspell-trie-lib@npm:6.14.2" +"cspell-trie-lib@npm:6.15.1": + version: 6.15.1 + resolution: "cspell-trie-lib@npm:6.15.1" dependencies: - "@cspell/cspell-pipe": 6.14.2 - "@cspell/cspell-types": 6.14.2 + "@cspell/cspell-pipe": 6.15.1 + "@cspell/cspell-types": 6.15.1 fs-extra: ^10.1.0 gensequence: ^4.0.2 - checksum: ee90ca0b72a8b1f94cda7709e7cc3b99dbe1743bdba54638b073be2bac458a2c91de9b26a119b4bed9dbfbac3dd017ba88ee445cf845d1fb6276843a629e7e80 + checksum: 678d91bdbf474a43f76450c7d8043ed2b79f873edc97bb386d025490c4ea86fa009c5bd0fb4154afbd39ae488107ead0580301659b2be9e7fbfad70b54a264ab languageName: node linkType: hard -"cspell@npm:6.14.2": - version: 6.14.2 - resolution: "cspell@npm:6.14.2" +"cspell@npm:6.15.1": + version: 6.15.1 + resolution: "cspell@npm:6.15.1" dependencies: - "@cspell/cspell-pipe": 6.14.2 + "@cspell/cspell-pipe": 6.15.1 chalk: ^4.1.2 commander: ^9.4.1 - cspell-gitignore: 6.14.2 - cspell-glob: 6.14.2 - cspell-lib: 6.14.2 + cspell-gitignore: 6.15.1 + cspell-glob: 6.15.1 + cspell-lib: 6.15.1 fast-json-stable-stringify: ^2.1.0 file-entry-cache: ^6.0.1 fs-extra: ^10.1.0 @@ -6311,7 +6331,7 @@ __metadata: vscode-uri: ^3.0.6 bin: cspell: bin.js - checksum: e27fd60bf62ae652ecd1ba7ac1430f3217a9790bf8c3171088c91a5a00adba2fc1fb9e0cf3cf6b0045bb4f8890ca3cb07e0064b4bd115adf48e2f486ee9628a4 + checksum: fb9a1d085dba1c2ff3e9a04f4a30e17a2cddfe3d92022978d70173089f99a5a3073f59c5915e4ccd9d5454498e402c76401cd77dc799596c1ba9844fa23ddb81 languageName: node linkType: hard @@ -16575,7 +16595,7 @@ __metadata: core-js: 3.25.5 countly-sdk-web: 22.6.2 cross-env: 7.0.3 - cspell: 6.14.2 + cspell: 6.15.1 css-loader: ^6.7.1 cssnano: ^5.1.14 date-fns: 2.29.3 From 9019c32a69913143395ee2e867ce0f2f03c00fca Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 30 Nov 2022 16:11:18 +0000 Subject: [PATCH 044/329] chore(deps): Bump react-intl from 6.2.1 to 6.2.2 (#14207) Bumps [react-intl](https://github.com/formatjs/formatjs) from 6.2.1 to 6.2.2. - [Release notes](https://github.com/formatjs/formatjs/releases) - [Commits](https://github.com/formatjs/formatjs/compare/react-intl@6.2.1...react-intl@6.2.2) --- updated-dependencies: - dependency-name: react-intl dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 102 +++++++++++++++++++++++++-------------------------- 2 files changed, 52 insertions(+), 52 deletions(-) diff --git a/package.json b/package.json index 7b8f011c29e..f66327ac27f 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "platform": "1.3.6", "react": "18.2.0", "react-dom": "18.2.0", - "react-intl": "6.2.1", + "react-intl": "6.2.2", "react-redux": "8.0.5", "react-router": "6.4.3", "react-router-dom": "6.4.3", diff --git a/yarn.lock b/yarn.lock index 906c53c6e17..286d6416e9f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2315,13 +2315,13 @@ __metadata: languageName: node linkType: hard -"@formatjs/ecma402-abstract@npm:1.13.0": - version: 1.13.0 - resolution: "@formatjs/ecma402-abstract@npm:1.13.0" +"@formatjs/ecma402-abstract@npm:1.14.0": + version: 1.14.0 + resolution: "@formatjs/ecma402-abstract@npm:1.14.0" dependencies: "@formatjs/intl-localematcher": 0.2.31 tslib: 2.4.0 - checksum: 203e70e3b394e0d05c3ce9b72de90cfa94d13e928d51f187ee5040ccd4d738160e04aa4490133eca00552dc24fd2cde376e1a1bc6f86ef11ad7d684854c17b11 + checksum: 2d9f308b5ab40b8141c3fa2e6d2618f062e993e1dbf54322e293ff2fb40f8a16026d104f5de28544b6ed33185559c06bd440aa3badc00754d2e42c2604c9f0f3 languageName: node linkType: hard @@ -2334,46 +2334,46 @@ __metadata: languageName: node linkType: hard -"@formatjs/icu-messageformat-parser@npm:2.1.10": - version: 2.1.10 - resolution: "@formatjs/icu-messageformat-parser@npm:2.1.10" +"@formatjs/icu-messageformat-parser@npm:2.1.11": + version: 2.1.11 + resolution: "@formatjs/icu-messageformat-parser@npm:2.1.11" dependencies: - "@formatjs/ecma402-abstract": 1.13.0 - "@formatjs/icu-skeleton-parser": 1.3.14 + "@formatjs/ecma402-abstract": 1.14.0 + "@formatjs/icu-skeleton-parser": 1.3.15 tslib: 2.4.0 - checksum: a251a2be349a6daffc9856b6345189ea6ac59b8a20e2d603f5d196f5649f0c262eb714e5fb5f3eeff0c90a47bc77e6dc54fb281f659df3374dbb78116263acc3 + checksum: 24e5952669180942a4a4b71a729105b1e82eb60225bc23383e989ccf7c101c03e4380c6fbc7bff5c24e129a9650a2eafab5aedc7625b43f05e294fc458ad0c99 languageName: node linkType: hard -"@formatjs/icu-skeleton-parser@npm:1.3.14": - version: 1.3.14 - resolution: "@formatjs/icu-skeleton-parser@npm:1.3.14" +"@formatjs/icu-skeleton-parser@npm:1.3.15": + version: 1.3.15 + resolution: "@formatjs/icu-skeleton-parser@npm:1.3.15" dependencies: - "@formatjs/ecma402-abstract": 1.13.0 + "@formatjs/ecma402-abstract": 1.14.0 tslib: 2.4.0 - checksum: 14b6820418504cfc439a06b594c1c63b6ebb946a4c0750a55806c203e27b4653bad862b628043d69a5eeac33e3be2eb2e0ea62245a76421da9c76f2293b5829e + checksum: b689a1ca84415be944376d953fde2d815946857df0a97711221deffe2a280e9e83a8a7e1d61e55aecb525721339024a40f8d22f3c57ad077020bcf57a40f7bb8 languageName: node linkType: hard -"@formatjs/intl-displaynames@npm:6.1.4": - version: 6.1.4 - resolution: "@formatjs/intl-displaynames@npm:6.1.4" +"@formatjs/intl-displaynames@npm:6.2.0": + version: 6.2.0 + resolution: "@formatjs/intl-displaynames@npm:6.2.0" dependencies: - "@formatjs/ecma402-abstract": 1.13.0 + "@formatjs/ecma402-abstract": 1.14.0 "@formatjs/intl-localematcher": 0.2.31 tslib: 2.4.0 - checksum: 1c0ababcf4ba7acbed517067526289fab39330b861045d67ed0ce2e6bcb3b5ab18263fd4bb214345de5c7dcfebb0931b09fab2608e9e9a9a3b18c56873192e7c + checksum: e0c38d2770f0d28047ec120523398ee06f7f8305b3a0f04f6ed259f61ca0fbaea3a7660bb0fbccee0d07e36069b3d7781bc27c0e0f50c6c08fceca9b642dfa44 languageName: node linkType: hard -"@formatjs/intl-listformat@npm:7.1.3": - version: 7.1.3 - resolution: "@formatjs/intl-listformat@npm:7.1.3" +"@formatjs/intl-listformat@npm:7.1.4": + version: 7.1.4 + resolution: "@formatjs/intl-listformat@npm:7.1.4" dependencies: - "@formatjs/ecma402-abstract": 1.13.0 + "@formatjs/ecma402-abstract": 1.14.0 "@formatjs/intl-localematcher": 0.2.31 tslib: 2.4.0 - checksum: 36b2f5642da8cc081c16c99d81dc4c4736bf82457f71db06deb73e97951c5e60065ecce6739a797f5fc3a3f77d076690d09ed81466ef160b019a70b927abcc9f + checksum: 1bec24bb477ed630df3c307d071b9e411c8bf765e64da7a9c69eb2257254eea69d3b1e81f559a269693f6c2c0542a8ce3e547c690737a01f1275948e966f6c1d languageName: node linkType: hard @@ -2386,23 +2386,23 @@ __metadata: languageName: node linkType: hard -"@formatjs/intl@npm:2.5.1": - version: 2.5.1 - resolution: "@formatjs/intl@npm:2.5.1" +"@formatjs/intl@npm:2.6.0": + version: 2.6.0 + resolution: "@formatjs/intl@npm:2.6.0" dependencies: - "@formatjs/ecma402-abstract": 1.13.0 + "@formatjs/ecma402-abstract": 1.14.0 "@formatjs/fast-memoize": 1.2.6 - "@formatjs/icu-messageformat-parser": 2.1.10 - "@formatjs/intl-displaynames": 6.1.4 - "@formatjs/intl-listformat": 7.1.3 - intl-messageformat: 10.2.1 + "@formatjs/icu-messageformat-parser": 2.1.11 + "@formatjs/intl-displaynames": 6.2.0 + "@formatjs/intl-listformat": 7.1.4 + intl-messageformat: 10.2.2 tslib: 2.4.0 peerDependencies: typescript: ^4.7 peerDependenciesMeta: typescript: optional: true - checksum: d9c8c9807fa7bd921151bd88c7e6d621692776bf16d9ec8ae42876c431d17474a6686b8042fe316d23430190fbf2a1a68682543300e843deb2b513d83a53516e + checksum: 703b5a495cc6f23358abbde0df03189053d34567eef5fa78813cea4bd04517d8ea2f3e206d58d437c748cc2e12027c618213b96cea7f2d3fbad377ab8a72e0ee languageName: node linkType: hard @@ -9139,15 +9139,15 @@ __metadata: languageName: node linkType: hard -"intl-messageformat@npm:10.2.1": - version: 10.2.1 - resolution: "intl-messageformat@npm:10.2.1" +"intl-messageformat@npm:10.2.2": + version: 10.2.2 + resolution: "intl-messageformat@npm:10.2.2" dependencies: - "@formatjs/ecma402-abstract": 1.13.0 + "@formatjs/ecma402-abstract": 1.14.0 "@formatjs/fast-memoize": 1.2.6 - "@formatjs/icu-messageformat-parser": 2.1.10 + "@formatjs/icu-messageformat-parser": 2.1.11 tslib: 2.4.0 - checksum: a2bcbe0166cbd112bba78626a5dc2970f1398e61e1d908e9083a0ef8b6ddd2ef0699904dc60ea3a1d03155b12ca17e80a3caed60e1fd25432868065e4f0032da + checksum: 443954e8fde79eb497230a51a3c21fecec09c4ebcdfab11be28cadb631e35c6667e103a0fd9c3bca105de185341d25306296a6b85427a874ce4deefe5f6c61df languageName: node linkType: hard @@ -13612,19 +13612,19 @@ __metadata: languageName: node linkType: hard -"react-intl@npm:6.2.1": - version: 6.2.1 - resolution: "react-intl@npm:6.2.1" +"react-intl@npm:6.2.2": + version: 6.2.2 + resolution: "react-intl@npm:6.2.2" dependencies: - "@formatjs/ecma402-abstract": 1.13.0 - "@formatjs/icu-messageformat-parser": 2.1.10 - "@formatjs/intl": 2.5.1 - "@formatjs/intl-displaynames": 6.1.4 - "@formatjs/intl-listformat": 7.1.3 + "@formatjs/ecma402-abstract": 1.14.0 + "@formatjs/icu-messageformat-parser": 2.1.11 + "@formatjs/intl": 2.6.0 + "@formatjs/intl-displaynames": 6.2.0 + "@formatjs/intl-listformat": 7.1.4 "@types/hoist-non-react-statics": ^3.3.1 "@types/react": 16 || 17 || 18 hoist-non-react-statics: ^3.3.2 - intl-messageformat: 10.2.1 + intl-messageformat: 10.2.2 tslib: 2.4.0 peerDependencies: react: ^16.6.0 || 17 || 18 @@ -13632,7 +13632,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 1b87ce7d1ab5d6796f4075422f4b59ecd26214dd7e9c3fa0821b49df244c5d0e876a010f3839cbedeca4f67a70e64b5e473d15036bf06a4bac1bdec8cbd7e5f8 + checksum: e85d76972786cb8aafd59247107323f02b8e931e8e4f967992297289fe257e75c29b4b54a6073dd1039fb23031d39e1f0bcd3bc27381cc9d2f0f88511b71feb7 languageName: node linkType: hard @@ -16663,7 +16663,7 @@ __metadata: raf: 3.4.1 react: 18.2.0 react-dom: 18.2.0 - react-intl: 6.2.1 + react-intl: 6.2.2 react-redux: 8.0.5 react-router: 6.4.3 react-router-dom: 6.4.3 From b8c9ac7d04b4e44dbce72979ae0744a3d2d3b2c9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 30 Nov 2022 16:11:35 +0000 Subject: [PATCH 045/329] chore(deps-dev): Bump eslint-plugin-jsdoc from 39.6.2 to 39.6.4 (#14212) Bumps [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) from 39.6.2 to 39.6.4. - [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases) - [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v39.6.2...v39.6.4) --- updated-dependencies: - dependency-name: eslint-plugin-jsdoc dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] 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, 11 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index f66327ac27f..147405c3a78 100644 --- a/package.json +++ b/package.json @@ -118,7 +118,7 @@ "eslint-plugin-import": "^2.26.0", "eslint-plugin-jest": "^27.1.4", "eslint-plugin-jest-dom": "^4.0.2", - "eslint-plugin-jsdoc": "^39.6.2", + "eslint-plugin-jsdoc": "^39.6.4", "eslint-plugin-jsx-a11y": "^6.6.1", "eslint-plugin-no-unsanitized": "^4.0.1", "eslint-plugin-prettier": "^4.2.1", diff --git a/yarn.lock b/yarn.lock index 286d6416e9f..24e98431ba0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2250,14 +2250,14 @@ __metadata: languageName: node linkType: hard -"@es-joy/jsdoccomment@npm:~0.36.0": - version: 0.36.0 - resolution: "@es-joy/jsdoccomment@npm:0.36.0" +"@es-joy/jsdoccomment@npm:~0.36.1": + version: 0.36.1 + resolution: "@es-joy/jsdoccomment@npm:0.36.1" dependencies: comment-parser: 1.3.1 esquery: ^1.4.0 jsdoc-type-pratt-parser: ~3.1.0 - checksum: c2fa95bc01f6b2a0caa521adaa37562b10b12095b5308948f3e122880d2ae9684c09e5b0e0809ac3e31e17580886d2d3b41fbf4ff4831649efce8cba8e30cf5c + checksum: 28e697779230dc6a95b1f233a8c2a72b64fbea686e407106e5d4292083421a997452731c414de26c10bee86e8e0397c5fb84d6ecfd4b472a29735e1af103ddb6 languageName: node linkType: hard @@ -7413,11 +7413,11 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-jsdoc@npm:^39.6.2": - version: 39.6.2 - resolution: "eslint-plugin-jsdoc@npm:39.6.2" +"eslint-plugin-jsdoc@npm:^39.6.4": + version: 39.6.4 + resolution: "eslint-plugin-jsdoc@npm:39.6.4" dependencies: - "@es-joy/jsdoccomment": ~0.36.0 + "@es-joy/jsdoccomment": ~0.36.1 comment-parser: 1.3.1 debug: ^4.3.4 escape-string-regexp: ^4.0.0 @@ -7426,7 +7426,7 @@ __metadata: spdx-expression-parse: ^3.0.1 peerDependencies: eslint: ^7.0.0 || ^8.0.0 - checksum: 613c541a644d441e5465139b2a1934842a29c701fb89f0380f105be28180c1fa2f3c08b421b134b87fef194d4fb4dab4006a972a084e476eebb14cf5bb9399fe + checksum: 2976112ae997b9f246eba98d849359a0df46ea07c0a9d6d90c3b76a29c253b9e92d1d46d6cf86f878e442653b97591e5ea01d05a6accdb078339c39e8767723e languageName: node linkType: hard @@ -16613,7 +16613,7 @@ __metadata: eslint-plugin-import: ^2.26.0 eslint-plugin-jest: ^27.1.4 eslint-plugin-jest-dom: ^4.0.2 - eslint-plugin-jsdoc: ^39.6.2 + eslint-plugin-jsdoc: ^39.6.4 eslint-plugin-jsx-a11y: ^6.6.1 eslint-plugin-no-unsanitized: ^4.0.1 eslint-plugin-prettier: ^4.2.1 From d035598c6a866e8f48d5a5858f498c6852c9ebca Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 30 Nov 2022 16:12:28 +0000 Subject: [PATCH 046/329] chore(deps-dev): Bump lint-staged from 13.0.3 to 13.0.4 (#14211) Bumps [lint-staged](https://github.com/okonet/lint-staged) from 13.0.3 to 13.0.4. - [Release notes](https://github.com/okonet/lint-staged/releases) - [Commits](https://github.com/okonet/lint-staged/compare/v13.0.3...v13.0.4) --- updated-dependencies: - dependency-name: lint-staged dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 61 +++++++++++++++++++++++----------------------------- 2 files changed, 28 insertions(+), 35 deletions(-) diff --git a/package.json b/package.json index 147405c3a78..916e32e1d58 100644 --- a/package.json +++ b/package.json @@ -142,7 +142,7 @@ "jsdom-worker": "0.3.0", "less": "3.13.1", "less-loader": "^11.1.0", - "lint-staged": "13.0.3", + "lint-staged": "13.0.4", "node-fetch": "2.6.7", "os-browserify": "0.3.0", "path-browserify": "1.0.1", diff --git a/yarn.lock b/yarn.lock index 24e98431ba0..2787c7b9a05 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5883,7 +5883,7 @@ __metadata: languageName: node linkType: hard -"colorette@npm:^2.0.10, colorette@npm:^2.0.14, colorette@npm:^2.0.16, colorette@npm:^2.0.17": +"colorette@npm:^2.0.10, colorette@npm:^2.0.14, colorette@npm:^2.0.19": version: 2.0.19 resolution: "colorette@npm:2.0.19" checksum: 888cf5493f781e5fcf54ce4d49e9d7d698f96ea2b2ef67906834bb319a392c667f9ec69f4a10e268d2946d13a9503d2d19b3abaaaf174e3451bfe91fb9d82427 @@ -5920,7 +5920,7 @@ __metadata: languageName: node linkType: hard -"commander@npm:^9.0.0, commander@npm:^9.3.0, commander@npm:^9.4.1": +"commander@npm:^9.0.0, commander@npm:^9.4.1": version: 9.4.1 resolution: "commander@npm:9.4.1" checksum: bfb18e325a5bdf772763c2213d5c7d9e77144d944124e988bcd8e5e65fb6d45d5d4e86b09155d0f2556c9a59c31e428720e57968bcd050b2306e910a0bf3cf13 @@ -10822,14 +10822,7 @@ __metadata: languageName: node linkType: hard -"lilconfig@npm:2.0.5": - version: 2.0.5 - resolution: "lilconfig@npm:2.0.5" - checksum: f7bb9e42656f06930ad04e583026f087508ae408d3526b8b54895e934eb2a966b7aafae569656f2c79a29fe6d779b3ec44ba577e80814734c8655d6f71cdf2d1 - languageName: node - linkType: hard - -"lilconfig@npm:^2.0.3": +"lilconfig@npm:2.0.6, lilconfig@npm:^2.0.3": version: 2.0.6 resolution: "lilconfig@npm:2.0.6" checksum: 40a3cd72f103b1be5975f2ac1850810b61d4053e20ab09be8d3aeddfe042187e1ba70b4651a7e70f95efa1642e7dc8b2ae395b317b7d7753b241b43cef7c0f7d @@ -10861,39 +10854,39 @@ __metadata: languageName: node linkType: hard -"lint-staged@npm:13.0.3": - version: 13.0.3 - resolution: "lint-staged@npm:13.0.3" +"lint-staged@npm:13.0.4": + version: 13.0.4 + resolution: "lint-staged@npm:13.0.4" dependencies: cli-truncate: ^3.1.0 - colorette: ^2.0.17 - commander: ^9.3.0 + colorette: ^2.0.19 + commander: ^9.4.1 debug: ^4.3.4 execa: ^6.1.0 - lilconfig: 2.0.5 - listr2: ^4.0.5 + lilconfig: 2.0.6 + listr2: ^5.0.5 micromatch: ^4.0.5 normalize-path: ^3.0.0 object-inspect: ^1.12.2 pidtree: ^0.6.0 string-argv: ^0.3.1 - yaml: ^2.1.1 + yaml: ^2.1.3 bin: lint-staged: bin/lint-staged.js - checksum: 53d585007df06e162febab6b0836b55016d902586a267823c8a1158529d8c742dc7297e523f7023dff02250bef3eb0d6934f4ec4f9961adfc2ebbed5f54162d0 + checksum: 4676172df5dc734a7f409ad786a72d39bd2239de8b2e5eb1d99eaa751479f60f7b4ef85c8508698855b51b125a512f395ac6a3c7d2d57de8e8221e0aaaab6f4f languageName: node linkType: hard -"listr2@npm:^4.0.5": - version: 4.0.5 - resolution: "listr2@npm:4.0.5" +"listr2@npm:^5.0.5": + version: 5.0.6 + resolution: "listr2@npm:5.0.6" dependencies: cli-truncate: ^2.1.0 - colorette: ^2.0.16 + colorette: ^2.0.19 log-update: ^4.0.0 p-map: ^4.0.0 rfdc: ^1.3.0 - rxjs: ^7.5.5 + rxjs: ^7.5.7 through: ^2.3.8 wrap-ansi: ^7.0.0 peerDependencies: @@ -10901,7 +10894,7 @@ __metadata: peerDependenciesMeta: enquirer: optional: true - checksum: 7af31851abe25969ef0581c6db808117e36af15b131401795182427769d9824f451ba9e8aff6ccd25b6a4f6c8796f816292caf08e5f1f9b1775e8e9c313dc6c5 + checksum: 18975d690988aa2cce18fea9bacfc12c2607948ff9f7b7fd5b3e2b64d059b6e1961f8d06b4e1400d4c6bc18af84c7c145c2d22a1d392464fdb197c53b062e3d5 languageName: node linkType: hard @@ -14330,12 +14323,12 @@ __metadata: languageName: node linkType: hard -"rxjs@npm:^7.5.5": - version: 7.5.6 - resolution: "rxjs@npm:7.5.6" +"rxjs@npm:^7.5.7": + version: 7.5.7 + resolution: "rxjs@npm:7.5.7" dependencies: tslib: ^2.1.0 - checksum: fc05f01364a74dac57490fb3e07ea63b422af04017fae1db641a009073f902ef69f285c5daac31359620dc8d9aee7d81e42b370ca2a8573d1feae0b04329383b + checksum: edabcdb73b0f7e0f5f6e05c2077aff8c52222ac939069729704357d6406438acca831c24210db320aba269e86dbe1a400f3769c89101791885121a342fb15d9c languageName: node linkType: hard @@ -16645,7 +16638,7 @@ __metadata: less: 3.13.1 less-loader: ^11.1.0 linkify-it: 4.0.1 - lint-staged: 13.0.3 + lint-staged: 13.0.4 long: 5.2.1 markdown-it: 13.0.1 murmurhash: 2.0.1 @@ -17054,10 +17047,10 @@ __metadata: languageName: node linkType: hard -"yaml@npm:^2.1.1": - version: 2.1.1 - resolution: "yaml@npm:2.1.1" - checksum: f48bb209918aa57cfaf78ef6448d1a1f8187f45c746f933268b7023dc59e5456004611879126c9bb5ea55b0a2b1c2b392dfde436931ece0c703a3d754562bb96 +"yaml@npm:^2.1.3": + version: 2.1.3 + resolution: "yaml@npm:2.1.3" + checksum: 91316062324a93f9cb547469092392e7d004ff8f70c40fecb420f042a4870b2181557350da56c92f07bd44b8f7a252b0be26e6ade1f548e1f4351bdd01c9d3c7 languageName: node linkType: hard From 2679cf1c275e1ca94b2dbcad08f5e5961601d6a7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 30 Nov 2022 16:14:55 +0000 Subject: [PATCH 047/329] chore(deps-dev): Bump webpack-hot-middleware from 2.25.2 to 2.25.3 (#14216) Bumps [webpack-hot-middleware](https://github.com/webpack-contrib/webpack-hot-middleware) from 2.25.2 to 2.25.3. - [Release notes](https://github.com/webpack-contrib/webpack-hot-middleware/releases) - [Changelog](https://github.com/webpack-contrib/webpack-hot-middleware/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack-contrib/webpack-hot-middleware/compare/v2.25.2...v2.25.3) --- updated-dependencies: - dependency-name: webpack-hot-middleware dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] 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 916e32e1d58..063e400ea68 100644 --- a/package.json +++ b/package.json @@ -173,7 +173,7 @@ "webpack": "5.74.0", "webpack-cli": "4.10.0", "webpack-dev-middleware": "5.3.3", - "webpack-hot-middleware": "2.25.2", + "webpack-hot-middleware": "2.25.3", "workbox-webpack-plugin": "6.5.4" }, "engines": { diff --git a/yarn.lock b/yarn.lock index 2787c7b9a05..7ee190be27f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -16315,14 +16315,14 @@ __metadata: languageName: node linkType: hard -"webpack-hot-middleware@npm:2.25.2": - version: 2.25.2 - resolution: "webpack-hot-middleware@npm:2.25.2" +"webpack-hot-middleware@npm:2.25.3": + version: 2.25.3 + resolution: "webpack-hot-middleware@npm:2.25.3" dependencies: ansi-html-community: 0.0.8 html-entities: ^2.1.0 strip-ansi: ^6.0.0 - checksum: 9bbcb4a3109d5efc3fedc41ab84209745e47770a205897324adff9126196d9cd086237288161d71cd7273a0154e09046d025a3c30c6938bd04e58d3b379fdcca + checksum: 74fe5d15f3120742cf0f88a4af7e72f3678f2d05905676e37ab4e85c559f2c21d8aa72b0efe7c262993370bfc83fbe5a8d42561bcd10b370fac88640f87c463a languageName: node linkType: hard @@ -16689,7 +16689,7 @@ __metadata: webpack: 5.74.0 webpack-cli: 4.10.0 webpack-dev-middleware: 5.3.3 - webpack-hot-middleware: 2.25.2 + webpack-hot-middleware: 2.25.3 webrtc-adapter: 6.4.8 workbox-webpack-plugin: 6.5.4 zustand: 4.1.4 From 79439b5cdc1c521fd5a915a40ae7db4316e298f5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 30 Nov 2022 16:17:50 +0000 Subject: [PATCH 048/329] chore(deps-dev): Bump @typescript-eslint/eslint-plugin (#14222) Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 5.42.1 to 5.45.0. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.45.0/packages/eslint-plugin) --- updated-dependencies: - dependency-name: "@typescript-eslint/eslint-plugin" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 93 +++++++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 79 insertions(+), 16 deletions(-) diff --git a/package.json b/package.json index 063e400ea68..1c41e0a9986 100644 --- a/package.json +++ b/package.json @@ -90,7 +90,7 @@ "@types/uint32": "0.2.0", "@types/underscore": "1.11.4", "@types/webpack-env": "1.18.0", - "@typescript-eslint/eslint-plugin": "^5.42.1", + "@typescript-eslint/eslint-plugin": "^5.45.0", "@typescript-eslint/parser": "^5.42.1", "@wireapp/copy-config": "2.0.3", "@wireapp/eslint-config": "2.1.0", diff --git a/yarn.lock b/yarn.lock index 7ee190be27f..ec317d6f80a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3828,13 +3828,13 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:^5.42.1": - version: 5.42.1 - resolution: "@typescript-eslint/eslint-plugin@npm:5.42.1" +"@typescript-eslint/eslint-plugin@npm:^5.45.0": + version: 5.45.0 + resolution: "@typescript-eslint/eslint-plugin@npm:5.45.0" dependencies: - "@typescript-eslint/scope-manager": 5.42.1 - "@typescript-eslint/type-utils": 5.42.1 - "@typescript-eslint/utils": 5.42.1 + "@typescript-eslint/scope-manager": 5.45.0 + "@typescript-eslint/type-utils": 5.45.0 + "@typescript-eslint/utils": 5.45.0 debug: ^4.3.4 ignore: ^5.2.0 natural-compare-lite: ^1.4.0 @@ -3847,7 +3847,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 6e80b15df7e655964ddd3041d5f7c0bf564e9901f9e3a9cdaf8d056301841fad8d40cd253d83669f01e0ddc62521af9286a27f098df43e304cf932d768995e98 + checksum: 7cff671a9ba33afa86f0ece6d0ebaeb5fc16596fc659ef230f6f65bfddfef2ffb6434310e3a4444fb852e79e40c85c5e62c559df6ddc9312aac235a18afdd269 languageName: node linkType: hard @@ -3899,12 +3899,22 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:5.42.1": - version: 5.42.1 - resolution: "@typescript-eslint/type-utils@npm:5.42.1" +"@typescript-eslint/scope-manager@npm:5.45.0": + version: 5.45.0 + resolution: "@typescript-eslint/scope-manager@npm:5.45.0" dependencies: - "@typescript-eslint/typescript-estree": 5.42.1 - "@typescript-eslint/utils": 5.42.1 + "@typescript-eslint/types": 5.45.0 + "@typescript-eslint/visitor-keys": 5.45.0 + checksum: 8f686be8ee0c7ac49ee2a313570cddf86a1364b1ec129f50f8a531038a3bb241429734dc5e2c4e5dd76cc3ed149628aa3e8425cc092f37ca6885b1995c99c2d1 + languageName: node + linkType: hard + +"@typescript-eslint/type-utils@npm:5.45.0": + version: 5.45.0 + resolution: "@typescript-eslint/type-utils@npm:5.45.0" + dependencies: + "@typescript-eslint/typescript-estree": 5.45.0 + "@typescript-eslint/utils": 5.45.0 debug: ^4.3.4 tsutils: ^3.21.0 peerDependencies: @@ -3912,7 +3922,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 7ac3180aeb966351e54055440f42b723aa864fd39c74be5a41aae97401e6424df94d9f96ae945f1c3a6023860ffd7ba424ff6506c21bd373a6cd878466d9ba62 + checksum: be96c89b91116b8fbed160631f3cdd345d47e34248a38e8a730fa9e09a4aa21184259414547d3c7a741b83fa68d4a14f77e9fc93b84aba4752f67bd5a772bf27 languageName: node linkType: hard @@ -3930,6 +3940,13 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/types@npm:5.45.0": + version: 5.45.0 + resolution: "@typescript-eslint/types@npm:5.45.0" + checksum: 43d533622995f002221e439ea517aa07dbce2067cc880a6eb9d26307c505b746975f334d76b35501a2f4dd06d7aaf79964d86ce5a95e76a4f309d6e54faf5213 + languageName: node + linkType: hard + "@typescript-eslint/typescript-estree@npm:5.10.1": version: 5.10.1 resolution: "@typescript-eslint/typescript-estree@npm:5.10.1" @@ -3966,6 +3983,24 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/typescript-estree@npm:5.45.0": + version: 5.45.0 + resolution: "@typescript-eslint/typescript-estree@npm:5.45.0" + dependencies: + "@typescript-eslint/types": 5.45.0 + "@typescript-eslint/visitor-keys": 5.45.0 + debug: ^4.3.4 + globby: ^11.1.0 + is-glob: ^4.0.3 + semver: ^7.3.7 + tsutils: ^3.21.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 8f48b3c75c155491ee49436c470e491f9fe48e6e7c95190c4d0c0ab64ce24e8bc6715de86996baf57fc9f0c6dae986ce9ae075e656664489bfa1dc706eaafcd7 + languageName: node + linkType: hard + "@typescript-eslint/utils@npm:5.10.1": version: 5.10.1 resolution: "@typescript-eslint/utils@npm:5.10.1" @@ -3982,7 +4017,25 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/utils@npm:5.42.1, @typescript-eslint/utils@npm:^5.10.0, @typescript-eslint/utils@npm:^5.13.0": +"@typescript-eslint/utils@npm:5.45.0": + version: 5.45.0 + resolution: "@typescript-eslint/utils@npm:5.45.0" + dependencies: + "@types/json-schema": ^7.0.9 + "@types/semver": ^7.3.12 + "@typescript-eslint/scope-manager": 5.45.0 + "@typescript-eslint/types": 5.45.0 + "@typescript-eslint/typescript-estree": 5.45.0 + eslint-scope: ^5.1.1 + eslint-utils: ^3.0.0 + semver: ^7.3.7 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: 33a383881efb6c6e0ecd32f74810ca18bb5e85d4839f607409047d6e3d64a98b3cd1e811d027638d051b3741981de50a652c3abe0fcbb70fac80d7d93cd3e36f + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:^5.10.0, @typescript-eslint/utils@npm:^5.13.0": version: 5.42.1 resolution: "@typescript-eslint/utils@npm:5.42.1" dependencies: @@ -4020,6 +4073,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/visitor-keys@npm:5.45.0": + version: 5.45.0 + resolution: "@typescript-eslint/visitor-keys@npm:5.45.0" + dependencies: + "@typescript-eslint/types": 5.45.0 + eslint-visitor-keys: ^3.3.0 + checksum: 050cc4275d8a3638a106c2915410710e775382996130a6b2af732269e55cbbc4ed438c8662ddf409635d2d8bd0d8a4389b3980bc2cb38c6105c77c6835222af0 + languageName: node + linkType: hard + "@webassemblyjs/ast@npm:1.11.1": version: 1.11.1 resolution: "@webassemblyjs/ast@npm:1.11.1" @@ -16564,7 +16627,7 @@ __metadata: "@types/uint32": 0.2.0 "@types/underscore": 1.11.4 "@types/webpack-env": 1.18.0 - "@typescript-eslint/eslint-plugin": ^5.42.1 + "@typescript-eslint/eslint-plugin": ^5.45.0 "@typescript-eslint/parser": ^5.42.1 "@wireapp/antiscroll-2": 1.3.1 "@wireapp/avs": 8.2.17 From a26887403af2409dfcaa24cfadfb236291e307f5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 30 Nov 2022 16:18:39 +0000 Subject: [PATCH 049/329] chore(deps-dev): Bump @types/react-dom from 18.0.8 to 18.0.9 (#14218) Bumps [@types/react-dom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-dom) from 18.0.8 to 18.0.9. - [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] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 13 +++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 1c41e0a9986..e6ec32bd84f 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,7 @@ "@types/platform": "1.3.4", "@types/prettier": "^2.7.1", "@types/react": "18.0.21", - "@types/react-dom": "18.0.8", + "@types/react-dom": "18.0.9", "@types/react-redux": "7.1.24", "@types/react-transition-group": "4.4.5", "@types/redux-mock-store": "1.0.3", diff --git a/yarn.lock b/yarn.lock index ec317d6f80a..38ae26db91f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3653,7 +3653,16 @@ __metadata: languageName: node linkType: hard -"@types/react-dom@npm:18.0.8, @types/react-dom@npm:^18.0.0": +"@types/react-dom@npm:18.0.9": + version: 18.0.9 + resolution: "@types/react-dom@npm:18.0.9" + dependencies: + "@types/react": "*" + checksum: e744e3feba25fc43733289d4df4d9c0e59fcca7f34e8c89d75f81a339accb2bd70236d69382d47d2c0ad06a1529b2e56aa6171fe175854d60e07156ddceedfcb + languageName: node + linkType: hard + +"@types/react-dom@npm:^18.0.0": version: 18.0.8 resolution: "@types/react-dom@npm:18.0.8" dependencies: @@ -16617,7 +16626,7 @@ __metadata: "@types/platform": 1.3.4 "@types/prettier": ^2.7.1 "@types/react": 18.0.21 - "@types/react-dom": 18.0.8 + "@types/react-dom": 18.0.9 "@types/react-redux": 7.1.24 "@types/react-transition-group": 4.4.5 "@types/redux-mock-store": 1.0.3 From 82464859187a8e10c8c253853115dc72f9ff31bf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 30 Nov 2022 16:20:42 +0000 Subject: [PATCH 050/329] chore(deps): Bump @wireapp/react-ui-kit from 9.0.12 to 9.2.0 (#14210) Bumps [@wireapp/react-ui-kit](https://github.com/wireapp/wire-web-packages) from 9.0.12 to 9.2.0. - [Release notes](https://github.com/wireapp/wire-web-packages/releases) - [Commits](https://github.com/wireapp/wire-web-packages/compare/@wireapp/react-ui-kit@9.0.12...@wireapp/react-ui-kit@9.2.0) --- updated-dependencies: - dependency-name: "@wireapp/react-ui-kit" dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] 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 e6ec32bd84f..062c01edee0 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "@wireapp/antiscroll-2": "1.3.1", "@wireapp/avs": "8.2.17", "@wireapp/core": "37.2.1", - "@wireapp/react-ui-kit": "9.0.12", + "@wireapp/react-ui-kit": "9.2.0", "@wireapp/store-engine-dexie": "2.0.3", "@wireapp/store-engine-sqleet": "1.8.9", "@wireapp/webapp-events": "0.16.0", diff --git a/yarn.lock b/yarn.lock index 38ae26db91f..5268b1ff291 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4481,9 +4481,9 @@ __metadata: languageName: node linkType: hard -"@wireapp/react-ui-kit@npm:9.0.12": - version: 9.0.12 - resolution: "@wireapp/react-ui-kit@npm:9.0.12" +"@wireapp/react-ui-kit@npm:9.2.0": + version: 9.2.0 + resolution: "@wireapp/react-ui-kit@npm:9.2.0" dependencies: "@types/color": 3.0.3 color: 4.2.3 @@ -4498,7 +4498,7 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 37bf430631892dea613fa94f2e8f887fe55b72e6eb31e6b51bfa3c6f5c10390aa519b15dc02c4604f8d2c2c3d5edbb7ad049cc98af65f11f59054a3156c54b87 + checksum: 706df6c53ccf7a71a71904bfd1e07d3ee1c348fe81f8efa92de9628ee745e7b7d5f8b41af1d82be8d16580faa8457235710e92762892e9639f655e9d1512c58c languageName: node linkType: hard @@ -16644,7 +16644,7 @@ __metadata: "@wireapp/core": 37.2.1 "@wireapp/eslint-config": 2.1.0 "@wireapp/prettier-config": 0.5.2 - "@wireapp/react-ui-kit": 9.0.12 + "@wireapp/react-ui-kit": 9.2.0 "@wireapp/store-engine": ^5.0.3 "@wireapp/store-engine-dexie": 2.0.3 "@wireapp/store-engine-sqleet": 1.8.9 From 51a9a3ea621365367e20f60b261dda100b0c28c4 Mon Sep 17 00:00:00 2001 From: Virgile <78490891+V-Gira@users.noreply.github.com> Date: Thu, 1 Dec 2022 09:41:46 +0100 Subject: [PATCH 051/329] feat: add font size selection to the preferences [ACC-302] (#14183) * feat: add a font size slider to the preferences [ACC-302] (#14163) * runfix: correct visual issues at max font size of 24px [ACC-302] (#14166) * runfix: correct visual bugs at font size of 24px [ACC-302] (#14169) * feat: save root font size choice in local storage [ACC-302] (#14171) * runfix: use new component for font size slider [acc-302] (#14175) * runfix: address visual issues related to font size [ACC-302] (#14180) * runfix: adjust width of conversation elements in responsive view (#14154) * runfix: add voiceover to font slider (#14195) * refactor: move back useEffect in AppMain at its initial position (#14235) --- package.json | 1 + src/i18n/en-US.json | 3 +- .../MessagesList/Message/CallMessage.tsx | 6 +- .../Message/CallTimeoutMessage.tsx | 4 +- .../Message/DecryptErrorMessage.tsx | 1 - .../MessagesList/Message/DeleteMessage.tsx | 6 +- .../MessagesList/Message/MemberMessage.tsx | 2 - .../MessagesList/Message/SystemMessage.tsx | 1 - .../Message/VerificationMessage.tsx | 1 - src/script/hooks/useRootFontSize.ts | 60 +++++++++++++++++++ src/script/page/AppMain.tsx | 3 + .../panels/preferences/OptionPreferences.tsx | 56 ++++++++++++++--- .../ConversationDetailsOption.tsx | 8 ++- .../GroupParticipantUser.tsx | 2 +- src/script/storage/StorageKey.ts | 2 + .../components/asset/link-preview-asset.less | 7 +-- .../components/list/participant-item.less | 2 +- src/style/components/search-input.less | 5 ++ src/style/content/conversation/input-bar.less | 2 +- .../content/conversation/message-list.less | 19 +----- src/style/content/preferences.less | 3 +- src/style/foundation/video-calling.less | 2 +- src/style/list/conversations.less | 1 + src/style/modal/group-creation.less | 2 +- src/style/panel/panel.less | 14 +++-- src/style/panel/participant-devices.less | 2 +- yarn.lock | 23 +++++++ 27 files changed, 179 insertions(+), 59 deletions(-) create mode 100644 src/script/hooks/useRootFontSize.ts diff --git a/package.json b/package.json index 062c01edee0..f492b3a4b00 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "@wireapp/store-engine-sqleet": "1.8.9", "@wireapp/webapp-events": "0.16.0", "amplify": "https://github.com/wireapp/amplify#head=master", + "beautiful-react-hooks": "^3.11.2", "classnames": "2.3.2", "copy-webpack-plugin": "11.0.0", "core-js": "3.25.5", diff --git a/src/i18n/en-US.json b/src/i18n/en-US.json index bc37154a267..0525b558b6a 100644 --- a/src/i18n/en-US.json +++ b/src/i18n/en-US.json @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "Verified", "preferencesHeadline": "Preferences", "preferencesOptions": "Options", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "Sound alerts", "preferencesOptionsAudioAll": "All", "preferencesOptionsAudioAllDetail": "All sounds", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "Hide details", "preferencesOptionsNotificationsObfuscateMessage": "Show sender", "preferencesOptionsNotificationsOn": "Show sender and message", - "preferencesOptionsPopular": "By popular demand", "preferencesOptionsPreviewsSendCheckbox": "Create previews for links you send", "preferencesOptionsPreviewsSendDetail": "Previews may still be shown for links from other people.", "preferencesOptionsUseDarkMode": "Dark theme", diff --git a/src/script/components/MessagesList/Message/CallMessage.tsx b/src/script/components/MessagesList/Message/CallMessage.tsx index 3fe3ae0c1b5..947ce6a716d 100644 --- a/src/script/components/MessagesList/Message/CallMessage.tsx +++ b/src/script/components/MessagesList/Message/CallMessage.tsx @@ -57,8 +57,10 @@ const CallMessage: React.FC = ({message}) => { data-uie-name="element-message-call" data-uie-value={isCompleted ? 'completed' : 'not_completed'} > - {unsafeSenderName} - {caption} +

    + {unsafeSenderName} + {caption} +

    diff --git a/src/script/components/MessagesList/Message/CallTimeoutMessage.tsx b/src/script/components/MessagesList/Message/CallTimeoutMessage.tsx index 17112869ded..14053194367 100644 --- a/src/script/components/MessagesList/Message/CallTimeoutMessage.tsx +++ b/src/script/components/MessagesList/Message/CallTimeoutMessage.tsx @@ -50,10 +50,10 @@ const CallTimeoutMessage: React.FC = ({message}) => { data-uie-name="element-message-call" data-uie-value={reason === REASON.NOONE_JOINED ? 'no-one-joined' : 'everyone-left'} > - +

    {text} {reason === REASON.NOONE_JOINED ? t('callNoOneJoined') : t('callEveryOneLeft')} - +

    diff --git a/src/script/components/MessagesList/Message/DecryptErrorMessage.tsx b/src/script/components/MessagesList/Message/DecryptErrorMessage.tsx index be75f05f316..1caf215bec0 100644 --- a/src/script/components/MessagesList/Message/DecryptErrorMessage.tsx +++ b/src/script/components/MessagesList/Message/DecryptErrorMessage.tsx @@ -57,7 +57,6 @@ const DecryptErrorMessage: React.FC = ({message, onCli > {t('conversationUnableToDecryptLink')} -
    diff --git a/src/script/components/MessagesList/Message/DeleteMessage.tsx b/src/script/components/MessagesList/Message/DeleteMessage.tsx index f8ced49bd60..94775d8fcd3 100644 --- a/src/script/components/MessagesList/Message/DeleteMessage.tsx +++ b/src/script/components/MessagesList/Message/DeleteMessage.tsx @@ -56,12 +56,12 @@ const DeleteMessage: React.FC = ({message, onClickAvatar}) = />
    - +

    {unsafeSenderName} - +

    -
    +
    = ({
    -
    {isMemberChange && (
    @@ -165,7 +164,6 @@ const MemberMessage: React.FC = ({
    {t('conversationCreateReceiptsEnabled')} -
    )} diff --git a/src/script/components/MessagesList/Message/SystemMessage.tsx b/src/script/components/MessagesList/Message/SystemMessage.tsx index f3049c251bc..cd57b71cc95 100644 --- a/src/script/components/MessagesList/Message/SystemMessage.tsx +++ b/src/script/components/MessagesList/Message/SystemMessage.tsx @@ -54,7 +54,6 @@ const SystemMessage: React.FC = ({message}) => { {unsafeSenderName} {caption} -
    diff --git a/src/script/components/MessagesList/Message/VerificationMessage.tsx b/src/script/components/MessagesList/Message/VerificationMessage.tsx index 2c631664d0e..22f4bb8c2bb 100644 --- a/src/script/components/MessagesList/Message/VerificationMessage.tsx +++ b/src/script/components/MessagesList/Message/VerificationMessage.tsx @@ -114,7 +114,6 @@ const VerificationMessage: React.FC = ({message}) => { )} -
    ); diff --git a/src/script/hooks/useRootFontSize.ts b/src/script/hooks/useRootFontSize.ts new file mode 100644 index 00000000000..cbb0d03a15d --- /dev/null +++ b/src/script/hooks/useRootFontSize.ts @@ -0,0 +1,60 @@ +/* + * Wire + * Copyright (C) 2022 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 {useEffect, useState} from 'react'; + +import useLocalStorage from 'beautiful-react-hooks/useLocalStorage'; + +import {ROOT_FONT_SIZE_KEY} from '../storage'; + +export enum RootFontSize { + XXS = '10px', + XS = '12px', + S = '14px', + M = '16px', + L = '18px', + XL = '20px', + XXL = '24px', +} + +function setFontSizeToRoot(currentRootFontSize: RootFontSize) { + const root = document.documentElement; + root.style.fontSize = currentRootFontSize.toString(); +} + +export const useRootFontSize = ( + rootFontSize: RootFontSize = RootFontSize.M, +): [RootFontSize, React.Dispatch>] => { + const [storedRootFontSize, setStoredRootFontSize] = useLocalStorage(ROOT_FONT_SIZE_KEY, rootFontSize); + const [currentRootFontSize, setCurrentRootFontSize] = useState(storedRootFontSize); + + useEffect(() => { + setStoredRootFontSize(currentRootFontSize); + setFontSizeToRoot(currentRootFontSize); + }, [currentRootFontSize, setStoredRootFontSize]); + + return [currentRootFontSize, setCurrentRootFontSize]; +}; + +export const useInitializeRootFontSize = () => { + const [storedRootFontSize] = useLocalStorage(ROOT_FONT_SIZE_KEY, RootFontSize.M); + useEffect(() => { + setFontSizeToRoot(storedRootFontSize); + }, []); +}; diff --git a/src/script/page/AppMain.tsx b/src/script/page/AppMain.tsx index 74accdb0114..d59346d3850 100644 --- a/src/script/page/AppMain.tsx +++ b/src/script/page/AppMain.tsx @@ -44,6 +44,7 @@ import {useWindowTitle} from './useWindowTitle'; import {ConversationState} from '../conversation/ConversationState'; import {User} from '../entity/User'; +import {useInitializeRootFontSize} from '../hooks/useRootFontSize'; import {App} from '../main/app'; import {generateConversationUrl} from '../router/routeGenerator'; import {configureRoutes, navigate} from '../router/Router'; @@ -74,6 +75,8 @@ const AppMain: FC = ({ }) => { const apiContext = app.getAPIContext(); + useInitializeRootFontSize(); + if (!apiContext) { throw new Error('API Context has not been set'); } diff --git a/src/script/page/MainContent/panels/preferences/OptionPreferences.tsx b/src/script/page/MainContent/panels/preferences/OptionPreferences.tsx index ff09742eced..ddb80873dc8 100644 --- a/src/script/page/MainContent/panels/preferences/OptionPreferences.tsx +++ b/src/script/page/MainContent/panels/preferences/OptionPreferences.tsx @@ -23,7 +23,7 @@ import {AudioPreference, NotificationPreference, WebappProperties} from '@wireap import {amplify} from 'amplify'; import {container} from 'tsyringe'; -import {Checkbox, CheckboxLabel} from '@wireapp/react-ui-kit'; +import {Checkbox, CheckboxLabel, IndicatorRangeInput} from '@wireapp/react-ui-kit'; import {WebAppEvents} from '@wireapp/webapp-events'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; @@ -33,16 +33,28 @@ import {PreferencesPage} from './components/PreferencesPage'; import {PreferencesRadio} from './components/PreferencesRadio'; import {PreferencesSection} from './components/PreferencesSection'; +import {RootFontSize, useRootFontSize} from '../../../../hooks/useRootFontSize'; import {PropertiesRepository} from '../../../../properties/PropertiesRepository'; import {PROPERTIES_TYPE} from '../../../../properties/PropertiesType'; import {UserState} from '../../../../user/UserState'; import {THEMES as ThemeViewModelThemes} from '../../../../view_model/ThemeViewModel'; - interface OptionPreferencesProps { propertiesRepository: PropertiesRepository; userState?: UserState; } +const fontSliderOptions = [ + {value: 0, label: RootFontSize.XXS, heading: 'Small'}, + {value: 1, label: RootFontSize.XS}, + {value: 2, label: RootFontSize.S}, + {value: 3, label: RootFontSize.M, heading: 'Default'}, + {value: 4, label: RootFontSize.L}, + {value: 5, label: RootFontSize.XL}, + {value: 6, label: RootFontSize.XXL, heading: 'Large'}, +]; + +const fontSizes = Object.values(RootFontSize); + const OptionPreferences: React.FC = ({ propertiesRepository, userState = container.resolve(UserState), @@ -56,6 +68,8 @@ const OptionPreferences: React.FC = ({ const [optionDarkMode, setOptionDarkMode] = useState(settings.interface.theme === ThemeViewModelThemes.DARK); const [optionSendPreviews, setOptionSendPreviews] = useState(settings.previews.send); const [optionNotifications, setOptionNotifications] = useState(settings.notifications); + const [currentRootFontSize, setCurrentRootFontSize] = useRootFontSize(); + const [sliderValue, setSliderValue] = useState(fontSizes.indexOf(currentRootFontSize)); useEffect(() => { const updateProperties = ({settings}: WebappProperties): void => { @@ -65,6 +79,7 @@ const OptionPreferences: React.FC = ({ setOptionSendPreviews(settings.previews.send); setOptionNotifications(settings.notifications); }; + const updateDarkMode = (newDarkMode: boolean) => setOptionDarkMode(newDarkMode); amplify.subscribe(WebAppEvents.PROPERTIES.UPDATE.INTERFACE.USE_DARK_MODE, updateDarkMode); @@ -102,6 +117,19 @@ const OptionPreferences: React.FC = ({ setOptionDarkMode(useDarkMode); }; + const saveOptionFontSize = (event: React.ChangeEvent) => { + const index = parseInt(event.target.value); + const fontSize = fontSizes[index]; + setSliderValue(index); + setCurrentRootFontSize(fontSize); + }; + + const handleOptionClick = (value: number) => { + const fontSize = fontSizes[value]; + setSliderValue(value); + setCurrentRootFontSize(fontSize); + }; + return ( @@ -158,10 +186,22 @@ const OptionPreferences: React.FC = ({ ]} /> + + )} +
    -
    - - + +
    + +
    + {isActivatedAccount && ( + <> ) => { @@ -220,9 +260,9 @@ const OptionPreferences: React.FC = ({ {t('preferencesOptionsPreviewsSendDetail')}
    - - - )} + + )} + ); }; diff --git a/src/script/page/RightSidebar/ConversationDetails/components/ConversationDetailsOptions/ConversationDetailsOption.tsx b/src/script/page/RightSidebar/ConversationDetails/components/ConversationDetailsOptions/ConversationDetailsOption.tsx index 4e39de2243d..2befeafde2d 100644 --- a/src/script/page/RightSidebar/ConversationDetails/components/ConversationDetailsOptions/ConversationDetailsOption.tsx +++ b/src/script/page/RightSidebar/ConversationDetails/components/ConversationDetailsOptions/ConversationDetailsOption.tsx @@ -46,11 +46,13 @@ const ConversationDetailsOption: FC = ({ {icon} - {title} + +

    {title}

    +
    - +

    {statusText} - +

    diff --git a/src/script/page/RightSidebar/GroupParticipantUser/GroupParticipantUser.tsx b/src/script/page/RightSidebar/GroupParticipantUser/GroupParticipantUser.tsx index 7b616b37466..bc4a2a27ce8 100644 --- a/src/script/page/RightSidebar/GroupParticipantUser/GroupParticipantUser.tsx +++ b/src/script/page/RightSidebar/GroupParticipantUser/GroupParticipantUser.tsx @@ -201,7 +201,7 @@ const GroupParticipantUser: FC = ({
    -
    +
    {t('conversationDetailsGroupAdminInfo')}
    diff --git a/src/script/storage/StorageKey.ts b/src/script/storage/StorageKey.ts index bf7c76ba3c0..9af20481134 100644 --- a/src/script/storage/StorageKey.ts +++ b/src/script/storage/StorageKey.ts @@ -40,3 +40,5 @@ export const StorageKey = { SUGGESTED_SEARCH_ETS: 'z.storage.StorageKey.SEARCH.SUGGESTED_SEARCH_ETS', }, }; + +export const ROOT_FONT_SIZE_KEY = 'root-font-size'; diff --git a/src/style/components/asset/link-preview-asset.less b/src/style/components/asset/link-preview-asset.less index d4ffad04657..bfef1522521 100644 --- a/src/style/components/asset/link-preview-asset.less +++ b/src/style/components/asset/link-preview-asset.less @@ -37,8 +37,7 @@ link-preview-asset, } .link-preview-image-container { - .square(@link-preview-height); - + width: @link-preview-height; flex: 0 0 auto; background-color: var(--foreground-fade-24); } @@ -59,7 +58,7 @@ link-preview-asset, .link-preview-info { display: flex; width: 0; - height: @link-preview-height; + min-height: @link-preview-height; flex: 1 1 auto; flex-direction: column; justify-content: center; @@ -83,8 +82,6 @@ link-preview-asset, .link-preview-info-title-multiline { .ellipsis-multiline(2); - - max-height: 48px; } .link-preview-info-link { diff --git a/src/style/components/list/participant-item.less b/src/style/components/list/participant-item.less index 86e63139b44..a1b7d0c9c8f 100644 --- a/src/style/components/list/participant-item.less +++ b/src/style/components/list/participant-item.less @@ -120,7 +120,7 @@ display: flex; min-width: 0; // this will ensure that ellipses is working max-width: @participant-max-width; - height: @avatar-diameter-m; + min-height: @avatar-diameter-m; flex-direction: column; flex-grow: 1; align-items: flex-start; diff --git a/src/style/components/search-input.less b/src/style/components/search-input.less index 59a45e0f681..419ec378fe1 100644 --- a/src/style/components/search-input.less +++ b/src/style/components/search-input.less @@ -96,6 +96,11 @@ color: var(--gray-70); } + &:placeholder-shown { + .ellipsis-nowrap; + font-size: 16px; + } + // hack for chrome to fix line height issue &::-webkit-input-placeholder { transform: translateY(-1px); diff --git a/src/style/content/conversation/input-bar.less b/src/style/content/conversation/input-bar.less index 18d04d8b824..ba6b76e6b98 100644 --- a/src/style/content/conversation/input-bar.less +++ b/src/style/content/conversation/input-bar.less @@ -345,7 +345,7 @@ white-space: nowrap; &__text { - height: 17px; + height: 1.2em; line-height: 1.0625rem; pre { diff --git a/src/style/content/conversation/message-list.less b/src/style/content/conversation/message-list.less index e93ed5dc13a..eea33d953b6 100644 --- a/src/style/content/conversation/message-list.less +++ b/src/style/content/conversation/message-list.less @@ -176,6 +176,7 @@ min-width: 0; // fixes ellipsis not working with flexbox (FF) flex: 1; align-items: center; + padding-right: var(--conversation-message-timestamp-width); font-size: @font-size-small; font-weight: @font-weight-regular; white-space: normal; @@ -249,15 +250,6 @@ height: 16px; } -.message-header-line { - min-width: var(--conversation-message-timestamp-width); - height: 1px; - flex: 1; - border: none; - margin-left: 16px; - background: @separator-color; -} - // MESSAGE - TIMESTAMP .message-timestamp { height: 48px; @@ -288,7 +280,6 @@ &:not(.message-timestamp-day) { border: 0; - margin-right: var(--conversation-message-timestamp-width); .message-header-label { border-bottom: 1px dotted @separator-color; @@ -514,7 +505,7 @@ right: 0; display: flex; width: var(--conversation-message-timestamp-width); - height: @line-height-lg; + height: 24px; align-items: center; @media (max-width: @screen-md-min) { @@ -576,6 +567,7 @@ .message-status-read { .action-pill-style; color: var(--gray-70); + font-size: 12px !important; pointer-events: none; user-select: none; @@ -621,11 +613,6 @@ } } -.message-body-actions-large { - position: relative; - width: 160px; -} - .message-services-warning { color: @w-red; font-size: @font-size-small; diff --git a/src/style/content/preferences.less b/src/style/content/preferences.less index 08df3a7fbe1..3273dbb6a44 100644 --- a/src/style/content/preferences.less +++ b/src/style/content/preferences.less @@ -69,10 +69,9 @@ body.theme-dark { .preferences-detail { margin-top: 10px; font-size: @font-size-small; - line-height: @line-height-xs; &-intended { - margin-left: 2rem; + margin-left: 30px; } } diff --git a/src/style/foundation/video-calling.less b/src/style/foundation/video-calling.less index a02461905cc..5e25fcdcd5e 100644 --- a/src/style/foundation/video-calling.less +++ b/src/style/foundation/video-calling.less @@ -175,7 +175,7 @@ left: 50%; margin: 0; color: var(--main-color); - font-size: @font-size-xsmall; + font-size: 11px; font-weight: @font-weight-regular; transform: translateX(-50%); white-space: nowrap; diff --git a/src/style/list/conversations.less b/src/style/list/conversations.less index 62379d1b2db..520ca27472f 100644 --- a/src/style/list/conversations.less +++ b/src/style/list/conversations.less @@ -60,6 +60,7 @@ padding: 8px; border-radius: 6px; color: var(--main-color); + font-size: 11px; text-transform: capitalize; svg { diff --git a/src/style/modal/group-creation.less b/src/style/modal/group-creation.less index 97cc150cbbb..2ba73f52bfc 100644 --- a/src/style/modal/group-creation.less +++ b/src/style/modal/group-creation.less @@ -20,7 +20,7 @@ .group-creation { &__modal { .modal-input-wrapper { - min-height: 67px; + min-height: 4rem; } .modal__content { height: 490px; diff --git a/src/style/panel/panel.less b/src/style/panel/panel.less index eeb659ad6fb..6a4e30efae4 100644 --- a/src/style/panel/panel.less +++ b/src/style/panel/panel.less @@ -137,7 +137,6 @@ &__info-text { .subline; - &:focus-visible { .focus-outline; .focus-offset; @@ -333,7 +332,7 @@ &__icon, &__context { display: flex; - width: 40px; + min-width: 40px; margin-left: 1px; path { @@ -348,13 +347,14 @@ } &__text { + .ellipsis-nowrap; display: flex; - overflow: hidden; flex-grow: 1; align-items: center; - text-overflow: ellipsis; - white-space: nowrap; .text-medium; + & > p { + .ellipsis-nowrap; + } } &__status { @@ -368,11 +368,12 @@ } &__summary { - display: flex; + overflow: hidden; flex-direction: column; flex-grow: 1; align-items: flex-start; justify-content: center; + text-align: left; } .service-icon { @@ -400,6 +401,7 @@ } &__title { + .ellipsis-nowrap; .heading-h3; &:focus-visible { diff --git a/src/style/panel/participant-devices.less b/src/style/panel/participant-devices.less index bbb59556b9a..6fdcdb2387b 100644 --- a/src/style/panel/participant-devices.less +++ b/src/style/panel/participant-devices.less @@ -19,7 +19,7 @@ .participant-devices { &__fingerprint { - height: 72px; + min-height: 72px; margin-bottom: 32px; font-family: monospace; line-height: 1.375rem; diff --git a/yarn.lock b/yarn.lock index 5268b1ff291..8dfef866c09 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5402,6 +5402,21 @@ __metadata: languageName: node linkType: hard +"beautiful-react-hooks@npm:^3.11.2": + version: 3.11.2 + resolution: "beautiful-react-hooks@npm:3.11.2" + dependencies: + lodash.debounce: ^4.0.8 + lodash.throttle: ^4.1.1 + peerDependencies: + react: ">=16.0.0" + react-dom: ">=16.0.0" + react-router-dom: ">=5.0.0" + rxjs: ">=7.0.0" + checksum: f71e0ca29e549c3733f43c7adc60509f56412c5a2c169e944f50f84b1478a6e941701b54849fe58d45de92d15ab47d048a9684cb4cae33755d594a8cd2a27189 + languageName: node + linkType: hard + "big.js@npm:^5.2.2": version: 5.2.2 resolution: "big.js@npm:5.2.2" @@ -11092,6 +11107,13 @@ __metadata: languageName: node linkType: hard +"lodash.throttle@npm:^4.1.1": + version: 4.1.1 + resolution: "lodash.throttle@npm:4.1.1" + checksum: 129c0a28cee48b348aef146f638ef8a8b197944d4e9ec26c1890c19d9bf5a5690fe11b655c77a4551268819b32d27f4206343e30c78961f60b561b8608c8c805 + languageName: node + linkType: hard + "lodash.truncate@npm:^4.4.2": version: 4.4.2 resolution: "lodash.truncate@npm:4.4.2" @@ -16654,6 +16676,7 @@ __metadata: archiver: ^5.3.1 autoprefixer: ^10.4.13 babel-loader: 9.1.0 + beautiful-react-hooks: ^3.11.2 caniuse-lite: ^1.0.30001431 classnames: 2.3.2 copy-webpack-plugin: 11.0.0 From 117c8ea545381fb2cab7360c7cc226c5195bf34f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Dec 2022 08:54:18 +0000 Subject: [PATCH 052/329] chore(deps-dev): Bump webpack from 5.74.0 to 5.75.0 (#14233) Bumps [webpack](https://github.com/webpack/webpack) from 5.74.0 to 5.75.0. - [Release notes](https://github.com/webpack/webpack/releases) - [Commits](https://github.com/webpack/webpack/compare/v5.74.0...v5.75.0) --- updated-dependencies: - dependency-name: webpack dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] 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 f492b3a4b00..4d314ef2da7 100644 --- a/package.json +++ b/package.json @@ -171,7 +171,7 @@ "ts-node": "10.9.1", "tsc-watch": "5.0.3", "typescript": "^4.8.4", - "webpack": "5.74.0", + "webpack": "5.75.0", "webpack-cli": "4.10.0", "webpack-dev-middleware": "5.3.3", "webpack-hot-middleware": "2.25.3", diff --git a/yarn.lock b/yarn.lock index 8dfef866c09..738d727d324 100644 --- a/yarn.lock +++ b/yarn.lock @@ -16447,9 +16447,9 @@ __metadata: languageName: node linkType: hard -"webpack@npm:5.74.0": - version: 5.74.0 - resolution: "webpack@npm:5.74.0" +"webpack@npm:5.75.0": + version: 5.75.0 + resolution: "webpack@npm:5.75.0" dependencies: "@types/eslint-scope": ^3.7.3 "@types/estree": ^0.0.51 @@ -16480,7 +16480,7 @@ __metadata: optional: true bin: webpack: bin/webpack.js - checksum: 320c41369a75051b19e18c63f408b3dcc481852e992f83d311771c5ec0f05f2946385e8ebef62030cf3587f0a3d2f12779ffdb191569a966847289ba7313f946 + checksum: 2bcc5f3c195f375944e8af2f00bf2feea39cb9fda5f763b0d1b00077f1c51783db25c94d3fae96a07dead9fa085e6ae7474417e5ab31719c9776ea5969ceb83a languageName: node linkType: hard @@ -16781,7 +16781,7 @@ __metadata: uint32: 0.2.1 underscore: 1.13.6 uuidjs: 4.2.12 - webpack: 5.74.0 + webpack: 5.75.0 webpack-cli: 4.10.0 webpack-dev-middleware: 5.3.3 webpack-hot-middleware: 2.25.3 From 339cc97130db51d84ef7f95f297056f2d38257d8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Dec 2022 08:54:35 +0000 Subject: [PATCH 053/329] chore(deps-dev): Bump caniuse-lite from 1.0.30001431 to 1.0.30001435 (#14225) Bumps [caniuse-lite](https://github.com/browserslist/caniuse-lite) from 1.0.30001431 to 1.0.30001435. - [Release notes](https://github.com/browserslist/caniuse-lite/releases) - [Commits](https://github.com/browserslist/caniuse-lite/compare/1.0.30001431...1.0.30001435) --- updated-dependencies: - dependency-name: caniuse-lite dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] 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 4d314ef2da7..9de01e43a5f 100644 --- a/package.json +++ b/package.json @@ -101,7 +101,7 @@ "archiver": "^5.3.1", "autoprefixer": "^10.4.13", "babel-loader": "9.1.0", - "caniuse-lite": "^1.0.30001431", + "caniuse-lite": "^1.0.30001435", "cross-env": "7.0.3", "cspell": "6.15.1", "css-loader": "^6.7.1", diff --git a/yarn.lock b/yarn.lock index 738d727d324..9da0db85609 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5659,10 +5659,10 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.30001431": - version: 1.0.30001431 - resolution: "caniuse-lite@npm:1.0.30001431" - checksum: bc8ab55cd194e240152946b54bfaff7456180cc018674fc7ed134f4f502192405f6643f422feaa0a5e7cc02b5bac564cfac7771ac6d29f5d129482fcfe335ba1 +"caniuse-lite@npm:^1.0.30001435": + version: 1.0.30001435 + resolution: "caniuse-lite@npm:1.0.30001435" + checksum: ec88b9c37f66095e26ddb8b43110e9564ebccb6de77e495b8e8b9d64fdbfe37f7762be8fd2578c3ecc181a183a159578c9bd8e9b90eb15b44b78e8a6d0e92530 languageName: node linkType: hard @@ -16677,7 +16677,7 @@ __metadata: autoprefixer: ^10.4.13 babel-loader: 9.1.0 beautiful-react-hooks: ^3.11.2 - caniuse-lite: ^1.0.30001431 + caniuse-lite: ^1.0.30001435 classnames: 2.3.2 copy-webpack-plugin: 11.0.0 core-js: 3.25.5 From bbe872791deb7b47309f22c9e9192bd7fa4be9e4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Dec 2022 09:06:27 +0000 Subject: [PATCH 054/329] chore(deps-dev): Bump css-loader from 6.7.1 to 6.7.2 (#14214) Bumps [css-loader](https://github.com/webpack-contrib/css-loader) from 6.7.1 to 6.7.2. - [Release notes](https://github.com/webpack-contrib/css-loader/releases) - [Changelog](https://github.com/webpack-contrib/css-loader/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack-contrib/css-loader/compare/v6.7.1...v6.7.2) --- updated-dependencies: - dependency-name: css-loader dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 9de01e43a5f..5188617aa81 100644 --- a/package.json +++ b/package.json @@ -104,7 +104,7 @@ "caniuse-lite": "^1.0.30001435", "cross-env": "7.0.3", "cspell": "6.15.1", - "css-loader": "^6.7.1", + "css-loader": "^6.7.2", "cssnano": "^5.1.14", "dexie": "^3.2.2", "dotenv": "16.0.3", diff --git a/yarn.lock b/yarn.lock index 9da0db85609..e48df648109 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6464,21 +6464,21 @@ __metadata: languageName: node linkType: hard -"css-loader@npm:^6.7.1": - version: 6.7.1 - resolution: "css-loader@npm:6.7.1" +"css-loader@npm:^6.7.2": + version: 6.7.2 + resolution: "css-loader@npm:6.7.2" dependencies: icss-utils: ^5.1.0 - postcss: ^8.4.7 + postcss: ^8.4.18 postcss-modules-extract-imports: ^3.0.0 postcss-modules-local-by-default: ^4.0.0 postcss-modules-scope: ^3.0.0 postcss-modules-values: ^4.0.0 postcss-value-parser: ^4.2.0 - semver: ^7.3.5 + semver: ^7.3.8 peerDependencies: webpack: ^5.0.0 - checksum: 170fdbc630a05a43679ef60fa97694766b568dbde37adccc0faafa964fc675f08b976bc68837bb73b61d60240e8d2cbcbf51540fe94ebc9dafc56e7c46ba5527 + checksum: f3c980cc9c033a02e60df7e5a2f33a1e8c2c3dd552f017485d2d81b383be623ae8c4189404e7a4a7403b52744683ae4b516def0f7ccf125c2b198cb647e46543 languageName: node linkType: hard @@ -13379,7 +13379,7 @@ __metadata: languageName: node linkType: hard -"postcss@npm:8.4.19, postcss@npm:^8.4.19": +"postcss@npm:8.4.19, postcss@npm:^8.4.18, postcss@npm:^8.4.19": version: 8.4.19 resolution: "postcss@npm:8.4.19" dependencies: @@ -13400,7 +13400,7 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.3.11, postcss@npm:^8.4.7": +"postcss@npm:^8.3.11": version: 8.4.18 resolution: "postcss@npm:8.4.18" dependencies: @@ -16684,7 +16684,7 @@ __metadata: countly-sdk-web: 22.6.2 cross-env: 7.0.3 cspell: 6.15.1 - css-loader: ^6.7.1 + css-loader: ^6.7.2 cssnano: ^5.1.14 date-fns: 2.29.3 dexie: ^3.2.2 From 22f871200c26388a03989638726938d06509a0a0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Dec 2022 09:07:53 +0000 Subject: [PATCH 055/329] chore(deps-dev): Bump eslint from 8.27.0 to 8.28.0 (#14206) Bumps [eslint](https://github.com/eslint/eslint) from 8.27.0 to 8.28.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v8.27.0...v8.28.0) --- updated-dependencies: - dependency-name: eslint dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] 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 5188617aa81..8d2ae1bb611 100644 --- a/package.json +++ b/package.json @@ -109,7 +109,7 @@ "dexie": "^3.2.2", "dotenv": "16.0.3", "dpdm": "3.10.0", - "eslint": "^8.27.0", + "eslint": "^8.28.0", "eslint-config-prettier": "^8.5.0", "eslint-import-resolver-alias": "^1.1.2", "eslint-import-resolver-typescript": "^3.5.2", diff --git a/yarn.lock b/yarn.lock index e48df648109..74e2eb84dbf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7719,9 +7719,9 @@ __metadata: languageName: node linkType: hard -"eslint@npm:^8.27.0": - version: 8.27.0 - resolution: "eslint@npm:8.27.0" +"eslint@npm:^8.28.0": + version: 8.28.0 + resolution: "eslint@npm:8.28.0" dependencies: "@eslint/eslintrc": ^1.3.3 "@humanwhocodes/config-array": ^0.11.6 @@ -7764,7 +7764,7 @@ __metadata: text-table: ^0.2.0 bin: eslint: bin/eslint.js - checksum: 153b022d309e1b647a73b1bb0fa98912add699b06e279084155f23c6f2b5fc5abd05411fc1ba81608a24bbfaf044ca079544c16fffa6fc987b8f676c9960a2c4 + checksum: 1b793486b2ec80f0602d75fff7116f7c39a3286f523608a999eead9bec4154a06841785d2b4fb87f8292a94cf85778c1dbfaec727772a09c4d604fdb9ff0809a languageName: node linkType: hard @@ -16691,7 +16691,7 @@ __metadata: dexie-batch: 0.4.3 dotenv: 16.0.3 dpdm: 3.10.0 - eslint: ^8.27.0 + eslint: ^8.28.0 eslint-config-prettier: ^8.5.0 eslint-import-resolver-alias: ^1.1.2 eslint-import-resolver-typescript: ^3.5.2 From 6b957e06cddddd4c9eaf3a86a18a8d947ae13b85 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Dec 2022 11:30:06 +0100 Subject: [PATCH 056/329] chore(deps): Bump countly-sdk-web from 22.6.2 to 22.6.4 (#14227) Bumps [countly-sdk-web](https://github.com/Countly/countly-sdk-web) from 22.6.2 to 22.6.4. - [Release notes](https://github.com/Countly/countly-sdk-web/releases) - [Changelog](https://github.com/Countly/countly-sdk-web/blob/master/CHANGELOG.md) - [Commits](https://github.com/Countly/countly-sdk-web/compare/22.06.2...22.06.4) --- updated-dependencies: - dependency-name: countly-sdk-web dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] 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 8d2ae1bb611..de280c2c85b 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "classnames": "2.3.2", "copy-webpack-plugin": "11.0.0", "core-js": "3.25.5", - "countly-sdk-web": "22.6.2", + "countly-sdk-web": "22.6.4", "date-fns": "2.29.3", "dexie-batch": "0.4.3", "highlight.js": "11.6.0", diff --git a/yarn.lock b/yarn.lock index 74e2eb84dbf..6659a0a6d81 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6222,10 +6222,10 @@ __metadata: languageName: node linkType: hard -"countly-sdk-web@npm:22.6.2": - version: 22.6.2 - resolution: "countly-sdk-web@npm:22.6.2" - checksum: 333e242e56b7e4c3a2a5457148692f612b2be177174d9caf0b407c5eb64c9cd034839594c3f75d811df1e22dcb3b64b8821a92e2cffe2a9e36b7f64e1c9d165c +"countly-sdk-web@npm:22.6.4": + version: 22.6.4 + resolution: "countly-sdk-web@npm:22.6.4" + checksum: 2fd72ebf5d05d98b5c82229bdc5d108913109fab765d6bd0002582832b74a1c9e0b0de1b276fbbcf4538fba1df20c348916e85fe1527baa8382bf3dc7de9eba2 languageName: node linkType: hard @@ -16681,7 +16681,7 @@ __metadata: classnames: 2.3.2 copy-webpack-plugin: 11.0.0 core-js: 3.25.5 - countly-sdk-web: 22.6.2 + countly-sdk-web: 22.6.4 cross-env: 7.0.3 cspell: 6.15.1 css-loader: ^6.7.2 From 19ecb1b5e5cd1df2034b0f95156c780a32aff012 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Dec 2022 11:30:21 +0100 Subject: [PATCH 057/329] chore(deps-dev): Bump prettier from 2.7.1 to 2.8.0 (#14220) Bumps [prettier](https://github.com/prettier/prettier) from 2.7.1 to 2.8.0. - [Release notes](https://github.com/prettier/prettier/releases) - [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md) - [Commits](https://github.com/prettier/prettier/compare/2.7.1...2.8.0) --- updated-dependencies: - dependency-name: prettier dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] 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 de280c2c85b..ce0b96a24b8 100644 --- a/package.json +++ b/package.json @@ -153,7 +153,7 @@ "postcss-loader": "^7.0.1", "postcss-preset-env": "^7.8.2", "postcss-scss": "4.0.6", - "prettier": "^2.7.1", + "prettier": "^2.8.0", "raf": "3.4.1", "redux-devtools-extension": "2.13.9", "redux-mock-store": "1.5.4", diff --git a/yarn.lock b/yarn.lock index 6659a0a6d81..b3bd6d4dbe3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13434,12 +13434,12 @@ __metadata: languageName: node linkType: hard -"prettier@npm:^2.7.1": - version: 2.7.1 - resolution: "prettier@npm:2.7.1" +"prettier@npm:^2.8.0": + version: 2.8.0 + resolution: "prettier@npm:2.8.0" bin: prettier: bin-prettier.js - checksum: 55a4409182260866ab31284d929b3cb961e5fdb91fe0d2e099dac92eaecec890f36e524b4c19e6ceae839c99c6d7195817579cdffc8e2c80da0cb794463a748b + checksum: 72004ce0cc9bb097daf3e3833f62495768724392c1d5b178dd47372337616e9e50ecbb0804f236596223f7b5eb1bbe69cefc8957dca21112c5777e77ef73a564 languageName: node linkType: hard @@ -16747,7 +16747,7 @@ __metadata: postcss-loader: ^7.0.1 postcss-preset-env: ^7.8.2 postcss-scss: 4.0.6 - prettier: ^2.7.1 + prettier: ^2.8.0 raf: 3.4.1 react: 18.2.0 react-dom: 18.2.0 From e1ae478bd4c13df274f4c879d84a64570d7be5cd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Dec 2022 10:41:59 +0000 Subject: [PATCH 058/329] chore(deps): Bump highlight.js from 11.6.0 to 11.7.0 (#14208) Bumps [highlight.js](https://github.com/highlightjs/highlight.js) from 11.6.0 to 11.7.0. - [Release notes](https://github.com/highlightjs/highlight.js/releases) - [Changelog](https://github.com/highlightjs/highlight.js/blob/main/CHANGES.md) - [Commits](https://github.com/highlightjs/highlight.js/compare/11.6.0...11.7.0) --- updated-dependencies: - dependency-name: highlight.js dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index ce0b96a24b8..50a20cfa2ee 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "countly-sdk-web": "22.6.4", "date-fns": "2.29.3", "dexie-batch": "0.4.3", - "highlight.js": "11.6.0", + "highlight.js": "11.7.0", "http-status-codes": "2.2.0", "jquery": "3.6.1", "js-cookie": "3.0.1", diff --git a/yarn.lock b/yarn.lock index b3bd6d4dbe3..a2bf211e398 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8851,13 +8851,20 @@ __metadata: languageName: node linkType: hard -"highlight.js@npm:*, highlight.js@npm:11.6.0": +"highlight.js@npm:*": version: 11.6.0 resolution: "highlight.js@npm:11.6.0" checksum: 3908eb34a4b442ca1e20c1ae6415ea935fbbcdb2b532a89948d82b0fa4ad41fc5de3802a0de4e88a0bcb7d97d4445579048cd2aab1d105ac47f59dd58a9a98ae languageName: node linkType: hard +"highlight.js@npm:11.7.0": + version: 11.7.0 + resolution: "highlight.js@npm:11.7.0" + checksum: 19e3fb8b56f4b361b057a8523b989dfeb6479bbd1e29cec3fac6fa5c78d09927d5fa61b7dba6631fdb57cfdca9b3084aa4da49405ceaf4a67f67beae2ed5b77d + languageName: node + linkType: hard + "hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.1, hoist-non-react-statics@npm:^3.3.2": version: 3.3.2 resolution: "hoist-non-react-statics@npm:3.3.2" @@ -16714,7 +16721,7 @@ __metadata: eslint-plugin-unused-imports: ^2.0.0 fake-indexeddb: 4.0.1 generate-changelog: 1.8.0 - highlight.js: 11.6.0 + highlight.js: 11.7.0 html-webpack-plugin: ^5.5.0 http-status-codes: 2.2.0 husky: 7.0.4 From b689c0c15421aeb0867c8966b59f821126489a33 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Dec 2022 10:43:30 +0000 Subject: [PATCH 059/329] chore(deps-dev): Bump postcss-loader from 7.0.1 to 7.0.2 (#14230) Bumps [postcss-loader](https://github.com/webpack-contrib/postcss-loader) from 7.0.1 to 7.0.2. - [Release notes](https://github.com/webpack-contrib/postcss-loader/releases) - [Changelog](https://github.com/webpack-contrib/postcss-loader/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack-contrib/postcss-loader/compare/v7.0.1...v7.0.2) --- updated-dependencies: - dependency-name: postcss-loader dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 50a20cfa2ee..c1f6c93f020 100644 --- a/package.json +++ b/package.json @@ -150,7 +150,7 @@ "postcss": "8.4.19", "postcss-import": "^15.0.0", "postcss-less": "6.0.0", - "postcss-loader": "^7.0.1", + "postcss-loader": "^7.0.2", "postcss-preset-env": "^7.8.2", "postcss-scss": "4.0.6", "prettier": "^2.8.0", diff --git a/yarn.lock b/yarn.lock index a2bf211e398..7557593b6fc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12881,17 +12881,17 @@ __metadata: languageName: node linkType: hard -"postcss-loader@npm:^7.0.1": - version: 7.0.1 - resolution: "postcss-loader@npm:7.0.1" +"postcss-loader@npm:^7.0.2": + version: 7.0.2 + resolution: "postcss-loader@npm:7.0.2" dependencies: cosmiconfig: ^7.0.0 klona: ^2.0.5 - semver: ^7.3.7 + semver: ^7.3.8 peerDependencies: postcss: ^7.0.0 || ^8.0.1 webpack: ^5.0.0 - checksum: 2a3cbcaaade598d4919824d384ae34ffbfc14a9c8db6cc3b154582356f4f44a1c9af9e731b81cf1947b089accf7d0ab7a0c51c717946985f89aa1708d2b4304d + checksum: 2d251537d482eb751f812c96c8b515f46d7c9905cad7afab33f0f34872670619b7440cefc9e2babbf89fb11b4708850d522d79fa5ff788227587645e78f16638 languageName: node linkType: hard @@ -16751,7 +16751,7 @@ __metadata: postcss: 8.4.19 postcss-import: ^15.0.0 postcss-less: 6.0.0 - postcss-loader: ^7.0.1 + postcss-loader: ^7.0.2 postcss-preset-env: ^7.8.2 postcss-scss: 4.0.6 prettier: ^2.8.0 From 82bde253c74474473fd37c248f8f73d609423ce6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Dec 2022 10:55:35 +0000 Subject: [PATCH 060/329] chore(deps-dev): Bump postcss-preset-env from 7.8.2 to 7.8.3 (#14203) Bumps [postcss-preset-env](https://github.com/csstools/postcss-plugins/tree/HEAD/plugin-packs/postcss-preset-env) from 7.8.2 to 7.8.3. - [Release notes](https://github.com/csstools/postcss-plugins/releases) - [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] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 40 ++++++++++++++++++++-------------------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/package.json b/package.json index c1f6c93f020..4080307ecd3 100644 --- a/package.json +++ b/package.json @@ -151,7 +151,7 @@ "postcss-import": "^15.0.0", "postcss-less": "6.0.0", "postcss-loader": "^7.0.2", - "postcss-preset-env": "^7.8.2", + "postcss-preset-env": "^7.8.3", "postcss-scss": "4.0.6", "prettier": "^2.8.0", "raf": "3.4.1", diff --git a/yarn.lock b/yarn.lock index 7557593b6fc..c96653e670d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1944,7 +1944,7 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-cascade-layers@npm:^1.1.0": +"@csstools/postcss-cascade-layers@npm:^1.1.1": version: 1.1.1 resolution: "@csstools/postcss-cascade-layers@npm:1.1.1" dependencies: @@ -5162,7 +5162,7 @@ __metadata: languageName: node linkType: hard -"autoprefixer@npm:^10.4.11, autoprefixer@npm:^10.4.13": +"autoprefixer@npm:^10.4.13": version: 10.4.13 resolution: "autoprefixer@npm:10.4.13" dependencies: @@ -6523,10 +6523,10 @@ __metadata: languageName: node linkType: hard -"cssdb@npm:^7.0.1": - version: 7.0.2 - resolution: "cssdb@npm:7.0.2" - checksum: 521957cc26d71525186e9027b01440681b510e9fe02485963eeabf5051c627b44642c3a7a2a53e1760dfab24ecdb7d8c75ee35373d8cfbb3547502960fb186c7 +"cssdb@npm:^7.1.0": + version: 7.2.0 + resolution: "cssdb@npm:7.2.0" + checksum: a571955eac16772071358671cf748c077a95a8acfb8812ecbcb84217d00360edaeb31994a2ddf10e75b9693f1e846f121ad3d6e149eeb7625625ea24184754fd languageName: node linkType: hard @@ -12695,14 +12695,14 @@ __metadata: languageName: node linkType: hard -"postcss-custom-properties@npm:^12.1.9": - version: 12.1.9 - resolution: "postcss-custom-properties@npm:12.1.9" +"postcss-custom-properties@npm:^12.1.10": + version: 12.1.11 + resolution: "postcss-custom-properties@npm:12.1.11" dependencies: postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.2 - checksum: db4194665bc104fd05608dd282caa6298870ffe5ca9a6733a9b48f4191fcc1225c8ce08e4c883a0e5eaa7a68daa18f3d7d71690ab74854b37bf0305976256cdf + checksum: 421f9d8d6b9c9066919f39251859232efc4dc5dd406c01e62e08734319a6ccda6d03dd6b46063ba0971053ac6ad3f7abade56d67650b3e370851b2291e8e45e6 languageName: node linkType: hard @@ -13199,11 +13199,11 @@ __metadata: languageName: node linkType: hard -"postcss-preset-env@npm:^7.8.2": - version: 7.8.2 - resolution: "postcss-preset-env@npm:7.8.2" +"postcss-preset-env@npm:^7.8.3": + version: 7.8.3 + resolution: "postcss-preset-env@npm:7.8.3" dependencies: - "@csstools/postcss-cascade-layers": ^1.1.0 + "@csstools/postcss-cascade-layers": ^1.1.1 "@csstools/postcss-color-function": ^1.1.1 "@csstools/postcss-font-format-keywords": ^1.0.1 "@csstools/postcss-hwb-function": ^1.0.2 @@ -13217,19 +13217,19 @@ __metadata: "@csstools/postcss-text-decoration-shorthand": ^1.0.0 "@csstools/postcss-trigonometric-functions": ^1.0.2 "@csstools/postcss-unset-value": ^1.0.2 - autoprefixer: ^10.4.11 - browserslist: ^4.21.3 + autoprefixer: ^10.4.13 + browserslist: ^4.21.4 css-blank-pseudo: ^3.0.3 css-has-pseudo: ^3.0.4 css-prefers-color-scheme: ^6.0.3 - cssdb: ^7.0.1 + cssdb: ^7.1.0 postcss-attribute-case-insensitive: ^5.0.2 postcss-clamp: ^4.1.0 postcss-color-functional-notation: ^4.2.4 postcss-color-hex-alpha: ^8.0.4 postcss-color-rebeccapurple: ^7.1.1 postcss-custom-media: ^8.0.2 - postcss-custom-properties: ^12.1.9 + postcss-custom-properties: ^12.1.10 postcss-custom-selectors: ^6.0.3 postcss-dir-pseudo-class: ^6.0.5 postcss-double-position-gradients: ^3.1.2 @@ -13254,7 +13254,7 @@ __metadata: postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.2 - checksum: ffe86bef475f57cdacb93de79a3ebe372f2d1904a33b715dcb9e9f27980091afb750a7935dcc65ce9bbaa28f9ca34d17a650a3e82f4b8f9d197a694a1a958959 + checksum: 71bfb697ffc55e27895b2bf3a579dd9b4c1321872816091935e33d6f659cab60795a03bb022dc8a4cab48fd5680a419fe9ae5d61a3a3d8c785ec9308f323e787 languageName: node linkType: hard @@ -16752,7 +16752,7 @@ __metadata: postcss-import: ^15.0.0 postcss-less: 6.0.0 postcss-loader: ^7.0.2 - postcss-preset-env: ^7.8.2 + postcss-preset-env: ^7.8.3 postcss-scss: 4.0.6 prettier: ^2.8.0 raf: 3.4.1 From 06d80c13610ba570a18fe9d67f83bbd73ad05c2d Mon Sep 17 00:00:00 2001 From: Amir Ghezelbash Date: Thu, 1 Dec 2022 16:58:30 +0330 Subject: [PATCH 061/329] feat: Implement new full search design (#14221) * feat: Implement new full search design * fix tests --- src/i18n/en-US.json | 2 +- .../panels/Collection/Collection.test.tsx | 43 +++++++++++-------- .../panels/Collection/FullSearch.tsx | 41 ++++++++++-------- src/style/components/asset/common/common.less | 10 ++--- src/style/components/full-search.less | 43 +++---------------- src/style/content/collection.less | 12 ++++-- 6 files changed, 65 insertions(+), 86 deletions(-) diff --git a/src/i18n/en-US.json b/src/i18n/en-US.json index 0525b558b6a..76549a91129 100644 --- a/src/i18n/en-US.json +++ b/src/i18n/en-US.json @@ -258,7 +258,7 @@ "clientManager.headline": "Remove a device", "clientManager.logout": "Cancel process", "clientManager.subhead": "Remove one of your other devices to start using {brandName} on this one.", - "collectionSectionAudio": "Audio messages", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "Files", "collectionSectionImages": "Pictures", "collectionSectionLinks": "Links", diff --git a/src/script/page/MainContent/panels/Collection/Collection.test.tsx b/src/script/page/MainContent/panels/Collection/Collection.test.tsx index 79f79062f59..2c58bf9c231 100644 --- a/src/script/page/MainContent/panels/Collection/Collection.test.tsx +++ b/src/script/page/MainContent/panels/Collection/Collection.test.tsx @@ -20,6 +20,7 @@ import {fireEvent, render, waitFor, act} from '@testing-library/react'; import {container} from 'tsyringe'; +import {withTheme} from 'src/script/auth/util/test/TestUtil'; import {Conversation} from 'src/script/entity/Conversation'; import {ContentMessage} from 'src/script/entity/message/ContentMessage'; import {FileAsset} from 'src/script/entity/message/FileAsset'; @@ -90,12 +91,14 @@ describe('Collection', () => { it('displays all image assets', async () => { const {getAllByText, getByText, queryByText} = render( - , + withTheme( + , + ), ); await waitFor(() => getAllByText('CollectionItem')); @@ -113,12 +116,14 @@ describe('Collection', () => { mockConversationRepository.getEventsForCategory.mockResolvedValueOnce(imageMessages); const {getAllByText, getByText} = render( - , + withTheme( + , + ), ); await waitFor(() => getAllByText('CollectionItem')); @@ -131,12 +136,14 @@ describe('Collection', () => { it('should display search results when term is typed', async () => { jest.useFakeTimers(); const {getAllByText, queryByText, getByTestId} = render( - , + withTheme( + , + ), ); await waitFor(() => getAllByText('CollectionItem')); diff --git a/src/script/page/MainContent/panels/Collection/FullSearch.tsx b/src/script/page/MainContent/panels/Collection/FullSearch.tsx index e79e3c76f1b..857e0b49fe2 100644 --- a/src/script/page/MainContent/panels/Collection/FullSearch.tsx +++ b/src/script/page/MainContent/panels/Collection/FullSearch.tsx @@ -19,6 +19,8 @@ import React, {useEffect, useMemo, useRef, useState} from 'react'; +import {CloseIcon, Input, InputSubmitCombo, SearchIcon} from '@wireapp/react-ui-kit'; + import {t} from 'Util/LocalizerUtil'; import {isScrolledBottom} from 'Util/scroll-helpers'; import {useEffectRef} from 'Util/useEffectRef'; @@ -43,8 +45,8 @@ const FullSearch: React.FC = ({searchProvider, click = noop, ch const MAX_TEXT_LENGTH = 60; const MAX_OFFSET_INDEX = 30; - const [input, setInput] = useState(''); - const inputRef = useRef(); + const [searchValue, setSearchValue] = useState(''); + const inputRef = useRef(null); const [messages, setMessages] = useState([]); const [messageCount, setMessageCount] = useState(0); const [hasNoResults, setHasNoResults] = useState(false); @@ -52,7 +54,7 @@ const FullSearch: React.FC = ({searchProvider, click = noop, ch useDebounce( async () => { - const trimmedInput = input.trim(); + const trimmedInput = searchValue.trim(); change(trimmedInput); if (trimmedInput.length < 2) { setMessages([]); @@ -68,7 +70,7 @@ const FullSearch: React.FC = ({searchProvider, click = noop, ch } }, 100, - [input], + [searchValue], ); useEffect(() => { @@ -92,13 +94,13 @@ const FullSearch: React.FC = ({searchProvider, click = noop, ch }, []); const formatSearchResult = useMemo(() => { - const regex = getSearchRegex(input); + const regex = getSearchRegex(searchValue); return (text: string) => { const matches = [...text.matchAll(regex)]; const firstIndex = matches[0]?.index; let firstPart = text.substring(0, firstIndex ?? text.length); - if (firstIndex > MAX_OFFSET_INDEX && text.length > MAX_TEXT_LENGTH) { + if (firstIndex && firstIndex > MAX_OFFSET_INDEX && text.length > MAX_TEXT_LENGTH) { let splitOffset = firstIndex - 1; const firstSpace = firstPart.indexOf(' ', splitOffset - PRE_MARKED_OFFSET); splitOffset = firstSpace > -1 ? firstSpace : splitOffset; @@ -108,37 +110,38 @@ const FullSearch: React.FC = ({searchProvider, click = noop, ch (acc, match, i) => [ ...acc, match[0], - text.substring(match.index + match[0].length, matches[i + 1]?.index ?? text.length), + text.substring((match.index ?? 0) + match[0].length, matches[i + 1]?.index ?? text.length), ], [firstPart], ); return {matches: matches.length, parts}; }; - }, [input]); + }, [searchValue]); return (
    -
    - -
    - + + + div': {width: '100%'}}} type="text" - value={input} + value={searchValue} ref={inputRef} placeholder={t('fullsearchPlaceholder')} - onChange={event => setInput(event.target.value)} + onChange={event => setSearchValue(event.currentTarget.value)} data-uie-name="full-search-header-input" /> - {input && ( -
    +
    {hasNoResults && (

    diff --git a/src/style/components/asset/common/common.less b/src/style/components/asset/common/common.less index 2e3e8118773..1b209887c78 100644 --- a/src/style/components/asset/common/common.less +++ b/src/style/components/asset/common/common.less @@ -25,20 +25,16 @@ display: flex; overflow: hidden; min-height: 64px; + + border-radius: 12px; background-color: var(--foreground-fade-8); & + & { margin-top: 1px; } - &:last-of-type { - border-bottom-left-radius: @border-radius; - border-bottom-right-radius: @border-radius; - } - &:first-of-type { - border-top-left-radius: @border-radius; - border-top-right-radius: @border-radius; + margin-bottom: 4px; } } diff --git a/src/style/components/full-search.less b/src/style/components/full-search.less index 80dbbd861a4..20e5f427e5e 100644 --- a/src/style/components/full-search.less +++ b/src/style/components/full-search.less @@ -20,47 +20,14 @@ .full-search { display: inline-block; width: 624px + 72px; - &__header { - display: flex; - height: 40px; - align-items: center; - margin-bottom: 16px; - &__icon { - width: @conversation-message-sender-width; - flex: 0 0 auto; - color: var(--foreground); - text-align: center; - } - &__input { - display: flex; - width: 100%; - height: 100%; - align-items: center; - border-bottom: 1px solid @separator-color; - - > input { - .reset-textarea; - - width: 100%; - height: 24px; - background-color: transparent; - color: var(--background); - line-height: @line-height-lg; - &::placeholder { - .label-xs; - - height: 24px; - padding-left: 8px; - color: var(--foreground-fade-48); - line-height: @line-height-lg; - } - } - } - .button-icon { - .button-reset-default; + body.theme-dark & { + header div, + header input { + background-color: var(--gray-100); } } + &__item { position: relative; display: flex; diff --git a/src/style/content/collection.less b/src/style/content/collection.less index 09c5b506250..c091edb9a12 100644 --- a/src/style/content/collection.less +++ b/src/style/content/collection.less @@ -18,8 +18,9 @@ */ // Variables -@image-size: 104px; +@image-size: 110px; @image-items-per-row: 6; +@collection-images-padding: 3px; @max-section-width: 696px; @@ -86,13 +87,18 @@ width: @image-size * @image-items-per-row; flex-wrap: wrap; border-radius: 4px; - margin-left: @conversation-message-sender-width; + margin-left: @conversation-message-sender-width - @collection-images-padding; } .collection-image { .square(@image-size); + padding: @collection-images-padding; + border-radius: 6px; + background-color: transparent; - outline: 1px solid var(--foreground-fade-24); + img { + border-radius: 6px; + } } // Files From 9b22d61ce9ed67cc34aa267fe8b6fe9f208a6d88 Mon Sep 17 00:00:00 2001 From: Virgile <78490891+V-Gira@users.noreply.github.com> Date: Thu, 1 Dec 2022 16:22:04 +0100 Subject: [PATCH 062/329] runfix: add responsiveness to full search (#14237) --- .../page/MainContent/panels/Collection/FullSearch.tsx | 2 +- src/style/components/full-search.less | 2 +- src/style/content/collection.less | 8 +++----- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/script/page/MainContent/panels/Collection/FullSearch.tsx b/src/script/page/MainContent/panels/Collection/FullSearch.tsx index 857e0b49fe2..9224e349e39 100644 --- a/src/script/page/MainContent/panels/Collection/FullSearch.tsx +++ b/src/script/page/MainContent/panels/Collection/FullSearch.tsx @@ -122,7 +122,7 @@ const FullSearch: React.FC = ({searchProvider, click = noop, ch return (

    - + div': {width: '100%'}}} diff --git a/src/style/components/full-search.less b/src/style/components/full-search.less index 20e5f427e5e..6412b97265e 100644 --- a/src/style/components/full-search.less +++ b/src/style/components/full-search.less @@ -19,7 +19,7 @@ .full-search { display: inline-block; - width: 624px + 72px; + max-width: 624px + 72px; body.theme-dark & { header div, diff --git a/src/style/content/collection.less b/src/style/content/collection.less index c091edb9a12..761987410ca 100644 --- a/src/style/content/collection.less +++ b/src/style/content/collection.less @@ -27,8 +27,7 @@ .collection-list { display: flex; flex-direction: column; - padding-top: 24px; - padding-bottom: 64px; + padding: 24px 20px 64px; } // Sections @@ -63,7 +62,7 @@ } .collection-header-icon { - width: @conversation-message-sender-width; + width: 30px; color: var(--foreground); fill: var(--foreground); text-align: center; @@ -84,10 +83,9 @@ // Images .collection-images { display: flex; - width: @image-size * @image-items-per-row; + max-width: (@image-size + @collection-images-padding) * @image-items-per-row; flex-wrap: wrap; border-radius: 4px; - margin-left: @conversation-message-sender-width - @collection-images-padding; } .collection-image { From cdce2e4a9630ec418175f0e39de3a0b15ac24c2c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Dec 2022 17:10:51 +0100 Subject: [PATCH 063/329] chore(deps-dev): Bump webpack-cli from 4.10.0 to 5.0.0 (#14213) Bumps [webpack-cli](https://github.com/webpack/webpack-cli) from 4.10.0 to 5.0.0. - [Release notes](https://github.com/webpack/webpack-cli/releases) - [Changelog](https://github.com/webpack/webpack-cli/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack/webpack-cli/compare/webpack-cli@4.10.0...webpack-cli@5.0.0) --- updated-dependencies: - dependency-name: webpack-cli dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 87 ++++++++++++++++++++++++++-------------------------- 2 files changed, 44 insertions(+), 45 deletions(-) diff --git a/package.json b/package.json index 4080307ecd3..c636cd739e8 100644 --- a/package.json +++ b/package.json @@ -172,7 +172,7 @@ "tsc-watch": "5.0.3", "typescript": "^4.8.4", "webpack": "5.75.0", - "webpack-cli": "4.10.0", + "webpack-cli": "5.0.0", "webpack-dev-middleware": "5.3.3", "webpack-hot-middleware": "2.25.3", "workbox-webpack-plugin": "6.5.4" diff --git a/yarn.lock b/yarn.lock index c96653e670d..51f87f46ea7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4243,36 +4243,36 @@ __metadata: languageName: node linkType: hard -"@webpack-cli/configtest@npm:^1.2.0": - version: 1.2.0 - resolution: "@webpack-cli/configtest@npm:1.2.0" +"@webpack-cli/configtest@npm:^2.0.0": + version: 2.0.0 + resolution: "@webpack-cli/configtest@npm:2.0.0" peerDependencies: - webpack: 4.x.x || 5.x.x - webpack-cli: 4.x.x - checksum: a2726cd9ec601d2b57e5fc15e0ebf5200a8892065e735911269ac2038e62be4bfc176ea1f88c2c46ff09b4d05d4c10ae045e87b3679372483d47da625a327e28 + webpack: 5.x.x + webpack-cli: 5.x.x + checksum: 7d1977c833c4dcd7cc30a6873bf5f79564a194e4799bcdaf8158081595409adf64e3179beada4f7b6522086c8e18ee802f7b505692d6359aab6503e8caa82de8 languageName: node linkType: hard -"@webpack-cli/info@npm:^1.5.0": - version: 1.5.0 - resolution: "@webpack-cli/info@npm:1.5.0" - dependencies: - envinfo: ^7.7.3 +"@webpack-cli/info@npm:^2.0.0": + version: 2.0.0 + resolution: "@webpack-cli/info@npm:2.0.0" peerDependencies: - webpack-cli: 4.x.x - checksum: 7f56fe037cd7d1fd5c7428588519fbf04a0cad33925ee4202ffbafd00f8ec1f2f67d991245e687d50e0f3e23f7b7814273d56cb9f7da4b05eed47c8d815c6296 + webpack: 5.x.x + webpack-cli: 5.x.x + checksum: d354d50dbef180066279b548e91b84372a99e1026fa1c228dcb4a6923a6aefc76e8a9c4e328e048732dc086c60fab967ff323690f170cc6a3c1a83c06bbf043e languageName: node linkType: hard -"@webpack-cli/serve@npm:^1.7.0": - version: 1.7.0 - resolution: "@webpack-cli/serve@npm:1.7.0" +"@webpack-cli/serve@npm:^2.0.0": + version: 2.0.0 + resolution: "@webpack-cli/serve@npm:2.0.0" peerDependencies: - webpack-cli: 4.x.x + webpack: 5.x.x + webpack-cli: 5.x.x peerDependenciesMeta: webpack-dev-server: optional: true - checksum: d475e8effa23eb7ff9a48b14d4de425989fd82f906ce71c210921cc3852327c22873be00c35e181a25a6bd03d424ae2b83e7f3b3f410ac7ee31b128ab4ac7713 + checksum: d5cd72589d3563e21dedbd9e05102ef87f7e325a1de15fb7db0906132440556920719ce012e0f052efd1bc4c1fbaf3fb123552c5f3476339657ebf29c5c81732 languageName: node linkType: hard @@ -5993,7 +5993,7 @@ __metadata: languageName: node linkType: hard -"commander@npm:^7.0.0, commander@npm:^7.2.0": +"commander@npm:^7.2.0": version: 7.2.0 resolution: "commander@npm:7.2.0" checksum: 53501cbeee61d5157546c0bef0fedb6cdfc763a882136284bed9a07225f09a14b82d2a84e7637edfd1a679fb35ed9502fd58ef1d091e6287f60d790147f68ddc @@ -9219,10 +9219,10 @@ __metadata: languageName: node linkType: hard -"interpret@npm:^2.2.0": - version: 2.2.0 - resolution: "interpret@npm:2.2.0" - checksum: f51efef7cb8d02da16408ffa3504cd6053014c5aeb7bb8c223727e053e4235bf565e45d67028b0c8740d917c603807aa3c27d7bd2f21bf20b6417e2bb3e5fd6e +"interpret@npm:^3.1.1": + version: 3.1.1 + resolution: "interpret@npm:3.1.1" + checksum: 35cebcf48c7351130437596d9ab8c8fe131ce4038da4561e6d665f25640e0034702a031cf7e3a5cea60ac7ac548bf17465e0571ede126f3d3a6933152171ac82 languageName: node linkType: hard @@ -13950,12 +13950,12 @@ __metadata: languageName: node linkType: hard -"rechoir@npm:^0.7.0": - version: 0.7.0 - resolution: "rechoir@npm:0.7.0" +"rechoir@npm:^0.8.0": + version: 0.8.0 + resolution: "rechoir@npm:0.8.0" dependencies: - resolve: ^1.9.0 - checksum: 15f55f55e06c175d98df85d503b139982378e7ca34e157439125e5a6f25a5cbd9cfe2aa2d1052e2c1edf89d7d22dc020c911fc968702c84f669a16a12a1ec7ac + resolve: ^1.20.0 + checksum: ad3caed8afdefbc33fbc30e6d22b86c35b3d51c2005546f4e79bcc03c074df804b3640ad18945e6bef9ed12caedc035655ec1082f64a5e94c849ff939dc0a788 languageName: node linkType: hard @@ -14281,7 +14281,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.1.7, resolve@npm:^1.10.0, resolve@npm:^1.14.2, resolve@npm:^1.17.0, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.0, resolve@npm:^1.9.0": +"resolve@npm:^1.1.7, resolve@npm:^1.10.0, resolve@npm:^1.14.2, resolve@npm:^1.17.0, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.0": version: 1.22.1 resolution: "resolve@npm:1.22.1" dependencies: @@ -14304,7 +14304,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@^1.1.7#~builtin, resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.17.0#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.0#~builtin, resolve@patch:resolve@^1.9.0#~builtin": +"resolve@patch:resolve@^1.1.7#~builtin, resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.17.0#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.0#~builtin": version: 1.22.1 resolution: "resolve@patch:resolve@npm%3A1.22.1#~builtin::version=1.22.1&hash=07638b" dependencies: @@ -16368,36 +16368,35 @@ __metadata: languageName: node linkType: hard -"webpack-cli@npm:4.10.0": - version: 4.10.0 - resolution: "webpack-cli@npm:4.10.0" +"webpack-cli@npm:5.0.0": + version: 5.0.0 + resolution: "webpack-cli@npm:5.0.0" dependencies: "@discoveryjs/json-ext": ^0.5.0 - "@webpack-cli/configtest": ^1.2.0 - "@webpack-cli/info": ^1.5.0 - "@webpack-cli/serve": ^1.7.0 + "@webpack-cli/configtest": ^2.0.0 + "@webpack-cli/info": ^2.0.0 + "@webpack-cli/serve": ^2.0.0 colorette: ^2.0.14 - commander: ^7.0.0 + commander: ^9.4.1 cross-spawn: ^7.0.3 + envinfo: ^7.7.3 fastest-levenshtein: ^1.0.12 import-local: ^3.0.2 - interpret: ^2.2.0 - rechoir: ^0.7.0 + interpret: ^3.1.1 + rechoir: ^0.8.0 webpack-merge: ^5.7.3 peerDependencies: - webpack: 4.x.x || 5.x.x + webpack: 5.x.x peerDependenciesMeta: "@webpack-cli/generators": optional: true - "@webpack-cli/migrate": - optional: true webpack-bundle-analyzer: optional: true webpack-dev-server: optional: true bin: webpack-cli: bin/cli.js - checksum: 2ff5355ac348e6b40f2630a203b981728834dca96d6d621be96249764b2d0fc01dd54edfcc37f02214d02935de2cf0eefd6ce689d970d154ef493f01ba922390 + checksum: 514874b6625d5a0077d9f52fe67dd0528115823d15612dbdc99fece271d26825fbedd3e7b209ed7726edc8528c0e7f787acbba57929ac4cb6d0618ec1c834933 languageName: node linkType: hard @@ -16789,7 +16788,7 @@ __metadata: underscore: 1.13.6 uuidjs: 4.2.12 webpack: 5.75.0 - webpack-cli: 4.10.0 + webpack-cli: 5.0.0 webpack-dev-middleware: 5.3.3 webpack-hot-middleware: 2.25.3 webrtc-adapter: 6.4.8 From 996bacd4e22d8f9d5c1633acfbfe91b8e8b24a49 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Dec 2022 17:11:34 +0100 Subject: [PATCH 064/329] chore(deps-dev): Bump sinon from 14.0.2 to 15.0.0 (#14223) Bumps [sinon](https://github.com/sinonjs/sinon) from 14.0.2 to 15.0.0. - [Release notes](https://github.com/sinonjs/sinon/releases) - [Changelog](https://github.com/sinonjs/sinon/blob/main/docs/changelog.md) - [Commits](https://github.com/sinonjs/sinon/compare/v14.0.2...v15.0.0) --- updated-dependencies: - dependency-name: sinon dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] 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 c636cd739e8..69f28d0a94d 100644 --- a/package.json +++ b/package.json @@ -159,7 +159,7 @@ "redux-mock-store": "1.5.4", "seedrandom": "^3.0.5", "simple-git": "3.14.1", - "sinon": "14.0.2", + "sinon": "15.0.0", "snabbdom": "3.5.1", "style-loader": "^3.3.1", "stylelint": "14.15.0", diff --git a/yarn.lock b/yarn.lock index 51f87f46ea7..4852a619561 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14660,9 +14660,9 @@ __metadata: languageName: node linkType: hard -"sinon@npm:14.0.2": - version: 14.0.2 - resolution: "sinon@npm:14.0.2" +"sinon@npm:15.0.0": + version: 15.0.0 + resolution: "sinon@npm:15.0.0" dependencies: "@sinonjs/commons": ^2.0.0 "@sinonjs/fake-timers": ^9.1.2 @@ -14670,7 +14670,7 @@ __metadata: diff: ^5.0.0 nise: ^5.1.2 supports-color: ^7.2.0 - checksum: de7730cd7785a457e42f9a93e955780c870296036a13816e3c0c5648360afae82fdc748e36c854cf26fb8abd117855a7211aee49265c334fa61439aae17a1b72 + checksum: 97febf6c6cad6070e33650be15bd0e8eba3a7d7af0465f1f97edcf3f249b23f72d9e7442f377a5b5d891fa929ef5f1b77d1ff7a07b7ee7013b6b7359e4b2026c languageName: node linkType: hard @@ -16769,7 +16769,7 @@ __metadata: redux-thunk: 2.4.2 seedrandom: ^3.0.5 simple-git: 3.14.1 - sinon: 14.0.2 + sinon: 15.0.0 snabbdom: 3.5.1 speakingurl: 14.0.1 style-loader: ^3.3.1 From 2e896d1a73c5fa344346e8d14841c3dacaeaccd7 Mon Sep 17 00:00:00 2001 From: Otto the Bot Date: Thu, 1 Dec 2022 17:50:01 +0100 Subject: [PATCH 065/329] chore: Update translations (#14187) --- src/i18n/ar-SA.json | 27 ++++++++++++++------------- src/i18n/bn-BD.json | 27 ++++++++++++++------------- src/i18n/ca-ES.json | 27 ++++++++++++++------------- src/i18n/cs-CZ.json | 27 ++++++++++++++------------- src/i18n/da-DK.json | 27 ++++++++++++++------------- src/i18n/de-DE.json | 13 +++++++------ src/i18n/el-GR.json | 27 ++++++++++++++------------- src/i18n/es-ES.json | 27 ++++++++++++++------------- src/i18n/et-EE.json | 27 ++++++++++++++------------- src/i18n/fa-IR.json | 27 ++++++++++++++------------- src/i18n/fi-FI.json | 27 ++++++++++++++------------- src/i18n/fr-FR.json | 27 ++++++++++++++------------- src/i18n/ga-IE.json | 27 ++++++++++++++------------- src/i18n/he-IL.json | 27 ++++++++++++++------------- src/i18n/hi-IN.json | 27 ++++++++++++++------------- src/i18n/hr-HR.json | 27 ++++++++++++++------------- src/i18n/hu-HU.json | 27 ++++++++++++++------------- src/i18n/id-ID.json | 27 ++++++++++++++------------- src/i18n/is-IS.json | 27 ++++++++++++++------------- src/i18n/it-IT.json | 27 ++++++++++++++------------- src/i18n/ja-JP.json | 27 ++++++++++++++------------- src/i18n/lt-LT.json | 27 ++++++++++++++------------- src/i18n/lv-LV.json | 27 ++++++++++++++------------- src/i18n/ms-MY.json | 27 ++++++++++++++------------- src/i18n/nl-NL.json | 27 ++++++++++++++------------- src/i18n/no-NO.json | 27 ++++++++++++++------------- src/i18n/pl-PL.json | 27 ++++++++++++++------------- src/i18n/pt-BR.json | 27 ++++++++++++++------------- src/i18n/pt-PT.json | 27 ++++++++++++++------------- src/i18n/ro-RO.json | 27 ++++++++++++++------------- src/i18n/ru-RU.json | 13 +++++++------ src/i18n/si-LK.json | 27 ++++++++++++++------------- src/i18n/sk-SK.json | 27 ++++++++++++++------------- src/i18n/sl-SI.json | 27 ++++++++++++++------------- src/i18n/sr-SP.json | 27 ++++++++++++++------------- src/i18n/sv-SE.json | 27 ++++++++++++++------------- src/i18n/th-TH.json | 27 ++++++++++++++------------- src/i18n/tr-TR.json | 27 ++++++++++++++------------- src/i18n/uk-UA.json | 27 ++++++++++++++------------- src/i18n/uz-UZ.json | 27 ++++++++++++++------------- src/i18n/vi-VN.json | 27 ++++++++++++++------------- src/i18n/zh-CN.json | 27 ++++++++++++++------------- src/i18n/zh-HK.json | 27 ++++++++++++++------------- src/i18n/zh-TW.json | 27 ++++++++++++++------------- 44 files changed, 602 insertions(+), 558 deletions(-) diff --git a/src/i18n/ar-SA.json b/src/i18n/ar-SA.json index a01594c7f6f..942716c0060 100644 --- a/src/i18n/ar-SA.json +++ b/src/i18n/ar-SA.json @@ -258,7 +258,7 @@ "clientManager.headline": "أزل جهازًا", "clientManager.logout": "Cancel process", "clientManager.subhead": "Remove one of your other devices to start using {brandName} on this one.", - "collectionSectionAudio": "رسائل صوتية", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "ملفات", "collectionSectionImages": "صور", "collectionSectionLinks": "روابط", @@ -266,7 +266,7 @@ "connectionRequestConnect": "تواصل", "connectionRequestIgnore": "تجاهل", "conversationAssetDownloading": "تنزيل...", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "فشل التحميل", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "موافق", "modalAcknowledgeHeadline": "حدث خطأ ما", "modalAppLockForgotGoBackButton": "Go back", - "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passphrase. If you have forgotten your passphrase, you can reset this client.", - "modalAppLockForgotTitle": "Forgot your app lock passphrase?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Reset this client", - "modalAppLockLockedError": "Wrong passphrase", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Access as new device", "modalAppLockLockedTitle": "Enter passcode to unlock {{brandName}}", "modalAppLockLockedUnlockButton": "Unlock", "modalAppLockPasscode": "Passcode", - "modalAppLockSetupAcceptButton": "Set passphrase", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Your organization needs to lock your app when {{brandName}} is not in use to keep the team safe.[br]Create a passlock to unlock {{brandName}}. Please, remember it, as it can not be recovered.", "modalAppLockSetupChangeTitle": "There was a change at {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "A digit", "modalAppLockSetupLong": "At least {{minPasswordLength}} characters long", "modalAppLockSetupLower": "A lowercase letter", - "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passphrase.[br]Make sure to remember this passphrase as there is no way to recover it.", - "modalAppLockSetupSecondPlaceholder": "Repeat passphrase", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "A special character", - "modalAppLockSetupTitle": "Set app lock passphrase", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "An uppercase letter", "modalAppLockWipeConfirmConfirmButton": "Reset this client", "modalAppLockWipeConfirmGoBackButton": "Go back", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "الخصوصية", "preferencesAccountReadReceiptsCheckbox": "إشعارات بالقراءة", "preferencesAccountReadReceiptsDetail": "When this is off, you won’t be able to see read receipts from other people. This setting does not apply to group conversations.", - "preferencesAccountResetAppLockPassphrase": "Reset app lock passphrase", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "أعد تعيين كلمة المرور", - "preferencesAccountSetAppLockPassphrase": "Set app lock passphrase", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "متاح", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "تم التحقق", "preferencesHeadline": "تفضيلات", "preferencesOptions": "خيارات", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "التنبيهات الصوتية", "preferencesOptionsAudioAll": "الكل", "preferencesOptionsAudioAllDetail": "جميع الأصوات", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "أخف التفاصيل", "preferencesOptionsNotificationsObfuscateMessage": "أظهر المرسِل", "preferencesOptionsNotificationsOn": "أظهر المرسِل والرسالة", - "preferencesOptionsPopular": "By popular demand", "preferencesOptionsPreviewsSendCheckbox": "أنشئ معاينات للروابط التي ترسلها", "preferencesOptionsPreviewsSendDetail": "ربما تظل تظهر معاينات روابط الآخرين.", "preferencesOptionsUseDarkMode": "سمة داكنة", diff --git a/src/i18n/bn-BD.json b/src/i18n/bn-BD.json index 32a841849e5..76549a91129 100644 --- a/src/i18n/bn-BD.json +++ b/src/i18n/bn-BD.json @@ -258,7 +258,7 @@ "clientManager.headline": "Remove a device", "clientManager.logout": "Cancel process", "clientManager.subhead": "Remove one of your other devices to start using {brandName} on this one.", - "collectionSectionAudio": "Audio messages", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "Files", "collectionSectionImages": "Pictures", "collectionSectionLinks": "Links", @@ -266,7 +266,7 @@ "connectionRequestConnect": "Connect", "connectionRequestIgnore": "Ignore", "conversationAssetDownloading": "Downloading…", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "Upload Failed", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "Ok", "modalAcknowledgeHeadline": "Something went wrong", "modalAppLockForgotGoBackButton": "Go back", - "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passphrase. If you have forgotten your passphrase, you can reset this client.", - "modalAppLockForgotTitle": "Forgot your app lock passphrase?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Reset this client", - "modalAppLockLockedError": "Wrong passphrase", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Access as new device", "modalAppLockLockedTitle": "Enter passcode to unlock {{brandName}}", "modalAppLockLockedUnlockButton": "Unlock", "modalAppLockPasscode": "Passcode", - "modalAppLockSetupAcceptButton": "Set passphrase", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Your organization needs to lock your app when {{brandName}} is not in use to keep the team safe.[br]Create a passlock to unlock {{brandName}}. Please, remember it, as it can not be recovered.", "modalAppLockSetupChangeTitle": "There was a change at {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "A digit", "modalAppLockSetupLong": "At least {{minPasswordLength}} characters long", "modalAppLockSetupLower": "A lowercase letter", - "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passphrase.[br]Make sure to remember this passphrase as there is no way to recover it.", - "modalAppLockSetupSecondPlaceholder": "Repeat passphrase", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "A special character", - "modalAppLockSetupTitle": "Set app lock passphrase", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "An uppercase letter", "modalAppLockWipeConfirmConfirmButton": "Reset this client", "modalAppLockWipeConfirmGoBackButton": "Go back", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "Privacy", "preferencesAccountReadReceiptsCheckbox": "Read receipts", "preferencesAccountReadReceiptsDetail": "When this is off, you won’t be able to see read receipts from other people. This setting does not apply to group conversations.", - "preferencesAccountResetAppLockPassphrase": "Reset app lock passphrase", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "Reset password", - "preferencesAccountSetAppLockPassphrase": "Set app lock passphrase", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "Available", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "Verified", "preferencesHeadline": "Preferences", "preferencesOptions": "Options", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "Sound alerts", "preferencesOptionsAudioAll": "All", "preferencesOptionsAudioAllDetail": "All sounds", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "Hide details", "preferencesOptionsNotificationsObfuscateMessage": "Show sender", "preferencesOptionsNotificationsOn": "Show sender and message", - "preferencesOptionsPopular": "By popular demand", "preferencesOptionsPreviewsSendCheckbox": "Create previews for links you send", "preferencesOptionsPreviewsSendDetail": "Previews may still be shown for links from other people.", "preferencesOptionsUseDarkMode": "Dark theme", diff --git a/src/i18n/ca-ES.json b/src/i18n/ca-ES.json index 32a841849e5..76549a91129 100644 --- a/src/i18n/ca-ES.json +++ b/src/i18n/ca-ES.json @@ -258,7 +258,7 @@ "clientManager.headline": "Remove a device", "clientManager.logout": "Cancel process", "clientManager.subhead": "Remove one of your other devices to start using {brandName} on this one.", - "collectionSectionAudio": "Audio messages", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "Files", "collectionSectionImages": "Pictures", "collectionSectionLinks": "Links", @@ -266,7 +266,7 @@ "connectionRequestConnect": "Connect", "connectionRequestIgnore": "Ignore", "conversationAssetDownloading": "Downloading…", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "Upload Failed", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "Ok", "modalAcknowledgeHeadline": "Something went wrong", "modalAppLockForgotGoBackButton": "Go back", - "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passphrase. If you have forgotten your passphrase, you can reset this client.", - "modalAppLockForgotTitle": "Forgot your app lock passphrase?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Reset this client", - "modalAppLockLockedError": "Wrong passphrase", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Access as new device", "modalAppLockLockedTitle": "Enter passcode to unlock {{brandName}}", "modalAppLockLockedUnlockButton": "Unlock", "modalAppLockPasscode": "Passcode", - "modalAppLockSetupAcceptButton": "Set passphrase", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Your organization needs to lock your app when {{brandName}} is not in use to keep the team safe.[br]Create a passlock to unlock {{brandName}}. Please, remember it, as it can not be recovered.", "modalAppLockSetupChangeTitle": "There was a change at {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "A digit", "modalAppLockSetupLong": "At least {{minPasswordLength}} characters long", "modalAppLockSetupLower": "A lowercase letter", - "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passphrase.[br]Make sure to remember this passphrase as there is no way to recover it.", - "modalAppLockSetupSecondPlaceholder": "Repeat passphrase", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "A special character", - "modalAppLockSetupTitle": "Set app lock passphrase", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "An uppercase letter", "modalAppLockWipeConfirmConfirmButton": "Reset this client", "modalAppLockWipeConfirmGoBackButton": "Go back", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "Privacy", "preferencesAccountReadReceiptsCheckbox": "Read receipts", "preferencesAccountReadReceiptsDetail": "When this is off, you won’t be able to see read receipts from other people. This setting does not apply to group conversations.", - "preferencesAccountResetAppLockPassphrase": "Reset app lock passphrase", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "Reset password", - "preferencesAccountSetAppLockPassphrase": "Set app lock passphrase", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "Available", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "Verified", "preferencesHeadline": "Preferences", "preferencesOptions": "Options", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "Sound alerts", "preferencesOptionsAudioAll": "All", "preferencesOptionsAudioAllDetail": "All sounds", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "Hide details", "preferencesOptionsNotificationsObfuscateMessage": "Show sender", "preferencesOptionsNotificationsOn": "Show sender and message", - "preferencesOptionsPopular": "By popular demand", "preferencesOptionsPreviewsSendCheckbox": "Create previews for links you send", "preferencesOptionsPreviewsSendDetail": "Previews may still be shown for links from other people.", "preferencesOptionsUseDarkMode": "Dark theme", diff --git a/src/i18n/cs-CZ.json b/src/i18n/cs-CZ.json index a5c7c05fcd4..2958c28b9ac 100644 --- a/src/i18n/cs-CZ.json +++ b/src/i18n/cs-CZ.json @@ -258,7 +258,7 @@ "clientManager.headline": "Odebrat zařízení", "clientManager.logout": "Cancel process", "clientManager.subhead": "Odeberte jeden ze svých přístrojů abyste mohli začít používat {brandName} na tomto zařízení.", - "collectionSectionAudio": "Zvukové zprávy", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "Soubory", "collectionSectionImages": "Obrázky", "collectionSectionLinks": "Odkazy", @@ -266,7 +266,7 @@ "connectionRequestConnect": "Připojit", "connectionRequestIgnore": "Ignorovat", "conversationAssetDownloading": "Stahování…", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "Nahrání selhalo", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "Ok", "modalAcknowledgeHeadline": "Something went wrong", "modalAppLockForgotGoBackButton": "Go back", - "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passphrase. If you have forgotten your passphrase, you can reset this client.", - "modalAppLockForgotTitle": "Forgot your app lock passphrase?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Reset this client", - "modalAppLockLockedError": "Wrong passphrase", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Access as new device", "modalAppLockLockedTitle": "Enter passcode to unlock {{brandName}}", "modalAppLockLockedUnlockButton": "Unlock", "modalAppLockPasscode": "Passcode", - "modalAppLockSetupAcceptButton": "Set passphrase", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Your organization needs to lock your app when {{brandName}} is not in use to keep the team safe.[br]Create a passlock to unlock {{brandName}}. Please, remember it, as it can not be recovered.", "modalAppLockSetupChangeTitle": "There was a change at {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "A digit", "modalAppLockSetupLong": "At least {{minPasswordLength}} characters long", "modalAppLockSetupLower": "A lowercase letter", - "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passphrase.[br]Make sure to remember this passphrase as there is no way to recover it.", - "modalAppLockSetupSecondPlaceholder": "Repeat passphrase", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "A special character", - "modalAppLockSetupTitle": "Set app lock passphrase", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "An uppercase letter", "modalAppLockWipeConfirmConfirmButton": "Reset this client", "modalAppLockWipeConfirmGoBackButton": "Go back", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "Soukromí", "preferencesAccountReadReceiptsCheckbox": "Read receipts", "preferencesAccountReadReceiptsDetail": "When this is off, you won’t be able to see read receipts from other people. This setting does not apply to group conversations.", - "preferencesAccountResetAppLockPassphrase": "Reset app lock passphrase", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "Resetovat heslo", - "preferencesAccountSetAppLockPassphrase": "Set app lock passphrase", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "Dostupný", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "Ověreno", "preferencesHeadline": "Předvolby", "preferencesOptions": "Nastavení", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "Zvuková upozornění", "preferencesOptionsAudioAll": "Vše", "preferencesOptionsAudioAllDetail": "Všechny zvuky", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "Skrýt detaily", "preferencesOptionsNotificationsObfuscateMessage": "Zobrazit odesílatele", "preferencesOptionsNotificationsOn": "Zobrazit odesílatele a zprávu", - "preferencesOptionsPopular": "Podle popularity poptávky", "preferencesOptionsPreviewsSendCheckbox": "Vytvořit náhledy pro odeslané odkazy", "preferencesOptionsPreviewsSendDetail": "Náhledy mohou být zobrazeny i pro odkazy od jiných lidí.", "preferencesOptionsUseDarkMode": "Dark theme", diff --git a/src/i18n/da-DK.json b/src/i18n/da-DK.json index 17b876fb7ae..48d6d372b69 100644 --- a/src/i18n/da-DK.json +++ b/src/i18n/da-DK.json @@ -258,7 +258,7 @@ "clientManager.headline": "Remove a device", "clientManager.logout": "Cancel process", "clientManager.subhead": "Fjern en af dine andre enheder for at begynde at bruge {brandName} på denne.", - "collectionSectionAudio": "Lydbeskeder", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "Filer", "collectionSectionImages": "Billeder", "collectionSectionLinks": "Links", @@ -266,7 +266,7 @@ "connectionRequestConnect": "Forbind", "connectionRequestIgnore": "Ignorér", "conversationAssetDownloading": "Downloader…", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "Upload Mislykkedes", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "Ok", "modalAcknowledgeHeadline": "Noget gik galt", "modalAppLockForgotGoBackButton": "Go back", - "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passphrase. If you have forgotten your passphrase, you can reset this client.", - "modalAppLockForgotTitle": "Forgot your app lock passphrase?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Reset this client", - "modalAppLockLockedError": "Wrong passphrase", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Access as new device", "modalAppLockLockedTitle": "Enter passcode to unlock {{brandName}}", "modalAppLockLockedUnlockButton": "Unlock", "modalAppLockPasscode": "Passcode", - "modalAppLockSetupAcceptButton": "Set passphrase", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Your organization needs to lock your app when {{brandName}} is not in use to keep the team safe.[br]Create a passlock to unlock {{brandName}}. Please, remember it, as it can not be recovered.", "modalAppLockSetupChangeTitle": "There was a change at {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "A digit", "modalAppLockSetupLong": "At least {{minPasswordLength}} characters long", "modalAppLockSetupLower": "A lowercase letter", - "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passphrase.[br]Make sure to remember this passphrase as there is no way to recover it.", - "modalAppLockSetupSecondPlaceholder": "Repeat passphrase", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "A special character", - "modalAppLockSetupTitle": "Set app lock passphrase", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "An uppercase letter", "modalAppLockWipeConfirmConfirmButton": "Reset this client", "modalAppLockWipeConfirmGoBackButton": "Go back", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "Privatliv", "preferencesAccountReadReceiptsCheckbox": "Read receipts", "preferencesAccountReadReceiptsDetail": "When this is off, you won’t be able to see read receipts from other people. This setting does not apply to group conversations.", - "preferencesAccountResetAppLockPassphrase": "Reset app lock passphrase", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "Nulstil adgangskode", - "preferencesAccountSetAppLockPassphrase": "Set app lock passphrase", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "Ledig", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "Bekræftet", "preferencesHeadline": "Indstillinger", "preferencesOptions": "Egenskaber", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "Lyd advarsler", "preferencesOptionsAudioAll": "Alle", "preferencesOptionsAudioAllDetail": "Alle lyde", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "Skjul detaljer", "preferencesOptionsNotificationsObfuscateMessage": "Vis afsender", "preferencesOptionsNotificationsOn": "Vis afsender og besked", - "preferencesOptionsPopular": "Ved populær efterspørgsel", "preferencesOptionsPreviewsSendCheckbox": "Lav previews til links du sender", "preferencesOptionsPreviewsSendDetail": "Previews kan stadig blive vist for link fra andre.", "preferencesOptionsUseDarkMode": "Dark theme", diff --git a/src/i18n/de-DE.json b/src/i18n/de-DE.json index 55186ca3628..0b2ba8055ac 100644 --- a/src/i18n/de-DE.json +++ b/src/i18n/de-DE.json @@ -258,7 +258,7 @@ "clientManager.headline": "Bitte ein Gerät entfernen", "clientManager.logout": "Vorgang abbrechen", "clientManager.subhead": "Bitte eines der anderen Geräte entfernen, um {brandName} auf diesem zu nutzen.", - "collectionSectionAudio": "Audionachrichten", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "Dateien", "collectionSectionImages": "Bilder", "collectionSectionLinks": "Links", @@ -266,7 +266,7 @@ "connectionRequestConnect": "Kontakt hinzufügen", "connectionRequestIgnore": "Ignorieren", "conversationAssetDownloading": "Herunterladen…", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audionachricht", "conversationAssetUploadFailed": "Hochladen fehlgeschlagen", @@ -693,7 +693,7 @@ "modalAcknowledgeAction": "Ok", "modalAcknowledgeHeadline": "Ein Fehler ist aufgetreten", "modalAppLockForgotGoBackButton": "Zurück", - "modalAppLockForgotMessage": "Auf die gespeicherten Daten auf diesem Gerät kann nur mit dem Kennwort der App-Sperre zugegriffen werden. Wenn das Kennwort vergessen wurde, kann dieser Client zurückgesetzt werden.", + "modalAppLockForgotMessage": "Auf die gespeicherten Daten auf diesem Gerät kann nur mit dem Kennwort der App-Sperre zugegriffen werden. Wenn Sie Ihr Kennwort vergessen haben, können Sie dieses Gerät zurücksetzen.", "modalAppLockForgotTitle": "Kennwort der App-Sperre vergessen?", "modalAppLockForgotWipeCTA": "Diesen Client zurücksetzen", "modalAppLockLockedError": "Falsches Kennwort", @@ -704,11 +704,11 @@ "modalAppLockSetupAcceptButton": "Kennwort festlegen", "modalAppLockSetupChangeMessage": "Ihre Organisation muss Ihre App sperren, wenn {{brandName}} nicht verwendet wird, um die Sicherheit des Teams zu gewährleisten.[br]Erstellen Sie einen Kennwort, um {{brandName}} zu entsperren. Merken Sie es sich, da es nicht wiederhergestellt werden kann.", "modalAppLockSetupChangeTitle": "Es gab eine Änderung bei {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "Eine Ziffer", "modalAppLockSetupLong": "Mindestens {{minPasswordLength}} Zeichen lang", "modalAppLockSetupLower": "Ein Kleinbuchstabe", - "modalAppLockSetupMessage": "Die App wird nach einer bestimmten Zeit der Inaktivität gesperrt.[br]Um die App zu entsperren, muss dieses Kennwort eingegeben werden.[br]Bitte merken Sie sich dieses Kennwort unbedingt, da es keine Möglichkeit gibt, es wiederherzustellen.", + "modalAppLockSetupMessage": "Die App wird nach einer bestimmten Zeit der Inaktivität gesperrt.[br]Um die App zu entsperren, müssen Sie dieses Kennwort eingeben.[br]Bitte merken Sie es sich unbedingt, da es keine Möglichkeit gibt, es wiederherzustellen.", "modalAppLockSetupSecondPlaceholder": "Kennwort wiederholen", "modalAppLockSetupSpecial": "Ein Sonderzeichen", "modalAppLockSetupTitle": "Kennwort der App-Sperre festlegen", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "Überprüft", "preferencesHeadline": "Einstellungen", "preferencesOptions": "Optionen", + "preferencesOptionsAppearance": "Erscheinungsbild", + "preferencesOptionsAppearanceTextSize": "Textgröße", "preferencesOptionsAudio": "Benachrichtigungstöne", "preferencesOptionsAudioAll": "Alle", "preferencesOptionsAudioAllDetail": "Alle Töne", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "Details verbergen", "preferencesOptionsNotificationsObfuscateMessage": "Absender anzeigen", "preferencesOptionsNotificationsOn": "Absender und Nachricht anzeigen", - "preferencesOptionsPopular": "Auf allgemeinen Wunsch", "preferencesOptionsPreviewsSendCheckbox": "Vorschau beim Senden von Links erstellen", "preferencesOptionsPreviewsSendDetail": "Vorschauen für Links von anderen Personen können weiterhin angezeigt werden.", "preferencesOptionsUseDarkMode": "Dunkler Hintergrund", diff --git a/src/i18n/el-GR.json b/src/i18n/el-GR.json index 227a8eaf175..ab27c923c6b 100644 --- a/src/i18n/el-GR.json +++ b/src/i18n/el-GR.json @@ -258,7 +258,7 @@ "clientManager.headline": "Αφαίρεση συσκευής", "clientManager.logout": "Cancel process", "clientManager.subhead": "Αφαιρέστε μία από τις άλλες συσκευές σας για να αρχίσετε να χρησιμοποιείτε το {brandName} σε αυτήν.", - "collectionSectionAudio": "Ηχητικά μηνύματα", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "Αρχεία", "collectionSectionImages": "Εικόνες", "collectionSectionLinks": "Σύνδεσμοι", @@ -266,7 +266,7 @@ "connectionRequestConnect": "Σύνδεση", "connectionRequestIgnore": "Αγνόηση", "conversationAssetDownloading": "Γίνετε λήψη…", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "Η Μεταφόρτωση Απέτυχε", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "Εντάξει", "modalAcknowledgeHeadline": "Κάτι πήγε στραβά", "modalAppLockForgotGoBackButton": "Go back", - "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passphrase. If you have forgotten your passphrase, you can reset this client.", - "modalAppLockForgotTitle": "Forgot your app lock passphrase?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Reset this client", - "modalAppLockLockedError": "Wrong passphrase", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Access as new device", "modalAppLockLockedTitle": "Enter passcode to unlock {{brandName}}", "modalAppLockLockedUnlockButton": "Unlock", "modalAppLockPasscode": "Passcode", - "modalAppLockSetupAcceptButton": "Set passphrase", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Your organization needs to lock your app when {{brandName}} is not in use to keep the team safe.[br]Create a passlock to unlock {{brandName}}. Please, remember it, as it can not be recovered.", "modalAppLockSetupChangeTitle": "There was a change at {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "A digit", "modalAppLockSetupLong": "At least {{minPasswordLength}} characters long", "modalAppLockSetupLower": "A lowercase letter", - "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passphrase.[br]Make sure to remember this passphrase as there is no way to recover it.", - "modalAppLockSetupSecondPlaceholder": "Repeat passphrase", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "A special character", - "modalAppLockSetupTitle": "Set app lock passphrase", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "An uppercase letter", "modalAppLockWipeConfirmConfirmButton": "Reset this client", "modalAppLockWipeConfirmGoBackButton": "Go back", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "Προστασία Προσωπικών Δεδομένων", "preferencesAccountReadReceiptsCheckbox": "Read receipts", "preferencesAccountReadReceiptsDetail": "When this is off, you won’t be able to see read receipts from other people. This setting does not apply to group conversations.", - "preferencesAccountResetAppLockPassphrase": "Reset app lock passphrase", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "Επαναφορά κωδικού πρόσβασης", - "preferencesAccountSetAppLockPassphrase": "Set app lock passphrase", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "Διαθέσιμο", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "Επιβεβαιωμένο", "preferencesHeadline": "Προτιμήσεις", "preferencesOptions": "Επιλογές", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "Ειδοποιήσεις ήχου", "preferencesOptionsAudioAll": "Όλα", "preferencesOptionsAudioAllDetail": "Όλοι οι ήχοι", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "Απόκρυψη λεπτομερειών", "preferencesOptionsNotificationsObfuscateMessage": "Εμφάνιση αποστολέα", "preferencesOptionsNotificationsOn": "Εμφάνιση αποστολέα και μηνύματος", - "preferencesOptionsPopular": "Απο δημοφιλεις προτασεις", "preferencesOptionsPreviewsSendCheckbox": "Δημιουργία προεπισκόπησης για απεσταλμένους συνδέσμους σας", "preferencesOptionsPreviewsSendDetail": "Οι προβολές ενδέχεται να εξακολουθούν να εμφανίζονται για συνδέσμους από άλλα άτομα.", "preferencesOptionsUseDarkMode": "Dark theme", diff --git a/src/i18n/es-ES.json b/src/i18n/es-ES.json index f87827ad507..9d6c2002df2 100644 --- a/src/i18n/es-ES.json +++ b/src/i18n/es-ES.json @@ -258,7 +258,7 @@ "clientManager.headline": "Quitar un dispositivo", "clientManager.logout": "Cancel process", "clientManager.subhead": "Quite uno de los dispositivos para comenzar a usar {brandName} en este dispositivo.", - "collectionSectionAudio": "Mensajes de audio", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "Ficheros", "collectionSectionImages": "Fotos", "collectionSectionLinks": "Enlaces", @@ -266,7 +266,7 @@ "connectionRequestConnect": "Conectar", "connectionRequestIgnore": "Ignorar", "conversationAssetDownloading": "Descargando…", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "Error al subir la información", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "OK", "modalAcknowledgeHeadline": "Algo salió mal", "modalAppLockForgotGoBackButton": "Go back", - "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passphrase. If you have forgotten your passphrase, you can reset this client.", - "modalAppLockForgotTitle": "Forgot your app lock passphrase?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Reset this client", - "modalAppLockLockedError": "Wrong passphrase", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Access as new device", "modalAppLockLockedTitle": "Enter passcode to unlock {{brandName}}", "modalAppLockLockedUnlockButton": "Unlock", "modalAppLockPasscode": "Passcode", - "modalAppLockSetupAcceptButton": "Set passphrase", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Your organization needs to lock your app when {{brandName}} is not in use to keep the team safe.[br]Create a passlock to unlock {{brandName}}. Please, remember it, as it can not be recovered.", "modalAppLockSetupChangeTitle": "There was a change at {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "A digit", "modalAppLockSetupLong": "At least {{minPasswordLength}} characters long", "modalAppLockSetupLower": "A lowercase letter", - "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passphrase.[br]Make sure to remember this passphrase as there is no way to recover it.", - "modalAppLockSetupSecondPlaceholder": "Repeat passphrase", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "A special character", - "modalAppLockSetupTitle": "Set app lock passphrase", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "An uppercase letter", "modalAppLockWipeConfirmConfirmButton": "Reset this client", "modalAppLockWipeConfirmGoBackButton": "Go back", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "Privacidad", "preferencesAccountReadReceiptsCheckbox": "Read receipts", "preferencesAccountReadReceiptsDetail": "When this is off, you won’t be able to see read receipts from other people. This setting does not apply to group conversations.", - "preferencesAccountResetAppLockPassphrase": "Reset app lock passphrase", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "Restablecer contraseña", - "preferencesAccountSetAppLockPassphrase": "Set app lock passphrase", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "Disponible", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "Verificado", "preferencesHeadline": "Preferencias", "preferencesOptions": "Opciones", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "Alertas de sonido", "preferencesOptionsAudioAll": "Todos", "preferencesOptionsAudioAllDetail": "Todos los sonidos", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "Ocultar detalles", "preferencesOptionsNotificationsObfuscateMessage": "Mostrar remitente", "preferencesOptionsNotificationsOn": "Mostrar remitente y mensaje", - "preferencesOptionsPopular": "Por demanda popular", "preferencesOptionsPreviewsSendCheckbox": "Crear vistas previas para los enlaces enviados", "preferencesOptionsPreviewsSendDetail": "Las vistas previas todavía pueden mostrarse para enlaces de otras personas.", "preferencesOptionsUseDarkMode": "Dark theme", diff --git a/src/i18n/et-EE.json b/src/i18n/et-EE.json index dba9d8aaeb0..11c2ee75c01 100644 --- a/src/i18n/et-EE.json +++ b/src/i18n/et-EE.json @@ -258,7 +258,7 @@ "clientManager.headline": "Eemalda seade", "clientManager.logout": "Cancel process", "clientManager.subhead": "Eemalda üks oma teistest seadmetest, et sellel {brandName}’i kasutada.", - "collectionSectionAudio": "Helisõnumid", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "Failid", "collectionSectionImages": "Pildid", "collectionSectionLinks": "Lingid", @@ -266,7 +266,7 @@ "connectionRequestConnect": "Ühendu", "connectionRequestIgnore": "Ignoreeri", "conversationAssetDownloading": "Allalaadimine…", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "Üleslaadimine ebaõnnestus", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "Ok", "modalAcknowledgeHeadline": "Midagi läks valesti", "modalAppLockForgotGoBackButton": "Go back", - "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passphrase. If you have forgotten your passphrase, you can reset this client.", - "modalAppLockForgotTitle": "Forgot your app lock passphrase?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Reset this client", - "modalAppLockLockedError": "Wrong passphrase", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Access as new device", "modalAppLockLockedTitle": "Enter passcode to unlock {{brandName}}", "modalAppLockLockedUnlockButton": "Unlock", "modalAppLockPasscode": "Passcode", - "modalAppLockSetupAcceptButton": "Set passphrase", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Your organization needs to lock your app when {{brandName}} is not in use to keep the team safe.[br]Create a passlock to unlock {{brandName}}. Please, remember it, as it can not be recovered.", "modalAppLockSetupChangeTitle": "There was a change at {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "A digit", "modalAppLockSetupLong": "At least {{minPasswordLength}} characters long", "modalAppLockSetupLower": "A lowercase letter", - "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passphrase.[br]Make sure to remember this passphrase as there is no way to recover it.", - "modalAppLockSetupSecondPlaceholder": "Repeat passphrase", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "A special character", - "modalAppLockSetupTitle": "Set app lock passphrase", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "An uppercase letter", "modalAppLockWipeConfirmConfirmButton": "Reset this client", "modalAppLockWipeConfirmGoBackButton": "Go back", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "Privaatsus", "preferencesAccountReadReceiptsCheckbox": "Lugemiskinnitused", "preferencesAccountReadReceiptsDetail": "Kui see on väljas, ei saa sa teiste inimeste lugemiskinnitusi lugeda. See valik ei rakendu grupivestlustele.", - "preferencesAccountResetAppLockPassphrase": "Reset app lock passphrase", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "Lähesta parool", - "preferencesAccountSetAppLockPassphrase": "Set app lock passphrase", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "Saadaval", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "Kinnitatud", "preferencesHeadline": "Eelistused", "preferencesOptions": "Valikud", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "Heliteated", "preferencesOptionsAudioAll": "Kõik", "preferencesOptionsAudioAllDetail": "Kõik helid", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "Peida üksikasjad", "preferencesOptionsNotificationsObfuscateMessage": "Kuva saatjat", "preferencesOptionsNotificationsOn": "Kuva saatjat ja sõnumit", - "preferencesOptionsPopular": "Publiku nõudmisel", "preferencesOptionsPreviewsSendCheckbox": "Loo eelvaateid saadetavatele linkidele", "preferencesOptionsPreviewsSendDetail": "Eelvaateid võidakse siiski näidata teiste inimeste linkide puhul.", "preferencesOptionsUseDarkMode": "Dark theme", diff --git a/src/i18n/fa-IR.json b/src/i18n/fa-IR.json index aca31469329..18d26a69c23 100644 --- a/src/i18n/fa-IR.json +++ b/src/i18n/fa-IR.json @@ -258,7 +258,7 @@ "clientManager.headline": "Remove a device", "clientManager.logout": "Cancel process", "clientManager.subhead": "Remove one of your other devices to start using {brandName} on this one.", - "collectionSectionAudio": "پیام‌های صوتی", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "فایل‌ها", "collectionSectionImages": "تصاویر", "collectionSectionLinks": "لینک‌ها", @@ -266,7 +266,7 @@ "connectionRequestConnect": "درخواست دوستی", "connectionRequestIgnore": "نادیده گرفتن", "conversationAssetDownloading": "در حال دانلود…", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "آپلود ناموفق بود", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "باشه", "modalAcknowledgeHeadline": "Something went wrong", "modalAppLockForgotGoBackButton": "Go back", - "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passphrase. If you have forgotten your passphrase, you can reset this client.", - "modalAppLockForgotTitle": "Forgot your app lock passphrase?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Reset this client", - "modalAppLockLockedError": "Wrong passphrase", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Access as new device", "modalAppLockLockedTitle": "Enter passcode to unlock {{brandName}}", "modalAppLockLockedUnlockButton": "Unlock", "modalAppLockPasscode": "Passcode", - "modalAppLockSetupAcceptButton": "Set passphrase", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Your organization needs to lock your app when {{brandName}} is not in use to keep the team safe.[br]Create a passlock to unlock {{brandName}}. Please, remember it, as it can not be recovered.", "modalAppLockSetupChangeTitle": "There was a change at {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "A digit", "modalAppLockSetupLong": "At least {{minPasswordLength}} characters long", "modalAppLockSetupLower": "A lowercase letter", - "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passphrase.[br]Make sure to remember this passphrase as there is no way to recover it.", - "modalAppLockSetupSecondPlaceholder": "Repeat passphrase", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "A special character", - "modalAppLockSetupTitle": "Set app lock passphrase", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "An uppercase letter", "modalAppLockWipeConfirmConfirmButton": "Reset this client", "modalAppLockWipeConfirmGoBackButton": "Go back", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "حریم خصوصی", "preferencesAccountReadReceiptsCheckbox": "Read receipts", "preferencesAccountReadReceiptsDetail": "When this is off, you won’t be able to see read receipts from other people. This setting does not apply to group conversations.", - "preferencesAccountResetAppLockPassphrase": "Reset app lock passphrase", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "راه اندازی مجدد رمز عبور", - "preferencesAccountSetAppLockPassphrase": "Set app lock passphrase", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "در دسترس", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "تایید شده", "preferencesHeadline": "تنظیمات", "preferencesOptions": "گزینه‌ها", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "صدا‌های هشدار", "preferencesOptionsAudioAll": "همه", "preferencesOptionsAudioAllDetail": "همه صدا‌ها", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "پنهان کردن جزئیات", "preferencesOptionsNotificationsObfuscateMessage": "نمایش فرستنده", "preferencesOptionsNotificationsOn": "مشاهده فرستنده و پیام", - "preferencesOptionsPopular": "بر اساس تقاضاهای محبوب", "preferencesOptionsPreviewsSendCheckbox": "ایجاد پیش نمایش برای لینک های ارسالی شما", "preferencesOptionsPreviewsSendDetail": "پیش نمایش ها ممکن است هنوز برای لینک های ارسالی سایر افراد نشان داده شوند.", "preferencesOptionsUseDarkMode": "Dark theme", diff --git a/src/i18n/fi-FI.json b/src/i18n/fi-FI.json index e92e0b8c187..f8dab90035d 100644 --- a/src/i18n/fi-FI.json +++ b/src/i18n/fi-FI.json @@ -258,7 +258,7 @@ "clientManager.headline": "Poista laite", "clientManager.logout": "Cancel process", "clientManager.subhead": "Poista yksi laitteistasi aloittaaksesi Wiren käytön tässä laiteessa.", - "collectionSectionAudio": "Ääniviestit", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "Tiedostot", "collectionSectionImages": "Kuvat", "collectionSectionLinks": "Linkit", @@ -266,7 +266,7 @@ "connectionRequestConnect": "Yhdistä", "connectionRequestIgnore": "Hylkää", "conversationAssetDownloading": "Ladataan…", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "Lähetys epäonnistui", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "Ok", "modalAcknowledgeHeadline": "Something went wrong", "modalAppLockForgotGoBackButton": "Go back", - "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passphrase. If you have forgotten your passphrase, you can reset this client.", - "modalAppLockForgotTitle": "Forgot your app lock passphrase?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Reset this client", - "modalAppLockLockedError": "Wrong passphrase", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Access as new device", "modalAppLockLockedTitle": "Enter passcode to unlock {{brandName}}", "modalAppLockLockedUnlockButton": "Unlock", "modalAppLockPasscode": "Passcode", - "modalAppLockSetupAcceptButton": "Set passphrase", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Your organization needs to lock your app when {{brandName}} is not in use to keep the team safe.[br]Create a passlock to unlock {{brandName}}. Please, remember it, as it can not be recovered.", "modalAppLockSetupChangeTitle": "There was a change at {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "A digit", "modalAppLockSetupLong": "At least {{minPasswordLength}} characters long", "modalAppLockSetupLower": "A lowercase letter", - "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passphrase.[br]Make sure to remember this passphrase as there is no way to recover it.", - "modalAppLockSetupSecondPlaceholder": "Repeat passphrase", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "A special character", - "modalAppLockSetupTitle": "Set app lock passphrase", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "An uppercase letter", "modalAppLockWipeConfirmConfirmButton": "Reset this client", "modalAppLockWipeConfirmGoBackButton": "Go back", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "Tietosuoja", "preferencesAccountReadReceiptsCheckbox": "Lukukuittaukset", "preferencesAccountReadReceiptsDetail": "When this is off, you won’t be able to see read receipts from other people. This setting does not apply to group conversations.", - "preferencesAccountResetAppLockPassphrase": "Reset app lock passphrase", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "Vaihda salasana", - "preferencesAccountSetAppLockPassphrase": "Set app lock passphrase", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "Saatavilla", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "Vahvistettu", "preferencesHeadline": "Asetukset", "preferencesOptions": "Valinnat", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "Äänimerkit", "preferencesOptionsAudioAll": "Kaikki", "preferencesOptionsAudioAllDetail": "Kaikki äänet", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "Piilota yksityiskohdat", "preferencesOptionsNotificationsObfuscateMessage": "Näytä lähettäjä", "preferencesOptionsNotificationsOn": "Näytä lähettäjä ja viesti", - "preferencesOptionsPopular": "Yleisön pyynnöstä", "preferencesOptionsPreviewsSendCheckbox": "Luo esikatselut lähettämillesi linkeille", "preferencesOptionsPreviewsSendDetail": "Esikatselut saattavat silti näkyä muiden lähettämissä linkeissä.", "preferencesOptionsUseDarkMode": "Dark theme", diff --git a/src/i18n/fr-FR.json b/src/i18n/fr-FR.json index c4fbbff0abd..63f653ffe4c 100644 --- a/src/i18n/fr-FR.json +++ b/src/i18n/fr-FR.json @@ -258,7 +258,7 @@ "clientManager.headline": "Supprimer un appareil", "clientManager.logout": "Cancel process", "clientManager.subhead": "Supprimez un de vos autres appareils pour commencer à utiliser {brandName} sur celui-ci.", - "collectionSectionAudio": "Messages vocaux", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "Fichiers", "collectionSectionImages": "Images", "collectionSectionLinks": "Liens", @@ -266,7 +266,7 @@ "connectionRequestConnect": "Se connecter", "connectionRequestIgnore": "Ignorer", "conversationAssetDownloading": "Téléchargement en cours…", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "Échec de l’envoi", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "OK", "modalAcknowledgeHeadline": "Une erreur est survenue", "modalAppLockForgotGoBackButton": "Retour", - "modalAppLockForgotMessage": "Les données stockées sur cet appareil ne sont accessibles qu’avec votre code de verrouillage de l’application. Si vous avez oublié votre code, vous pouvez réinitialiser ce client.", - "modalAppLockForgotTitle": "Code de verrouillage de l’application oublié?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Réinitialiser ce client", - "modalAppLockLockedError": "Code erroné", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Accéder en tant que nouvel appareil", "modalAppLockLockedTitle": "Entrez le code d'accès pour déverrouiller {{brandName}}", "modalAppLockLockedUnlockButton": "Déverrouiller", "modalAppLockPasscode": "Code d'accès", - "modalAppLockSetupAcceptButton": "Nouveau code", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Votre organisation a besoin de verrouiller votre application lorsque {{brandName}} n'est pas utilisé pour s'assurer de la sécurité de l'équipe.[br]Créez un mot de passe pour déverrouiller {{brandName}}. Soyez sûr de vous en souvenir, car il ne peut pas être récupéré.", "modalAppLockSetupChangeTitle": "Il y a eu un changement à {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "Un chiffre", "modalAppLockSetupLong": "Au moins {{minPasswordLength}} caractères", "modalAppLockSetupLower": "Une lettre minuscule", - "modalAppLockSetupMessage": "Cette application se verrouillera automatiquement après un certain temps d’inactivité.[br]Pour déverrouiller l’application, vous devrez saisir ce code[br]. Veuillez vous assurer de retenir ce code, car il est impossible de le récupérer.", - "modalAppLockSetupSecondPlaceholder": "Veuillez entrer à nouveau votre code", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "Un caractère spécial", - "modalAppLockSetupTitle": "Définir le code de verrouillage de l’application", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "Une lettre majuscule", "modalAppLockWipeConfirmConfirmButton": "Réinitialiser ce client", "modalAppLockWipeConfirmGoBackButton": "Retour", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "Politique de confidentialité", "preferencesAccountReadReceiptsCheckbox": "Accusés de lecture", "preferencesAccountReadReceiptsDetail": "Si cette option est désactivée, vous ne pourrez pas voir les accusés de lecture d’autres destinataires.\nCette option ne s’applique pas aux conversations de groupe.", - "preferencesAccountResetAppLockPassphrase": "Réinitialiser le code de verrouillage de l’application", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "Réinitialiser le mot de passe", - "preferencesAccountSetAppLockPassphrase": "Définir le code de verrouillage de l’application", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "Disponible", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "Vérifié", "preferencesHeadline": "Préférences", "preferencesOptions": "Options", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "Alertes sonores", "preferencesOptionsAudioAll": "Toutes", "preferencesOptionsAudioAllDetail": "Tous les sons", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "Masquer les détails", "preferencesOptionsNotificationsObfuscateMessage": "Afficher l’expéditeur", "preferencesOptionsNotificationsOn": "Afficher l’expéditeur et le message", - "preferencesOptionsPopular": "À la demande générale", "preferencesOptionsPreviewsSendCheckbox": "Crée des aperçus pour les liens que vous envoyez", "preferencesOptionsPreviewsSendDetail": "Les aperçus pourront toujours s’afficher pour les liens d’autres contacts.", "preferencesOptionsUseDarkMode": "Thème sombre", diff --git a/src/i18n/ga-IE.json b/src/i18n/ga-IE.json index 32a841849e5..76549a91129 100644 --- a/src/i18n/ga-IE.json +++ b/src/i18n/ga-IE.json @@ -258,7 +258,7 @@ "clientManager.headline": "Remove a device", "clientManager.logout": "Cancel process", "clientManager.subhead": "Remove one of your other devices to start using {brandName} on this one.", - "collectionSectionAudio": "Audio messages", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "Files", "collectionSectionImages": "Pictures", "collectionSectionLinks": "Links", @@ -266,7 +266,7 @@ "connectionRequestConnect": "Connect", "connectionRequestIgnore": "Ignore", "conversationAssetDownloading": "Downloading…", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "Upload Failed", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "Ok", "modalAcknowledgeHeadline": "Something went wrong", "modalAppLockForgotGoBackButton": "Go back", - "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passphrase. If you have forgotten your passphrase, you can reset this client.", - "modalAppLockForgotTitle": "Forgot your app lock passphrase?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Reset this client", - "modalAppLockLockedError": "Wrong passphrase", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Access as new device", "modalAppLockLockedTitle": "Enter passcode to unlock {{brandName}}", "modalAppLockLockedUnlockButton": "Unlock", "modalAppLockPasscode": "Passcode", - "modalAppLockSetupAcceptButton": "Set passphrase", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Your organization needs to lock your app when {{brandName}} is not in use to keep the team safe.[br]Create a passlock to unlock {{brandName}}. Please, remember it, as it can not be recovered.", "modalAppLockSetupChangeTitle": "There was a change at {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "A digit", "modalAppLockSetupLong": "At least {{minPasswordLength}} characters long", "modalAppLockSetupLower": "A lowercase letter", - "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passphrase.[br]Make sure to remember this passphrase as there is no way to recover it.", - "modalAppLockSetupSecondPlaceholder": "Repeat passphrase", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "A special character", - "modalAppLockSetupTitle": "Set app lock passphrase", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "An uppercase letter", "modalAppLockWipeConfirmConfirmButton": "Reset this client", "modalAppLockWipeConfirmGoBackButton": "Go back", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "Privacy", "preferencesAccountReadReceiptsCheckbox": "Read receipts", "preferencesAccountReadReceiptsDetail": "When this is off, you won’t be able to see read receipts from other people. This setting does not apply to group conversations.", - "preferencesAccountResetAppLockPassphrase": "Reset app lock passphrase", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "Reset password", - "preferencesAccountSetAppLockPassphrase": "Set app lock passphrase", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "Available", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "Verified", "preferencesHeadline": "Preferences", "preferencesOptions": "Options", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "Sound alerts", "preferencesOptionsAudioAll": "All", "preferencesOptionsAudioAllDetail": "All sounds", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "Hide details", "preferencesOptionsNotificationsObfuscateMessage": "Show sender", "preferencesOptionsNotificationsOn": "Show sender and message", - "preferencesOptionsPopular": "By popular demand", "preferencesOptionsPreviewsSendCheckbox": "Create previews for links you send", "preferencesOptionsPreviewsSendDetail": "Previews may still be shown for links from other people.", "preferencesOptionsUseDarkMode": "Dark theme", diff --git a/src/i18n/he-IL.json b/src/i18n/he-IL.json index 32a841849e5..76549a91129 100644 --- a/src/i18n/he-IL.json +++ b/src/i18n/he-IL.json @@ -258,7 +258,7 @@ "clientManager.headline": "Remove a device", "clientManager.logout": "Cancel process", "clientManager.subhead": "Remove one of your other devices to start using {brandName} on this one.", - "collectionSectionAudio": "Audio messages", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "Files", "collectionSectionImages": "Pictures", "collectionSectionLinks": "Links", @@ -266,7 +266,7 @@ "connectionRequestConnect": "Connect", "connectionRequestIgnore": "Ignore", "conversationAssetDownloading": "Downloading…", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "Upload Failed", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "Ok", "modalAcknowledgeHeadline": "Something went wrong", "modalAppLockForgotGoBackButton": "Go back", - "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passphrase. If you have forgotten your passphrase, you can reset this client.", - "modalAppLockForgotTitle": "Forgot your app lock passphrase?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Reset this client", - "modalAppLockLockedError": "Wrong passphrase", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Access as new device", "modalAppLockLockedTitle": "Enter passcode to unlock {{brandName}}", "modalAppLockLockedUnlockButton": "Unlock", "modalAppLockPasscode": "Passcode", - "modalAppLockSetupAcceptButton": "Set passphrase", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Your organization needs to lock your app when {{brandName}} is not in use to keep the team safe.[br]Create a passlock to unlock {{brandName}}. Please, remember it, as it can not be recovered.", "modalAppLockSetupChangeTitle": "There was a change at {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "A digit", "modalAppLockSetupLong": "At least {{minPasswordLength}} characters long", "modalAppLockSetupLower": "A lowercase letter", - "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passphrase.[br]Make sure to remember this passphrase as there is no way to recover it.", - "modalAppLockSetupSecondPlaceholder": "Repeat passphrase", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "A special character", - "modalAppLockSetupTitle": "Set app lock passphrase", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "An uppercase letter", "modalAppLockWipeConfirmConfirmButton": "Reset this client", "modalAppLockWipeConfirmGoBackButton": "Go back", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "Privacy", "preferencesAccountReadReceiptsCheckbox": "Read receipts", "preferencesAccountReadReceiptsDetail": "When this is off, you won’t be able to see read receipts from other people. This setting does not apply to group conversations.", - "preferencesAccountResetAppLockPassphrase": "Reset app lock passphrase", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "Reset password", - "preferencesAccountSetAppLockPassphrase": "Set app lock passphrase", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "Available", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "Verified", "preferencesHeadline": "Preferences", "preferencesOptions": "Options", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "Sound alerts", "preferencesOptionsAudioAll": "All", "preferencesOptionsAudioAllDetail": "All sounds", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "Hide details", "preferencesOptionsNotificationsObfuscateMessage": "Show sender", "preferencesOptionsNotificationsOn": "Show sender and message", - "preferencesOptionsPopular": "By popular demand", "preferencesOptionsPreviewsSendCheckbox": "Create previews for links you send", "preferencesOptionsPreviewsSendDetail": "Previews may still be shown for links from other people.", "preferencesOptionsUseDarkMode": "Dark theme", diff --git a/src/i18n/hi-IN.json b/src/i18n/hi-IN.json index 49286f1736b..71b0b559c95 100644 --- a/src/i18n/hi-IN.json +++ b/src/i18n/hi-IN.json @@ -258,7 +258,7 @@ "clientManager.headline": "Remove a device", "clientManager.logout": "Cancel process", "clientManager.subhead": "Remove one of your other devices to start using {brandName} on this one.", - "collectionSectionAudio": "Audio messages", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "Files", "collectionSectionImages": "चित्र", "collectionSectionLinks": "Links", @@ -266,7 +266,7 @@ "connectionRequestConnect": "Connect", "connectionRequestIgnore": "Ignore", "conversationAssetDownloading": "डाउनलोड हो रहा है…", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "अपलोड असफल रहा", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "Ok", "modalAcknowledgeHeadline": "Something went wrong", "modalAppLockForgotGoBackButton": "Go back", - "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passphrase. If you have forgotten your passphrase, you can reset this client.", - "modalAppLockForgotTitle": "Forgot your app lock passphrase?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Reset this client", - "modalAppLockLockedError": "Wrong passphrase", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Access as new device", "modalAppLockLockedTitle": "Enter passcode to unlock {{brandName}}", "modalAppLockLockedUnlockButton": "Unlock", "modalAppLockPasscode": "Passcode", - "modalAppLockSetupAcceptButton": "Set passphrase", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Your organization needs to lock your app when {{brandName}} is not in use to keep the team safe.[br]Create a passlock to unlock {{brandName}}. Please, remember it, as it can not be recovered.", "modalAppLockSetupChangeTitle": "There was a change at {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "A digit", "modalAppLockSetupLong": "At least {{minPasswordLength}} characters long", "modalAppLockSetupLower": "A lowercase letter", - "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passphrase.[br]Make sure to remember this passphrase as there is no way to recover it.", - "modalAppLockSetupSecondPlaceholder": "Repeat passphrase", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "A special character", - "modalAppLockSetupTitle": "Set app lock passphrase", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "An uppercase letter", "modalAppLockWipeConfirmConfirmButton": "Reset this client", "modalAppLockWipeConfirmGoBackButton": "Go back", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "Privacy", "preferencesAccountReadReceiptsCheckbox": "Read receipts", "preferencesAccountReadReceiptsDetail": "When this is off, you won’t be able to see read receipts from other people. This setting does not apply to group conversations.", - "preferencesAccountResetAppLockPassphrase": "Reset app lock passphrase", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "Reset password", - "preferencesAccountSetAppLockPassphrase": "Set app lock passphrase", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "Available", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "Verified", "preferencesHeadline": "Preferences", "preferencesOptions": "Options", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "Sound alerts", "preferencesOptionsAudioAll": "All", "preferencesOptionsAudioAllDetail": "All sounds", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "Hide details", "preferencesOptionsNotificationsObfuscateMessage": "Show sender", "preferencesOptionsNotificationsOn": "Show sender and message", - "preferencesOptionsPopular": "By popular demand", "preferencesOptionsPreviewsSendCheckbox": "पूर्वावलोकन बनाएँ आपके द्वारा भेजे गए लिंकों के लिए", "preferencesOptionsPreviewsSendDetail": "पूर्वावलोकन अभी भी दिखाए जा सकते हैं अन्य लोगों के लिंक के लिए|", "preferencesOptionsUseDarkMode": "Dark theme", diff --git a/src/i18n/hr-HR.json b/src/i18n/hr-HR.json index 9890362cf55..06b9b54692e 100644 --- a/src/i18n/hr-HR.json +++ b/src/i18n/hr-HR.json @@ -258,7 +258,7 @@ "clientManager.headline": "Remove a device", "clientManager.logout": "Cancel process", "clientManager.subhead": "Uklonite jedan od Vaših ostalih uređaja kako bi ste počeli koristiti {brandName} na ovom.", - "collectionSectionAudio": "Audio poruke", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "Dokumenti", "collectionSectionImages": "Slike", "collectionSectionLinks": "Poveznice", @@ -266,7 +266,7 @@ "connectionRequestConnect": "Poveži se", "connectionRequestIgnore": "Ignoriraj", "conversationAssetDownloading": "Preuzimanje…", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "Prijenos neuspješan", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "U redu", "modalAcknowledgeHeadline": "Nešto je pošlo po zlu", "modalAppLockForgotGoBackButton": "Go back", - "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passphrase. If you have forgotten your passphrase, you can reset this client.", - "modalAppLockForgotTitle": "Forgot your app lock passphrase?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Reset this client", - "modalAppLockLockedError": "Wrong passphrase", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Access as new device", "modalAppLockLockedTitle": "Enter passcode to unlock {{brandName}}", "modalAppLockLockedUnlockButton": "Unlock", "modalAppLockPasscode": "Passcode", - "modalAppLockSetupAcceptButton": "Set passphrase", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Your organization needs to lock your app when {{brandName}} is not in use to keep the team safe.[br]Create a passlock to unlock {{brandName}}. Please, remember it, as it can not be recovered.", "modalAppLockSetupChangeTitle": "There was a change at {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "A digit", "modalAppLockSetupLong": "At least {{minPasswordLength}} characters long", "modalAppLockSetupLower": "A lowercase letter", - "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passphrase.[br]Make sure to remember this passphrase as there is no way to recover it.", - "modalAppLockSetupSecondPlaceholder": "Repeat passphrase", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "A special character", - "modalAppLockSetupTitle": "Set app lock passphrase", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "An uppercase letter", "modalAppLockWipeConfirmConfirmButton": "Reset this client", "modalAppLockWipeConfirmGoBackButton": "Go back", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "Privatnost", "preferencesAccountReadReceiptsCheckbox": "Potvrde o čitanju", "preferencesAccountReadReceiptsDetail": "Kada je opcija isključena, nećete moći vidjeti potvrde o čitanju poruka od drugih ljudi. Ova postavka se ne primjenjuje na grupne razgovore.", - "preferencesAccountResetAppLockPassphrase": "Reset app lock passphrase", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "Resetiraj lozinku", - "preferencesAccountSetAppLockPassphrase": "Set app lock passphrase", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "Dostupno", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "Verificirano", "preferencesHeadline": "Osobne postavke", "preferencesOptions": "Opcije", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "Zvukovi upozorenja", "preferencesOptionsAudioAll": "Svi", "preferencesOptionsAudioAllDetail": "Svi zvukovi", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "Sakrij detalje", "preferencesOptionsNotificationsObfuscateMessage": "Prikaži pošiljatelja", "preferencesOptionsNotificationsOn": "Prikaži pošiljatelja i poruku", - "preferencesOptionsPopular": "Zbog velike potražnje", "preferencesOptionsPreviewsSendCheckbox": "Stvori pretpreglede poveznica koje ste poslali", "preferencesOptionsPreviewsSendDetail": "Pretpregledi se još uvijek mogu pojavit za poveznice drugih ljudi.", "preferencesOptionsUseDarkMode": "Tamni motiv", diff --git a/src/i18n/hu-HU.json b/src/i18n/hu-HU.json index 4bb1f5b3c37..5f0f62662d8 100644 --- a/src/i18n/hu-HU.json +++ b/src/i18n/hu-HU.json @@ -258,7 +258,7 @@ "clientManager.headline": "Eszköz eltávolítása", "clientManager.logout": "Cancel process", "clientManager.subhead": "Ahhoz, hogy használni tudd a {brandName}-t ezen az eszközön, először távolítsd el azt valamelyik másikról.", - "collectionSectionAudio": "Hangüzenetek", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "Fájlok", "collectionSectionImages": "Képek", "collectionSectionLinks": "Hivatkozások", @@ -266,7 +266,7 @@ "connectionRequestConnect": "Csatlakozás", "connectionRequestIgnore": "Figyelmen kívül hagyás", "conversationAssetDownloading": "Letöltés…", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "A feltöltés sikertelen", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "Ok", "modalAcknowledgeHeadline": "Valami nem stimmel", "modalAppLockForgotGoBackButton": "Vissza", - "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passphrase. If you have forgotten your passphrase, you can reset this client.", - "modalAppLockForgotTitle": "Elfelejtetted az alkalmazászárad titkos jelszavát?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Reset this client", - "modalAppLockLockedError": "Hibás titkos jelszó", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Access as new device", "modalAppLockLockedTitle": "Enter passcode to unlock {{brandName}}", "modalAppLockLockedUnlockButton": "Feloldás", "modalAppLockPasscode": "Passcode", - "modalAppLockSetupAcceptButton": "Titkos jelszó beállítása", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Your organization needs to lock your app when {{brandName}} is not in use to keep the team safe.[br]Create a passlock to unlock {{brandName}}. Please, remember it, as it can not be recovered.", "modalAppLockSetupChangeTitle": "There was a change at {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "A digit", "modalAppLockSetupLong": "At least {{minPasswordLength}} characters long", "modalAppLockSetupLower": "A lowercase letter", - "modalAppLockSetupMessage": "Az alkalmazás egy bizonyos tétlenség után zárolja magát. [br] Az alkalmazás feloldásához be kell írnod a titkos jelszavad. [br] Ügyelj arra, hogy emlékezz erre a jelszóra, mivel nincs mód a helyreállításra.", - "modalAppLockSetupSecondPlaceholder": "Ismételd meg a titkos jelszavad", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "A special character", - "modalAppLockSetupTitle": "Állítsd be az alkalmazászár titkos jelszavát", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "An uppercase letter", "modalAppLockWipeConfirmConfirmButton": "Reset this client", "modalAppLockWipeConfirmGoBackButton": "Vissza", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "Adatvédelem", "preferencesAccountReadReceiptsCheckbox": "Olvasási visszaigazolás", "preferencesAccountReadReceiptsDetail": "Ha ez ki van kapcsolva, akkor nem fogod látni a másoktól származó olvasási visszaigazolást. Ez a beállítás nem vonatkozik a csoportos beszélgetésekre.", - "preferencesAccountResetAppLockPassphrase": "Az alkalmazászár titkos jelszavának visszaállítása", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "Jelszó visszaállítása", - "preferencesAccountSetAppLockPassphrase": "Set app lock passphrase", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "Elérhető", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "Ellenőrizve", "preferencesHeadline": "Beállítások", "preferencesOptions": "Beállítások", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "Hangjelzések", "preferencesOptionsAudioAll": "Minden", "preferencesOptionsAudioAllDetail": "Minden hang", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "Részletek elrejtése", "preferencesOptionsNotificationsObfuscateMessage": "Küldő mutatása", "preferencesOptionsNotificationsOn": "Küldő és üzenet mutatása", - "preferencesOptionsPopular": "Közkívánatra", "preferencesOptionsPreviewsSendCheckbox": "Előnézet készítése az elküldött hivatkozásokról", "preferencesOptionsPreviewsSendDetail": "A más partnerektől kapott hivatkozások előnézete továbbra is látható lesz.", "preferencesOptionsUseDarkMode": "Sötét téma", diff --git a/src/i18n/id-ID.json b/src/i18n/id-ID.json index 72a4a175b97..871691f6540 100644 --- a/src/i18n/id-ID.json +++ b/src/i18n/id-ID.json @@ -258,7 +258,7 @@ "clientManager.headline": "Remove a device", "clientManager.logout": "Cancel process", "clientManager.subhead": "Remove one of your other devices to start using {brandName} on this one.", - "collectionSectionAudio": "Pesan audio", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "File", "collectionSectionImages": "Foto-foto", "collectionSectionLinks": "Tautan", @@ -266,7 +266,7 @@ "connectionRequestConnect": "Hubungkan", "connectionRequestIgnore": "Abaikan", "conversationAssetDownloading": "Mengunduh…", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "Gagal mengunggah", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "Oke", "modalAcknowledgeHeadline": "Something went wrong", "modalAppLockForgotGoBackButton": "Go back", - "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passphrase. If you have forgotten your passphrase, you can reset this client.", - "modalAppLockForgotTitle": "Forgot your app lock passphrase?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Reset this client", - "modalAppLockLockedError": "Wrong passphrase", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Access as new device", "modalAppLockLockedTitle": "Enter passcode to unlock {{brandName}}", "modalAppLockLockedUnlockButton": "Unlock", "modalAppLockPasscode": "Passcode", - "modalAppLockSetupAcceptButton": "Set passphrase", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Your organization needs to lock your app when {{brandName}} is not in use to keep the team safe.[br]Create a passlock to unlock {{brandName}}. Please, remember it, as it can not be recovered.", "modalAppLockSetupChangeTitle": "There was a change at {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "A digit", "modalAppLockSetupLong": "At least {{minPasswordLength}} characters long", "modalAppLockSetupLower": "A lowercase letter", - "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passphrase.[br]Make sure to remember this passphrase as there is no way to recover it.", - "modalAppLockSetupSecondPlaceholder": "Repeat passphrase", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "A special character", - "modalAppLockSetupTitle": "Set app lock passphrase", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "An uppercase letter", "modalAppLockWipeConfirmConfirmButton": "Reset this client", "modalAppLockWipeConfirmGoBackButton": "Go back", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "Privasi", "preferencesAccountReadReceiptsCheckbox": "Read receipts", "preferencesAccountReadReceiptsDetail": "When this is off, you won’t be able to see read receipts from other people. This setting does not apply to group conversations.", - "preferencesAccountResetAppLockPassphrase": "Reset app lock passphrase", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "Buat ulang sandi", - "preferencesAccountSetAppLockPassphrase": "Set app lock passphrase", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "Tersedia", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "Terverifikasi", "preferencesHeadline": "Pengaturan", "preferencesOptions": "Pilihan", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "Suara peringatan", "preferencesOptionsAudioAll": "Semua", "preferencesOptionsAudioAllDetail": "Semua suara", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "Sembunyikan detail", "preferencesOptionsNotificationsObfuscateMessage": "Tampilkan pengirim", "preferencesOptionsNotificationsOn": "Tunjukkan pengirim dan pesannya", - "preferencesOptionsPopular": "Dengan permintaan populer", "preferencesOptionsPreviewsSendCheckbox": "Buat pratinjau untuk tautan yang Anda kirim", "preferencesOptionsPreviewsSendDetail": "Pratinjau masih dapat ditampilkan untuk tautan dari orang lain.", "preferencesOptionsUseDarkMode": "Dark theme", diff --git a/src/i18n/is-IS.json b/src/i18n/is-IS.json index 32a841849e5..76549a91129 100644 --- a/src/i18n/is-IS.json +++ b/src/i18n/is-IS.json @@ -258,7 +258,7 @@ "clientManager.headline": "Remove a device", "clientManager.logout": "Cancel process", "clientManager.subhead": "Remove one of your other devices to start using {brandName} on this one.", - "collectionSectionAudio": "Audio messages", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "Files", "collectionSectionImages": "Pictures", "collectionSectionLinks": "Links", @@ -266,7 +266,7 @@ "connectionRequestConnect": "Connect", "connectionRequestIgnore": "Ignore", "conversationAssetDownloading": "Downloading…", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "Upload Failed", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "Ok", "modalAcknowledgeHeadline": "Something went wrong", "modalAppLockForgotGoBackButton": "Go back", - "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passphrase. If you have forgotten your passphrase, you can reset this client.", - "modalAppLockForgotTitle": "Forgot your app lock passphrase?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Reset this client", - "modalAppLockLockedError": "Wrong passphrase", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Access as new device", "modalAppLockLockedTitle": "Enter passcode to unlock {{brandName}}", "modalAppLockLockedUnlockButton": "Unlock", "modalAppLockPasscode": "Passcode", - "modalAppLockSetupAcceptButton": "Set passphrase", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Your organization needs to lock your app when {{brandName}} is not in use to keep the team safe.[br]Create a passlock to unlock {{brandName}}. Please, remember it, as it can not be recovered.", "modalAppLockSetupChangeTitle": "There was a change at {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "A digit", "modalAppLockSetupLong": "At least {{minPasswordLength}} characters long", "modalAppLockSetupLower": "A lowercase letter", - "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passphrase.[br]Make sure to remember this passphrase as there is no way to recover it.", - "modalAppLockSetupSecondPlaceholder": "Repeat passphrase", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "A special character", - "modalAppLockSetupTitle": "Set app lock passphrase", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "An uppercase letter", "modalAppLockWipeConfirmConfirmButton": "Reset this client", "modalAppLockWipeConfirmGoBackButton": "Go back", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "Privacy", "preferencesAccountReadReceiptsCheckbox": "Read receipts", "preferencesAccountReadReceiptsDetail": "When this is off, you won’t be able to see read receipts from other people. This setting does not apply to group conversations.", - "preferencesAccountResetAppLockPassphrase": "Reset app lock passphrase", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "Reset password", - "preferencesAccountSetAppLockPassphrase": "Set app lock passphrase", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "Available", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "Verified", "preferencesHeadline": "Preferences", "preferencesOptions": "Options", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "Sound alerts", "preferencesOptionsAudioAll": "All", "preferencesOptionsAudioAllDetail": "All sounds", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "Hide details", "preferencesOptionsNotificationsObfuscateMessage": "Show sender", "preferencesOptionsNotificationsOn": "Show sender and message", - "preferencesOptionsPopular": "By popular demand", "preferencesOptionsPreviewsSendCheckbox": "Create previews for links you send", "preferencesOptionsPreviewsSendDetail": "Previews may still be shown for links from other people.", "preferencesOptionsUseDarkMode": "Dark theme", diff --git a/src/i18n/it-IT.json b/src/i18n/it-IT.json index 8d6facb0f34..97f6a33094e 100644 --- a/src/i18n/it-IT.json +++ b/src/i18n/it-IT.json @@ -258,7 +258,7 @@ "clientManager.headline": "Remove a device", "clientManager.logout": "Cancel process", "clientManager.subhead": "Rimuovi uno dei tuoi dispositivi per iniziare a utilizzare {brandName} su questo.", - "collectionSectionAudio": "Messaggi audio", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "Files", "collectionSectionImages": "Immagini", "collectionSectionLinks": "Link", @@ -266,7 +266,7 @@ "connectionRequestConnect": "Connetti", "connectionRequestIgnore": "Ignora", "conversationAssetDownloading": "Download in corso…", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "Caricamento fallito", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "Ok", "modalAcknowledgeHeadline": "Qualcosa è andato storto", "modalAppLockForgotGoBackButton": "Go back", - "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passphrase. If you have forgotten your passphrase, you can reset this client.", - "modalAppLockForgotTitle": "Forgot your app lock passphrase?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Reset this client", - "modalAppLockLockedError": "Wrong passphrase", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Access as new device", "modalAppLockLockedTitle": "Enter passcode to unlock {{brandName}}", "modalAppLockLockedUnlockButton": "Unlock", "modalAppLockPasscode": "Passcode", - "modalAppLockSetupAcceptButton": "Set passphrase", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Your organization needs to lock your app when {{brandName}} is not in use to keep the team safe.[br]Create a passlock to unlock {{brandName}}. Please, remember it, as it can not be recovered.", "modalAppLockSetupChangeTitle": "There was a change at {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "A digit", "modalAppLockSetupLong": "At least {{minPasswordLength}} characters long", "modalAppLockSetupLower": "A lowercase letter", - "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passphrase.[br]Make sure to remember this passphrase as there is no way to recover it.", - "modalAppLockSetupSecondPlaceholder": "Repeat passphrase", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "A special character", - "modalAppLockSetupTitle": "Set app lock passphrase", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "An uppercase letter", "modalAppLockWipeConfirmConfirmButton": "Reset this client", "modalAppLockWipeConfirmGoBackButton": "Go back", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "Sulla privacy", "preferencesAccountReadReceiptsCheckbox": "Read receipts", "preferencesAccountReadReceiptsDetail": "When this is off, you won’t be able to see read receipts from other people. This setting does not apply to group conversations.", - "preferencesAccountResetAppLockPassphrase": "Reset app lock passphrase", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "Reimposta la password", - "preferencesAccountSetAppLockPassphrase": "Set app lock passphrase", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "Disponibile", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "Verificato", "preferencesHeadline": "Preferenze", "preferencesOptions": "Opzioni", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "Suoni notifiche", "preferencesOptionsAudioAll": "Tutti", "preferencesOptionsAudioAllDetail": "Tutti i suoni", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "Nascondi dettagli", "preferencesOptionsNotificationsObfuscateMessage": "Mostra mittente", "preferencesOptionsNotificationsOn": "Mostra mittente e messaggio", - "preferencesOptionsPopular": "A grande richiesta", "preferencesOptionsPreviewsSendCheckbox": "Genera anteprime per i link inviati da te", "preferencesOptionsPreviewsSendDetail": "È possibile che vengano comunque mostrate delle anteprime per i link inviati dagli altri utenti.", "preferencesOptionsUseDarkMode": "Dark theme", diff --git a/src/i18n/ja-JP.json b/src/i18n/ja-JP.json index 37e346daa48..0b0e880f8aa 100644 --- a/src/i18n/ja-JP.json +++ b/src/i18n/ja-JP.json @@ -258,7 +258,7 @@ "clientManager.headline": "デバイスの削除", "clientManager.logout": "Cancel process", "clientManager.subhead": "このデバイスで {brandName} を使用するため、他のデバイスを 1 つ削除してください。", - "collectionSectionAudio": "音声メッセージ", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "ファイル", "collectionSectionImages": "写真", "collectionSectionLinks": "リンク", @@ -266,7 +266,7 @@ "connectionRequestConnect": "つながる", "connectionRequestIgnore": "無視", "conversationAssetDownloading": "ダウンロード中…", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "アップロードに失敗", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "Ok", "modalAcknowledgeHeadline": "何か問題があります", "modalAppLockForgotGoBackButton": "戻る", - "modalAppLockForgotMessage": "このデバイスに保存されたデータにアクセスするには、アプリロックパスフレーズが必要です。パスフレーズを忘れた場合は、このクライアントをリセットできます。", - "modalAppLockForgotTitle": "アプリをロックするパスフレーズをお忘れですか?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "このクライアントをリセットします", - "modalAppLockLockedError": "パスフレーズが間違っています", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Access as new device", "modalAppLockLockedTitle": "Enter passcode to unlock {{brandName}}", "modalAppLockLockedUnlockButton": "ロックを解除", "modalAppLockPasscode": "Passcode", - "modalAppLockSetupAcceptButton": "パスフレーズを設定", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Your organization needs to lock your app when {{brandName}} is not in use to keep the team safe.[br]Create a passlock to unlock {{brandName}}. Please, remember it, as it can not be recovered.", "modalAppLockSetupChangeTitle": "There was a change at {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "A digit", "modalAppLockSetupLong": "At least {{minPasswordLength}} characters long", "modalAppLockSetupLower": "A lowercase letter", - "modalAppLockSetupMessage": "一定時間操作しないとアプリは自動的にロックされます。[br]アプリケーションのロックを解除するには、このパスフレーズを入力する必要があります。[br]このパスフレーズは復元できないため、忘れないようにしてください。", - "modalAppLockSetupSecondPlaceholder": "パスフレーズを再入力", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "A special character", - "modalAppLockSetupTitle": "アプリロックパスフレーズを設定", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "An uppercase letter", "modalAppLockWipeConfirmConfirmButton": "このクライアントをリセットします", "modalAppLockWipeConfirmGoBackButton": "戻る", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "プライバシー", "preferencesAccountReadReceiptsCheckbox": "開封通知", "preferencesAccountReadReceiptsDetail": "オフの場合は、他の人の開封通知を見ることができません。この設定はグループ会議には適用されません。", - "preferencesAccountResetAppLockPassphrase": "アプリロックパスフレーズをリセット", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "パスワードをリセットする", - "preferencesAccountSetAppLockPassphrase": "Set app lock passphrase", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "利用できます", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "検証済み", "preferencesHeadline": "環境設定", "preferencesOptions": "オプション", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "サウンドアラート", "preferencesOptionsAudioAll": "すべて", "preferencesOptionsAudioAllDetail": "すべてのサウンド", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "詳細を隠す", "preferencesOptionsNotificationsObfuscateMessage": "送信者を表示する", "preferencesOptionsNotificationsOn": "送信者とメッセージを表示する", - "preferencesOptionsPopular": "人気の高い順", "preferencesOptionsPreviewsSendCheckbox": "プレビュー付きのリンクを送信する", "preferencesOptionsPreviewsSendDetail": "他ユーザーからのリンクがプレビュー表示されれます", "preferencesOptionsUseDarkMode": "ダークテーマ", diff --git a/src/i18n/lt-LT.json b/src/i18n/lt-LT.json index c590e0b41c8..35008c07ecd 100644 --- a/src/i18n/lt-LT.json +++ b/src/i18n/lt-LT.json @@ -258,7 +258,7 @@ "clientManager.headline": "Pašalinti įrenginį", "clientManager.logout": "Cancel process", "clientManager.subhead": "Norėdami pradėti naudoti {brandName} šiame įrenginyje, pašalinkite vieną iš savo kitų įrenginių.", - "collectionSectionAudio": "Garso žinutės", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "Failai", "collectionSectionImages": "Paveikslai", "collectionSectionLinks": "Nuorodos", @@ -266,7 +266,7 @@ "connectionRequestConnect": "Užmegzti kontaktą", "connectionRequestIgnore": "Nepaisyti", "conversationAssetDownloading": "Atsiunčiama…", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "Įkėlimas nepavyko", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "Gerai", "modalAcknowledgeHeadline": "Kažkas nutiko", "modalAppLockForgotGoBackButton": "Grįžti", - "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passphrase. If you have forgotten your passphrase, you can reset this client.", - "modalAppLockForgotTitle": "Forgot your app lock passphrase?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Reset this client", - "modalAppLockLockedError": "Neteisinga slaptafrazė", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Access as new device", "modalAppLockLockedTitle": "Enter passcode to unlock {{brandName}}", "modalAppLockLockedUnlockButton": "Atrakinti", "modalAppLockPasscode": "Passcode", - "modalAppLockSetupAcceptButton": "Nustatyti slaptafrazę", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Your organization needs to lock your app when {{brandName}} is not in use to keep the team safe.[br]Create a passlock to unlock {{brandName}}. Please, remember it, as it can not be recovered.", "modalAppLockSetupChangeTitle": "There was a change at {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "A digit", "modalAppLockSetupLong": "At least {{minPasswordLength}} characters long", "modalAppLockSetupLower": "A lowercase letter", - "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passphrase.[br]Make sure to remember this passphrase as there is no way to recover it.", - "modalAppLockSetupSecondPlaceholder": "Pakartokite slaptafrazę", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "A special character", - "modalAppLockSetupTitle": "Set app lock passphrase", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "An uppercase letter", "modalAppLockWipeConfirmConfirmButton": "Reset this client", "modalAppLockWipeConfirmGoBackButton": "Grįžti", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "Privatumas", "preferencesAccountReadReceiptsCheckbox": "Pranešimai apie skaitymą", "preferencesAccountReadReceiptsDetail": "Tai išjungus, nebegalėsite matyti ar kiti žmonės skaitė jusų žinutes. Šis nustatymas nėra taikomas grupės pokalbiams.", - "preferencesAccountResetAppLockPassphrase": "Reset app lock passphrase", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "Atstatyti slaptažodį", - "preferencesAccountSetAppLockPassphrase": "Set app lock passphrase", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "Prieinamas", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "Patvirtintas", "preferencesHeadline": "Nuostatos", "preferencesOptions": "Parinktys", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "Garso signalai", "preferencesOptionsAudioAll": "Visi", "preferencesOptionsAudioAllDetail": "Visi garsai", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "Slėpti išsamesnę informaciją", "preferencesOptionsNotificationsObfuscateMessage": "Rodyti siuntėją", "preferencesOptionsNotificationsOn": "Rodyti siuntėją ir žinutę", - "preferencesOptionsPopular": "Pagal populiarias užklausas", "preferencesOptionsPreviewsSendCheckbox": "Rodyti jūsų siunčiamų nuorodų peržiūras", "preferencesOptionsPreviewsSendDetail": "Kitų žmonių siunčiamų nuorodų peržiūros vis dar gali būti rodomos.", "preferencesOptionsUseDarkMode": "Tamsus apipavidalinimas", diff --git a/src/i18n/lv-LV.json b/src/i18n/lv-LV.json index 3cc584d9213..febd6286c47 100644 --- a/src/i18n/lv-LV.json +++ b/src/i18n/lv-LV.json @@ -258,7 +258,7 @@ "clientManager.headline": "Remove a device", "clientManager.logout": "Cancel process", "clientManager.subhead": "Remove one of your other devices to start using {brandName} on this one.", - "collectionSectionAudio": "Balss ziņas", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "Faili", "collectionSectionImages": "Attēli", "collectionSectionLinks": "Saites", @@ -266,7 +266,7 @@ "connectionRequestConnect": "Pievienoties", "connectionRequestIgnore": "Ignorēt", "conversationAssetDownloading": "Lejupielādē…", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "Augšupielāde Neizdevās", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "Labi", "modalAcknowledgeHeadline": "Something went wrong", "modalAppLockForgotGoBackButton": "Go back", - "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passphrase. If you have forgotten your passphrase, you can reset this client.", - "modalAppLockForgotTitle": "Forgot your app lock passphrase?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Reset this client", - "modalAppLockLockedError": "Wrong passphrase", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Access as new device", "modalAppLockLockedTitle": "Enter passcode to unlock {{brandName}}", "modalAppLockLockedUnlockButton": "Unlock", "modalAppLockPasscode": "Passcode", - "modalAppLockSetupAcceptButton": "Set passphrase", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Your organization needs to lock your app when {{brandName}} is not in use to keep the team safe.[br]Create a passlock to unlock {{brandName}}. Please, remember it, as it can not be recovered.", "modalAppLockSetupChangeTitle": "There was a change at {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "A digit", "modalAppLockSetupLong": "At least {{minPasswordLength}} characters long", "modalAppLockSetupLower": "A lowercase letter", - "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passphrase.[br]Make sure to remember this passphrase as there is no way to recover it.", - "modalAppLockSetupSecondPlaceholder": "Repeat passphrase", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "A special character", - "modalAppLockSetupTitle": "Set app lock passphrase", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "An uppercase letter", "modalAppLockWipeConfirmConfirmButton": "Reset this client", "modalAppLockWipeConfirmGoBackButton": "Go back", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "Privātums", "preferencesAccountReadReceiptsCheckbox": "Read receipts", "preferencesAccountReadReceiptsDetail": "When this is off, you won’t be able to see read receipts from other people. This setting does not apply to group conversations.", - "preferencesAccountResetAppLockPassphrase": "Reset app lock passphrase", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "Atiestatīt paroli", - "preferencesAccountSetAppLockPassphrase": "Set app lock passphrase", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "Pieejams", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "Pārbaudīts", "preferencesHeadline": "Iestatījumi", "preferencesOptions": "Iespējas", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "Sound alerts", "preferencesOptionsAudioAll": "Visas", "preferencesOptionsAudioAllDetail": "Visas skaņas", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "Hide details", "preferencesOptionsNotificationsObfuscateMessage": "Show sender", "preferencesOptionsNotificationsOn": "Show sender and message", - "preferencesOptionsPopular": "By popular demand", "preferencesOptionsPreviewsSendCheckbox": "Create previews for links you send", "preferencesOptionsPreviewsSendDetail": "Previews may still be shown for links from other people.", "preferencesOptionsUseDarkMode": "Dark theme", diff --git a/src/i18n/ms-MY.json b/src/i18n/ms-MY.json index 32a841849e5..76549a91129 100644 --- a/src/i18n/ms-MY.json +++ b/src/i18n/ms-MY.json @@ -258,7 +258,7 @@ "clientManager.headline": "Remove a device", "clientManager.logout": "Cancel process", "clientManager.subhead": "Remove one of your other devices to start using {brandName} on this one.", - "collectionSectionAudio": "Audio messages", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "Files", "collectionSectionImages": "Pictures", "collectionSectionLinks": "Links", @@ -266,7 +266,7 @@ "connectionRequestConnect": "Connect", "connectionRequestIgnore": "Ignore", "conversationAssetDownloading": "Downloading…", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "Upload Failed", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "Ok", "modalAcknowledgeHeadline": "Something went wrong", "modalAppLockForgotGoBackButton": "Go back", - "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passphrase. If you have forgotten your passphrase, you can reset this client.", - "modalAppLockForgotTitle": "Forgot your app lock passphrase?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Reset this client", - "modalAppLockLockedError": "Wrong passphrase", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Access as new device", "modalAppLockLockedTitle": "Enter passcode to unlock {{brandName}}", "modalAppLockLockedUnlockButton": "Unlock", "modalAppLockPasscode": "Passcode", - "modalAppLockSetupAcceptButton": "Set passphrase", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Your organization needs to lock your app when {{brandName}} is not in use to keep the team safe.[br]Create a passlock to unlock {{brandName}}. Please, remember it, as it can not be recovered.", "modalAppLockSetupChangeTitle": "There was a change at {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "A digit", "modalAppLockSetupLong": "At least {{minPasswordLength}} characters long", "modalAppLockSetupLower": "A lowercase letter", - "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passphrase.[br]Make sure to remember this passphrase as there is no way to recover it.", - "modalAppLockSetupSecondPlaceholder": "Repeat passphrase", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "A special character", - "modalAppLockSetupTitle": "Set app lock passphrase", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "An uppercase letter", "modalAppLockWipeConfirmConfirmButton": "Reset this client", "modalAppLockWipeConfirmGoBackButton": "Go back", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "Privacy", "preferencesAccountReadReceiptsCheckbox": "Read receipts", "preferencesAccountReadReceiptsDetail": "When this is off, you won’t be able to see read receipts from other people. This setting does not apply to group conversations.", - "preferencesAccountResetAppLockPassphrase": "Reset app lock passphrase", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "Reset password", - "preferencesAccountSetAppLockPassphrase": "Set app lock passphrase", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "Available", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "Verified", "preferencesHeadline": "Preferences", "preferencesOptions": "Options", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "Sound alerts", "preferencesOptionsAudioAll": "All", "preferencesOptionsAudioAllDetail": "All sounds", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "Hide details", "preferencesOptionsNotificationsObfuscateMessage": "Show sender", "preferencesOptionsNotificationsOn": "Show sender and message", - "preferencesOptionsPopular": "By popular demand", "preferencesOptionsPreviewsSendCheckbox": "Create previews for links you send", "preferencesOptionsPreviewsSendDetail": "Previews may still be shown for links from other people.", "preferencesOptionsUseDarkMode": "Dark theme", diff --git a/src/i18n/nl-NL.json b/src/i18n/nl-NL.json index 66a906a14e1..fce3d199fb8 100644 --- a/src/i18n/nl-NL.json +++ b/src/i18n/nl-NL.json @@ -258,7 +258,7 @@ "clientManager.headline": "Verwijder apparaat", "clientManager.logout": "Cancel process", "clientManager.subhead": "Verwijder een van je andere apparaten om {brandName} op dit apparaat te gebruiken.", - "collectionSectionAudio": "Audio berichten", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "Bestanden", "collectionSectionImages": "Afbeeldingen", "collectionSectionLinks": "Links", @@ -266,7 +266,7 @@ "connectionRequestConnect": "Verbind", "connectionRequestIgnore": "Negeer", "conversationAssetDownloading": "Downloaden…", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "Uploaden mislukt", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "Ok", "modalAcknowledgeHeadline": "Something went wrong", "modalAppLockForgotGoBackButton": "Go back", - "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passphrase. If you have forgotten your passphrase, you can reset this client.", - "modalAppLockForgotTitle": "Forgot your app lock passphrase?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Reset this client", - "modalAppLockLockedError": "Wrong passphrase", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Access as new device", "modalAppLockLockedTitle": "Enter passcode to unlock {{brandName}}", "modalAppLockLockedUnlockButton": "Unlock", "modalAppLockPasscode": "Passcode", - "modalAppLockSetupAcceptButton": "Set passphrase", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Your organization needs to lock your app when {{brandName}} is not in use to keep the team safe.[br]Create a passlock to unlock {{brandName}}. Please, remember it, as it can not be recovered.", "modalAppLockSetupChangeTitle": "There was a change at {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "A digit", "modalAppLockSetupLong": "At least {{minPasswordLength}} characters long", "modalAppLockSetupLower": "A lowercase letter", - "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passphrase.[br]Make sure to remember this passphrase as there is no way to recover it.", - "modalAppLockSetupSecondPlaceholder": "Repeat passphrase", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "A special character", - "modalAppLockSetupTitle": "Set app lock passphrase", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "An uppercase letter", "modalAppLockWipeConfirmConfirmButton": "Reset this client", "modalAppLockWipeConfirmGoBackButton": "Go back", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "Privacy", "preferencesAccountReadReceiptsCheckbox": "Read receipts", "preferencesAccountReadReceiptsDetail": "When this is off, you won’t be able to see read receipts from other people. This setting does not apply to group conversations.", - "preferencesAccountResetAppLockPassphrase": "Reset app lock passphrase", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "Reset wachtwoord", - "preferencesAccountSetAppLockPassphrase": "Set app lock passphrase", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "Beschikbaar", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "Geverifieerd", "preferencesHeadline": "Voorkeuren", "preferencesOptions": "Opties", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "Geluidswaarschuwing", "preferencesOptionsAudioAll": "Alle", "preferencesOptionsAudioAllDetail": "Alle Geluiden", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "Details verbergen", "preferencesOptionsNotificationsObfuscateMessage": "Toon zender", "preferencesOptionsNotificationsOn": "Toon verzender en bericht", - "preferencesOptionsPopular": "Op veler verzoek", "preferencesOptionsPreviewsSendCheckbox": "Maak linkvoorbeelden voor links die jij verstuurt", "preferencesOptionsPreviewsSendDetail": "Linkvoorbeelden kunnen nog steeds getoond worden voor links van andere mensen.", "preferencesOptionsUseDarkMode": "Dark theme", diff --git a/src/i18n/no-NO.json b/src/i18n/no-NO.json index 2b30bf9fcfc..e2536289e10 100644 --- a/src/i18n/no-NO.json +++ b/src/i18n/no-NO.json @@ -258,7 +258,7 @@ "clientManager.headline": "Remove a device", "clientManager.logout": "Cancel process", "clientManager.subhead": "Remove one of your other devices to start using {brandName} on this one.", - "collectionSectionAudio": "Lydmeldinger", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "Filer", "collectionSectionImages": "Bilder", "collectionSectionLinks": "Lenker", @@ -266,7 +266,7 @@ "connectionRequestConnect": "Koble til", "connectionRequestIgnore": "Ignorer", "conversationAssetDownloading": "Laster ned…", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "Opplastingen mislyktes", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "OK", "modalAcknowledgeHeadline": "Noe gikk galt", "modalAppLockForgotGoBackButton": "Go back", - "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passphrase. If you have forgotten your passphrase, you can reset this client.", - "modalAppLockForgotTitle": "Forgot your app lock passphrase?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Reset this client", - "modalAppLockLockedError": "Wrong passphrase", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Access as new device", "modalAppLockLockedTitle": "Enter passcode to unlock {{brandName}}", "modalAppLockLockedUnlockButton": "Unlock", "modalAppLockPasscode": "Passcode", - "modalAppLockSetupAcceptButton": "Set passphrase", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Your organization needs to lock your app when {{brandName}} is not in use to keep the team safe.[br]Create a passlock to unlock {{brandName}}. Please, remember it, as it can not be recovered.", "modalAppLockSetupChangeTitle": "There was a change at {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "A digit", "modalAppLockSetupLong": "At least {{minPasswordLength}} characters long", "modalAppLockSetupLower": "A lowercase letter", - "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passphrase.[br]Make sure to remember this passphrase as there is no way to recover it.", - "modalAppLockSetupSecondPlaceholder": "Repeat passphrase", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "A special character", - "modalAppLockSetupTitle": "Set app lock passphrase", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "An uppercase letter", "modalAppLockWipeConfirmConfirmButton": "Reset this client", "modalAppLockWipeConfirmGoBackButton": "Go back", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "Personvern", "preferencesAccountReadReceiptsCheckbox": "Read receipts", "preferencesAccountReadReceiptsDetail": "When this is off, you won’t be able to see read receipts from other people. This setting does not apply to group conversations.", - "preferencesAccountResetAppLockPassphrase": "Reset app lock passphrase", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "Reset password", - "preferencesAccountSetAppLockPassphrase": "Set app lock passphrase", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "Available", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "Bekreftet", "preferencesHeadline": "Innstillinger", "preferencesOptions": "Innstillinger", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "Sound alerts", "preferencesOptionsAudioAll": "All", "preferencesOptionsAudioAllDetail": "All sounds", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "Hide details", "preferencesOptionsNotificationsObfuscateMessage": "Show sender", "preferencesOptionsNotificationsOn": "Show sender and message", - "preferencesOptionsPopular": "By popular demand", "preferencesOptionsPreviewsSendCheckbox": "Create previews for links you send", "preferencesOptionsPreviewsSendDetail": "Previews may still be shown for links from other people.", "preferencesOptionsUseDarkMode": "Dark theme", diff --git a/src/i18n/pl-PL.json b/src/i18n/pl-PL.json index 195ccf3eaa4..9d32d0ceaf4 100644 --- a/src/i18n/pl-PL.json +++ b/src/i18n/pl-PL.json @@ -258,7 +258,7 @@ "clientManager.headline": "Remove a device", "clientManager.logout": "Cancel process", "clientManager.subhead": "Żeby dodać to urządzenie, usuń jedno z poprzednich.", - "collectionSectionAudio": "Wiadomości audio", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "Pliki", "collectionSectionImages": "Zdjęcia", "collectionSectionLinks": "Linki", @@ -266,7 +266,7 @@ "connectionRequestConnect": "Połącz", "connectionRequestIgnore": "Ignoruj", "conversationAssetDownloading": "Pobieranie…", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "Błąd wysyłania", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "OK", "modalAcknowledgeHeadline": "Coś poszło nie tak", "modalAppLockForgotGoBackButton": "Go back", - "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passphrase. If you have forgotten your passphrase, you can reset this client.", - "modalAppLockForgotTitle": "Forgot your app lock passphrase?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Reset this client", - "modalAppLockLockedError": "Wrong passphrase", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Access as new device", "modalAppLockLockedTitle": "Enter passcode to unlock {{brandName}}", "modalAppLockLockedUnlockButton": "Unlock", "modalAppLockPasscode": "Passcode", - "modalAppLockSetupAcceptButton": "Set passphrase", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Your organization needs to lock your app when {{brandName}} is not in use to keep the team safe.[br]Create a passlock to unlock {{brandName}}. Please, remember it, as it can not be recovered.", "modalAppLockSetupChangeTitle": "There was a change at {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "A digit", "modalAppLockSetupLong": "At least {{minPasswordLength}} characters long", "modalAppLockSetupLower": "A lowercase letter", - "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passphrase.[br]Make sure to remember this passphrase as there is no way to recover it.", - "modalAppLockSetupSecondPlaceholder": "Repeat passphrase", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "A special character", - "modalAppLockSetupTitle": "Set app lock passphrase", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "An uppercase letter", "modalAppLockWipeConfirmConfirmButton": "Reset this client", "modalAppLockWipeConfirmGoBackButton": "Go back", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "Prywatność", "preferencesAccountReadReceiptsCheckbox": "Read receipts", "preferencesAccountReadReceiptsDetail": "When this is off, you won’t be able to see read receipts from other people. This setting does not apply to group conversations.", - "preferencesAccountResetAppLockPassphrase": "Reset app lock passphrase", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "Zresetuj hasło", - "preferencesAccountSetAppLockPassphrase": "Set app lock passphrase", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "&Dostępny(a)", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "Zweryfikowano", "preferencesHeadline": "Ustawienia", "preferencesOptions": "Opcje", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "Alarm dźwiękowy", "preferencesOptionsAudioAll": "Wszystko", "preferencesOptionsAudioAllDetail": "Wszystkie dźwięki", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "Ukryj szczegóły", "preferencesOptionsNotificationsObfuscateMessage": "Pokaż nadawcę", "preferencesOptionsNotificationsOn": "Pokaż nadawcę i wiadomości", - "preferencesOptionsPopular": "Różne", "preferencesOptionsPreviewsSendCheckbox": "Twórz podglądy wysyłanych linków", "preferencesOptionsPreviewsSendDetail": "Podglądy linków otrzymanych od innych osób mogą być nadal wyświetlane.", "preferencesOptionsUseDarkMode": "Dark theme", diff --git a/src/i18n/pt-BR.json b/src/i18n/pt-BR.json index 2761f4a42b1..9ff599a7c29 100644 --- a/src/i18n/pt-BR.json +++ b/src/i18n/pt-BR.json @@ -258,7 +258,7 @@ "clientManager.headline": "Remover um dispositivo", "clientManager.logout": "Cancelar processo", "clientManager.subhead": "Remova um de seus outros dispositivos para começar a usar o {brandName} neste.", - "collectionSectionAudio": "Mensagens de áudio", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "Arquivos", "collectionSectionImages": "Imagens", "collectionSectionLinks": "Links", @@ -266,7 +266,7 @@ "connectionRequestConnect": "Conectar", "connectionRequestIgnore": "Ignorar", "conversationAssetDownloading": "Baixando…", - "conversationAssetFailedDecryptDownloading": "FALHA AO BAIXAR (NÃO FOI POSSÍVEL DESCRIPTOGRAFAR)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "FALHA AO BAIXAR (O HASH NÃO COMBINA)", "conversationAssetRestrictedAudioMessageHeadline": "Mensagem de áudio", "conversationAssetUploadFailed": "Falha ao enviar", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "Ok", "modalAcknowledgeHeadline": "Algo deu errado", "modalAppLockForgotGoBackButton": "Voltar", - "modalAppLockForgotMessage": "Os dados armazenados neste dispositivo só podem ser acessados com sua frase-chave do aplicativo. Se você esqueceu sua frase-chave, você pode redefinir este cliente.", - "modalAppLockForgotTitle": "Esqueceu sua frase-chave do aplicativo?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Redefina este cliente", - "modalAppLockLockedError": "Frase-chave incorreta", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Acesso como novo dispositivo", "modalAppLockLockedTitle": "Digite o código de acesso para desbloquear o {{brandName}}", "modalAppLockLockedUnlockButton": "Desbloquear", "modalAppLockPasscode": "Código de acesso", - "modalAppLockSetupAcceptButton": "Definir frase-chave", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Sua organização precisa bloquear seu aplicativo quando o {{brandName}} não estiver em uso para manter a equipe segura.[br]Crie uma senha de bloqueio para desbloquear o {{brandName}}. Por favor, não a esqueça, pois não poderá ser recuperada.", "modalAppLockSetupChangeTitle": "Houve uma mudança no {{brandName}}", - "modalAppLockSetupCloseBtn": "Fechar janela, definir frase-chave do aplicativo?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "Um dígito", "modalAppLockSetupLong": "Pelo menos {{minPasswordLength}} caracteres de comprimento", "modalAppLockSetupLower": "Uma letra minúscula", - "modalAppLockSetupMessage": "O aplicativo irá se bloquear após um certo tempo de inatividade.[br]Para desbloquear o aplicativo, você precisa inserir sua frase-chave.[br]Lembre-se da sua frase-chave, pois não há como recuperá-la.", - "modalAppLockSetupSecondPlaceholder": "Repita a frase-chave", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "Um caractere especial", - "modalAppLockSetupTitle": "Defina a frase-chave do aplicativo", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "Uma letra maiúscula", "modalAppLockWipeConfirmConfirmButton": "Redefinir este cliente", "modalAppLockWipeConfirmGoBackButton": "Voltar", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "Privacidade", "preferencesAccountReadReceiptsCheckbox": "Confirmação de leitura", "preferencesAccountReadReceiptsDetail": "Quando isso estiver desativado, você não poderá ver as confirmações de leitura de outras pessoas. Essa configuração não se aplica a conversas em grupo.", - "preferencesAccountResetAppLockPassphrase": "Redefinir senha de bloqueio do aplicativo", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "Redefinir senha", - "preferencesAccountSetAppLockPassphrase": "Definir frase-chave do aplicativo", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Equipe", "preferencesAccountUsername": "Nome de usuário", "preferencesAccountUsernameAvailable": "Disponível", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "Verificado", "preferencesHeadline": "Preferências", "preferencesOptions": "Opções", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "Alertas sonoros", "preferencesOptionsAudioAll": "Todos", "preferencesOptionsAudioAllDetail": "Todos os sons", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "Ocultar detalhes", "preferencesOptionsNotificationsObfuscateMessage": "Mostrar remetente", "preferencesOptionsNotificationsOn": "Mostrar o remetente e a mensagem", - "preferencesOptionsPopular": "Por demanda popular", "preferencesOptionsPreviewsSendCheckbox": "Criar pré-visualizações para links que você envia", "preferencesOptionsPreviewsSendDetail": "As pré-visualizações ainda podem ser mostradas para links de outras pessoas.", "preferencesOptionsUseDarkMode": "Tema escuro", diff --git a/src/i18n/pt-PT.json b/src/i18n/pt-PT.json index 3c4e9156a15..f89e3076458 100644 --- a/src/i18n/pt-PT.json +++ b/src/i18n/pt-PT.json @@ -258,7 +258,7 @@ "clientManager.headline": "Remove a device", "clientManager.logout": "Cancel process", "clientManager.subhead": "Remova um dos seus outros dispositivos para começar a usar o {brandName} neste.", - "collectionSectionAudio": "Mensagens de áudio", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "Ficheiros", "collectionSectionImages": "Fotografias", "collectionSectionLinks": "Ligações", @@ -266,7 +266,7 @@ "connectionRequestConnect": "Ligar", "connectionRequestIgnore": "Ignorar", "conversationAssetDownloading": "A descarregar…", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "O carregamento falhou", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "Ok", "modalAcknowledgeHeadline": "Something went wrong", "modalAppLockForgotGoBackButton": "Go back", - "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passphrase. If you have forgotten your passphrase, you can reset this client.", - "modalAppLockForgotTitle": "Forgot your app lock passphrase?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Reset this client", - "modalAppLockLockedError": "Wrong passphrase", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Access as new device", "modalAppLockLockedTitle": "Enter passcode to unlock {{brandName}}", "modalAppLockLockedUnlockButton": "Unlock", "modalAppLockPasscode": "Passcode", - "modalAppLockSetupAcceptButton": "Set passphrase", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Your organization needs to lock your app when {{brandName}} is not in use to keep the team safe.[br]Create a passlock to unlock {{brandName}}. Please, remember it, as it can not be recovered.", "modalAppLockSetupChangeTitle": "There was a change at {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "A digit", "modalAppLockSetupLong": "At least {{minPasswordLength}} characters long", "modalAppLockSetupLower": "A lowercase letter", - "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passphrase.[br]Make sure to remember this passphrase as there is no way to recover it.", - "modalAppLockSetupSecondPlaceholder": "Repeat passphrase", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "A special character", - "modalAppLockSetupTitle": "Set app lock passphrase", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "An uppercase letter", "modalAppLockWipeConfirmConfirmButton": "Reset this client", "modalAppLockWipeConfirmGoBackButton": "Go back", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "Privacidade", "preferencesAccountReadReceiptsCheckbox": "Read receipts", "preferencesAccountReadReceiptsDetail": "When this is off, you won’t be able to see read receipts from other people. This setting does not apply to group conversations.", - "preferencesAccountResetAppLockPassphrase": "Reset app lock passphrase", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "Alterar a palavra-passe", - "preferencesAccountSetAppLockPassphrase": "Set app lock passphrase", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "Disponível", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "Verificado", "preferencesHeadline": "Preferências", "preferencesOptions": "Opções", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "Alerta sonoro", "preferencesOptionsAudioAll": "Todos", "preferencesOptionsAudioAllDetail": "Todos os sons", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "Ocultar detalhes", "preferencesOptionsNotificationsObfuscateMessage": "Mostrar remetente", "preferencesOptionsNotificationsOn": "Mostrar o remetente e a mensagem", - "preferencesOptionsPopular": "A pedido popular", "preferencesOptionsPreviewsSendCheckbox": "Criar pré-visualizações para ligações que enviar", "preferencesOptionsPreviewsSendDetail": "Antevisões ainda podem mostradas para ligações de outras pessoas.", "preferencesOptionsUseDarkMode": "Dark theme", diff --git a/src/i18n/ro-RO.json b/src/i18n/ro-RO.json index 001cc6f26fb..dcf2de0c996 100644 --- a/src/i18n/ro-RO.json +++ b/src/i18n/ro-RO.json @@ -258,7 +258,7 @@ "clientManager.headline": "Remove a device", "clientManager.logout": "Cancel process", "clientManager.subhead": "Șterge unul din celelalte dispozitive pentru a folosi {brandName} pe acesta.", - "collectionSectionAudio": "Mesaje audio", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "Fișiere", "collectionSectionImages": "Imagini", "collectionSectionLinks": "Legături", @@ -266,7 +266,7 @@ "connectionRequestConnect": "Conectare", "connectionRequestIgnore": "Ignoră", "conversationAssetDownloading": "Se descarcă…", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "Încărcarea a eșuat", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "Ok", "modalAcknowledgeHeadline": "Ceva nu a mers bine", "modalAppLockForgotGoBackButton": "Go back", - "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passphrase. If you have forgotten your passphrase, you can reset this client.", - "modalAppLockForgotTitle": "Forgot your app lock passphrase?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Reset this client", - "modalAppLockLockedError": "Wrong passphrase", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Access as new device", "modalAppLockLockedTitle": "Enter passcode to unlock {{brandName}}", "modalAppLockLockedUnlockButton": "Unlock", "modalAppLockPasscode": "Passcode", - "modalAppLockSetupAcceptButton": "Set passphrase", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Your organization needs to lock your app when {{brandName}} is not in use to keep the team safe.[br]Create a passlock to unlock {{brandName}}. Please, remember it, as it can not be recovered.", "modalAppLockSetupChangeTitle": "There was a change at {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "A digit", "modalAppLockSetupLong": "At least {{minPasswordLength}} characters long", "modalAppLockSetupLower": "A lowercase letter", - "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passphrase.[br]Make sure to remember this passphrase as there is no way to recover it.", - "modalAppLockSetupSecondPlaceholder": "Repeat passphrase", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "A special character", - "modalAppLockSetupTitle": "Set app lock passphrase", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "An uppercase letter", "modalAppLockWipeConfirmConfirmButton": "Reset this client", "modalAppLockWipeConfirmGoBackButton": "Go back", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "Confidențialitate", "preferencesAccountReadReceiptsCheckbox": "Read receipts", "preferencesAccountReadReceiptsDetail": "When this is off, you won’t be able to see read receipts from other people. This setting does not apply to group conversations.", - "preferencesAccountResetAppLockPassphrase": "Reset app lock passphrase", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "Resetează parola", - "preferencesAccountSetAppLockPassphrase": "Set app lock passphrase", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "Disponibil", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "Verificat", "preferencesHeadline": "Preferințe", "preferencesOptions": "Opțiuni", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "Alerte sonore", "preferencesOptionsAudioAll": "Toate", "preferencesOptionsAudioAllDetail": "Toate sunetele", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "Ascunde detaliile", "preferencesOptionsNotificationsObfuscateMessage": "Arată expeditorul", "preferencesOptionsNotificationsOn": "Arată expeditorul și mesajul", - "preferencesOptionsPopular": "În urma cererilor populare", "preferencesOptionsPreviewsSendCheckbox": "Creează previzualizări pentru linkurile pe care le trimiți", "preferencesOptionsPreviewsSendDetail": "Previzualizările mai pot fi arătate pentru linkuri din partea altor persoane.", "preferencesOptionsUseDarkMode": "Dark theme", diff --git a/src/i18n/ru-RU.json b/src/i18n/ru-RU.json index c396ef43c10..19a64bd2f90 100644 --- a/src/i18n/ru-RU.json +++ b/src/i18n/ru-RU.json @@ -258,7 +258,7 @@ "clientManager.headline": "Удалить устройство", "clientManager.logout": "Отменить процесс", "clientManager.subhead": "Удалите одно из ваших устройств, чтобы начать использовать {brandName} на этом.", - "collectionSectionAudio": "Аудиосообщения", + "collectionSectionAudio": "Аудио", "collectionSectionFiles": "Файлы", "collectionSectionImages": "Изображения", "collectionSectionLinks": "Ссылки", @@ -266,7 +266,7 @@ "connectionRequestConnect": "Связаться", "connectionRequestIgnore": "Игнорировать", "conversationAssetDownloading": "Загрузка…", - "conversationAssetFailedDecryptDownloading": "ЗАГРУЗКА НЕ УДАЛАСЬ (НЕВОЗМОЖНО РАСШИФРОВАТЬ)", + "conversationAssetFailedDecryptDownloading": "ЗАГРУЗКА НЕ УДАЛАСЬ (файл не может быть расшифрован)", "conversationAssetFailedHashDownloading": "ЗАГРУЗКА НЕ УДАЛАСЬ (ХЭШ НЕ СОВПАДАЕТ)", "conversationAssetRestrictedAudioMessageHeadline": "Аудиосообщение", "conversationAssetUploadFailed": "Ошибка отправки", @@ -704,14 +704,14 @@ "modalAppLockSetupAcceptButton": "Установить код доступа", "modalAppLockSetupChangeMessage": "Для обеспечения безопасности команды ваша организация требует блокировки приложения, если {{brandName}} не используется.[br]Создайте код доступа для разблокировки {{brandName}}. Пожалуйста, запомните его, так как он не может быть восстановлен.", "modalAppLockSetupChangeTitle": "В {{brandName}} произошло изменение", - "modalAppLockSetupCloseBtn": "Закрыть окно 'Установить пароль для блокировки приложения?'", + "modalAppLockSetupCloseBtn": "Закрыть окно 'Установить код доступа к приложению?'", "modalAppLockSetupDigit": "Цифра", "modalAppLockSetupLong": "Не менее {{minPasswordLength}} символов", "modalAppLockSetupLower": "Строчная буква", "modalAppLockSetupMessage": "Приложение будет заблокировано спустя определенное время неактивности.[br]Для его разблокировки, вам понадобится ввести код доступа.[br]Убедитесь, что вы запомнили этот код, так как способа его восстановления не существует.", - "modalAppLockSetupSecondPlaceholder": "Повторите код доступа", + "modalAppLockSetupSecondPlaceholder": "Повторить код доступа", "modalAppLockSetupSpecial": "Специальный символ", - "modalAppLockSetupTitle": "Установить код доступа", + "modalAppLockSetupTitle": "Установить код доступа к приложению", "modalAppLockSetupUppercase": "Заглавная буква", "modalAppLockWipeConfirmConfirmButton": "Сбросить этого клиента", "modalAppLockWipeConfirmGoBackButton": "Вернуться", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "Верифицировано", "preferencesHeadline": "Параметры", "preferencesOptions": "Настройки", + "preferencesOptionsAppearance": "Внешний вид", + "preferencesOptionsAppearanceTextSize": "Размер текста", "preferencesOptionsAudio": "Звуковые уведомления", "preferencesOptionsAudioAll": "Все", "preferencesOptionsAudioAllDetail": "Все звуки", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "Скрыть детали", "preferencesOptionsNotificationsObfuscateMessage": "Показать отправителя", "preferencesOptionsNotificationsOn": "Показать отправителя и сообщение", - "preferencesOptionsPopular": "По многочисленным просьбам", "preferencesOptionsPreviewsSendCheckbox": "Показывать предпросмотр отправляемых вами ссылок", "preferencesOptionsPreviewsSendDetail": "Эта опция не влияет на предварительный просмотр ссылок от других пользователей.", "preferencesOptionsUseDarkMode": "Темная тема", diff --git a/src/i18n/si-LK.json b/src/i18n/si-LK.json index 32a841849e5..76549a91129 100644 --- a/src/i18n/si-LK.json +++ b/src/i18n/si-LK.json @@ -258,7 +258,7 @@ "clientManager.headline": "Remove a device", "clientManager.logout": "Cancel process", "clientManager.subhead": "Remove one of your other devices to start using {brandName} on this one.", - "collectionSectionAudio": "Audio messages", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "Files", "collectionSectionImages": "Pictures", "collectionSectionLinks": "Links", @@ -266,7 +266,7 @@ "connectionRequestConnect": "Connect", "connectionRequestIgnore": "Ignore", "conversationAssetDownloading": "Downloading…", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "Upload Failed", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "Ok", "modalAcknowledgeHeadline": "Something went wrong", "modalAppLockForgotGoBackButton": "Go back", - "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passphrase. If you have forgotten your passphrase, you can reset this client.", - "modalAppLockForgotTitle": "Forgot your app lock passphrase?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Reset this client", - "modalAppLockLockedError": "Wrong passphrase", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Access as new device", "modalAppLockLockedTitle": "Enter passcode to unlock {{brandName}}", "modalAppLockLockedUnlockButton": "Unlock", "modalAppLockPasscode": "Passcode", - "modalAppLockSetupAcceptButton": "Set passphrase", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Your organization needs to lock your app when {{brandName}} is not in use to keep the team safe.[br]Create a passlock to unlock {{brandName}}. Please, remember it, as it can not be recovered.", "modalAppLockSetupChangeTitle": "There was a change at {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "A digit", "modalAppLockSetupLong": "At least {{minPasswordLength}} characters long", "modalAppLockSetupLower": "A lowercase letter", - "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passphrase.[br]Make sure to remember this passphrase as there is no way to recover it.", - "modalAppLockSetupSecondPlaceholder": "Repeat passphrase", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "A special character", - "modalAppLockSetupTitle": "Set app lock passphrase", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "An uppercase letter", "modalAppLockWipeConfirmConfirmButton": "Reset this client", "modalAppLockWipeConfirmGoBackButton": "Go back", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "Privacy", "preferencesAccountReadReceiptsCheckbox": "Read receipts", "preferencesAccountReadReceiptsDetail": "When this is off, you won’t be able to see read receipts from other people. This setting does not apply to group conversations.", - "preferencesAccountResetAppLockPassphrase": "Reset app lock passphrase", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "Reset password", - "preferencesAccountSetAppLockPassphrase": "Set app lock passphrase", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "Available", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "Verified", "preferencesHeadline": "Preferences", "preferencesOptions": "Options", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "Sound alerts", "preferencesOptionsAudioAll": "All", "preferencesOptionsAudioAllDetail": "All sounds", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "Hide details", "preferencesOptionsNotificationsObfuscateMessage": "Show sender", "preferencesOptionsNotificationsOn": "Show sender and message", - "preferencesOptionsPopular": "By popular demand", "preferencesOptionsPreviewsSendCheckbox": "Create previews for links you send", "preferencesOptionsPreviewsSendDetail": "Previews may still be shown for links from other people.", "preferencesOptionsUseDarkMode": "Dark theme", diff --git a/src/i18n/sk-SK.json b/src/i18n/sk-SK.json index e78e54db69c..f9621de3e02 100644 --- a/src/i18n/sk-SK.json +++ b/src/i18n/sk-SK.json @@ -258,7 +258,7 @@ "clientManager.headline": "Remove a device", "clientManager.logout": "Cancel process", "clientManager.subhead": "Odstráňte jedno z Vašich iných zariadení aby ste mohli používať {brandName} na tomto.", - "collectionSectionAudio": "Zvukové správy", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "Súbory", "collectionSectionImages": "Obrázky", "collectionSectionLinks": "Odkazy", @@ -266,7 +266,7 @@ "connectionRequestConnect": "Pripojiť", "connectionRequestIgnore": "Ignorovať", "conversationAssetDownloading": "Sťahovanie…", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "Nahrávanie zlyhalo", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "OK", "modalAcknowledgeHeadline": "Something went wrong", "modalAppLockForgotGoBackButton": "Go back", - "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passphrase. If you have forgotten your passphrase, you can reset this client.", - "modalAppLockForgotTitle": "Forgot your app lock passphrase?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Reset this client", - "modalAppLockLockedError": "Wrong passphrase", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Access as new device", "modalAppLockLockedTitle": "Enter passcode to unlock {{brandName}}", "modalAppLockLockedUnlockButton": "Unlock", "modalAppLockPasscode": "Passcode", - "modalAppLockSetupAcceptButton": "Set passphrase", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Your organization needs to lock your app when {{brandName}} is not in use to keep the team safe.[br]Create a passlock to unlock {{brandName}}. Please, remember it, as it can not be recovered.", "modalAppLockSetupChangeTitle": "There was a change at {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "A digit", "modalAppLockSetupLong": "At least {{minPasswordLength}} characters long", "modalAppLockSetupLower": "A lowercase letter", - "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passphrase.[br]Make sure to remember this passphrase as there is no way to recover it.", - "modalAppLockSetupSecondPlaceholder": "Repeat passphrase", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "A special character", - "modalAppLockSetupTitle": "Set app lock passphrase", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "An uppercase letter", "modalAppLockWipeConfirmConfirmButton": "Reset this client", "modalAppLockWipeConfirmGoBackButton": "Go back", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "Súkromie", "preferencesAccountReadReceiptsCheckbox": "Read receipts", "preferencesAccountReadReceiptsDetail": "When this is off, you won’t be able to see read receipts from other people. This setting does not apply to group conversations.", - "preferencesAccountResetAppLockPassphrase": "Reset app lock passphrase", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "Reset hesla", - "preferencesAccountSetAppLockPassphrase": "Set app lock passphrase", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "Dostupné", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "Overený", "preferencesHeadline": "Nastavenia", "preferencesOptions": "Možnosti", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "Zvukové upozornenia", "preferencesOptionsAudioAll": "Všetko", "preferencesOptionsAudioAllDetail": "Všetky zvuky", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "Skryť detaily", "preferencesOptionsNotificationsObfuscateMessage": "Zobraziť odosielateľa", "preferencesOptionsNotificationsOn": "Zobraziť odosielateľa a správu", - "preferencesOptionsPopular": "Populárnej požiadavky", "preferencesOptionsPreviewsSendCheckbox": "Vytvoriť náhľady pre odkazy ktoré odosielate", "preferencesOptionsPreviewsSendDetail": "Náhľady môžu byť stále zobrazené pre odkazy od iných ľudí.", "preferencesOptionsUseDarkMode": "Dark theme", diff --git a/src/i18n/sl-SI.json b/src/i18n/sl-SI.json index 06da2c06980..f50f8e09413 100644 --- a/src/i18n/sl-SI.json +++ b/src/i18n/sl-SI.json @@ -258,7 +258,7 @@ "clientManager.headline": "Remove a device", "clientManager.logout": "Cancel process", "clientManager.subhead": "Odstranite eno izmed vaših naprav za začetek uporabe {brandName} na tej.", - "collectionSectionAudio": "Zvočna sporočila", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "Zbirke", "collectionSectionImages": "Slike", "collectionSectionLinks": "Povezave", @@ -266,7 +266,7 @@ "connectionRequestConnect": "Poveži", "connectionRequestIgnore": "Ignoriraj", "conversationAssetDownloading": "Prenašanje…", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "Nalaganje ni uspelo", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "V redu", "modalAcknowledgeHeadline": "Something went wrong", "modalAppLockForgotGoBackButton": "Go back", - "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passphrase. If you have forgotten your passphrase, you can reset this client.", - "modalAppLockForgotTitle": "Forgot your app lock passphrase?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Reset this client", - "modalAppLockLockedError": "Wrong passphrase", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Access as new device", "modalAppLockLockedTitle": "Enter passcode to unlock {{brandName}}", "modalAppLockLockedUnlockButton": "Unlock", "modalAppLockPasscode": "Passcode", - "modalAppLockSetupAcceptButton": "Set passphrase", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Your organization needs to lock your app when {{brandName}} is not in use to keep the team safe.[br]Create a passlock to unlock {{brandName}}. Please, remember it, as it can not be recovered.", "modalAppLockSetupChangeTitle": "There was a change at {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "A digit", "modalAppLockSetupLong": "At least {{minPasswordLength}} characters long", "modalAppLockSetupLower": "A lowercase letter", - "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passphrase.[br]Make sure to remember this passphrase as there is no way to recover it.", - "modalAppLockSetupSecondPlaceholder": "Repeat passphrase", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "A special character", - "modalAppLockSetupTitle": "Set app lock passphrase", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "An uppercase letter", "modalAppLockWipeConfirmConfirmButton": "Reset this client", "modalAppLockWipeConfirmGoBackButton": "Go back", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "Zasebnost", "preferencesAccountReadReceiptsCheckbox": "Read receipts", "preferencesAccountReadReceiptsDetail": "When this is off, you won’t be able to see read receipts from other people. This setting does not apply to group conversations.", - "preferencesAccountResetAppLockPassphrase": "Reset app lock passphrase", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "Resetiraj geslo", - "preferencesAccountSetAppLockPassphrase": "Set app lock passphrase", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "Na voljo", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "Preverjena", "preferencesHeadline": "Možnosti", "preferencesOptions": "Možnosti", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "Zvočna opozorila", "preferencesOptionsAudioAll": "Vsi", "preferencesOptionsAudioAllDetail": "Vsi zvoki", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "Skrij podrobnosti", "preferencesOptionsNotificationsObfuscateMessage": "Pokaži pošiljatelja", "preferencesOptionsNotificationsOn": "Pokaži pošiljatelja in sporočilo", - "preferencesOptionsPopular": "Po priljubljenosti", "preferencesOptionsPreviewsSendCheckbox": "Ustvari predogled za povezave, ki jih pošiljate", "preferencesOptionsPreviewsSendDetail": "Predogledi se še vedno lahko prikazujejo za povezave drugih ljudi.", "preferencesOptionsUseDarkMode": "Dark theme", diff --git a/src/i18n/sr-SP.json b/src/i18n/sr-SP.json index aec9dd2ede2..fb0da568fe0 100644 --- a/src/i18n/sr-SP.json +++ b/src/i18n/sr-SP.json @@ -258,7 +258,7 @@ "clientManager.headline": "Уклоните уређај", "clientManager.logout": "Cancel process", "clientManager.subhead": "Уклоните један од других уређаја да бисте започели са употребом {brandName} на овом.", - "collectionSectionAudio": "Звучне поруке", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "Фајлови", "collectionSectionImages": "Слике", "collectionSectionLinks": "Везе", @@ -266,7 +266,7 @@ "connectionRequestConnect": "Повежи се", "connectionRequestIgnore": "Игнориши", "conversationAssetDownloading": "Преузимам…", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "Неуспело отпремање", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "У реду", "modalAcknowledgeHeadline": "Нешто није у реду", "modalAppLockForgotGoBackButton": "Вратити се", - "modalAppLockForgotMessage": "Подаци похрањени на овом уређају могу се приступити само помоћу лозинке за закључавање апликације. Ако сте заборавили лозинку, можете ресетовати овог клијента.", - "modalAppLockForgotTitle": "Заборавили сте лозинку за закључавање апликације?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Ресетујте овог клијента", - "modalAppLockLockedError": "Погрешна лозинка", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Access as new device", "modalAppLockLockedTitle": "Enter passcode to unlock {{brandName}}", "modalAppLockLockedUnlockButton": "Откључај", "modalAppLockPasscode": "Passcode", - "modalAppLockSetupAcceptButton": "Подесите лозинку", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Your organization needs to lock your app when {{brandName}} is not in use to keep the team safe.[br]Create a passlock to unlock {{brandName}}. Please, remember it, as it can not be recovered.", "modalAppLockSetupChangeTitle": "There was a change at {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "A digit", "modalAppLockSetupLong": "At least {{minPasswordLength}} characters long", "modalAppLockSetupLower": "A lowercase letter", - "modalAppLockSetupMessage": "Апликација ће се закључати након одређеног времена неактивности .[br] Да бисте откључали апликацију, морате да унесете ову лозинку. [br] Обавезно упамтите ову лозинку јер не постоји начин да је вратите.", - "modalAppLockSetupSecondPlaceholder": "Понови лозинку", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "A special character", - "modalAppLockSetupTitle": "Подесите лозинку за закључавање апликације", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "An uppercase letter", "modalAppLockWipeConfirmConfirmButton": "Ресетујте овог клијента", "modalAppLockWipeConfirmGoBackButton": "Вратити се", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "Приватност", "preferencesAccountReadReceiptsCheckbox": "Прочитајте потврде", "preferencesAccountReadReceiptsDetail": "Када је ово искључено, нећете моћи да видите потврде од других људи. Ово подешавање се не односи на групне разговоре.", - "preferencesAccountResetAppLockPassphrase": "Ресетујте лозинку за закључавање апликације", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "Ресетуј лозинку", - "preferencesAccountSetAppLockPassphrase": "Set app lock passphrase", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "На располагању", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "Верификован", "preferencesHeadline": "Подешавања", "preferencesOptions": "Опције", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "Звучна обавештења", "preferencesOptionsAudioAll": "сва", "preferencesOptionsAudioAllDetail": "сви звуци", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "Сакриј детаље", "preferencesOptionsNotificationsObfuscateMessage": "Прикажи пошиљаоца", "preferencesOptionsNotificationsOn": "Прикажи пошиљаоца и поруку", - "preferencesOptionsPopular": "По захтеву корисника", "preferencesOptionsPreviewsSendCheckbox": "Креирајте прегледе за везе које пошаљете", "preferencesOptionsPreviewsSendDetail": "Прегледи могу да се прикажу за везе других људи.", "preferencesOptionsUseDarkMode": "Мрачна тема", diff --git a/src/i18n/sv-SE.json b/src/i18n/sv-SE.json index bc490b50e60..889ffd8b864 100644 --- a/src/i18n/sv-SE.json +++ b/src/i18n/sv-SE.json @@ -258,7 +258,7 @@ "clientManager.headline": "Remove a device", "clientManager.logout": "Cancel process", "clientManager.subhead": "Remove one of your other devices to start using {brandName} on this one.", - "collectionSectionAudio": "Ljudmeddelanden", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "Filer", "collectionSectionImages": "Bilder", "collectionSectionLinks": "Länkar", @@ -266,7 +266,7 @@ "connectionRequestConnect": "Anslut", "connectionRequestIgnore": "Ignorera", "conversationAssetDownloading": "Hämtar…", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "Uppladdning misslyckades", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "Ok", "modalAcknowledgeHeadline": "Någonting gick fel", "modalAppLockForgotGoBackButton": "Go back", - "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passphrase. If you have forgotten your passphrase, you can reset this client.", - "modalAppLockForgotTitle": "Forgot your app lock passphrase?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Reset this client", - "modalAppLockLockedError": "Wrong passphrase", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Access as new device", "modalAppLockLockedTitle": "Enter passcode to unlock {{brandName}}", "modalAppLockLockedUnlockButton": "Unlock", "modalAppLockPasscode": "Passcode", - "modalAppLockSetupAcceptButton": "Set passphrase", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Your organization needs to lock your app when {{brandName}} is not in use to keep the team safe.[br]Create a passlock to unlock {{brandName}}. Please, remember it, as it can not be recovered.", "modalAppLockSetupChangeTitle": "There was a change at {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "A digit", "modalAppLockSetupLong": "At least {{minPasswordLength}} characters long", "modalAppLockSetupLower": "A lowercase letter", - "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passphrase.[br]Make sure to remember this passphrase as there is no way to recover it.", - "modalAppLockSetupSecondPlaceholder": "Repeat passphrase", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "A special character", - "modalAppLockSetupTitle": "Set app lock passphrase", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "An uppercase letter", "modalAppLockWipeConfirmConfirmButton": "Reset this client", "modalAppLockWipeConfirmGoBackButton": "Go back", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "Sekretess", "preferencesAccountReadReceiptsCheckbox": "Read receipts", "preferencesAccountReadReceiptsDetail": "When this is off, you won’t be able to see read receipts from other people. This setting does not apply to group conversations.", - "preferencesAccountResetAppLockPassphrase": "Reset app lock passphrase", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "Återställ lösenord", - "preferencesAccountSetAppLockPassphrase": "Set app lock passphrase", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "Tillgängligt", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "Verifierad", "preferencesHeadline": "Inställningar", "preferencesOptions": "Alternativ", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "Ljud varningar", "preferencesOptionsAudioAll": "Allt", "preferencesOptionsAudioAllDetail": "Alla ljud", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "Dölj detaljer", "preferencesOptionsNotificationsObfuscateMessage": "Visa avsändare", "preferencesOptionsNotificationsOn": "Visa avsändare och meddelande", - "preferencesOptionsPopular": "By popular demand", "preferencesOptionsPreviewsSendCheckbox": "Skapa förhandsgranskningar för länkarna som du skickar", "preferencesOptionsPreviewsSendDetail": "Previews may still be shown for links from other people.", "preferencesOptionsUseDarkMode": "Dark theme", diff --git a/src/i18n/th-TH.json b/src/i18n/th-TH.json index 32a841849e5..76549a91129 100644 --- a/src/i18n/th-TH.json +++ b/src/i18n/th-TH.json @@ -258,7 +258,7 @@ "clientManager.headline": "Remove a device", "clientManager.logout": "Cancel process", "clientManager.subhead": "Remove one of your other devices to start using {brandName} on this one.", - "collectionSectionAudio": "Audio messages", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "Files", "collectionSectionImages": "Pictures", "collectionSectionLinks": "Links", @@ -266,7 +266,7 @@ "connectionRequestConnect": "Connect", "connectionRequestIgnore": "Ignore", "conversationAssetDownloading": "Downloading…", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "Upload Failed", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "Ok", "modalAcknowledgeHeadline": "Something went wrong", "modalAppLockForgotGoBackButton": "Go back", - "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passphrase. If you have forgotten your passphrase, you can reset this client.", - "modalAppLockForgotTitle": "Forgot your app lock passphrase?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Reset this client", - "modalAppLockLockedError": "Wrong passphrase", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Access as new device", "modalAppLockLockedTitle": "Enter passcode to unlock {{brandName}}", "modalAppLockLockedUnlockButton": "Unlock", "modalAppLockPasscode": "Passcode", - "modalAppLockSetupAcceptButton": "Set passphrase", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Your organization needs to lock your app when {{brandName}} is not in use to keep the team safe.[br]Create a passlock to unlock {{brandName}}. Please, remember it, as it can not be recovered.", "modalAppLockSetupChangeTitle": "There was a change at {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "A digit", "modalAppLockSetupLong": "At least {{minPasswordLength}} characters long", "modalAppLockSetupLower": "A lowercase letter", - "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passphrase.[br]Make sure to remember this passphrase as there is no way to recover it.", - "modalAppLockSetupSecondPlaceholder": "Repeat passphrase", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "A special character", - "modalAppLockSetupTitle": "Set app lock passphrase", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "An uppercase letter", "modalAppLockWipeConfirmConfirmButton": "Reset this client", "modalAppLockWipeConfirmGoBackButton": "Go back", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "Privacy", "preferencesAccountReadReceiptsCheckbox": "Read receipts", "preferencesAccountReadReceiptsDetail": "When this is off, you won’t be able to see read receipts from other people. This setting does not apply to group conversations.", - "preferencesAccountResetAppLockPassphrase": "Reset app lock passphrase", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "Reset password", - "preferencesAccountSetAppLockPassphrase": "Set app lock passphrase", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "Available", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "Verified", "preferencesHeadline": "Preferences", "preferencesOptions": "Options", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "Sound alerts", "preferencesOptionsAudioAll": "All", "preferencesOptionsAudioAllDetail": "All sounds", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "Hide details", "preferencesOptionsNotificationsObfuscateMessage": "Show sender", "preferencesOptionsNotificationsOn": "Show sender and message", - "preferencesOptionsPopular": "By popular demand", "preferencesOptionsPreviewsSendCheckbox": "Create previews for links you send", "preferencesOptionsPreviewsSendDetail": "Previews may still be shown for links from other people.", "preferencesOptionsUseDarkMode": "Dark theme", diff --git a/src/i18n/tr-TR.json b/src/i18n/tr-TR.json index e2850373050..22e69ab3d44 100644 --- a/src/i18n/tr-TR.json +++ b/src/i18n/tr-TR.json @@ -258,7 +258,7 @@ "clientManager.headline": "Cihazı kaldır", "clientManager.logout": "Cancel process", "clientManager.subhead": "Bu cihazda {brandName}’ı kullanabilmek için diğer cihazlarınızdan birini kaldırınız.", - "collectionSectionAudio": "Sesli mesajlar", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "Dosyalar", "collectionSectionImages": "Resimler", "collectionSectionLinks": "Bağlantılar", @@ -266,7 +266,7 @@ "connectionRequestConnect": "Bağlan", "connectionRequestIgnore": "Görmezden gel", "conversationAssetDownloading": "İndiriliyor…", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "Karşıya Yükleme Başarısız", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "Tamam", "modalAcknowledgeHeadline": "Bir şeyler yanlış gitti", "modalAppLockForgotGoBackButton": "Go back", - "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passphrase. If you have forgotten your passphrase, you can reset this client.", - "modalAppLockForgotTitle": "Forgot your app lock passphrase?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Reset this client", - "modalAppLockLockedError": "Wrong passphrase", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Access as new device", "modalAppLockLockedTitle": "Enter passcode to unlock {{brandName}}", "modalAppLockLockedUnlockButton": "Unlock", "modalAppLockPasscode": "Passcode", - "modalAppLockSetupAcceptButton": "Set passphrase", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Your organization needs to lock your app when {{brandName}} is not in use to keep the team safe.[br]Create a passlock to unlock {{brandName}}. Please, remember it, as it can not be recovered.", "modalAppLockSetupChangeTitle": "There was a change at {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "A digit", "modalAppLockSetupLong": "At least {{minPasswordLength}} characters long", "modalAppLockSetupLower": "A lowercase letter", - "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passphrase.[br]Make sure to remember this passphrase as there is no way to recover it.", - "modalAppLockSetupSecondPlaceholder": "Repeat passphrase", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "A special character", - "modalAppLockSetupTitle": "Set app lock passphrase", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "An uppercase letter", "modalAppLockWipeConfirmConfirmButton": "Reset this client", "modalAppLockWipeConfirmGoBackButton": "Go back", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "Gizlilik", "preferencesAccountReadReceiptsCheckbox": "Okundu bilgisi", "preferencesAccountReadReceiptsDetail": "Bu durum kapalıyken, başkalarından gelen okundu bilgilerini göremezsiniz. Bu ayar grup konuşmaları için geçerli değildir.", - "preferencesAccountResetAppLockPassphrase": "Reset app lock passphrase", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "Şifreni sıfırla", - "preferencesAccountSetAppLockPassphrase": "Set app lock passphrase", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "Alınabilir", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "Doğrulanmış", "preferencesHeadline": "Seçenekler", "preferencesOptions": "Ayarlar", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "Sesli uyarılar", "preferencesOptionsAudioAll": "Hepsi", "preferencesOptionsAudioAllDetail": "Tüm Sesler", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "Ayrıntıyı gizle", "preferencesOptionsNotificationsObfuscateMessage": "Göndereni göster", "preferencesOptionsNotificationsOn": "Göndereni ve mesajı göster", - "preferencesOptionsPopular": "Yoğun istek üzerine", "preferencesOptionsPreviewsSendCheckbox": "Gönderdiğin bağlantılar için ön izlemeler oluştur", "preferencesOptionsPreviewsSendDetail": "Ön izlemeler hala başkalarından gelen bağlantılar için görüntülenebilir olabilir.", "preferencesOptionsUseDarkMode": "Karanlık tema", diff --git a/src/i18n/uk-UA.json b/src/i18n/uk-UA.json index 0f9df39bd38..07b359d7e4f 100644 --- a/src/i18n/uk-UA.json +++ b/src/i18n/uk-UA.json @@ -258,7 +258,7 @@ "clientManager.headline": "Видалити пристрій", "clientManager.logout": "Cancel process", "clientManager.subhead": "Видаліть один з ваших пристроїв, щоб почати використовувати {brandName} на цьому.", - "collectionSectionAudio": "Аудіоповідомлення", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "Файли", "collectionSectionImages": "Картинки", "collectionSectionLinks": "Посилання", @@ -266,7 +266,7 @@ "connectionRequestConnect": "Додати до контактів", "connectionRequestIgnore": "Ігнорувати", "conversationAssetDownloading": "Скачування…", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "Не вдалося завантажити", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "ОК", "modalAcknowledgeHeadline": "Щось пішло не так", "modalAppLockForgotGoBackButton": "Повернутися назад", - "modalAppLockForgotMessage": "Дані, збережені на цьому пристрої, доступні тільки за допомогою ключової фрази. Якщо ви забудете свою ключову фразу, тоді допомогти зможе тільки повне скидання цього клієнта.", - "modalAppLockForgotTitle": "Ви забули ключову фразу фразу?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Виконати скидання клієнта до початкових налаштувань", - "modalAppLockLockedError": "Невірна ключова фраза", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Access as new device", "modalAppLockLockedTitle": "Enter passcode to unlock {{brandName}}", "modalAppLockLockedUnlockButton": "Розблокувати", "modalAppLockPasscode": "Passcode", - "modalAppLockSetupAcceptButton": "Встановити ключову фразу", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Your organization needs to lock your app when {{brandName}} is not in use to keep the team safe.[br]Create a passlock to unlock {{brandName}}. Please, remember it, as it can not be recovered.", "modalAppLockSetupChangeTitle": "There was a change at {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "A digit", "modalAppLockSetupLong": "At least {{minPasswordLength}} characters long", "modalAppLockSetupLower": "A lowercase letter", - "modalAppLockSetupMessage": "Додаток заблокується через певний час бездіяльності.[br]Щоб розблокувати його, вам потрібно буде ввести цю кодову фразу.[br]Переконайтеся, що запам'яли її, оскільки кодову фразу неможливо відновити.", - "modalAppLockSetupSecondPlaceholder": "Повторіть ключову фразу", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "A special character", - "modalAppLockSetupTitle": "Встановити ключову фразу", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "An uppercase letter", "modalAppLockWipeConfirmConfirmButton": "Виконати скидання клієнта до початкових налаштувань", "modalAppLockWipeConfirmGoBackButton": "Повернутися назад", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "Політики конфіденційності", "preferencesAccountReadReceiptsCheckbox": "Звіти про перегляд", "preferencesAccountReadReceiptsDetail": "Ви не зможете отримувати звіти про перегляд від інших учасників розмови, якщо дана опція вимкнена. Це налаштування не застосовується до групових розмов.", - "preferencesAccountResetAppLockPassphrase": "Виконати скидання ключової фрази", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "Виконати скидання паролю", - "preferencesAccountSetAppLockPassphrase": "Set app lock passphrase", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "Доступний", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "Верифікований", "preferencesHeadline": "Параметри", "preferencesOptions": "Налаштування", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "Звукові сповіщення", "preferencesOptionsAudioAll": "Всі", "preferencesOptionsAudioAllDetail": "Всі звуки", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "Приховати деталі", "preferencesOptionsNotificationsObfuscateMessage": "Показувати відправника", "preferencesOptionsNotificationsOn": "Показувати відправника та повідомлення", - "preferencesOptionsPopular": "У відповідь на численні прохання", "preferencesOptionsPreviewsSendCheckbox": "Генерувати попередній перегляд для надісланих лінків", "preferencesOptionsPreviewsSendDetail": "Дана опція не впливає на попередній перегляд лінків від інших людей.", "preferencesOptionsUseDarkMode": "Темна тема", diff --git a/src/i18n/uz-UZ.json b/src/i18n/uz-UZ.json index 32a841849e5..76549a91129 100644 --- a/src/i18n/uz-UZ.json +++ b/src/i18n/uz-UZ.json @@ -258,7 +258,7 @@ "clientManager.headline": "Remove a device", "clientManager.logout": "Cancel process", "clientManager.subhead": "Remove one of your other devices to start using {brandName} on this one.", - "collectionSectionAudio": "Audio messages", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "Files", "collectionSectionImages": "Pictures", "collectionSectionLinks": "Links", @@ -266,7 +266,7 @@ "connectionRequestConnect": "Connect", "connectionRequestIgnore": "Ignore", "conversationAssetDownloading": "Downloading…", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "Upload Failed", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "Ok", "modalAcknowledgeHeadline": "Something went wrong", "modalAppLockForgotGoBackButton": "Go back", - "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passphrase. If you have forgotten your passphrase, you can reset this client.", - "modalAppLockForgotTitle": "Forgot your app lock passphrase?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Reset this client", - "modalAppLockLockedError": "Wrong passphrase", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Access as new device", "modalAppLockLockedTitle": "Enter passcode to unlock {{brandName}}", "modalAppLockLockedUnlockButton": "Unlock", "modalAppLockPasscode": "Passcode", - "modalAppLockSetupAcceptButton": "Set passphrase", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Your organization needs to lock your app when {{brandName}} is not in use to keep the team safe.[br]Create a passlock to unlock {{brandName}}. Please, remember it, as it can not be recovered.", "modalAppLockSetupChangeTitle": "There was a change at {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "A digit", "modalAppLockSetupLong": "At least {{minPasswordLength}} characters long", "modalAppLockSetupLower": "A lowercase letter", - "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passphrase.[br]Make sure to remember this passphrase as there is no way to recover it.", - "modalAppLockSetupSecondPlaceholder": "Repeat passphrase", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "A special character", - "modalAppLockSetupTitle": "Set app lock passphrase", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "An uppercase letter", "modalAppLockWipeConfirmConfirmButton": "Reset this client", "modalAppLockWipeConfirmGoBackButton": "Go back", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "Privacy", "preferencesAccountReadReceiptsCheckbox": "Read receipts", "preferencesAccountReadReceiptsDetail": "When this is off, you won’t be able to see read receipts from other people. This setting does not apply to group conversations.", - "preferencesAccountResetAppLockPassphrase": "Reset app lock passphrase", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "Reset password", - "preferencesAccountSetAppLockPassphrase": "Set app lock passphrase", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "Available", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "Verified", "preferencesHeadline": "Preferences", "preferencesOptions": "Options", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "Sound alerts", "preferencesOptionsAudioAll": "All", "preferencesOptionsAudioAllDetail": "All sounds", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "Hide details", "preferencesOptionsNotificationsObfuscateMessage": "Show sender", "preferencesOptionsNotificationsOn": "Show sender and message", - "preferencesOptionsPopular": "By popular demand", "preferencesOptionsPreviewsSendCheckbox": "Create previews for links you send", "preferencesOptionsPreviewsSendDetail": "Previews may still be shown for links from other people.", "preferencesOptionsUseDarkMode": "Dark theme", diff --git a/src/i18n/vi-VN.json b/src/i18n/vi-VN.json index 32a841849e5..76549a91129 100644 --- a/src/i18n/vi-VN.json +++ b/src/i18n/vi-VN.json @@ -258,7 +258,7 @@ "clientManager.headline": "Remove a device", "clientManager.logout": "Cancel process", "clientManager.subhead": "Remove one of your other devices to start using {brandName} on this one.", - "collectionSectionAudio": "Audio messages", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "Files", "collectionSectionImages": "Pictures", "collectionSectionLinks": "Links", @@ -266,7 +266,7 @@ "connectionRequestConnect": "Connect", "connectionRequestIgnore": "Ignore", "conversationAssetDownloading": "Downloading…", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "Upload Failed", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "Ok", "modalAcknowledgeHeadline": "Something went wrong", "modalAppLockForgotGoBackButton": "Go back", - "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passphrase. If you have forgotten your passphrase, you can reset this client.", - "modalAppLockForgotTitle": "Forgot your app lock passphrase?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Reset this client", - "modalAppLockLockedError": "Wrong passphrase", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Access as new device", "modalAppLockLockedTitle": "Enter passcode to unlock {{brandName}}", "modalAppLockLockedUnlockButton": "Unlock", "modalAppLockPasscode": "Passcode", - "modalAppLockSetupAcceptButton": "Set passphrase", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Your organization needs to lock your app when {{brandName}} is not in use to keep the team safe.[br]Create a passlock to unlock {{brandName}}. Please, remember it, as it can not be recovered.", "modalAppLockSetupChangeTitle": "There was a change at {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "A digit", "modalAppLockSetupLong": "At least {{minPasswordLength}} characters long", "modalAppLockSetupLower": "A lowercase letter", - "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passphrase.[br]Make sure to remember this passphrase as there is no way to recover it.", - "modalAppLockSetupSecondPlaceholder": "Repeat passphrase", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "A special character", - "modalAppLockSetupTitle": "Set app lock passphrase", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "An uppercase letter", "modalAppLockWipeConfirmConfirmButton": "Reset this client", "modalAppLockWipeConfirmGoBackButton": "Go back", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "Privacy", "preferencesAccountReadReceiptsCheckbox": "Read receipts", "preferencesAccountReadReceiptsDetail": "When this is off, you won’t be able to see read receipts from other people. This setting does not apply to group conversations.", - "preferencesAccountResetAppLockPassphrase": "Reset app lock passphrase", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "Reset password", - "preferencesAccountSetAppLockPassphrase": "Set app lock passphrase", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "Available", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "Verified", "preferencesHeadline": "Preferences", "preferencesOptions": "Options", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "Sound alerts", "preferencesOptionsAudioAll": "All", "preferencesOptionsAudioAllDetail": "All sounds", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "Hide details", "preferencesOptionsNotificationsObfuscateMessage": "Show sender", "preferencesOptionsNotificationsOn": "Show sender and message", - "preferencesOptionsPopular": "By popular demand", "preferencesOptionsPreviewsSendCheckbox": "Create previews for links you send", "preferencesOptionsPreviewsSendDetail": "Previews may still be shown for links from other people.", "preferencesOptionsUseDarkMode": "Dark theme", diff --git a/src/i18n/zh-CN.json b/src/i18n/zh-CN.json index bcb646a7ff5..671c4933c71 100644 --- a/src/i18n/zh-CN.json +++ b/src/i18n/zh-CN.json @@ -258,7 +258,7 @@ "clientManager.headline": "移除设备", "clientManager.logout": "Cancel process", "clientManager.subhead": "在此设备上使用 {brandName} 之前请先移除一个设备。", - "collectionSectionAudio": "语音信息", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "文件", "collectionSectionImages": "图片", "collectionSectionLinks": "链接", @@ -266,7 +266,7 @@ "connectionRequestConnect": "好友请求", "connectionRequestIgnore": "忽略", "conversationAssetDownloading": "正在下载...", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "上传失败", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "确认", "modalAcknowledgeHeadline": "好像出了点问题。", "modalAppLockForgotGoBackButton": "Go back", - "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passphrase. If you have forgotten your passphrase, you can reset this client.", - "modalAppLockForgotTitle": "Forgot your app lock passphrase?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Reset this client", - "modalAppLockLockedError": "Wrong passphrase", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Access as new device", "modalAppLockLockedTitle": "Enter passcode to unlock {{brandName}}", "modalAppLockLockedUnlockButton": "解锁", "modalAppLockPasscode": "Passcode", - "modalAppLockSetupAcceptButton": "设置密码", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Your organization needs to lock your app when {{brandName}} is not in use to keep the team safe.[br]Create a passlock to unlock {{brandName}}. Please, remember it, as it can not be recovered.", "modalAppLockSetupChangeTitle": "There was a change at {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "A digit", "modalAppLockSetupLong": "At least {{minPasswordLength}} characters long", "modalAppLockSetupLower": "A lowercase letter", - "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passphrase.[br]Make sure to remember this passphrase as there is no way to recover it.", - "modalAppLockSetupSecondPlaceholder": "Repeat passphrase", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "A special character", - "modalAppLockSetupTitle": "Set app lock passphrase", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "An uppercase letter", "modalAppLockWipeConfirmConfirmButton": "Reset this client", "modalAppLockWipeConfirmGoBackButton": "返回", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "隐私", "preferencesAccountReadReceiptsCheckbox": "Read receipts", "preferencesAccountReadReceiptsDetail": "When this is off, you won’t be able to see read receipts from other people. This setting does not apply to group conversations.", - "preferencesAccountResetAppLockPassphrase": "Reset app lock passphrase", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "重置密码", - "preferencesAccountSetAppLockPassphrase": "Set app lock passphrase", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "可用", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "已验证", "preferencesHeadline": "选项", "preferencesOptions": "选项", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "音效通知", "preferencesOptionsAudioAll": "全部", "preferencesOptionsAudioAllDetail": "所有声音", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "隐藏详情", "preferencesOptionsNotificationsObfuscateMessage": "显示发件人", "preferencesOptionsNotificationsOn": "显示发件人和消息", - "preferencesOptionsPopular": "推荐选项", "preferencesOptionsPreviewsSendCheckbox": "为发送的链接创建图像预览", "preferencesOptionsPreviewsSendDetail": "链接的图像预览对其他人也是可见的。", "preferencesOptionsUseDarkMode": "Dark theme", diff --git a/src/i18n/zh-HK.json b/src/i18n/zh-HK.json index 32a841849e5..76549a91129 100644 --- a/src/i18n/zh-HK.json +++ b/src/i18n/zh-HK.json @@ -258,7 +258,7 @@ "clientManager.headline": "Remove a device", "clientManager.logout": "Cancel process", "clientManager.subhead": "Remove one of your other devices to start using {brandName} on this one.", - "collectionSectionAudio": "Audio messages", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "Files", "collectionSectionImages": "Pictures", "collectionSectionLinks": "Links", @@ -266,7 +266,7 @@ "connectionRequestConnect": "Connect", "connectionRequestIgnore": "Ignore", "conversationAssetDownloading": "Downloading…", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "Upload Failed", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "Ok", "modalAcknowledgeHeadline": "Something went wrong", "modalAppLockForgotGoBackButton": "Go back", - "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passphrase. If you have forgotten your passphrase, you can reset this client.", - "modalAppLockForgotTitle": "Forgot your app lock passphrase?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Reset this client", - "modalAppLockLockedError": "Wrong passphrase", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Access as new device", "modalAppLockLockedTitle": "Enter passcode to unlock {{brandName}}", "modalAppLockLockedUnlockButton": "Unlock", "modalAppLockPasscode": "Passcode", - "modalAppLockSetupAcceptButton": "Set passphrase", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Your organization needs to lock your app when {{brandName}} is not in use to keep the team safe.[br]Create a passlock to unlock {{brandName}}. Please, remember it, as it can not be recovered.", "modalAppLockSetupChangeTitle": "There was a change at {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "A digit", "modalAppLockSetupLong": "At least {{minPasswordLength}} characters long", "modalAppLockSetupLower": "A lowercase letter", - "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passphrase.[br]Make sure to remember this passphrase as there is no way to recover it.", - "modalAppLockSetupSecondPlaceholder": "Repeat passphrase", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "A special character", - "modalAppLockSetupTitle": "Set app lock passphrase", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "An uppercase letter", "modalAppLockWipeConfirmConfirmButton": "Reset this client", "modalAppLockWipeConfirmGoBackButton": "Go back", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "Privacy", "preferencesAccountReadReceiptsCheckbox": "Read receipts", "preferencesAccountReadReceiptsDetail": "When this is off, you won’t be able to see read receipts from other people. This setting does not apply to group conversations.", - "preferencesAccountResetAppLockPassphrase": "Reset app lock passphrase", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "Reset password", - "preferencesAccountSetAppLockPassphrase": "Set app lock passphrase", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "Available", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "Verified", "preferencesHeadline": "Preferences", "preferencesOptions": "Options", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "Sound alerts", "preferencesOptionsAudioAll": "All", "preferencesOptionsAudioAllDetail": "All sounds", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "Hide details", "preferencesOptionsNotificationsObfuscateMessage": "Show sender", "preferencesOptionsNotificationsOn": "Show sender and message", - "preferencesOptionsPopular": "By popular demand", "preferencesOptionsPreviewsSendCheckbox": "Create previews for links you send", "preferencesOptionsPreviewsSendDetail": "Previews may still be shown for links from other people.", "preferencesOptionsUseDarkMode": "Dark theme", diff --git a/src/i18n/zh-TW.json b/src/i18n/zh-TW.json index 96c47ee8bec..6ed2ee4f016 100644 --- a/src/i18n/zh-TW.json +++ b/src/i18n/zh-TW.json @@ -258,7 +258,7 @@ "clientManager.headline": "Remove a device", "clientManager.logout": "Cancel process", "clientManager.subhead": "Remove one of your other devices to start using {brandName} on this one.", - "collectionSectionAudio": "語音訊息", + "collectionSectionAudio": "Audio", "collectionSectionFiles": "檔案", "collectionSectionImages": "照片", "collectionSectionLinks": "連結:", @@ -266,7 +266,7 @@ "connectionRequestConnect": "連接", "connectionRequestIgnore": "忽略", "conversationAssetDownloading": "正在下載...", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (CANNOT DECRYPT)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audio message", "conversationAssetUploadFailed": "上傳失敗", @@ -693,25 +693,25 @@ "modalAcknowledgeAction": "確定", "modalAcknowledgeHeadline": "Something went wrong", "modalAppLockForgotGoBackButton": "Go back", - "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passphrase. If you have forgotten your passphrase, you can reset this client.", - "modalAppLockForgotTitle": "Forgot your app lock passphrase?", + "modalAppLockForgotMessage": "The data stored on this device can only be accessed with your app lock passcode. If you have forgotten your passcode, you can reset this client.", + "modalAppLockForgotTitle": "Forgot your app lock passcode?", "modalAppLockForgotWipeCTA": "Reset this client", - "modalAppLockLockedError": "Wrong passphrase", + "modalAppLockLockedError": "Wrong passcode", "modalAppLockLockedForgotCTA": "Access as new device", "modalAppLockLockedTitle": "Enter passcode to unlock {{brandName}}", "modalAppLockLockedUnlockButton": "Unlock", "modalAppLockPasscode": "Passcode", - "modalAppLockSetupAcceptButton": "Set passphrase", + "modalAppLockSetupAcceptButton": "Set passcode", "modalAppLockSetupChangeMessage": "Your organization needs to lock your app when {{brandName}} is not in use to keep the team safe.[br]Create a passlock to unlock {{brandName}}. Please, remember it, as it can not be recovered.", "modalAppLockSetupChangeTitle": "There was a change at {{brandName}}", - "modalAppLockSetupCloseBtn": "Close window, Set app lock passphrase?", + "modalAppLockSetupCloseBtn": "Close window, Set app lock passcode?", "modalAppLockSetupDigit": "A digit", "modalAppLockSetupLong": "At least {{minPasswordLength}} characters long", "modalAppLockSetupLower": "A lowercase letter", - "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passphrase.[br]Make sure to remember this passphrase as there is no way to recover it.", - "modalAppLockSetupSecondPlaceholder": "Repeat passphrase", + "modalAppLockSetupMessage": "The app will lock itself after a certain time of inactivity.[br]To unlock the app you need to enter this passcode.[br]Make sure to remember this passcode as there is no way to recover it.", + "modalAppLockSetupSecondPlaceholder": "Repeat passcode", "modalAppLockSetupSpecial": "A special character", - "modalAppLockSetupTitle": "Set app lock passphrase", + "modalAppLockSetupTitle": "Set app lock passcode", "modalAppLockSetupUppercase": "An uppercase letter", "modalAppLockWipeConfirmConfirmButton": "Reset this client", "modalAppLockWipeConfirmGoBackButton": "Go back", @@ -1000,9 +1000,9 @@ "preferencesAccountPrivacy": "隱私", "preferencesAccountReadReceiptsCheckbox": "Read receipts", "preferencesAccountReadReceiptsDetail": "When this is off, you won’t be able to see read receipts from other people. This setting does not apply to group conversations.", - "preferencesAccountResetAppLockPassphrase": "Reset app lock passphrase", + "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "重設密碼", - "preferencesAccountSetAppLockPassphrase": "Set app lock passphrase", + "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", "preferencesAccountTeam": "Team", "preferencesAccountUsername": "Username", "preferencesAccountUsernameAvailable": "可用", @@ -1030,6 +1030,8 @@ "preferencesDevicesVerification": "已驗證", "preferencesHeadline": "偏好設定", "preferencesOptions": "選項", + "preferencesOptionsAppearance": "Appearance", + "preferencesOptionsAppearanceTextSize": "Text size", "preferencesOptionsAudio": "音效通知", "preferencesOptionsAudioAll": "全部", "preferencesOptionsAudioAllDetail": "全部鈴聲", @@ -1062,7 +1064,6 @@ "preferencesOptionsNotificationsObfuscate": "隱藏詳細資訊", "preferencesOptionsNotificationsObfuscateMessage": "顯示寄件者", "preferencesOptionsNotificationsOn": "顯示寄件者和訊息", - "preferencesOptionsPopular": "推薦選項", "preferencesOptionsPreviewsSendCheckbox": "為您發送的網路連結產生預覽", "preferencesOptionsPreviewsSendDetail": "其他人發送的網路連結可能仍然會顯示預覽", "preferencesOptionsUseDarkMode": "Dark theme", From 1a7caddda2ffe5a0693b66f89b0e5db840037db7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Dec 2022 17:50:27 +0100 Subject: [PATCH 066/329] chore(deps-dev): Bump simple-git from 3.14.1 to 3.15.1 (#14226) Bumps [simple-git](https://github.com/steveukx/git-js/tree/HEAD/simple-git) from 3.14.1 to 3.15.1. - [Release notes](https://github.com/steveukx/git-js/releases) - [Changelog](https://github.com/steveukx/git-js/blob/main/simple-git/CHANGELOG.md) - [Commits](https://github.com/steveukx/git-js/commits/simple-git@3.15.1/simple-git) --- updated-dependencies: - dependency-name: simple-git dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] 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 69f28d0a94d..5ce14438d8a 100644 --- a/package.json +++ b/package.json @@ -158,7 +158,7 @@ "redux-devtools-extension": "2.13.9", "redux-mock-store": "1.5.4", "seedrandom": "^3.0.5", - "simple-git": "3.14.1", + "simple-git": "3.15.1", "sinon": "15.0.0", "snabbdom": "3.5.1", "style-loader": "^3.3.1", diff --git a/yarn.lock b/yarn.lock index 4852a619561..d449d991eeb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14633,14 +14633,14 @@ __metadata: languageName: node linkType: hard -"simple-git@npm:3.14.1": - version: 3.14.1 - resolution: "simple-git@npm:3.14.1" +"simple-git@npm:3.15.1": + version: 3.15.1 + resolution: "simple-git@npm:3.15.1" dependencies: "@kwsites/file-exists": ^1.1.1 "@kwsites/promise-deferred": ^1.1.1 debug: ^4.3.4 - checksum: f9d2282e1483f8f42325a7e80803389eb540101a88968bf9fd277c1eade8621d4c24dcf2677be5d611df8716934fb4c9676356052ac03e2fcec7517b4b922e8b + checksum: 2b97c3ba3c0709eded408013336bf1822be4171d965f3ab45f5bfc05ec690f9e488e11280bec8e2faa05d3039c4769e9d8197040a48dc5cf21cc5c7fa22fe77f languageName: node linkType: hard @@ -16768,7 +16768,7 @@ __metadata: redux-mock-store: 1.5.4 redux-thunk: 2.4.2 seedrandom: ^3.0.5 - simple-git: 3.14.1 + simple-git: 3.15.1 sinon: 15.0.0 snabbdom: 3.5.1 speakingurl: 14.0.1 From b0e3c67c3fb2eb91bbecc5e6156043f752294192 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Dec 2022 17:50:45 +0100 Subject: [PATCH 067/329] chore(deps-dev): Bump @formatjs/cli from 5.1.3 to 5.1.4 (#14224) Bumps [@formatjs/cli](https://github.com/formatjs/formatjs) from 5.1.3 to 5.1.4. - [Release notes](https://github.com/formatjs/formatjs/releases) - [Commits](https://github.com/formatjs/formatjs/compare/@formatjs/cli@5.1.3...@formatjs/cli@5.1.4) --- updated-dependencies: - dependency-name: "@formatjs/cli" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] 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 5ce14438d8a..792211933d3 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "@babel/preset-typescript": "7.18.6", "@emotion/eslint-plugin": "^11.10.0", "@faker-js/faker": "7.6.0", - "@formatjs/cli": "5.1.3", + "@formatjs/cli": "5.1.4", "@koush/wrtc": "0.5.3", "@testing-library/react": "13.4.0", "@types/adm-zip": "0.5.0", diff --git a/yarn.lock b/yarn.lock index d449d991eeb..50ba221ac3d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2301,9 +2301,9 @@ __metadata: languageName: node linkType: hard -"@formatjs/cli@npm:5.1.3": - version: 5.1.3 - resolution: "@formatjs/cli@npm:5.1.3" +"@formatjs/cli@npm:5.1.4": + version: 5.1.4 + resolution: "@formatjs/cli@npm:5.1.4" peerDependencies: "@vue/compiler-sfc": ^3.2.34 peerDependenciesMeta: @@ -2311,7 +2311,7 @@ __metadata: optional: true bin: formatjs: bin/formatjs - checksum: 28c38cfd4890712d5e80531bdd8ebcba80dde62da35f59fe6c24f7bb8209f94b0a26ca8c81e08e735d9f22db6a6bb2d7b279a838d6960698e5458094454dd0ce + checksum: 630d7d37c86824a6494946b1a1752927a6dfbc68fb2d0e505a08e9a2ba914f58bf05d34e1dfde38a59f712ea07dfc5a7c8633d6ac89e0eef77ff40b4b8591ffa languageName: node linkType: hard @@ -16629,7 +16629,7 @@ __metadata: "@emotion/eslint-plugin": ^11.10.0 "@emotion/react": 11.10.5 "@faker-js/faker": 7.6.0 - "@formatjs/cli": 5.1.3 + "@formatjs/cli": 5.1.4 "@koush/wrtc": 0.5.3 "@testing-library/react": 13.4.0 "@types/adm-zip": 0.5.0 From 372587aa6fcab990ce764a89eaef6e675a9bbe62 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Dec 2022 17:51:01 +0100 Subject: [PATCH 068/329] chore(deps-dev): Bump eslint-plugin-jest from 27.1.4 to 27.1.6 (#14229) Bumps [eslint-plugin-jest](https://github.com/jest-community/eslint-plugin-jest) from 27.1.4 to 27.1.6. - [Release notes](https://github.com/jest-community/eslint-plugin-jest/releases) - [Changelog](https://github.com/jest-community/eslint-plugin-jest/blob/main/CHANGELOG.md) - [Commits](https://github.com/jest-community/eslint-plugin-jest/compare/v27.1.4...v27.1.6) --- updated-dependencies: - dependency-name: eslint-plugin-jest dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] 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 792211933d3..5f32cf5cff8 100644 --- a/package.json +++ b/package.json @@ -117,7 +117,7 @@ "eslint-plugin-better-styled-components": "^1.1.2", "eslint-plugin-header": "^3.1.1", "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jest": "^27.1.4", + "eslint-plugin-jest": "^27.1.6", "eslint-plugin-jest-dom": "^4.0.2", "eslint-plugin-jsdoc": "^39.6.4", "eslint-plugin-jsx-a11y": "^6.6.1", diff --git a/yarn.lock b/yarn.lock index 50ba221ac3d..61b4e9b3dbb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7483,9 +7483,9 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-jest@npm:^27.1.4": - version: 27.1.4 - resolution: "eslint-plugin-jest@npm:27.1.4" +"eslint-plugin-jest@npm:^27.1.6": + version: 27.1.6 + resolution: "eslint-plugin-jest@npm:27.1.6" dependencies: "@typescript-eslint/utils": ^5.10.0 peerDependencies: @@ -7496,7 +7496,7 @@ __metadata: optional: true jest: optional: true - checksum: b7e3bf0dc092d9936ac1c10a0aceda411935c411c9323def109c2429ccf8486b3faead80fb769119add578c200352729ff96523bffec083f421e1b151404f642 + checksum: 5b1640b5d575f0d5e27da8ef8cb3110a29f94ebd50ae51edc5ea34c1054f5dcf305416865b2919ac424bc02c4569848bbe7fd2c86e7e1aff23e77f1ff9ef7dfd languageName: node linkType: hard @@ -16705,7 +16705,7 @@ __metadata: eslint-plugin-better-styled-components: ^1.1.2 eslint-plugin-header: ^3.1.1 eslint-plugin-import: ^2.26.0 - eslint-plugin-jest: ^27.1.4 + eslint-plugin-jest: ^27.1.6 eslint-plugin-jest-dom: ^4.0.2 eslint-plugin-jsdoc: ^39.6.4 eslint-plugin-jsx-a11y: ^6.6.1 From 808cfe3b0f0105d5aa8a8cbd20830064fd973d4d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Dec 2022 17:51:52 +0100 Subject: [PATCH 069/329] chore(deps-dev): Bump @typescript-eslint/parser from 5.42.1 to 5.45.0 (#14231) Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 5.42.1 to 5.45.0. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.45.0/packages/parser) --- updated-dependencies: - dependency-name: "@typescript-eslint/parser" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 5f32cf5cff8..0ee5111b92f 100644 --- a/package.json +++ b/package.json @@ -92,7 +92,7 @@ "@types/underscore": "1.11.4", "@types/webpack-env": "1.18.0", "@typescript-eslint/eslint-plugin": "^5.45.0", - "@typescript-eslint/parser": "^5.42.1", + "@typescript-eslint/parser": "^5.45.0", "@wireapp/copy-config": "2.0.3", "@wireapp/eslint-config": "2.1.0", "@wireapp/prettier-config": "0.5.2", diff --git a/yarn.lock b/yarn.lock index 61b4e9b3dbb..1927ec6d718 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3871,20 +3871,20 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/parser@npm:^5.42.1": - version: 5.42.1 - resolution: "@typescript-eslint/parser@npm:5.42.1" +"@typescript-eslint/parser@npm:^5.45.0": + version: 5.45.0 + resolution: "@typescript-eslint/parser@npm:5.45.0" dependencies: - "@typescript-eslint/scope-manager": 5.42.1 - "@typescript-eslint/types": 5.42.1 - "@typescript-eslint/typescript-estree": 5.42.1 + "@typescript-eslint/scope-manager": 5.45.0 + "@typescript-eslint/types": 5.45.0 + "@typescript-eslint/typescript-estree": 5.45.0 debug: ^4.3.4 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 7208a085102be5c569ac2be5799d05e080a9c0b9157ed3efa5d7eadb675185bddfa05f2f27e20c235910193a2bd835e5375fb9fc13561a6e20d110e444f37caa + checksum: b8ce3af72de3ff22bb206c3299e728d37a836dbe1f75bcb66ad3bb7962204174b7fff834992b84f0e661de507729c01c7ad71ad2707c217cccc3c0f798a9dc23 languageName: node linkType: hard @@ -16665,7 +16665,7 @@ __metadata: "@types/underscore": 1.11.4 "@types/webpack-env": 1.18.0 "@typescript-eslint/eslint-plugin": ^5.45.0 - "@typescript-eslint/parser": ^5.42.1 + "@typescript-eslint/parser": ^5.45.0 "@wireapp/antiscroll-2": 1.3.1 "@wireapp/avs": 8.2.17 "@wireapp/copy-config": 2.0.3 From 3970da323c452eb11ab9855a05e03b5abdbe9396 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Dec 2022 17:52:19 +0100 Subject: [PATCH 070/329] chore(deps-dev): Bump eslint-plugin-no-unsanitized from 4.0.1 to 4.0.2 (#14219) Bumps [eslint-plugin-no-unsanitized](https://github.com/mozilla/eslint-plugin-no-unsanitized) from 4.0.1 to 4.0.2. - [Release notes](https://github.com/mozilla/eslint-plugin-no-unsanitized/releases) - [Commits](https://github.com/mozilla/eslint-plugin-no-unsanitized/commits) --- updated-dependencies: - dependency-name: eslint-plugin-no-unsanitized dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] 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 0ee5111b92f..544dcc448d1 100644 --- a/package.json +++ b/package.json @@ -121,7 +121,7 @@ "eslint-plugin-jest-dom": "^4.0.2", "eslint-plugin-jsdoc": "^39.6.4", "eslint-plugin-jsx-a11y": "^6.6.1", - "eslint-plugin-no-unsanitized": "^4.0.1", + "eslint-plugin-no-unsanitized": "^4.0.2", "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-react": "^7.31.11", "eslint-plugin-react-hooks": "^4.6.0", diff --git a/yarn.lock b/yarn.lock index 1927ec6d718..737729fa666 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7540,12 +7540,12 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-no-unsanitized@npm:^4.0.1": - version: 4.0.1 - resolution: "eslint-plugin-no-unsanitized@npm:4.0.1" +"eslint-plugin-no-unsanitized@npm:^4.0.2": + version: 4.0.2 + resolution: "eslint-plugin-no-unsanitized@npm:4.0.2" peerDependencies: eslint: ^6 || ^7 || ^8 - checksum: 36ce4884c3578d0229e4f45a70422d4cc0b687ef8f2cac4a9d8065eefb1c5cf74cbbc028046fc18c72ba9e89ff0910ac794aea0c32a81d96ff240fef76b7d631 + checksum: c3b171c31ae436909899d1aeec52dbd331f653b989e5489a8fb4d756a5102720cb57c6e40e2cac5966195201f17684952a896734eec538d5f358892da11d6150 languageName: node linkType: hard @@ -16709,7 +16709,7 @@ __metadata: eslint-plugin-jest-dom: ^4.0.2 eslint-plugin-jsdoc: ^39.6.4 eslint-plugin-jsx-a11y: ^6.6.1 - eslint-plugin-no-unsanitized: ^4.0.1 + eslint-plugin-no-unsanitized: ^4.0.2 eslint-plugin-prettier: ^4.2.1 eslint-plugin-react: ^7.31.11 eslint-plugin-react-hooks: ^4.6.0 From 6f1fd83646fbd940b446d14c52b2af14cf2a3b76 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Dec 2022 17:52:41 +0100 Subject: [PATCH 071/329] chore(deps-dev): Bump webpack-dev-middleware from 5.3.3 to 6.0.1 (#14217) Bumps [webpack-dev-middleware](https://github.com/webpack/webpack-dev-middleware) from 5.3.3 to 6.0.1. - [Release notes](https://github.com/webpack/webpack-dev-middleware/releases) - [Changelog](https://github.com/webpack/webpack-dev-middleware/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack/webpack-dev-middleware/compare/v5.3.3...v6.0.1) --- updated-dependencies: - dependency-name: webpack-dev-middleware dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 26 +++++++++++++------------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index 544dcc448d1..3b51a7e8f51 100644 --- a/package.json +++ b/package.json @@ -173,7 +173,7 @@ "typescript": "^4.8.4", "webpack": "5.75.0", "webpack-cli": "5.0.0", - "webpack-dev-middleware": "5.3.3", + "webpack-dev-middleware": "6.0.1", "webpack-hot-middleware": "2.25.3", "workbox-webpack-plugin": "6.5.4" }, diff --git a/yarn.lock b/yarn.lock index 737729fa666..9b4e3d344f0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8312,7 +8312,7 @@ __metadata: languageName: node linkType: hard -"fs-monkey@npm:1.0.3": +"fs-monkey@npm:^1.0.3": version: 1.0.3 resolution: "fs-monkey@npm:1.0.3" checksum: cf50804833f9b88a476911ae911fe50f61a98d986df52f890bd97e7262796d023698cb2309fa9b74fdd8974f04315b648748a0a8ee059e7d5257b293bfc409c0 @@ -11434,12 +11434,12 @@ __metadata: languageName: node linkType: hard -"memfs@npm:^3.4.3": - version: 3.4.3 - resolution: "memfs@npm:3.4.3" +"memfs@npm:^3.4.12": + version: 3.4.12 + resolution: "memfs@npm:3.4.12" dependencies: - fs-monkey: 1.0.3 - checksum: c947ef46e2036524ba120cb42fa502fd75dae8d49d0c53e818d3d3780b9a3a47845705cd1cf51eec04c70f1db590ca7b6c7f78dd5a65883bb253fcedf86f412c + fs-monkey: ^1.0.3 + checksum: dab8dec1ae0b2a92e4d563ac86846047cd7aeb17cde4ad51da85cff6e580c32d12b886354527788e36eb75f733dd8edbaf174476b7cea73fed9c5a0e45a6b428 languageName: node linkType: hard @@ -16400,18 +16400,18 @@ __metadata: languageName: node linkType: hard -"webpack-dev-middleware@npm:5.3.3": - version: 5.3.3 - resolution: "webpack-dev-middleware@npm:5.3.3" +"webpack-dev-middleware@npm:6.0.1": + version: 6.0.1 + resolution: "webpack-dev-middleware@npm:6.0.1" dependencies: colorette: ^2.0.10 - memfs: ^3.4.3 + memfs: ^3.4.12 mime-types: ^2.1.31 range-parser: ^1.2.1 schema-utils: ^4.0.0 peerDependencies: - webpack: ^4.0.0 || ^5.0.0 - checksum: dd332cc6da61222c43d25e5a2155e23147b777ff32fdf1f1a0a8777020c072fbcef7756360ce2a13939c3f534c06b4992a4d659318c4a7fe2c0530b52a8a6621 + webpack: ^5.0.0 + checksum: eeda09cf4a1fdb09ee95f96ab657b0fb8d32c56f4d20c7f4499457a015c703f243711fda0b5bc0d103ff9e7c7b9b60568210a4c0fbd6d02361d09d2387cd723a languageName: node linkType: hard @@ -16789,7 +16789,7 @@ __metadata: uuidjs: 4.2.12 webpack: 5.75.0 webpack-cli: 5.0.0 - webpack-dev-middleware: 5.3.3 + webpack-dev-middleware: 6.0.1 webpack-hot-middleware: 2.25.3 webrtc-adapter: 6.4.8 workbox-webpack-plugin: 6.5.4 From 833e413466444d9a324ffe0b7dc40ee404043071 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Dec 2022 17:05:36 +0000 Subject: [PATCH 072/329] chore(deps-dev): Bump eslint-plugin-jest-dom from 4.0.2 to 4.0.3 (#14228) Bumps [eslint-plugin-jest-dom](https://github.com/testing-library/eslint-plugin-jest-dom) from 4.0.2 to 4.0.3. - [Release notes](https://github.com/testing-library/eslint-plugin-jest-dom/releases) - [Commits](https://github.com/testing-library/eslint-plugin-jest-dom/compare/v4.0.2...v4.0.3) --- updated-dependencies: - dependency-name: eslint-plugin-jest-dom dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] 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 3b51a7e8f51..5aa8d1da2ce 100644 --- a/package.json +++ b/package.json @@ -118,7 +118,7 @@ "eslint-plugin-header": "^3.1.1", "eslint-plugin-import": "^2.26.0", "eslint-plugin-jest": "^27.1.6", - "eslint-plugin-jest-dom": "^4.0.2", + "eslint-plugin-jest-dom": "^4.0.3", "eslint-plugin-jsdoc": "^39.6.4", "eslint-plugin-jsx-a11y": "^6.6.1", "eslint-plugin-no-unsanitized": "^4.0.2", diff --git a/yarn.lock b/yarn.lock index 9b4e3d344f0..b46ad5626fd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7470,16 +7470,16 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-jest-dom@npm:^4.0.2": - version: 4.0.2 - resolution: "eslint-plugin-jest-dom@npm:4.0.2" +"eslint-plugin-jest-dom@npm:^4.0.3": + version: 4.0.3 + resolution: "eslint-plugin-jest-dom@npm:4.0.3" dependencies: "@babel/runtime": ^7.16.3 "@testing-library/dom": ^8.11.1 requireindex: ^1.2.0 peerDependencies: eslint: ^6.8.0 || ^7.0.0 || ^8.0.0 - checksum: ff5fca8a4755560be0b9433c17b182274a7374701293c40f841c3ca86d430449c6fb5dea65c367021bcc0fa8f4ae5ecb1d99a63d6e9490c14c60ef7ec250ba34 + checksum: 6bd22cdb7951a4b9ac65fe35c7bdc3e44cbe09918c79535fa698433d730392ef7a6faa55468b84d1cb0303a923266a05d45e38278d88380b0f09c8e8f57c75de languageName: node linkType: hard @@ -16706,7 +16706,7 @@ __metadata: eslint-plugin-header: ^3.1.1 eslint-plugin-import: ^2.26.0 eslint-plugin-jest: ^27.1.6 - eslint-plugin-jest-dom: ^4.0.2 + eslint-plugin-jest-dom: ^4.0.3 eslint-plugin-jsdoc: ^39.6.4 eslint-plugin-jsx-a11y: ^6.6.1 eslint-plugin-no-unsanitized: ^4.0.2 From 151238ae61ce129d6cfc79c09589124d7b083b1f Mon Sep 17 00:00:00 2001 From: Virgile <78490891+V-Gira@users.noreply.github.com> Date: Fri, 2 Dec 2022 14:47:09 +0100 Subject: [PATCH 073/329] refactor: change div to p tag in message renderer [ACC-24] (#14238) --- .../Message/ContentMessage/asset/TextMessageRenderer.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer.tsx b/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer.tsx index 589b74eea56..6879739ae96 100644 --- a/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer.tsx +++ b/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer.tsx @@ -156,7 +156,7 @@ export const TextMessageRenderer: FC = ({ }, [onMessageClick, asset, isCurrentConversationFocused]); return ( -
    { if (isQuoteMsg) { containerRef.current = detectLongQuotes(element); From 66dbdcc637ab16d30ca2e18a8b99f5351640fa01 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 4 Dec 2022 15:11:45 +0000 Subject: [PATCH 074/329] chore(deps): Bump helmet from 6.0.0 to 6.0.1 in /server (#14240) Bumps [helmet](https://github.com/helmetjs/helmet) from 6.0.0 to 6.0.1. - [Release notes](https://github.com/helmetjs/helmet/releases) - [Changelog](https://github.com/helmetjs/helmet/blob/main/CHANGELOG.md) - [Commits](https://github.com/helmetjs/helmet/compare/v6.0.0...v6.0.1) --- updated-dependencies: - dependency-name: helmet dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] 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 ab995a29cf2..a019ccb7412 100644 --- a/server/package.json +++ b/server/package.json @@ -13,7 +13,7 @@ "fs-extra": "10.1.0", "geolite2": "1.3.0", "hbs": "4.2.0", - "helmet": "6.0.0", + "helmet": "6.0.1", "http-status-codes": "2.2.0", "logdown": "3.3.1", "maxmind": "4.3.8", diff --git a/server/yarn.lock b/server/yarn.lock index 5503a945701..2a233ce5333 100644 --- a/server/yarn.lock +++ b/server/yarn.lock @@ -3189,10 +3189,10 @@ __metadata: languageName: node linkType: hard -"helmet@npm:6.0.0": - version: 6.0.0 - resolution: "helmet@npm:6.0.0" - checksum: 0dd89d5b77c5334e815f5d29376ca7af0ad1007136890f497be3455d9ed9734e7203e13d9931e29e4d2ced1c632c52440f16d2a02e8835fd8b8706a12052faad +"helmet@npm:6.0.1": + version: 6.0.1 + resolution: "helmet@npm:6.0.1" + checksum: 1ca20d0b7888b6208130bbb50d183e68d53bb5fa0caead2106226d6d53216dfc893b4b5c07528304e342884f75d87702003b80884b065cb5dcbc705fb4a6ad52 languageName: node linkType: hard @@ -6481,7 +6481,7 @@ __metadata: fs-extra: 10.1.0 geolite2: 1.3.0 hbs: 4.2.0 - helmet: 6.0.0 + helmet: 6.0.1 http-status-codes: 2.2.0 jest: 27.5.1 logdown: 3.3.1 From e6e9a9dae51da8175af7e72a18e149a5e6d34e7c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 4 Dec 2022 15:12:48 +0000 Subject: [PATCH 075/329] chore(deps-dev): Bump lint-staged from 13.0.4 to 13.1.0 (#14241) Bumps [lint-staged](https://github.com/okonet/lint-staged) from 13.0.4 to 13.1.0. - [Release notes](https://github.com/okonet/lint-staged/releases) - [Commits](https://github.com/okonet/lint-staged/compare/v13.0.4...v13.1.0) --- updated-dependencies: - dependency-name: lint-staged dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] 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 5aa8d1da2ce..9bd6797e615 100644 --- a/package.json +++ b/package.json @@ -143,7 +143,7 @@ "jsdom-worker": "0.3.0", "less": "3.13.1", "less-loader": "^11.1.0", - "lint-staged": "13.0.4", + "lint-staged": "13.1.0", "node-fetch": "2.6.7", "os-browserify": "0.3.0", "path-browserify": "1.0.1", diff --git a/yarn.lock b/yarn.lock index b46ad5626fd..2968ee55ffd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10948,9 +10948,9 @@ __metadata: languageName: node linkType: hard -"lint-staged@npm:13.0.4": - version: 13.0.4 - resolution: "lint-staged@npm:13.0.4" +"lint-staged@npm:13.1.0": + version: 13.1.0 + resolution: "lint-staged@npm:13.1.0" dependencies: cli-truncate: ^3.1.0 colorette: ^2.0.19 @@ -10967,7 +10967,7 @@ __metadata: yaml: ^2.1.3 bin: lint-staged: bin/lint-staged.js - checksum: 4676172df5dc734a7f409ad786a72d39bd2239de8b2e5eb1d99eaa751479f60f7b4ef85c8508698855b51b125a512f395ac6a3c7d2d57de8e8221e0aaaab6f4f + checksum: adf20c4ca9285c4a93b06598b970d71b04cfe58a1a4c9006f753b83e02c1c622d1866c32a4f1e7e29a98091c501eac3345f7678af247b4f97d5be88b3d8727c1 languageName: node linkType: hard @@ -16739,7 +16739,7 @@ __metadata: less: 3.13.1 less-loader: ^11.1.0 linkify-it: 4.0.1 - lint-staged: 13.0.4 + lint-staged: 13.1.0 long: 5.2.1 markdown-it: 13.0.1 murmurhash: 2.0.1 From f35078fd6c184b1c2e36ffec04fd5c91011ad035 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 4 Dec 2022 15:13:12 +0000 Subject: [PATCH 076/329] chore(deps-dev): Bump @types/node from 18.11.9 to 18.11.10 (#14242) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 18.11.9 to 18.11.10. - [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] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 9bd6797e615..caf36f36009 100644 --- a/package.json +++ b/package.json @@ -76,7 +76,7 @@ "@types/libsodium-wrappers-sumo": "0.7.5", "@types/linkify-it": "3.0.2", "@types/markdown-it": "12.2.3", - "@types/node": "^18.11.9", + "@types/node": "^18.11.10", "@types/open-graph": "0.2.2", "@types/platform": "1.3.4", "@types/prettier": "^2.7.1", diff --git a/yarn.lock b/yarn.lock index 2968ee55ffd..b9fabde94dd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3588,7 +3588,7 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*, @types/node@npm:>=13.7.0, @types/node@npm:^18.11.9": +"@types/node@npm:*, @types/node@npm:>=13.7.0": version: 18.11.9 resolution: "@types/node@npm:18.11.9" checksum: cc0aae109e9b7adefc32eecb838d6fad931663bb06484b5e9cbbbf74865c721b03d16fd8d74ad90e31dbe093d956a7c2c306ba5429ba0c00f3f7505103d7a496 @@ -3602,6 +3602,13 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:^18.11.10": + version: 18.11.10 + resolution: "@types/node@npm:18.11.10" + checksum: 0f60cb090b2ee91fcd3dc4311bc1ed7889b92f14644c0069f100776f86474c12eebbcc6c75bc0d7d96b975a103b4d5d6b3c22b4e88bea6e7f4e2b1bb0daf5ea8 + languageName: node + linkType: hard + "@types/node@npm:~14": version: 14.18.21 resolution: "@types/node@npm:14.18.21" @@ -16649,7 +16656,7 @@ __metadata: "@types/libsodium-wrappers-sumo": 0.7.5 "@types/linkify-it": 3.0.2 "@types/markdown-it": 12.2.3 - "@types/node": ^18.11.9 + "@types/node": ^18.11.10 "@types/open-graph": 0.2.2 "@types/platform": 1.3.4 "@types/prettier": ^2.7.1 From 2e44907765c87a2e3857c74cc67b042fd880fe83 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 4 Dec 2022 15:13:26 +0000 Subject: [PATCH 077/329] chore(deps-dev): Bump cspell from 6.15.1 to 6.16.0 (#14243) Bumps [cspell](https://github.com/streetsidesoftware/cspell) from 6.15.1 to 6.16.0. - [Release notes](https://github.com/streetsidesoftware/cspell/releases) - [Changelog](https://github.com/streetsidesoftware/cspell/blob/main/CHANGELOG.md) - [Commits](https://github.com/streetsidesoftware/cspell/compare/v6.15.1...v6.16.0) --- updated-dependencies: - dependency-name: cspell dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 150 +++++++++++++++++++++++++-------------------------- 2 files changed, 76 insertions(+), 76 deletions(-) diff --git a/package.json b/package.json index caf36f36009..8bf4eb7e99e 100644 --- a/package.json +++ b/package.json @@ -103,7 +103,7 @@ "babel-loader": "9.1.0", "caniuse-lite": "^1.0.30001435", "cross-env": "7.0.3", - "cspell": "6.15.1", + "cspell": "6.16.0", "css-loader": "^6.7.2", "cssnano": "^5.1.14", "dexie": "^3.2.2", diff --git a/yarn.lock b/yarn.lock index b9fabde94dd..271199ae0ac 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1555,9 +1555,9 @@ __metadata: languageName: node linkType: hard -"@cspell/cspell-bundled-dicts@npm:6.15.1": - version: 6.15.1 - resolution: "@cspell/cspell-bundled-dicts@npm:6.15.1" +"@cspell/cspell-bundled-dicts@npm:6.16.0": + version: 6.16.0 + resolution: "@cspell/cspell-bundled-dicts@npm:6.16.0" dependencies: "@cspell/dict-ada": ^4.0.0 "@cspell/dict-aws": ^3.0.0 @@ -1602,28 +1602,28 @@ __metadata: "@cspell/dict-swift": ^2.0.0 "@cspell/dict-typescript": ^3.0.1 "@cspell/dict-vue": ^3.0.0 - checksum: 18b392e5cb520867699de1a35241d521312afbf87841ee651524bdfb25d397fbc726165d205c6602d57a2dcee74a05dbe2c676c9aad9742540d9407963b87dc8 + checksum: 76d896b639b77f3d57f2b0972b8e67cf4fd0c9435ad523872b05d2aada7f9447e720ecb0529df7d88ce489ac892b0b192495fefc23202066039acedd31e1daf1 languageName: node linkType: hard -"@cspell/cspell-pipe@npm:6.15.1": - version: 6.15.1 - resolution: "@cspell/cspell-pipe@npm:6.15.1" - checksum: e16543cb1670fd3ea66199c72d79e752ce868945aef067c41759aa790514c599d6a87d9170a367c9da114939258d46d118139c041300c2fe1004105d1801d5bb +"@cspell/cspell-pipe@npm:6.16.0": + version: 6.16.0 + resolution: "@cspell/cspell-pipe@npm:6.16.0" + checksum: 1f9a3588051b778cf1ebdeffd58a41b1393d49b496f9ef23b27eae2f7a4bc10fc539f3afa33ddbbe7847b13d2426c4e2d27c7bedb953075f063c6b77628b9ba0 languageName: node linkType: hard -"@cspell/cspell-service-bus@npm:6.15.1": - version: 6.15.1 - resolution: "@cspell/cspell-service-bus@npm:6.15.1" - checksum: a4f36b77f7833a3b7a15ce758114790549e0f3c5fbff8efeffa055275b19d1e1e645ffd37d32a16e2c3cea92e503bce384ccc74c8ff0ce98ec3f6f4e9b756f47 +"@cspell/cspell-service-bus@npm:6.16.0": + version: 6.16.0 + resolution: "@cspell/cspell-service-bus@npm:6.16.0" + checksum: 56fb2f1eb4b3331ff8b8ab1e23b413929d6d7ff5906a57d22f90d0b913357d51b6b6851f087c2b2f2ea504ef3b668d7d0ff61a579afe55e751d912cbb54d246a languageName: node linkType: hard -"@cspell/cspell-types@npm:6.15.1": - version: 6.15.1 - resolution: "@cspell/cspell-types@npm:6.15.1" - checksum: 9e6e37ca69c84b5259f837a2a20e7a71a0695ad324bc89cda3c56811dfe9a3017c2a1bc9f36fe7ae0d0a6466a611f1883cfab27a4d0637142a21c94b522f8edf +"@cspell/cspell-types@npm:6.16.0": + version: 6.16.0 + resolution: "@cspell/cspell-types@npm:6.16.0" + checksum: d00c39bf76e34a9dd3e4852d8db0a28fbea8a58a6f25abd9043885850784c4a38e69f31718bd9c47e4865e45d1505a08d26e43e1f03f7657b7edffb237a7f50e languageName: node linkType: hard @@ -1928,10 +1928,10 @@ __metadata: languageName: node linkType: hard -"@cspell/strong-weak-map@npm:6.15.1": - version: 6.15.1 - resolution: "@cspell/strong-weak-map@npm:6.15.1" - checksum: 0b2577fe213b5ef5131cfd1d8b51e1fa1fd6fe1a4efa92cdc993ef7415997031a09ce4a2a0a2540b0df29dcc06fd1e5275efad1f8a1ce7ea463c34713469bb82 +"@cspell/strong-weak-map@npm:6.16.0": + version: 6.16.0 + resolution: "@cspell/strong-weak-map@npm:6.16.0" + checksum: e4d39ea36e7df6ac58edf11d6a94baae7f4c54404ab624a8a8a31bc69724f613d75d19039bfb43d7908859a25fa62f66a043e074c9824c9bc08879878349e438 languageName: node linkType: hard @@ -6306,79 +6306,79 @@ __metadata: languageName: node linkType: hard -"cspell-dictionary@npm:6.15.1": - version: 6.15.1 - resolution: "cspell-dictionary@npm:6.15.1" +"cspell-dictionary@npm:6.16.0": + version: 6.16.0 + resolution: "cspell-dictionary@npm:6.16.0" dependencies: - "@cspell/cspell-pipe": 6.15.1 - "@cspell/cspell-types": 6.15.1 - cspell-trie-lib: 6.15.1 + "@cspell/cspell-pipe": 6.16.0 + "@cspell/cspell-types": 6.16.0 + cspell-trie-lib: 6.16.0 fast-equals: ^4.0.3 gensequence: ^4.0.2 - checksum: c47a3a1e424581a2ce4b4f735ade2d089402e9ee8026ed59b667b9f0ffeb570bea67d2af8a09a7ec55c35a3eb3e78f13a8df9a604946e9cf94686908af6288ca + checksum: c35c6e04e1d8bb8cca0cac056d46a9f6c03aa4cba979ae5c9e618809764307c6f77c86ef6d3b82003fa330e8a3f27879e1f7cf814cd1cba5cef4b9c09a61c37c languageName: node linkType: hard -"cspell-gitignore@npm:6.15.1": - version: 6.15.1 - resolution: "cspell-gitignore@npm:6.15.1" +"cspell-gitignore@npm:6.16.0": + version: 6.16.0 + resolution: "cspell-gitignore@npm:6.16.0" dependencies: - cspell-glob: 6.15.1 + cspell-glob: 6.16.0 find-up: ^5.0.0 bin: cspell-gitignore: bin.js - checksum: a867e4197d6712e45982363384dff87ceb539a2560bf6bf15e58d86e194582db3671a7877f322b38a89173e5d984964959e75570cdca68d6d39c4e745731cc65 + checksum: 01ecef291d4f2d6279f9185f849af828cdaeef27c4c71fbac121f4dcb7e5c50de7dbcfcabe52b72a2eda83e3d5e158e9f624f5fe22dc25fe8b9262a49ff1d4f4 languageName: node linkType: hard -"cspell-glob@npm:6.15.1": - version: 6.15.1 - resolution: "cspell-glob@npm:6.15.1" +"cspell-glob@npm:6.16.0": + version: 6.16.0 + resolution: "cspell-glob@npm:6.16.0" dependencies: micromatch: ^4.0.5 - checksum: b1844e4918faf050b290fa7a8631ad99e44fd1f51ff497fb8a69f764e2d422a54ea89b0e9e56f2bffcbfc3a53783a66bb1168dce58fdf1d822db321d345d02fa + checksum: bd0c0b33eeda3f82686f2ce213de1224a0e25d05726aa130188b726971f0800a39f95d5f576c07021763b67b5227baf2a1a1b698902f59a3fe47de04b4f7a5cd languageName: node linkType: hard -"cspell-grammar@npm:6.15.1": - version: 6.15.1 - resolution: "cspell-grammar@npm:6.15.1" +"cspell-grammar@npm:6.16.0": + version: 6.16.0 + resolution: "cspell-grammar@npm:6.16.0" dependencies: - "@cspell/cspell-pipe": 6.15.1 - "@cspell/cspell-types": 6.15.1 + "@cspell/cspell-pipe": 6.16.0 + "@cspell/cspell-types": 6.16.0 bin: cspell-grammar: bin.js - checksum: ad368885ba4c1816ef32928304ccf41a30710a044fc607a2db0dc92f831078c37a177ceba9881e8c93c621f8622a576db0c3071df66039fba43ff6965f4f1f7c + checksum: 839489ad0b639789eacd605af0e16e9c65b4b691403e6b28aa1eb67098f21a1a4449767d5d5b7fdd2f0f3af91c47928abe997b55bb21b2374414c91d64557157 languageName: node linkType: hard -"cspell-io@npm:6.15.1": - version: 6.15.1 - resolution: "cspell-io@npm:6.15.1" +"cspell-io@npm:6.16.0": + version: 6.16.0 + resolution: "cspell-io@npm:6.16.0" dependencies: - "@cspell/cspell-service-bus": 6.15.1 + "@cspell/cspell-service-bus": 6.16.0 node-fetch: ^2.6.7 - checksum: 9ea62c652233e6a856deca371f740665c3e366adb773424789a798596d6d9796283036746cb33167b324f084bd463432c4a4f23c1bfbfcbb255a61e5a1a43d83 + checksum: 325100a9caefefdcd69cdc33ca32d6fefb9aa1639f9414862860d99be1e1db7c73115dd063d59fc9a79e536b44a609247bb16eef2aef892fe8cd4c8a7c87487c languageName: node linkType: hard -"cspell-lib@npm:6.15.1": - version: 6.15.1 - resolution: "cspell-lib@npm:6.15.1" +"cspell-lib@npm:6.16.0": + version: 6.16.0 + resolution: "cspell-lib@npm:6.16.0" dependencies: - "@cspell/cspell-bundled-dicts": 6.15.1 - "@cspell/cspell-pipe": 6.15.1 - "@cspell/cspell-types": 6.15.1 - "@cspell/strong-weak-map": 6.15.1 + "@cspell/cspell-bundled-dicts": 6.16.0 + "@cspell/cspell-pipe": 6.16.0 + "@cspell/cspell-types": 6.16.0 + "@cspell/strong-weak-map": 6.16.0 clear-module: ^4.1.2 comment-json: ^4.2.3 configstore: ^5.0.1 cosmiconfig: ^8.0.0 - cspell-dictionary: 6.15.1 - cspell-glob: 6.15.1 - cspell-grammar: 6.15.1 - cspell-io: 6.15.1 - cspell-trie-lib: 6.15.1 + cspell-dictionary: 6.16.0 + cspell-glob: 6.16.0 + cspell-grammar: 6.16.0 + cspell-io: 6.16.0 + cspell-trie-lib: 6.16.0 fast-equals: ^4.0.3 find-up: ^5.0.0 fs-extra: ^10.1.0 @@ -6388,32 +6388,32 @@ __metadata: resolve-global: ^1.0.0 vscode-languageserver-textdocument: ^1.0.7 vscode-uri: ^3.0.6 - checksum: 6a45f40811049d9c72fd299bb7241fb78887d3e102f05a9957c8c71de61b74e009f909437fe349f9cf7d7e90636aa2cc5e15943a306738b38e633779ecd5851c + checksum: a737b89c7c0683f80707f80844ee9f01b90e0a150785aee97174993e9eda9ed63df1c76292518abb53bbe1f27de846852fa24ca3c206f13074c90b5f0ef136b6 languageName: node linkType: hard -"cspell-trie-lib@npm:6.15.1": - version: 6.15.1 - resolution: "cspell-trie-lib@npm:6.15.1" +"cspell-trie-lib@npm:6.16.0": + version: 6.16.0 + resolution: "cspell-trie-lib@npm:6.16.0" dependencies: - "@cspell/cspell-pipe": 6.15.1 - "@cspell/cspell-types": 6.15.1 + "@cspell/cspell-pipe": 6.16.0 + "@cspell/cspell-types": 6.16.0 fs-extra: ^10.1.0 gensequence: ^4.0.2 - checksum: 678d91bdbf474a43f76450c7d8043ed2b79f873edc97bb386d025490c4ea86fa009c5bd0fb4154afbd39ae488107ead0580301659b2be9e7fbfad70b54a264ab + checksum: c6b5cab25e4cdc7e7e9a40d92860de0bfd55036f3bb24a4b8bf34620663f58f263482c3304b10f95b1f090e190cfec92d09e83597744aaed4f455743dd86f23d languageName: node linkType: hard -"cspell@npm:6.15.1": - version: 6.15.1 - resolution: "cspell@npm:6.15.1" +"cspell@npm:6.16.0": + version: 6.16.0 + resolution: "cspell@npm:6.16.0" dependencies: - "@cspell/cspell-pipe": 6.15.1 + "@cspell/cspell-pipe": 6.16.0 chalk: ^4.1.2 commander: ^9.4.1 - cspell-gitignore: 6.15.1 - cspell-glob: 6.15.1 - cspell-lib: 6.15.1 + cspell-gitignore: 6.16.0 + cspell-glob: 6.16.0 + cspell-lib: 6.16.0 fast-json-stable-stringify: ^2.1.0 file-entry-cache: ^6.0.1 fs-extra: ^10.1.0 @@ -6425,7 +6425,7 @@ __metadata: vscode-uri: ^3.0.6 bin: cspell: bin.js - checksum: fb9a1d085dba1c2ff3e9a04f4a30e17a2cddfe3d92022978d70173089f99a5a3073f59c5915e4ccd9d5454498e402c76401cd77dc799596c1ba9844fa23ddb81 + checksum: 9273e58e585ec019596214e0c8e461f42ca35b89b97f5488e39366e12bcaef50210b5a1f3f2d5031f36287516a70df39f31a3732cbcc838d8c05c1c58e890313 languageName: node linkType: hard @@ -16696,7 +16696,7 @@ __metadata: core-js: 3.25.5 countly-sdk-web: 22.6.4 cross-env: 7.0.3 - cspell: 6.15.1 + cspell: 6.16.0 css-loader: ^6.7.2 cssnano: ^5.1.14 date-fns: 2.29.3 From 4137f3e0d67cfc4310a6f021e8d6497db5f543c1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 4 Dec 2022 15:17:05 +0000 Subject: [PATCH 078/329] chore(deps): Bump react-router-dom from 6.4.3 to 6.4.4 (#14247) Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.4.3 to 6.4.4. - [Release notes](https://github.com/remix-run/react-router/releases) - [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md) - [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.4.4/packages/react-router-dom) --- updated-dependencies: - dependency-name: react-router-dom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] 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, 26 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index 8bf4eb7e99e..cabec115524 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "react-intl": "6.2.2", "react-redux": "8.0.5", "react-router": "6.4.3", - "react-router-dom": "6.4.3", + "react-router-dom": "6.4.4", "react-transition-group": "4.4.5", "redux": "4.2.0", "redux-logdown": "1.0.4", diff --git a/yarn.lock b/yarn.lock index 271199ae0ac..8a27a85a05e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3000,6 +3000,13 @@ __metadata: languageName: node linkType: hard +"@remix-run/router@npm:1.0.4": + version: 1.0.4 + resolution: "@remix-run/router@npm:1.0.4" + checksum: db6b1e111fb6e7e22c3d274bd6cef3054a0a989245894fde5735efd9cb46d18511e528e813ff50bcbdd7eda1c559f4e76e9d0c54396624e33396168d80b09c42 + languageName: node + linkType: hard + "@rollup/plugin-babel@npm:^5.2.0": version: 5.2.2 resolution: "@rollup/plugin-babel@npm:5.2.2" @@ -13790,16 +13797,16 @@ __metadata: languageName: node linkType: hard -"react-router-dom@npm:6.4.3": - version: 6.4.3 - resolution: "react-router-dom@npm:6.4.3" +"react-router-dom@npm:6.4.4": + version: 6.4.4 + resolution: "react-router-dom@npm:6.4.4" dependencies: - "@remix-run/router": 1.0.3 - react-router: 6.4.3 + "@remix-run/router": 1.0.4 + react-router: 6.4.4 peerDependencies: react: ">=16.8" react-dom: ">=16.8" - checksum: 67a44d8dc45761a1c88793cac73839bb657168ef61b9473eb39b186b4a3ea1472454fd96f8997dc541cb1e79a723d62f9503cbc9179b63b8f1d634ed6d2b079a + checksum: 95f31ae84979b404db7483309e1063fbf724046103dc8b7be7e6df79f7b81e4e63dcdb587f11d8be38e3aaf62b71f9e0d83344ef8d8c5e962de7819c793de781 languageName: node linkType: hard @@ -13814,6 +13821,17 @@ __metadata: languageName: node linkType: hard +"react-router@npm:6.4.4": + version: 6.4.4 + resolution: "react-router@npm:6.4.4" + dependencies: + "@remix-run/router": 1.0.4 + peerDependencies: + react: ">=16.8" + checksum: d82cc8b8bdf10e02e07d089f9d82987fa161c2f07583c973126f5f8a052c02b3d2339891ddbda1738f877755a407e2c35f0dc1ac52aaa1d2c853774d19753ea7 + languageName: node + linkType: hard + "react-select@npm:5.6.0": version: 5.6.0 resolution: "react-select@npm:5.6.0" @@ -16767,7 +16785,7 @@ __metadata: react-intl: 6.2.2 react-redux: 8.0.5 react-router: 6.4.3 - react-router-dom: 6.4.3 + react-router-dom: 6.4.4 react-transition-group: 4.4.5 redux: 4.2.0 redux-devtools-extension: 2.13.9 From 38aaed47ff1ac8553f9cc1a8232e9c7ab664a33d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 4 Dec 2022 15:17:24 +0000 Subject: [PATCH 079/329] chore(deps-dev): Bump @formatjs/cli from 5.1.4 to 5.1.7 (#14248) Bumps [@formatjs/cli](https://github.com/formatjs/formatjs) from 5.1.4 to 5.1.7. - [Release notes](https://github.com/formatjs/formatjs/releases) - [Commits](https://github.com/formatjs/formatjs/compare/@formatjs/cli@5.1.4...@formatjs/cli@5.1.7) --- updated-dependencies: - dependency-name: "@formatjs/cli" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] 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 cabec115524..f94741e522c 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "@babel/preset-typescript": "7.18.6", "@emotion/eslint-plugin": "^11.10.0", "@faker-js/faker": "7.6.0", - "@formatjs/cli": "5.1.4", + "@formatjs/cli": "5.1.7", "@koush/wrtc": "0.5.3", "@testing-library/react": "13.4.0", "@types/adm-zip": "0.5.0", diff --git a/yarn.lock b/yarn.lock index 8a27a85a05e..d155095fa69 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2301,9 +2301,9 @@ __metadata: languageName: node linkType: hard -"@formatjs/cli@npm:5.1.4": - version: 5.1.4 - resolution: "@formatjs/cli@npm:5.1.4" +"@formatjs/cli@npm:5.1.7": + version: 5.1.7 + resolution: "@formatjs/cli@npm:5.1.7" peerDependencies: "@vue/compiler-sfc": ^3.2.34 peerDependenciesMeta: @@ -2311,7 +2311,7 @@ __metadata: optional: true bin: formatjs: bin/formatjs - checksum: 630d7d37c86824a6494946b1a1752927a6dfbc68fb2d0e505a08e9a2ba914f58bf05d34e1dfde38a59f712ea07dfc5a7c8633d6ac89e0eef77ff40b4b8591ffa + checksum: e9d0d472786863d6c22b1aad4083436eb3e6826d0c77ae2a6c548f38d762827d272c4baa6082ba5d85fb63388f510e7c023c6707124e7a3d2fbce162cb98ad1e languageName: node linkType: hard @@ -16654,7 +16654,7 @@ __metadata: "@emotion/eslint-plugin": ^11.10.0 "@emotion/react": 11.10.5 "@faker-js/faker": 7.6.0 - "@formatjs/cli": 5.1.4 + "@formatjs/cli": 5.1.7 "@koush/wrtc": 0.5.3 "@testing-library/react": 13.4.0 "@types/adm-zip": 0.5.0 From 83e65a534d483e2aae5f3d91464fe1983f221a6f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 4 Dec 2022 15:17:58 +0000 Subject: [PATCH 080/329] chore(deps-dev): Bump postcss-import from 15.0.0 to 15.0.1 (#14245) Bumps [postcss-import](https://github.com/postcss/postcss-import) from 15.0.0 to 15.0.1. - [Release notes](https://github.com/postcss/postcss-import/releases) - [Changelog](https://github.com/postcss/postcss-import/blob/master/CHANGELOG.md) - [Commits](https://github.com/postcss/postcss-import/compare/15.0.0...15.0.1) --- updated-dependencies: - dependency-name: postcss-import dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] 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 f94741e522c..2932b28845f 100644 --- a/package.json +++ b/package.json @@ -148,7 +148,7 @@ "os-browserify": "0.3.0", "path-browserify": "1.0.1", "postcss": "8.4.19", - "postcss-import": "^15.0.0", + "postcss-import": "^15.0.1", "postcss-less": "6.0.0", "postcss-loader": "^7.0.2", "postcss-preset-env": "^7.8.3", diff --git a/yarn.lock b/yarn.lock index d155095fa69..0797d181ace 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12852,16 +12852,16 @@ __metadata: languageName: node linkType: hard -"postcss-import@npm:^15.0.0": - version: 15.0.0 - resolution: "postcss-import@npm:15.0.0" +"postcss-import@npm:^15.0.1": + version: 15.0.1 + resolution: "postcss-import@npm:15.0.1" dependencies: postcss-value-parser: ^4.0.0 read-cache: ^1.0.0 resolve: ^1.1.7 peerDependencies: postcss: ^8.0.0 - checksum: e5048072514f33520348c0c5aaedb5db92da72188e72a7367c26a8d851b9cf92e56aeda30d9c7b4ed1a34f84a58959da1b4b27b4aa23d41fc0ce36efe00bf1d1 + checksum: c673a0247525b3ad9f29d40605866968f2d2525cd107f287171c3baad496385618419d0e0565a792eefb7192311d54d40b2837409cfe2451371a7ef1d0da5125 languageName: node linkType: hard @@ -16773,7 +16773,7 @@ __metadata: path-browserify: 1.0.1 platform: 1.3.6 postcss: 8.4.19 - postcss-import: ^15.0.0 + postcss-import: ^15.0.1 postcss-less: 6.0.0 postcss-loader: ^7.0.2 postcss-preset-env: ^7.8.3 From 356bc83bbef2ab3a7b071968b9b3df1ec529af06 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 4 Dec 2022 15:18:30 +0000 Subject: [PATCH 081/329] chore(deps): Bump react-intl from 6.2.2 to 6.2.5 (#14250) Bumps [react-intl](https://github.com/formatjs/formatjs) from 6.2.2 to 6.2.5. - [Release notes](https://github.com/formatjs/formatjs/releases) - [Commits](https://github.com/formatjs/formatjs/compare/react-intl@6.2.2...react-intl@6.2.5) --- updated-dependencies: - dependency-name: react-intl dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 155 ++++++++++++++++++++++++--------------------------- 2 files changed, 75 insertions(+), 82 deletions(-) diff --git a/package.json b/package.json index 2932b28845f..6c842e495f1 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "platform": "1.3.6", "react": "18.2.0", "react-dom": "18.2.0", - "react-intl": "6.2.2", + "react-intl": "6.2.5", "react-redux": "8.0.5", "react-router": "6.4.3", "react-router-dom": "6.4.4", diff --git a/yarn.lock b/yarn.lock index 0797d181ace..a01cb657f3c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2315,94 +2315,94 @@ __metadata: languageName: node linkType: hard -"@formatjs/ecma402-abstract@npm:1.14.0": - version: 1.14.0 - resolution: "@formatjs/ecma402-abstract@npm:1.14.0" +"@formatjs/ecma402-abstract@npm:1.14.3": + version: 1.14.3 + resolution: "@formatjs/ecma402-abstract@npm:1.14.3" dependencies: - "@formatjs/intl-localematcher": 0.2.31 - tslib: 2.4.0 - checksum: 2d9f308b5ab40b8141c3fa2e6d2618f062e993e1dbf54322e293ff2fb40f8a16026d104f5de28544b6ed33185559c06bd440aa3badc00754d2e42c2604c9f0f3 + "@formatjs/intl-localematcher": 0.2.32 + tslib: ^2.4.0 + checksum: 504ae9775094adec611aa0bbc6dadec2360ba30c13331f376feacd75b23f856ac1e45e3c88a572fb91ff917e726d0cc7e6e1b6c5b73af48f53896592362c91d5 languageName: node linkType: hard -"@formatjs/fast-memoize@npm:1.2.6": - version: 1.2.6 - resolution: "@formatjs/fast-memoize@npm:1.2.6" +"@formatjs/fast-memoize@npm:1.2.7": + version: 1.2.7 + resolution: "@formatjs/fast-memoize@npm:1.2.7" dependencies: - tslib: 2.4.0 - checksum: cdb944a9207b5d74e0b4cdcd047e32d904b52b8f893227809a906f65882a46ae8b342872161d797dffd4fafd565f91efebb18989ffe888786bb5e5d911bc0193 + tslib: ^2.4.0 + checksum: ba372a3e931bd99729d993f5b95aeb43e7d07b9f71e759722cc20c4e2faa0af11a942f0df9023a029b03230dc4dfad5354755be1e385c465750f63e4b3372b7b languageName: node linkType: hard -"@formatjs/icu-messageformat-parser@npm:2.1.11": - version: 2.1.11 - resolution: "@formatjs/icu-messageformat-parser@npm:2.1.11" +"@formatjs/icu-messageformat-parser@npm:2.1.14": + version: 2.1.14 + resolution: "@formatjs/icu-messageformat-parser@npm:2.1.14" dependencies: - "@formatjs/ecma402-abstract": 1.14.0 - "@formatjs/icu-skeleton-parser": 1.3.15 - tslib: 2.4.0 - checksum: 24e5952669180942a4a4b71a729105b1e82eb60225bc23383e989ccf7c101c03e4380c6fbc7bff5c24e129a9650a2eafab5aedc7625b43f05e294fc458ad0c99 + "@formatjs/ecma402-abstract": 1.14.3 + "@formatjs/icu-skeleton-parser": 1.3.18 + tslib: ^2.4.0 + checksum: 4d13230af075a353eef4725bee67d46bfc40f4873e561c141a2e62b91e377ffa7fffe61ee6df6bb187a00e15ab6fe242014958d51e4c6056032801178eb7e1c8 languageName: node linkType: hard -"@formatjs/icu-skeleton-parser@npm:1.3.15": - version: 1.3.15 - resolution: "@formatjs/icu-skeleton-parser@npm:1.3.15" +"@formatjs/icu-skeleton-parser@npm:1.3.18": + version: 1.3.18 + resolution: "@formatjs/icu-skeleton-parser@npm:1.3.18" dependencies: - "@formatjs/ecma402-abstract": 1.14.0 - tslib: 2.4.0 - checksum: b689a1ca84415be944376d953fde2d815946857df0a97711221deffe2a280e9e83a8a7e1d61e55aecb525721339024a40f8d22f3c57ad077020bcf57a40f7bb8 + "@formatjs/ecma402-abstract": 1.14.3 + tslib: ^2.4.0 + checksum: 19655c452ed3c45db07b03c90fbfe6172655b0babb9579f2d9397ca2b3c56e5e17a3beed1d13af12104313e6ed1f14976d7c996756f1a59c977d6f3228518fad languageName: node linkType: hard -"@formatjs/intl-displaynames@npm:6.2.0": - version: 6.2.0 - resolution: "@formatjs/intl-displaynames@npm:6.2.0" +"@formatjs/intl-displaynames@npm:6.2.3": + version: 6.2.3 + resolution: "@formatjs/intl-displaynames@npm:6.2.3" dependencies: - "@formatjs/ecma402-abstract": 1.14.0 - "@formatjs/intl-localematcher": 0.2.31 - tslib: 2.4.0 - checksum: e0c38d2770f0d28047ec120523398ee06f7f8305b3a0f04f6ed259f61ca0fbaea3a7660bb0fbccee0d07e36069b3d7781bc27c0e0f50c6c08fceca9b642dfa44 + "@formatjs/ecma402-abstract": 1.14.3 + "@formatjs/intl-localematcher": 0.2.32 + tslib: ^2.4.0 + checksum: 2e5fe38231858f66f44eb740a5e0576f98c9039b49ad81a02c4bcb62de6425e3951413c3fa487dd1ad42cd25c0b8d725adac6ceddf841f94b97ca22e753f3d56 languageName: node linkType: hard -"@formatjs/intl-listformat@npm:7.1.4": - version: 7.1.4 - resolution: "@formatjs/intl-listformat@npm:7.1.4" +"@formatjs/intl-listformat@npm:7.1.7": + version: 7.1.7 + resolution: "@formatjs/intl-listformat@npm:7.1.7" dependencies: - "@formatjs/ecma402-abstract": 1.14.0 - "@formatjs/intl-localematcher": 0.2.31 - tslib: 2.4.0 - checksum: 1bec24bb477ed630df3c307d071b9e411c8bf765e64da7a9c69eb2257254eea69d3b1e81f559a269693f6c2c0542a8ce3e547c690737a01f1275948e966f6c1d + "@formatjs/ecma402-abstract": 1.14.3 + "@formatjs/intl-localematcher": 0.2.32 + tslib: ^2.4.0 + checksum: 96b45bcf0e556c2829d40bf95a027fc3dca86abc99db2735d6030d744d28318ee21726357853794a31c6b6674e7ce5403d3519d4ea190004178d973b61ca9d06 languageName: node linkType: hard -"@formatjs/intl-localematcher@npm:0.2.31": - version: 0.2.31 - resolution: "@formatjs/intl-localematcher@npm:0.2.31" +"@formatjs/intl-localematcher@npm:0.2.32": + version: 0.2.32 + resolution: "@formatjs/intl-localematcher@npm:0.2.32" dependencies: - tslib: 2.4.0 - checksum: c05bf5854f04ad0cc5ad78436023805c9542d97cdf000c685793e2053b84b585be3603b370e27921a617bbb87ef021239d773bc5326ab99850786c73d46a5156 + tslib: ^2.4.0 + checksum: 477e18aabaf2e6e90fc12952a3cb6c0ebb40ad99414d6b9d2501c6348fbad58cacb433ec6630955cfd1491ea7630f32a9dc280bb27d0fb8a784251404a54140a languageName: node linkType: hard -"@formatjs/intl@npm:2.6.0": - version: 2.6.0 - resolution: "@formatjs/intl@npm:2.6.0" +"@formatjs/intl@npm:2.6.3": + version: 2.6.3 + resolution: "@formatjs/intl@npm:2.6.3" dependencies: - "@formatjs/ecma402-abstract": 1.14.0 - "@formatjs/fast-memoize": 1.2.6 - "@formatjs/icu-messageformat-parser": 2.1.11 - "@formatjs/intl-displaynames": 6.2.0 - "@formatjs/intl-listformat": 7.1.4 - intl-messageformat: 10.2.2 - tslib: 2.4.0 + "@formatjs/ecma402-abstract": 1.14.3 + "@formatjs/fast-memoize": 1.2.7 + "@formatjs/icu-messageformat-parser": 2.1.14 + "@formatjs/intl-displaynames": 6.2.3 + "@formatjs/intl-listformat": 7.1.7 + intl-messageformat: 10.2.5 + tslib: ^2.4.0 peerDependencies: typescript: ^4.7 peerDependenciesMeta: typescript: optional: true - checksum: 703b5a495cc6f23358abbde0df03189053d34567eef5fa78813cea4bd04517d8ea2f3e206d58d437c748cc2e12027c618213b96cea7f2d3fbad377ab8a72e0ee + checksum: 1922ec1d63aed8f42bb09967fffbaa4f37f59a351dd34ccddf28b268d04b05a80c9a7790f61292cf97fec4d47e15177b52987a28b5fb10df96aed5f5008dfc5f languageName: node linkType: hard @@ -9247,15 +9247,15 @@ __metadata: languageName: node linkType: hard -"intl-messageformat@npm:10.2.2": - version: 10.2.2 - resolution: "intl-messageformat@npm:10.2.2" +"intl-messageformat@npm:10.2.5": + version: 10.2.5 + resolution: "intl-messageformat@npm:10.2.5" dependencies: - "@formatjs/ecma402-abstract": 1.14.0 - "@formatjs/fast-memoize": 1.2.6 - "@formatjs/icu-messageformat-parser": 2.1.11 - tslib: 2.4.0 - checksum: 443954e8fde79eb497230a51a3c21fecec09c4ebcdfab11be28cadb631e35c6667e103a0fd9c3bca105de185341d25306296a6b85427a874ce4deefe5f6c61df + "@formatjs/ecma402-abstract": 1.14.3 + "@formatjs/fast-memoize": 1.2.7 + "@formatjs/icu-messageformat-parser": 2.1.14 + tslib: ^2.4.0 + checksum: 048d6e3e746bff5ea6d745c8cbc2d0049aadb42caf2bad0d47e0bcf9bede285ef48a1fbd3a87711b99587d270d2ab8d9488e51577b24a2227856cdf373dd25df languageName: node linkType: hard @@ -13720,27 +13720,27 @@ __metadata: languageName: node linkType: hard -"react-intl@npm:6.2.2": - version: 6.2.2 - resolution: "react-intl@npm:6.2.2" +"react-intl@npm:6.2.5": + version: 6.2.5 + resolution: "react-intl@npm:6.2.5" dependencies: - "@formatjs/ecma402-abstract": 1.14.0 - "@formatjs/icu-messageformat-parser": 2.1.11 - "@formatjs/intl": 2.6.0 - "@formatjs/intl-displaynames": 6.2.0 - "@formatjs/intl-listformat": 7.1.4 + "@formatjs/ecma402-abstract": 1.14.3 + "@formatjs/icu-messageformat-parser": 2.1.14 + "@formatjs/intl": 2.6.3 + "@formatjs/intl-displaynames": 6.2.3 + "@formatjs/intl-listformat": 7.1.7 "@types/hoist-non-react-statics": ^3.3.1 "@types/react": 16 || 17 || 18 hoist-non-react-statics: ^3.3.2 - intl-messageformat: 10.2.2 - tslib: 2.4.0 + intl-messageformat: 10.2.5 + tslib: ^2.4.0 peerDependencies: react: ^16.6.0 || 17 || 18 typescript: ^4.7 peerDependenciesMeta: typescript: optional: true - checksum: e85d76972786cb8aafd59247107323f02b8e931e8e4f967992297289fe257e75c29b4b54a6073dd1039fb23031d39e1f0bcd3bc27381cc9d2f0f88511b71feb7 + checksum: 826b6ed593b367ad0a375de4e84b3ca3c7334c6583dcf307bb90e9c45c79c7f85cf43f6d15d15b9827e1da1d13f807b802c252a6725d0af4bd5a3fd43cbd9879 languageName: node linkType: hard @@ -15811,13 +15811,6 @@ __metadata: languageName: node linkType: hard -"tslib@npm:2.4.0": - version: 2.4.0 - resolution: "tslib@npm:2.4.0" - checksum: 8c4aa6a3c5a754bf76aefc38026134180c053b7bd2f81338cb5e5ebf96fefa0f417bff221592bf801077f5bf990562f6264fecbc42cd3309b33872cb6fc3b113 - languageName: node - linkType: hard - "tslib@npm:^1.10.0, tslib@npm:^1.8.1, tslib@npm:^1.9.0, tslib@npm:^1.9.3": version: 1.14.1 resolution: "tslib@npm:1.14.1" @@ -16782,7 +16775,7 @@ __metadata: raf: 3.4.1 react: 18.2.0 react-dom: 18.2.0 - react-intl: 6.2.2 + react-intl: 6.2.5 react-redux: 8.0.5 react-router: 6.4.3 react-router-dom: 6.4.4 From dbebd33d54627ea6876b1417a5a53f5ef7d5923c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 4 Dec 2022 15:21:14 +0000 Subject: [PATCH 082/329] chore(deps-dev): Bump stylelint from 14.15.0 to 14.16.0 (#14251) Bumps [stylelint](https://github.com/stylelint/stylelint) from 14.15.0 to 14.16.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/14.15.0...14.16.0) --- updated-dependencies: - dependency-name: stylelint dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 31 ++++++++++++++++++++++++------- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index 6c842e495f1..5f6b70cff28 100644 --- a/package.json +++ b/package.json @@ -162,7 +162,7 @@ "sinon": "15.0.0", "snabbdom": "3.5.1", "style-loader": "^3.3.1", - "stylelint": "14.15.0", + "stylelint": "14.16.0", "stylelint-config-idiomatic-order": "9.0.0", "stylelint-config-prettier": "9.0.4", "svg-inline-loader": "0.8.2", diff --git a/yarn.lock b/yarn.lock index a01cb657f3c..e97c2ec7b3b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9132,6 +9132,13 @@ __metadata: languageName: node linkType: hard +"ignore@npm:^5.2.1": + version: 5.2.1 + resolution: "ignore@npm:5.2.1" + checksum: 7251d00cba49fe88c4f3565fadeb4aa726ba38294a9a79ffed542edc47bafd989d4b2ccf65700c5b1b26a1e91dfc7218fb23017937c79216025d5caeec0ee9d5 + languageName: node + linkType: hard + "image-size@npm:~0.5.0": version: 0.5.5 resolution: "image-size@npm:0.5.5" @@ -13361,6 +13368,16 @@ __metadata: languageName: node linkType: hard +"postcss-selector-parser@npm:^6.0.11": + version: 6.0.11 + resolution: "postcss-selector-parser@npm:6.0.11" + dependencies: + cssesc: ^3.0.0 + util-deprecate: ^1.0.2 + checksum: 0b01aa9c2d2c8dbeb51e9b204796b678284be9823abc8d6d40a8b16d4149514e922c264a8ed4deb4d6dbced564b9be390f5942c058582d8656351516d6c49cde + languageName: node + linkType: hard + "postcss-sorting@npm:^7.0.1": version: 7.0.1 resolution: "postcss-sorting@npm:7.0.1" @@ -15270,9 +15287,9 @@ __metadata: languageName: node linkType: hard -"stylelint@npm:14.15.0": - version: 14.15.0 - resolution: "stylelint@npm:14.15.0" +"stylelint@npm:14.16.0": + version: 14.16.0 + resolution: "stylelint@npm:14.16.0" dependencies: "@csstools/selector-specificity": ^2.0.2 balanced-match: ^2.0.0 @@ -15287,7 +15304,7 @@ __metadata: globby: ^11.1.0 globjoin: ^0.1.4 html-tags: ^3.2.0 - ignore: ^5.2.0 + ignore: ^5.2.1 import-lazy: ^4.0.0 imurmurhash: ^0.1.4 is-plain-object: ^5.0.0 @@ -15301,7 +15318,7 @@ __metadata: postcss-media-query-parser: ^0.2.3 postcss-resolve-nested-selector: ^0.1.1 postcss-safe-parser: ^6.0.0 - postcss-selector-parser: ^6.0.10 + postcss-selector-parser: ^6.0.11 postcss-value-parser: ^4.2.0 resolve-from: ^5.0.0 string-width: ^4.2.3 @@ -15314,7 +15331,7 @@ __metadata: write-file-atomic: ^4.0.2 bin: stylelint: bin/stylelint.js - checksum: a3b4593a35a2303987305ca5147ea31e92a47e1994d393be8d1a07a6dc8720b9eee1fed62aafaca618cd8f06e0b3ca601af4fa6618967f1f359ea36ade4c2550 + checksum: 3b8d003aa0756cd8101e06be08a621fe4a2627c962d5ee471a231e71132ea90468f34f12f7bf8ba1e6c9857f55ac2d5c1b63f7a6e5c4ed667b1826925e0fd267 languageName: node linkType: hard @@ -16791,7 +16808,7 @@ __metadata: snabbdom: 3.5.1 speakingurl: 14.0.1 style-loader: ^3.3.1 - stylelint: 14.15.0 + stylelint: 14.16.0 stylelint-config-idiomatic-order: 9.0.0 stylelint-config-prettier: 9.0.4 svg-inline-loader: 0.8.2 From e40327415d18599714f93297b9db9d69f445df0a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 4 Dec 2022 15:32:57 +0000 Subject: [PATCH 083/329] chore(deps-dev): Bump eslint from 8.28.0 to 8.29.0 (#14252) Bumps [eslint](https://github.com/eslint/eslint) from 8.28.0 to 8.29.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v8.28.0...v8.29.0) --- updated-dependencies: - dependency-name: eslint dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] 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 5f6b70cff28..5a95799d52f 100644 --- a/package.json +++ b/package.json @@ -109,7 +109,7 @@ "dexie": "^3.2.2", "dotenv": "16.0.3", "dpdm": "3.10.0", - "eslint": "^8.28.0", + "eslint": "^8.29.0", "eslint-config-prettier": "^8.5.0", "eslint-import-resolver-alias": "^1.1.2", "eslint-import-resolver-typescript": "^3.5.2", diff --git a/yarn.lock b/yarn.lock index e97c2ec7b3b..409f52fa520 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7733,9 +7733,9 @@ __metadata: languageName: node linkType: hard -"eslint@npm:^8.28.0": - version: 8.28.0 - resolution: "eslint@npm:8.28.0" +"eslint@npm:^8.29.0": + version: 8.29.0 + resolution: "eslint@npm:8.29.0" dependencies: "@eslint/eslintrc": ^1.3.3 "@humanwhocodes/config-array": ^0.11.6 @@ -7778,7 +7778,7 @@ __metadata: text-table: ^0.2.0 bin: eslint: bin/eslint.js - checksum: 1b793486b2ec80f0602d75fff7116f7c39a3286f523608a999eead9bec4154a06841785d2b4fb87f8292a94cf85778c1dbfaec727772a09c4d604fdb9ff0809a + checksum: e05204b05907b82d910983995cb946e0ba62ca514eb2b6791c43f623333b143564a2eee0139909d31c10935c21877d815b1f76dd674a59cb91c471064325c4ab languageName: node linkType: hard @@ -16732,7 +16732,7 @@ __metadata: dexie-batch: 0.4.3 dotenv: 16.0.3 dpdm: 3.10.0 - eslint: ^8.28.0 + eslint: ^8.29.0 eslint-config-prettier: ^8.5.0 eslint-import-resolver-alias: ^1.1.2 eslint-import-resolver-typescript: ^3.5.2 From 4a4021dc8c6286c4467f864167f85ad5a0ad1b22 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 4 Dec 2022 15:33:43 +0000 Subject: [PATCH 084/329] chore(deps): Bump react-router from 6.4.3 to 6.4.4 (#14249) Bumps [react-router](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router) from 6.4.3 to 6.4.4. - [Release notes](https://github.com/remix-run/react-router/releases) - [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router/CHANGELOG.md) - [Commits](https://github.com/remix-run/react-router/commits/react-router@6.4.4/packages/react-router) --- updated-dependencies: - dependency-name: react-router dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] 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, 2 insertions(+), 20 deletions(-) diff --git a/package.json b/package.json index 5a95799d52f..37407c41fc8 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "react-dom": "18.2.0", "react-intl": "6.2.5", "react-redux": "8.0.5", - "react-router": "6.4.3", + "react-router": "6.4.4", "react-router-dom": "6.4.4", "react-transition-group": "4.4.5", "redux": "4.2.0", diff --git a/yarn.lock b/yarn.lock index 409f52fa520..14081ac6111 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2993,13 +2993,6 @@ __metadata: languageName: node linkType: hard -"@remix-run/router@npm:1.0.3": - version: 1.0.3 - resolution: "@remix-run/router@npm:1.0.3" - checksum: 7e535f3c24bf6b0a48aff3de70ee74e5402fe93105aa9bd01f275d5d8f5a9a8a7cadec08d18cf5544d4f24bc9d7a091abc1c9d4ea8efb2893e9077f104a51459 - languageName: node - linkType: hard - "@remix-run/router@npm:1.0.4": version: 1.0.4 resolution: "@remix-run/router@npm:1.0.4" @@ -13827,17 +13820,6 @@ __metadata: languageName: node linkType: hard -"react-router@npm:6.4.3": - version: 6.4.3 - resolution: "react-router@npm:6.4.3" - dependencies: - "@remix-run/router": 1.0.3 - peerDependencies: - react: ">=16.8" - checksum: b89c0495c6837b1457915c08c5acc4eb7a2e9e3fae0420faf9bfc6311ecdfe78627cc1034c0e975bccd9aeeb70d1dcc5021322779dd3053d94c47e37339d77eb - languageName: node - linkType: hard - "react-router@npm:6.4.4": version: 6.4.4 resolution: "react-router@npm:6.4.4" @@ -16794,7 +16776,7 @@ __metadata: react-dom: 18.2.0 react-intl: 6.2.5 react-redux: 8.0.5 - react-router: 6.4.3 + react-router: 6.4.4 react-router-dom: 6.4.4 react-transition-group: 4.4.5 redux: 4.2.0 From a1bb639a4b7df599e9c16f3df1d6419734fb3392 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 4 Dec 2022 15:35:43 +0000 Subject: [PATCH 085/329] chore(deps-dev): Bump typescript from 4.8.4 to 4.9.3 (#14215) Bumps [typescript](https://github.com/Microsoft/TypeScript) from 4.8.4 to 4.9.3. - [Release notes](https://github.com/Microsoft/TypeScript/releases) - [Commits](https://github.com/Microsoft/TypeScript/compare/v4.8.4...v4.9.3) --- updated-dependencies: - dependency-name: typescript dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 26 +++++++++++++++++++++++--- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 37407c41fc8..ee7c305295d 100644 --- a/package.json +++ b/package.json @@ -170,7 +170,7 @@ "text-encoding": "0.7.0", "ts-node": "10.9.1", "tsc-watch": "5.0.3", - "typescript": "^4.8.4", + "typescript": "^4.9.3", "webpack": "5.75.0", "webpack-cli": "5.0.0", "webpack-dev-middleware": "6.0.1", diff --git a/yarn.lock b/yarn.lock index 14081ac6111..6d561e2c373 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15920,7 +15920,7 @@ __metadata: languageName: node linkType: hard -"typescript@npm:4.8.4, typescript@npm:^4.7.4, typescript@npm:^4.8.4": +"typescript@npm:4.8.4, typescript@npm:^4.7.4": version: 4.8.4 resolution: "typescript@npm:4.8.4" bin: @@ -15930,7 +15930,17 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@4.8.4#~builtin, typescript@patch:typescript@^4.7.4#~builtin, typescript@patch:typescript@^4.8.4#~builtin": +"typescript@npm:^4.9.3": + version: 4.9.3 + resolution: "typescript@npm:4.9.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 17b8f816050b412403e38d48eef0e893deb6be522d6dc7caf105e54a72e34daf6835c447735fd2b28b66784e72bfbf87f627abb4818a8e43d1fa8106396128dc + languageName: node + linkType: hard + +"typescript@patch:typescript@4.8.4#~builtin, typescript@patch:typescript@^4.7.4#~builtin": version: 4.8.4 resolution: "typescript@patch:typescript@npm%3A4.8.4#~builtin::version=4.8.4&hash=a1c5e5" bin: @@ -15940,6 +15950,16 @@ __metadata: languageName: node linkType: hard +"typescript@patch:typescript@^4.9.3#~builtin": + version: 4.9.3 + resolution: "typescript@patch:typescript@npm%3A4.9.3#~builtin::version=4.9.3&hash=a1c5e5" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: ef65c22622d864497d0a0c5db693523329b3284c15fe632e93ad9aa059e8dc38ef3bd767d6f26b1e5ecf9446f49bd0f6c4e5714a2eeaf352805dc002479843d1 + languageName: node + linkType: hard + "typeson-registry@npm:^1.0.0-alpha.20": version: 1.0.0-alpha.38 resolution: "typeson-registry@npm:1.0.0-alpha.38" @@ -16800,7 +16820,7 @@ __metadata: ts-node: 10.9.1 tsc-watch: 5.0.3 tsyringe: 4.7.0 - typescript: ^4.8.4 + typescript: ^4.9.3 uint32: 0.2.1 underscore: 1.13.6 uuidjs: 4.2.12 From 429bd2ff52333294c7cbb30bbc5163c8836f8ad1 Mon Sep 17 00:00:00 2001 From: Arjita Date: Mon, 5 Dec 2022 11:17:30 +0100 Subject: [PATCH 086/329] fix: Secondary button right click needs to fall back to browser default right click[chat message markdown click](ACC-316) (#14255) --- src/script/components/Conversation/Conversation.tsx | 11 +++++++---- src/script/guards/Mouse.ts | 8 ++++++++ 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/script/components/Conversation/Conversation.tsx b/src/script/components/Conversation/Conversation.tsx index cc24cbe8180..2cbf02ab20c 100644 --- a/src/script/components/Conversation/Conversation.tsx +++ b/src/script/components/Conversation/Conversation.tsx @@ -48,7 +48,7 @@ import {Message} from '../../entity/message/Message'; import {Text} from '../../entity/message/Text'; import {User} from '../../entity/User'; import {UserError} from '../../error/UserError'; -import {isMouseEvent} from '../../guards/Mouse'; +import {isMouseRightClickEvent, isAuxRightClickEvent} from '../../guards/Mouse'; import {isServiceEntity} from '../../guards/Service'; import {ServiceEntity} from '../../integration/ServiceEntity'; import {MotionDuration} from '../../motion/MotionDuration'; @@ -188,7 +188,11 @@ export const Conversation: FC = ({ return false; }; - const handleMarkdownLinkClick = (event: Event, messageDetails: MessageDetails) => { + const handleMarkdownLinkClick = (event: MouseEvent | KeyboardEvent, messageDetails: MessageDetails) => { + if (isAuxRightClickEvent(event)) { + // Default browser behavior on right click + return true; + } const href = messageDetails.href!; PrimaryModal.show(PrimaryModal.type.CONFIRM, { primaryAction: { @@ -222,7 +226,6 @@ export const Conversation: FC = ({ } }; - const btnRightClick = 2; const handleClickOnMessage = ( messageEntity: ContentMessage | Text, event: MouseEvent | KeyboardEvent, @@ -233,7 +236,7 @@ export const Conversation: FC = ({ userDomain: '', }, ) => { - if (isMouseEvent(event) && event.button === btnRightClick) { + if (isMouseRightClickEvent(event)) { // Default browser behavior on right click return true; } diff --git a/src/script/guards/Mouse.ts b/src/script/guards/Mouse.ts index 2d67779e39c..014765e56bc 100644 --- a/src/script/guards/Mouse.ts +++ b/src/script/guards/Mouse.ts @@ -17,4 +17,12 @@ * */ +const secondaryBtnRightClick = 2; export const isMouseEvent = (event: MouseEvent | KeyboardEvent): event is MouseEvent => event.type === 'click'; +export const isAuxClickEvent = (event: MouseEvent | KeyboardEvent): event is MouseEvent => event.type === 'auxclick'; + +export const isMouseRightClickEvent = (event: MouseEvent | KeyboardEvent): event is MouseEvent => + isMouseEvent(event) && event.button === secondaryBtnRightClick; + +export const isAuxRightClickEvent = (event: MouseEvent | KeyboardEvent): event is MouseEvent => + isAuxClickEvent(event) && event.button === secondaryBtnRightClick; From 3ed2ebf8977e4846273f120d4dfa903e1dd64684 Mon Sep 17 00:00:00 2001 From: Arjita Date: Mon, 5 Dec 2022 12:01:57 +0100 Subject: [PATCH 087/329] fix: reloading an active conversation is jumping onto wrong conversation(ACC-268) (#14256) * fix: reloading an active conversation is loading wrong conversation id(ACC-268) wrong conversation id sometimes jumping to a wrong conversation * Update src/script/page/AppMain.tsx Co-authored-by: Thomas Belin Co-authored-by: Thomas Belin --- src/script/components/list/ConversationListCell.tsx | 8 -------- src/script/page/AppMain.tsx | 8 ++++++++ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/script/components/list/ConversationListCell.tsx b/src/script/components/list/ConversationListCell.tsx index 58fbd614205..90febb11b08 100644 --- a/src/script/components/list/ConversationListCell.tsx +++ b/src/script/components/list/ConversationListCell.tsx @@ -32,8 +32,6 @@ import {AvailabilityState} from 'Components/AvailabilityState'; import {Avatar, AVATAR_SIZE} from 'Components/Avatar'; import {GroupAvatar} from 'Components/avatar/GroupAvatar'; import {Icon} from 'Components/Icon'; -import {generateConversationUrl} from 'src/script/router/routeGenerator'; -import {setHistoryParam} from 'src/script/router/Router'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; import {isKey, isOneOfKeys, KEY} from 'Util/KeyboardUtil'; import {t} from 'Util/LocalizerUtil'; @@ -173,12 +171,6 @@ const ConversationListCell: React.FC = ({ } }, [index, isActive, isFolder, isConversationListFocus, handleFocus]); - // on conversation/app load reset last message focus to ensure last message is focused - // only when user enters a new conversation using keyboard(press enter) - useEffect(() => { - setHistoryParam(generateConversationUrl(conversation.qualifiedId)); - }, [conversation]); - return (
  • = ({ } }; + // on app load reset last message focus to ensure last message is focused + // only when user enters a new conversation using keyboard(press enter) + const historyState = window.history.state; + if (historyState && !!historyState.eventKey) { + historyState.eventKey = ''; + window.history.replaceState(historyState, '', window.location.hash); + } + configureRoutes({ '/': showMostRecentConversation, '/conversation/:conversationId(/:domain)': (conversationId: string, domain: string = apiContext.domain ?? '') => From ba9982e7de41efa719181835c7d173e17641ffee Mon Sep 17 00:00:00 2001 From: Thomas Belin Date: Mon, 5 Dec 2022 12:09:16 +0100 Subject: [PATCH 088/329] feat: Send self device sync message through MLS and proteus conversations [FS-1208] (#14254) --- .../components/userDevices/DeviceDetails.tsx | 4 +- .../conversation/ConversationState.test.ts | 40 ++++++++++++++++--- src/script/conversation/ConversationState.ts | 27 +++++++------ src/script/conversation/MessageRepository.ts | 27 ++++++++----- .../devices/DevicesPreferences.tsx | 4 +- 5 files changed, 72 insertions(+), 30 deletions(-) diff --git a/src/script/components/userDevices/DeviceDetails.tsx b/src/script/components/userDevices/DeviceDetails.tsx index 26f460d1fe6..a8c05e6520c 100644 --- a/src/script/components/userDevices/DeviceDetails.tsx +++ b/src/script/components/userDevices/DeviceDetails.tsx @@ -89,7 +89,9 @@ const DeviceDetails: React.FC = ({ const clickToResetSession = () => { const _resetProgress = () => window.setTimeout(() => setIsResettingSession(false), MotionDuration.LONG); - const conversation = user.isMe ? conversationState.getSelfConversation() : conversationState.activeConversation(); + const conversation = user.isMe + ? conversationState.getSelfProteusConversation() + : conversationState.activeConversation(); setIsResettingSession(true); if (conversation) { messageRepository diff --git a/src/script/conversation/ConversationState.test.ts b/src/script/conversation/ConversationState.test.ts index c3a420d883d..a2f33f3fc1c 100644 --- a/src/script/conversation/ConversationState.test.ts +++ b/src/script/conversation/ConversationState.test.ts @@ -48,18 +48,48 @@ describe('ConversationState', () => { const selfMLSConversation = createConversation(ConversationProtocol.MLS, CONVERSATION_TYPE.SELF); const regularConversation = createConversation(); - describe('getSelfConversation', () => { + describe('getSelfProteusConversation', () => { it('throws if no self conversation are set', () => { const conversationState = createConversationState(); - expect(() => conversationState.getSelfConversation()).toThrow('proteus'); - expect(() => conversationState.getSelfConversation(true)).toThrow('MLS'); + expect(() => conversationState.getSelfProteusConversation()).toThrow('proteus'); }); it('finds the MLS and proteus self conversations', () => { const conversationState = createConversationState(); conversationState.conversations([selfProteusConversation, selfMLSConversation, regularConversation]); - expect(conversationState.getSelfConversation()).toBe(selfProteusConversation); - expect(conversationState.getSelfConversation(true)).toBe(selfMLSConversation); + expect(conversationState.getSelfProteusConversation()).toBe(selfProteusConversation); + }); + }); + + describe('getSelfConversations', () => { + it('returns empty array if there are no self conversations', () => { + const conversationState = createConversationState(); + expect(conversationState.getSelfConversations(true)).toEqual([]); + conversationState.conversations([selfProteusConversation, selfMLSConversation, regularConversation]); + }); + + it('returns only proteus self conversation', () => { + const conversationState = createConversationState(); + conversationState.conversations([selfProteusConversation, regularConversation]); + expect(conversationState.getSelfConversations(true)).toEqual([selfProteusConversation]); + }); + + it('returns only mls self conversation', () => { + const conversationState = createConversationState(); + conversationState.conversations([selfMLSConversation, regularConversation]); + expect(conversationState.getSelfConversations(true)).toEqual([selfMLSConversation]); + }); + + it('returns both the self MLS and proteus conversations', () => { + const conversationState = createConversationState(); + conversationState.conversations([selfProteusConversation, selfMLSConversation, regularConversation]); + expect(conversationState.getSelfConversations(true)).toEqual([selfProteusConversation, selfMLSConversation]); + }); + + it('filters out mls conversation if not supported', () => { + const conversationState = createConversationState(); + conversationState.conversations([selfProteusConversation, selfMLSConversation, regularConversation]); + expect(conversationState.getSelfConversations(false)).toEqual([selfProteusConversation]); }); }); diff --git a/src/script/conversation/ConversationState.ts b/src/script/conversation/ConversationState.ts index 60be4b59430..8c8be793ac4 100644 --- a/src/script/conversation/ConversationState.ts +++ b/src/script/conversation/ConversationState.ts @@ -118,20 +118,23 @@ export class ConversationState { }); } - getSelfConversation(useMLS: boolean = false): Conversation { - if (!useMLS) { - const proteusConversation = this.selfProteusConversation(); - if (!proteusConversation) { - throw new Error('No proteus self conversation'); - } - return proteusConversation; - } + /** + * Returns all the selfConversations available (proteus and MLS) + * The MLS conversation can be manually filtered (in case MLS is not supported) + * @param includeMLS will filter out the MLS self conversation if false + */ + getSelfConversations(includeMLS: boolean): Conversation[] { + const baseConversations = [this.selfProteusConversation()]; + const selfConversations = includeMLS ? baseConversations.concat(this.selfMLSConversation()) : baseConversations; + return selfConversations.filter((conversation): conversation is Conversation => !!conversation); + } - const mlsConversation = this.selfMLSConversation(); - if (!mlsConversation) { - throw new Error('No MLS self conversation'); + getSelfProteusConversation(): Conversation { + const proteusConversation = this.selfProteusConversation(); + if (!proteusConversation) { + throw new Error('No proteus self conversation'); } - return mlsConversation; + return proteusConversation; } /** diff --git a/src/script/conversation/MessageRepository.ts b/src/script/conversation/MessageRepository.ts index 9d5a4d408f8..bbc279e2b49 100644 --- a/src/script/conversation/MessageRepository.ts +++ b/src/script/conversation/MessageRepository.ts @@ -55,7 +55,7 @@ import {roundLogarithmic} from 'Util/NumberUtil'; import {matchQualifiedIds} from 'Util/QualifiedId'; import {capitalizeFirstChar} from 'Util/StringUtil'; import {TIME_IN_MILLIS} from 'Util/TimeUtil'; -import {createRandomUuid, loadUrlBlob} from 'Util/util'; +import {createRandomUuid, loadUrlBlob, supportsMLS} from 'Util/util'; import {findDeletedClients} from './ClientMismatchUtil'; import {ConversationRepository} from './ConversationRepository'; @@ -969,16 +969,13 @@ export class MessageRepository { */ public async deleteMessage(conversation: Conversation, message: Message): Promise { try { - const selfConversation = this.conversationState.getSelfConversation(); const payload = MessageBuilder.buildHideMessage({ conversationId: conversation.id, messageId: message.id, qualifiedConversationId: conversation.qualifiedId, }); - await this.sendAndInjectMessage(payload, selfConversation, { - skipInjection: true, - }); + await this.sendToSelfConversations(payload); await this.deleteMessageById(conversation, message.id); } catch (error) { this.logger.info( @@ -989,15 +986,25 @@ export class MessageRepository { } } + private async sendToSelfConversations(payload: GenericMessage) { + const selfConversations = this.conversationState.getSelfConversations(supportsMLS()); + await Promise.all( + selfConversations.map(selfConversation => + this.sendAndInjectMessage(payload, selfConversation, { + skipInjection: true, + }), + ), + ); + } + /** * Update cleared of conversation using timestamp. */ public async updateClearedTimestamp(conversation: Conversation): Promise { const timestamp = conversation.getLastKnownTimestamp(this.serverTimeHandler.toServerTimestamp()); - const selfConversation = this.conversationState.getSelfConversation(); if (timestamp && conversation.setTimestamp(timestamp, Conversation.TIMESTAMP_TYPE.CLEARED)) { const payload = MessageBuilder.buildClearedMessage(conversation.qualifiedId); - await this.sendAndInjectMessage(payload, selfConversation, {skipInjection: true}); + await this.sendToSelfConversations(payload); } } @@ -1235,10 +1242,9 @@ export class MessageRepository { * @param conversation Conversation to be marked as read */ public async markAsRead(conversation: Conversation) { - const selfConversation = this.conversationState.getSelfConversation(); const timestamp = conversation.last_read_timestamp(); const payload = MessageBuilder.buildLastReadMessage(conversation.qualifiedId, timestamp); - await this.sendAndInjectMessage(payload, selfConversation, {skipInjection: true}); + await this.sendToSelfConversations(payload); /* * FIXME notification removal can be improved. * We can add the conversation ID in the payload of the event and only check unread messages for this particular conversation @@ -1253,9 +1259,8 @@ export class MessageRepository { * @param countlyId Countly new ID */ public async sendCountlySync(countlyId: string) { - const selfConversation = this.conversationState.getSelfConversation(); const payload = MessageBuilder.buildDataTransferMessage(countlyId); - await this.sendAndInjectMessage(payload, selfConversation, {skipInjection: true}); + await this.sendToSelfConversations(payload); this.logger.info(`Sent countly sync message with ID ${countlyId}`); } diff --git a/src/script/page/MainContent/panels/preferences/devices/DevicesPreferences.tsx b/src/script/page/MainContent/panels/preferences/devices/DevicesPreferences.tsx index bb028ffcfee..88c88371554 100644 --- a/src/script/page/MainContent/panels/preferences/devices/DevicesPreferences.tsx +++ b/src/script/page/MainContent/panels/preferences/devices/DevicesPreferences.tsx @@ -153,7 +153,9 @@ const DevicesPreferences: React.FC = ({ }} onClose={() => setSelectedDevice(undefined)} onVerify={(device, verified) => verifyDevice(self.qualifiedId, device, verified)} - onResetSession={device => resetSession(self.qualifiedId, device, conversationState.getSelfConversation())} + onResetSession={device => + resetSession(self.qualifiedId, device, conversationState.getSelfProteusConversation()) + } /> ); } From e3a42e8234592f9f4d26f2b10aaa80393888e5fd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Dec 2022 16:30:07 +0100 Subject: [PATCH 089/329] chore(deps-dev): Bump caniuse-lite from 1.0.30001435 to 1.0.30001436 (#14246) Bumps [caniuse-lite](https://github.com/browserslist/caniuse-lite) from 1.0.30001435 to 1.0.30001436. - [Release notes](https://github.com/browserslist/caniuse-lite/releases) - [Commits](https://github.com/browserslist/caniuse-lite/compare/1.0.30001435...1.0.30001436) --- updated-dependencies: - dependency-name: caniuse-lite dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] 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 ee7c305295d..b79676ad8aa 100644 --- a/package.json +++ b/package.json @@ -101,7 +101,7 @@ "archiver": "^5.3.1", "autoprefixer": "^10.4.13", "babel-loader": "9.1.0", - "caniuse-lite": "^1.0.30001435", + "caniuse-lite": "^1.0.30001436", "cross-env": "7.0.3", "cspell": "6.16.0", "css-loader": "^6.7.2", diff --git a/yarn.lock b/yarn.lock index 6d561e2c373..eb72afafa35 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5666,10 +5666,10 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.30001435": - version: 1.0.30001435 - resolution: "caniuse-lite@npm:1.0.30001435" - checksum: ec88b9c37f66095e26ddb8b43110e9564ebccb6de77e495b8e8b9d64fdbfe37f7762be8fd2578c3ecc181a183a159578c9bd8e9b90eb15b44b78e8a6d0e92530 +"caniuse-lite@npm:^1.0.30001436": + version: 1.0.30001436 + resolution: "caniuse-lite@npm:1.0.30001436" + checksum: 7928ac7d93741a81b3005ca4623b133e7d790828be70b26ee55e4860facc59bc344f4092e20034981070a4714f70814c8be4929be4b22728031784f267f69099 languageName: node linkType: hard @@ -16720,7 +16720,7 @@ __metadata: autoprefixer: ^10.4.13 babel-loader: 9.1.0 beautiful-react-hooks: ^3.11.2 - caniuse-lite: ^1.0.30001435 + caniuse-lite: ^1.0.30001436 classnames: 2.3.2 copy-webpack-plugin: 11.0.0 core-js: 3.25.5 From 292bfa8fdf3f010e8a09bfc289dfd1b74259b0c2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Dec 2022 16:32:33 +0100 Subject: [PATCH 090/329] chore(deps): Bump fs-extra from 10.1.0 to 11.1.0 in /server (#14239) Bumps [fs-extra](https://github.com/jprichardson/node-fs-extra) from 10.1.0 to 11.1.0. - [Release notes](https://github.com/jprichardson/node-fs-extra/releases) - [Changelog](https://github.com/jprichardson/node-fs-extra/blob/master/CHANGELOG.md) - [Commits](https://github.com/jprichardson/node-fs-extra/compare/10.1.0...11.1.0) --- updated-dependencies: - dependency-name: fs-extra dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- server/package.json | 2 +- server/yarn.lock | 13 ++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/server/package.json b/server/package.json index a019ccb7412..dcf06f65014 100644 --- a/server/package.json +++ b/server/package.json @@ -10,7 +10,7 @@ "express": "4.18.2", "express-sitemap-xml": "3.0.1", "express-useragent": "1.0.15", - "fs-extra": "10.1.0", + "fs-extra": "11.1.0", "geolite2": "1.3.0", "hbs": "4.2.0", "helmet": "6.0.1", diff --git a/server/yarn.lock b/server/yarn.lock index 2a233ce5333..cada22e4428 100644 --- a/server/yarn.lock +++ b/server/yarn.lock @@ -2905,6 +2905,17 @@ __metadata: languageName: node linkType: hard +"fs-extra@npm:11.1.0": + version: 11.1.0 + resolution: "fs-extra@npm:11.1.0" + dependencies: + graceful-fs: ^4.2.0 + jsonfile: ^6.0.1 + universalify: ^2.0.0 + checksum: 5ca476103fa1f5ff4a9b3c4f331548f8a3c1881edaae323a4415d3153b5dc11dc6a981c8d1dd93eec8367ceee27b53f8bd27eecbbf66ffcdd04927510c171e7f + languageName: node + linkType: hard + "fs-extra@npm:^8.1.0": version: 8.1.0 resolution: "fs-extra@npm:8.1.0" @@ -6478,7 +6489,7 @@ __metadata: express: 4.18.2 express-sitemap-xml: 3.0.1 express-useragent: 1.0.15 - fs-extra: 10.1.0 + fs-extra: 11.1.0 geolite2: 1.3.0 hbs: 4.2.0 helmet: 6.0.1 From 8d3a55a67ef05955eaa01667f527d75403a3a681 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Dec 2022 15:50:20 +0000 Subject: [PATCH 091/329] chore(deps-dev): Bump jest-environment-jsdom from 29.2.2 to 29.3.1 (#14232) Bumps [jest-environment-jsdom](https://github.com/facebook/jest/tree/HEAD/packages/jest-environment-jsdom) from 29.2.2 to 29.3.1. - [Release notes](https://github.com/facebook/jest/releases) - [Changelog](https://github.com/facebook/jest/blob/main/CHANGELOG.md) - [Commits](https://github.com/facebook/jest/commits/v29.3.1/packages/jest-environment-jsdom) --- updated-dependencies: - dependency-name: jest-environment-jsdom dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 57 +++++++++------------------------------------------- 2 files changed, 11 insertions(+), 48 deletions(-) diff --git a/package.json b/package.json index b79676ad8aa..50c807067a8 100644 --- a/package.json +++ b/package.json @@ -138,7 +138,7 @@ "intersection-observer": "0.12.2", "jest": "29.3.1", "jest-canvas-mock": "2.4.0", - "jest-environment-jsdom": "29.2.2", + "jest-environment-jsdom": "29.3.1", "jest-jasmine2": "29.3.1", "jsdom-worker": "0.3.0", "less": "3.13.1", diff --git a/yarn.lock b/yarn.lock index eb72afafa35..c9761585746 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2513,18 +2513,6 @@ __metadata: languageName: node linkType: hard -"@jest/environment@npm:^29.2.2": - version: 29.2.2 - resolution: "@jest/environment@npm:29.2.2" - dependencies: - "@jest/fake-timers": ^29.2.2 - "@jest/types": ^29.2.1 - "@types/node": "*" - jest-mock: ^29.2.2 - checksum: c610e0d8d2f3d8763d6f5b5f8e146306f77c32117e8e8a169fc0d3aa6093b40c4942ef58bf3af7f6a1b4f66eed37e45097323cfe3f9100e368d49fa843b75118 - languageName: node - linkType: hard - "@jest/environment@npm:^29.3.1": version: 29.3.1 resolution: "@jest/environment@npm:29.3.1" @@ -2565,20 +2553,6 @@ __metadata: languageName: node linkType: hard -"@jest/fake-timers@npm:^29.2.2": - version: 29.2.2 - resolution: "@jest/fake-timers@npm:29.2.2" - dependencies: - "@jest/types": ^29.2.1 - "@sinonjs/fake-timers": ^9.1.2 - "@types/node": "*" - jest-message-util: ^29.2.1 - jest-mock: ^29.2.2 - jest-util: ^29.2.1 - checksum: aa50573ed899d14ce6afef19ea7f607fd2a091e22b37b17eec4a3b046b5236385f8221cff701329439d758badcec5a3b4d9bfc22fc6c7128d34d1b1c21333c73 - languageName: node - linkType: hard - "@jest/fake-timers@npm:^29.3.1": version: 29.3.1 resolution: "@jest/fake-timers@npm:29.3.1" @@ -10012,24 +9986,24 @@ __metadata: languageName: node linkType: hard -"jest-environment-jsdom@npm:29.2.2": - version: 29.2.2 - resolution: "jest-environment-jsdom@npm:29.2.2" +"jest-environment-jsdom@npm:29.3.1": + version: 29.3.1 + resolution: "jest-environment-jsdom@npm:29.3.1" dependencies: - "@jest/environment": ^29.2.2 - "@jest/fake-timers": ^29.2.2 - "@jest/types": ^29.2.1 + "@jest/environment": ^29.3.1 + "@jest/fake-timers": ^29.3.1 + "@jest/types": ^29.3.1 "@types/jsdom": ^20.0.0 "@types/node": "*" - jest-mock: ^29.2.2 - jest-util: ^29.2.1 + jest-mock: ^29.3.1 + jest-util: ^29.3.1 jsdom: ^20.0.0 peerDependencies: canvas: ^2.5.0 peerDependenciesMeta: canvas: optional: true - checksum: ba612bf496a124ea58579f40b1a027cd6cfe9f4650c8131b757aed2644a2621843c2d4455079ae932416e7c1bd04fa85e362d9113442b5b8b9b2dbee1c5dcfa4 + checksum: 91b04ed02b2275c3a47740e20c2691f67c4295e17174c8ccd3a71fe77707239e487506bd157279b4257ce1be0a8c2be377817ee85689966a9e604bb6ef1199f0 languageName: node linkType: hard @@ -10170,17 +10144,6 @@ __metadata: languageName: node linkType: hard -"jest-mock@npm:^29.2.2": - version: 29.2.2 - resolution: "jest-mock@npm:29.2.2" - dependencies: - "@jest/types": ^29.2.1 - "@types/node": "*" - jest-util: ^29.2.1 - checksum: 9efc3519f50cc911bf759ec65434222c0d80ca033eede5705deb63e0cdad1e25d59e27691aec125d19cb312d46a09509ed205779b4fe60e64cbf54a76903ba58 - languageName: node - linkType: hard - "jest-mock@npm:^29.3.1": version: 29.3.1 resolution: "jest-mock@npm:29.3.1" @@ -16765,7 +16728,7 @@ __metadata: intersection-observer: 0.12.2 jest: 29.3.1 jest-canvas-mock: 2.4.0 - jest-environment-jsdom: 29.2.2 + jest-environment-jsdom: 29.3.1 jest-jasmine2: 29.3.1 jquery: 3.6.1 js-cookie: 3.0.1 From 6b2a9b4b94365df1b85d32b1889b85cbd0a90008 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Dec 2022 17:36:52 +0100 Subject: [PATCH 092/329] chore(deps-dev): Bump jest from 27.5.1 to 29.3.1 in /server (#14149) * chore(deps-dev): Bump jest from 27.5.1 to 29.3.1 in /server Bumps [jest](https://github.com/facebook/jest/tree/HEAD/packages/jest) from 27.5.1 to 29.3.1. - [Release notes](https://github.com/facebook/jest/releases) - [Changelog](https://github.com/facebook/jest/blob/main/CHANGELOG.md) - [Commits](https://github.com/facebook/jest/commits/v29.3.1/packages/jest) --- updated-dependencies: - dependency-name: jest dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] * fix jest config Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Thomas Belin --- server/babel.config.js | 26 + server/jest.config.js | 3 +- server/package.json | 5 +- server/yarn.lock | 2110 +++++++++++++++------------------------- 4 files changed, 828 insertions(+), 1316 deletions(-) create mode 100644 server/babel.config.js diff --git a/server/babel.config.js b/server/babel.config.js new file mode 100644 index 00000000000..1959e397d0e --- /dev/null +++ b/server/babel.config.js @@ -0,0 +1,26 @@ +/* + * Wire + * Copyright (C) 2022 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/. + * + */ + +module.exports = { + env: { + test: { + presets: ['@babel/preset-typescript', ['@babel/preset-env', {modules: 'commonjs'}]], + }, + }, +}; diff --git a/server/jest.config.js b/server/jest.config.js index d0ea5c94a64..30062b84d31 100644 --- a/server/jest.config.js +++ b/server/jest.config.js @@ -18,8 +18,7 @@ */ module.exports = { - moduleDirectories: ['node_modules', './'], - preset: 'ts-jest', + moduleDirectories: ['node_modules', __dirname], testEnvironment: 'node', testPathIgnorePatterns: ['/dist'], testRegex: '(test|Spec)\\.[tj]sx?$', diff --git a/server/package.json b/server/package.json index dcf06f65014..293125593a2 100644 --- a/server/package.json +++ b/server/package.json @@ -28,11 +28,10 @@ "@types/fs-extra": "9.0.13", "@types/geolite2": "2.0.0", "@types/hbs": "4.0.1", + "@types/jest": "^29.2.4", "@types/node": "12.20.55", - "jest": "27.5.1", + "jest": "29.3.1", "rimraf": "3.0.2", - "ts-jest": "29.0.3", - "ts-node": "10.9.1", "typescript": "4.9.3" }, "scripts": { diff --git a/server/yarn.lock b/server/yarn.lock index cada22e4428..08f7d7e4792 100644 --- a/server/yarn.lock +++ b/server/yarn.lock @@ -14,7 +14,7 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.11": +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4": version: 7.12.11 resolution: "@babel/code-frame@npm:7.12.11" dependencies: @@ -32,6 +32,15 @@ __metadata: languageName: node linkType: hard +"@babel/code-frame@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/code-frame@npm:7.18.6" + dependencies: + "@babel/highlight": ^7.18.6 + checksum: 195e2be3172d7684bf95cff69ae3b7a15a9841ea9d27d3c843662d50cdd7d6470fd9c8e64be84d031117e4a4083486effba39f9aef6bbb2c89f7f21bcfba33ba + languageName: node + linkType: hard + "@babel/compat-data@npm:^7.17.7": version: 7.17.7 resolution: "@babel/compat-data@npm:7.17.7" @@ -39,30 +48,37 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.1.0": - version: 7.12.10 - resolution: "@babel/core@npm:7.12.10" +"@babel/compat-data@npm:^7.20.0": + version: 7.20.5 + resolution: "@babel/compat-data@npm:7.20.5" + checksum: 523790c43ef6388fae91d1ca9acf1ab0e1b22208dcd39c0e5e7a6adf0b48a133f1831be8d5931a72ecd48860f3e3fb777cb89840794abd8647a5c8e5cfab484e + languageName: node + linkType: hard + +"@babel/core@npm:^7.11.6": + version: 7.20.5 + resolution: "@babel/core@npm:7.20.5" dependencies: - "@babel/code-frame": ^7.10.4 - "@babel/generator": ^7.12.10 - "@babel/helper-module-transforms": ^7.12.1 - "@babel/helpers": ^7.12.5 - "@babel/parser": ^7.12.10 - "@babel/template": ^7.12.7 - "@babel/traverse": ^7.12.10 - "@babel/types": ^7.12.10 + "@ampproject/remapping": ^2.1.0 + "@babel/code-frame": ^7.18.6 + "@babel/generator": ^7.20.5 + "@babel/helper-compilation-targets": ^7.20.0 + "@babel/helper-module-transforms": ^7.20.2 + "@babel/helpers": ^7.20.5 + "@babel/parser": ^7.20.5 + "@babel/template": ^7.18.10 + "@babel/traverse": ^7.20.5 + "@babel/types": ^7.20.5 convert-source-map: ^1.7.0 debug: ^4.1.0 - gensync: ^1.0.0-beta.1 - json5: ^2.1.2 - lodash: ^4.17.19 - semver: ^5.4.1 - source-map: ^0.5.0 - checksum: fc077c6dfcbf33d047743ab2562f9b6113ee9bd32921e268676aac75eed7caed80d6bea1d928aebb509cbd5cc146c15977e54249dcfec03c248ae828ad37331a + gensync: ^1.0.0-beta.2 + json5: ^2.2.1 + semver: ^6.3.0 + checksum: 9547f1e6364bc58c3621e3b17ec17f0d034ff159e5a520091d9381608d40af3be4042dd27c20ad7d3e938422d75850ac56a3758d6801d65df701557af4bd244b languageName: node linkType: hard -"@babel/core@npm:^7.12.3, @babel/core@npm:^7.7.2, @babel/core@npm:^7.8.0": +"@babel/core@npm:^7.12.3": version: 7.17.9 resolution: "@babel/core@npm:7.17.9" dependencies: @@ -85,17 +101,6 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.12.10, @babel/generator@npm:^7.12.11": - version: 7.12.11 - resolution: "@babel/generator@npm:7.12.11" - dependencies: - "@babel/types": ^7.12.11 - jsesc: ^2.5.1 - source-map: ^0.5.0 - checksum: a8d4a772503fd3d2f4b83b708aac72226659e600468bec7a097b8291c2b016566e1acdf153ed278e2eeda24d8108385100fa6d842d5152fa338ac1a56bd1025d - languageName: node - linkType: hard - "@babel/generator@npm:^7.17.9, @babel/generator@npm:^7.7.2": version: 7.17.9 resolution: "@babel/generator@npm:7.17.9" @@ -107,6 +112,17 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.20.5": + version: 7.20.5 + resolution: "@babel/generator@npm:7.20.5" + dependencies: + "@babel/types": ^7.20.5 + "@jridgewell/gen-mapping": ^0.3.2 + jsesc: ^2.5.1 + checksum: 31c10d1e122f08cf755a24bd6f5d197f47eceba03f1133759687d00ab72d210e60ba4011da42f368b6e9fa85cbfda7dc4adb9889c2c20cc5c34bb2d57c1deab7 + languageName: node + linkType: hard + "@babel/helper-compilation-targets@npm:^7.17.7": version: 7.17.7 resolution: "@babel/helper-compilation-targets@npm:7.17.7" @@ -121,6 +137,20 @@ __metadata: languageName: node linkType: hard +"@babel/helper-compilation-targets@npm:^7.20.0": + version: 7.20.0 + resolution: "@babel/helper-compilation-targets@npm:7.20.0" + dependencies: + "@babel/compat-data": ^7.20.0 + "@babel/helper-validator-option": ^7.18.6 + browserslist: ^4.21.3 + semver: ^6.3.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: bc183f2109648849c8fde0b3c5cf08adf2f7ad6dc617b546fd20f34c8ef574ee5ee293c8d1bd0ed0221212e8f5907cdc2c42097870f1dcc769a654107d82c95b + languageName: node + linkType: hard + "@babel/helper-environment-visitor@npm:^7.16.7": version: 7.16.7 resolution: "@babel/helper-environment-visitor@npm:7.16.7" @@ -130,14 +160,10 @@ __metadata: languageName: node linkType: hard -"@babel/helper-function-name@npm:^7.12.11": - version: 7.12.11 - resolution: "@babel/helper-function-name@npm:7.12.11" - dependencies: - "@babel/helper-get-function-arity": ^7.12.10 - "@babel/template": ^7.12.7 - "@babel/types": ^7.12.11 - checksum: 7eba7b7f4cf7e7a517067e9e53cbb30c2031ca95c7e03766ac7edaef1d6b9b1ccb3bd9df0afa157fe2b4ccba80cc034b71647948d88e35a0645f653f3b99c31a +"@babel/helper-environment-visitor@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/helper-environment-visitor@npm:7.18.9" + checksum: b25101f6162ddca2d12da73942c08ad203d7668e06663df685634a8fde54a98bc015f6f62938e8554457a592a024108d45b8f3e651fd6dcdb877275b73cc4420 languageName: node linkType: hard @@ -151,12 +177,13 @@ __metadata: languageName: node linkType: hard -"@babel/helper-get-function-arity@npm:^7.12.10": - version: 7.12.10 - resolution: "@babel/helper-get-function-arity@npm:7.12.10" +"@babel/helper-function-name@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/helper-function-name@npm:7.19.0" dependencies: - "@babel/types": ^7.12.10 - checksum: c11c0d722beda374e7213113d979c4b6b91bf4befd63843670c0ab4525f8f59a63903298b01dd721db83f7538f75454e0e524fe21773fbdb01fb5cb25ac3eb9b + "@babel/template": ^7.18.10 + "@babel/types": ^7.19.0 + checksum: eac1f5db428ba546270c2b8d750c24eb528b8fcfe50c81de2e0bdebf0e20f24bec688d4331533b782e4a907fad435244621ca2193cfcf80a86731299840e0f6e languageName: node linkType: hard @@ -169,21 +196,12 @@ __metadata: languageName: node linkType: hard -"@babel/helper-member-expression-to-functions@npm:^7.12.7": - version: 7.12.7 - resolution: "@babel/helper-member-expression-to-functions@npm:7.12.7" +"@babel/helper-hoist-variables@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-hoist-variables@npm:7.18.6" dependencies: - "@babel/types": ^7.12.7 - checksum: fb628a9d36e0d9db1654091a443f09d1450f49a5f9bb9f06bf838a8f8f7e6716eba2e9b7aef0e13d5607553516ad540dd8367a3f48360d2a686625c8c8e97783 - languageName: node - linkType: hard - -"@babel/helper-module-imports@npm:^7.12.1": - version: 7.12.5 - resolution: "@babel/helper-module-imports@npm:7.12.5" - dependencies: - "@babel/types": ^7.12.5 - checksum: 7a9419ead89df6347c764a2a177391e296a5b106cefaaa3f4977b932c4333d63df4131fb1f4ca953aba0b7cc1a379ac0463e00602d1bca87c559ba3cb98d42f1 + "@babel/types": ^7.18.6 + checksum: fd9c35bb435fda802bf9ff7b6f2df06308a21277c6dec2120a35b09f9de68f68a33972e2c15505c1a1a04b36ec64c9ace97d4a9e26d6097b76b4396b7c5fa20f languageName: node linkType: hard @@ -196,20 +214,12 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.12.1": - version: 7.12.1 - resolution: "@babel/helper-module-transforms@npm:7.12.1" +"@babel/helper-module-imports@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-module-imports@npm:7.18.6" dependencies: - "@babel/helper-module-imports": ^7.12.1 - "@babel/helper-replace-supers": ^7.12.1 - "@babel/helper-simple-access": ^7.12.1 - "@babel/helper-split-export-declaration": ^7.11.0 - "@babel/helper-validator-identifier": ^7.10.4 - "@babel/template": ^7.10.4 - "@babel/traverse": ^7.12.1 - "@babel/types": ^7.12.1 - lodash: ^4.17.19 - checksum: 44715a43f8a3cc9927b50f04361626f12f3e7097474d6445cc29be0782d20af58c20b49036c109d3915734ce2257f7d6c9002c265fbe18ad8b924947667460a3 + "@babel/types": ^7.18.6 + checksum: f393f8a3b3304b1b7a288a38c10989de754f01d29caf62ce7c4e5835daf0a27b81f3ac687d9d2780d39685aae7b55267324b512150e7b2be967b0c493b6a1def languageName: node linkType: hard @@ -229,12 +239,19 @@ __metadata: languageName: node linkType: hard -"@babel/helper-optimise-call-expression@npm:^7.12.10": - version: 7.12.10 - resolution: "@babel/helper-optimise-call-expression@npm:7.12.10" +"@babel/helper-module-transforms@npm:^7.20.2": + version: 7.20.2 + resolution: "@babel/helper-module-transforms@npm:7.20.2" dependencies: - "@babel/types": ^7.12.10 - checksum: 95b81587148b8bd371cda78826cc75a6212039062d780d87f5c1b7142a0f92a88b0d0d0c61887acaed34f7ce9eaa96c6ef1962d6118f4f64b6b031a77b28182a + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-module-imports": ^7.18.6 + "@babel/helper-simple-access": ^7.20.2 + "@babel/helper-split-export-declaration": ^7.18.6 + "@babel/helper-validator-identifier": ^7.19.1 + "@babel/template": ^7.18.10 + "@babel/traverse": ^7.20.1 + "@babel/types": ^7.20.2 + checksum: 33a60ca115f6fce2c9d98e2a2e5649498aa7b23e2ae3c18745d7a021487708fc311458c33542f299387a0da168afccba94116e077f2cce49ae9e5ab83399e8a2 languageName: node linkType: hard @@ -252,24 +269,10 @@ __metadata: languageName: node linkType: hard -"@babel/helper-replace-supers@npm:^7.12.1": - version: 7.12.11 - resolution: "@babel/helper-replace-supers@npm:7.12.11" - dependencies: - "@babel/helper-member-expression-to-functions": ^7.12.7 - "@babel/helper-optimise-call-expression": ^7.12.10 - "@babel/traverse": ^7.12.10 - "@babel/types": ^7.12.11 - checksum: 37a6a9f8d6e88f75af59b03245a2d7ed37a8861d9a724e38d8a531f1d70dc94bf38e5c8e24e558917566a22b9f597e3ccedb478e12abd19ffe85bc855e088276 - languageName: node - linkType: hard - -"@babel/helper-simple-access@npm:^7.12.1": - version: 7.12.1 - resolution: "@babel/helper-simple-access@npm:7.12.1" - dependencies: - "@babel/types": ^7.12.1 - checksum: 2c387b57d9f270c947273e6dde4885971449c78436edd511c8d42cb43c5c4265ef2ebb222f46d9653b1d1254424aef1054876d033962db428662d8fe5e859a0c +"@babel/helper-plugin-utils@npm:^7.18.6": + version: 7.20.2 + resolution: "@babel/helper-plugin-utils@npm:7.20.2" + checksum: f6cae53b7fdb1bf3abd50fa61b10b4470985b400cc794d92635da1e7077bb19729f626adc0741b69403d9b6e411cddddb9c0157a709cc7c4eeb41e663be5d74b languageName: node linkType: hard @@ -282,12 +285,12 @@ __metadata: languageName: node linkType: hard -"@babel/helper-split-export-declaration@npm:^7.11.0, @babel/helper-split-export-declaration@npm:^7.12.11": - version: 7.12.11 - resolution: "@babel/helper-split-export-declaration@npm:7.12.11" +"@babel/helper-simple-access@npm:^7.20.2": + version: 7.20.2 + resolution: "@babel/helper-simple-access@npm:7.20.2" dependencies: - "@babel/types": ^7.12.11 - checksum: 08670ae15be381742cbdc400d9dd1e0b2115c10e119da386e60b658a7033aaf5a133c4b3b4fc497dc50706f791947d790ee296811412b411cd24985df318245b + "@babel/types": ^7.20.2 + checksum: ad1e96ee2e5f654ffee2369a586e5e8d2722bf2d8b028a121b4c33ebae47253f64d420157b9f0a8927aea3a9e0f18c0103e74fdd531815cf3650a0a4adca11a1 languageName: node linkType: hard @@ -300,6 +303,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-split-export-declaration@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-split-export-declaration@npm:7.18.6" + dependencies: + "@babel/types": ^7.18.6 + checksum: c6d3dede53878f6be1d869e03e9ffbbb36f4897c7cc1527dc96c56d127d834ffe4520a6f7e467f5b6f3c2843ea0e81a7819d66ae02f707f6ac057f3d57943a2b + languageName: node + linkType: hard + "@babel/helper-string-parser@npm:^7.18.10": version: 7.18.10 resolution: "@babel/helper-string-parser@npm:7.18.10" @@ -307,6 +319,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-string-parser@npm:^7.19.4": + version: 7.19.4 + resolution: "@babel/helper-string-parser@npm:7.19.4" + checksum: b2f8a3920b30dfac81ec282ac4ad9598ea170648f8254b10f475abe6d944808fb006aab325d3eb5a8ad3bea8dfa888cfa6ef471050dae5748497c110ec060943 + languageName: node + linkType: hard + "@babel/helper-validator-identifier@npm:^7.10.4, @babel/helper-validator-identifier@npm:^7.12.11": version: 7.12.11 resolution: "@babel/helper-validator-identifier@npm:7.12.11" @@ -321,7 +340,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:^7.19.1": +"@babel/helper-validator-identifier@npm:^7.18.6, @babel/helper-validator-identifier@npm:^7.19.1": version: 7.19.1 resolution: "@babel/helper-validator-identifier@npm:7.19.1" checksum: 0eca5e86a729162af569b46c6c41a63e18b43dbe09fda1d2a3c8924f7d617116af39cac5e4cd5d431bb760b4dca3c0970e0c444789b1db42bcf1fa41fbad0a3a @@ -335,14 +354,10 @@ __metadata: languageName: node linkType: hard -"@babel/helpers@npm:^7.12.5": - version: 7.12.5 - resolution: "@babel/helpers@npm:7.12.5" - dependencies: - "@babel/template": ^7.10.4 - "@babel/traverse": ^7.12.5 - "@babel/types": ^7.12.5 - checksum: 04b9cae110583e75c7e1eab7d1431a39fd479c0bf888dd1de321ebeaa92c4768e7e8292630a50f63baa0754a88d5affedee1a793971326ac5050251204561c4f +"@babel/helper-validator-option@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-validator-option@npm:7.18.6" + checksum: f9cc6eb7cc5d759c5abf006402180f8d5e4251e9198197428a97e05d65eb2f8ae5a0ce73b1dfd2d35af41d0eb780627a64edf98a4e71f064eeeacef8de58f2cf languageName: node linkType: hard @@ -357,6 +372,17 @@ __metadata: languageName: node linkType: hard +"@babel/helpers@npm:^7.20.5": + version: 7.20.6 + resolution: "@babel/helpers@npm:7.20.6" + dependencies: + "@babel/template": ^7.18.10 + "@babel/traverse": ^7.20.5 + "@babel/types": ^7.20.5 + checksum: f03ec6eb2bf8dc7cdfe2569ee421fd9ba6c7bac6c862d90b608ccdd80281ebe858bc56ca175fc92b3ac50f63126b66bbd5ec86f9f361729289a20054518f1ac5 + languageName: node + linkType: hard + "@babel/highlight@npm:^7.10.4": version: 7.10.4 resolution: "@babel/highlight@npm:7.10.4" @@ -379,7 +405,18 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.12.10, @babel/parser@npm:^7.12.11, @babel/parser@npm:^7.12.7": +"@babel/highlight@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/highlight@npm:7.18.6" + dependencies: + "@babel/helper-validator-identifier": ^7.18.6 + chalk: ^2.0.0 + js-tokens: ^4.0.0 + checksum: 92d8ee61549de5ff5120e945e774728e5ccd57fd3b2ed6eace020ec744823d4a98e242be1453d21764a30a14769ecd62170fba28539b211799bbaf232bbb2789 + languageName: node + linkType: hard + +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.12.7": version: 7.12.11 resolution: "@babel/parser@npm:7.12.11" bin: @@ -397,6 +434,15 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.18.10, @babel/parser@npm:^7.20.5": + version: 7.20.5 + resolution: "@babel/parser@npm:7.20.5" + bin: + parser: ./bin/babel-parser.js + checksum: e8d514ce0aa74d56725bd102919a49fa367afef9cd8208cf52f670f54b061c4672f51b4b7980058ab1f5fe73615fe4dc90720ab47bbcebae07ad08d667eda318 + languageName: node + linkType: hard + "@babel/plugin-syntax-async-generators@npm:^7.8.4": version: 7.8.4 resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" @@ -452,6 +498,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-jsx@npm:^7.7.2": + version: 7.18.6 + resolution: "@babel/plugin-syntax-jsx@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 6d37ea972970195f1ffe1a54745ce2ae456e0ac6145fae9aa1480f297248b262ea6ebb93010eddb86ebfacb94f57c05a1fc5d232b9a67325b09060299d515c67 + languageName: node + linkType: hard + "@babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": version: 7.10.4 resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" @@ -540,17 +597,6 @@ __metadata: languageName: node linkType: hard -"@babel/template@npm:^7.10.4, @babel/template@npm:^7.12.7, @babel/template@npm:^7.3.3": - version: 7.12.7 - resolution: "@babel/template@npm:7.12.7" - dependencies: - "@babel/code-frame": ^7.10.4 - "@babel/parser": ^7.12.7 - "@babel/types": ^7.12.7 - checksum: eb0ec1375c26d2f612ca33f162faf9e76141229e9f14a6ce5ee3fdeadba560170dcb2696119ed5039fcac18a707e821dfd16345a2f286dfbae09233bb8d01812 - languageName: node - linkType: hard - "@babel/template@npm:^7.16.7": version: 7.16.7 resolution: "@babel/template@npm:7.16.7" @@ -562,20 +608,25 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.12.1, @babel/traverse@npm:^7.12.10, @babel/traverse@npm:^7.12.5": - version: 7.12.12 - resolution: "@babel/traverse@npm:7.12.12" - dependencies: - "@babel/code-frame": ^7.12.11 - "@babel/generator": ^7.12.11 - "@babel/helper-function-name": ^7.12.11 - "@babel/helper-split-export-declaration": ^7.12.11 - "@babel/parser": ^7.12.11 - "@babel/types": ^7.12.12 - debug: ^4.1.0 - globals: ^11.1.0 - lodash: ^4.17.19 - checksum: 2f8febb5eeadb4db38782627f5c3ccd31b4a9298cc205d953635e24382f7d31719bac50e194172dd62f00a586939c85c4e46795fc1d0041cff87ad6164ffb022 +"@babel/template@npm:^7.18.10": + version: 7.18.10 + resolution: "@babel/template@npm:7.18.10" + dependencies: + "@babel/code-frame": ^7.18.6 + "@babel/parser": ^7.18.10 + "@babel/types": ^7.18.10 + checksum: 93a6aa094af5f355a72bd55f67fa1828a046c70e46f01b1606e6118fa1802b6df535ca06be83cc5a5e834022be95c7b714f0a268b5f20af984465a71e28f1473 + languageName: node + linkType: hard + +"@babel/template@npm:^7.3.3": + version: 7.12.7 + resolution: "@babel/template@npm:7.12.7" + dependencies: + "@babel/code-frame": ^7.10.4 + "@babel/parser": ^7.12.7 + "@babel/types": ^7.12.7 + checksum: eb0ec1375c26d2f612ca33f162faf9e76141229e9f14a6ce5ee3fdeadba560170dcb2696119ed5039fcac18a707e821dfd16345a2f286dfbae09233bb8d01812 languageName: node linkType: hard @@ -597,7 +648,25 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.12.1, @babel/types@npm:^7.12.10, @babel/types@npm:^7.12.11, @babel/types@npm:^7.12.12, @babel/types@npm:^7.12.5, @babel/types@npm:^7.12.7, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3": +"@babel/traverse@npm:^7.20.1, @babel/traverse@npm:^7.20.5": + version: 7.20.5 + resolution: "@babel/traverse@npm:7.20.5" + dependencies: + "@babel/code-frame": ^7.18.6 + "@babel/generator": ^7.20.5 + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-function-name": ^7.19.0 + "@babel/helper-hoist-variables": ^7.18.6 + "@babel/helper-split-export-declaration": ^7.18.6 + "@babel/parser": ^7.20.5 + "@babel/types": ^7.20.5 + debug: ^4.1.0 + globals: ^11.1.0 + checksum: c7fed468614aab1cf762dda5df26e2cfcd2b1b448c9d3321ac44786c4ee773fb0e10357e6593c3c6a648ae2e0be6d90462d855998dc10e3abae84de99291e008 + languageName: node + linkType: hard + +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.12.7, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3": version: 7.12.12 resolution: "@babel/types@npm:7.12.12" dependencies: @@ -618,6 +687,17 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.18.10, @babel/types@npm:^7.18.6, @babel/types@npm:^7.19.0, @babel/types@npm:^7.20.2, @babel/types@npm:^7.20.5": + version: 7.20.5 + resolution: "@babel/types@npm:7.20.5" + dependencies: + "@babel/helper-string-parser": ^7.19.4 + "@babel/helper-validator-identifier": ^7.19.1 + to-fast-properties: ^2.0.0 + checksum: 773f0a1ad9f6ca5c5beaf751d1d8d81b9130de87689d1321fc911d73c3b1167326d66f0ae086a27fb5bfc8b4ee3ffebf1339be50d3b4d8015719692468c31f2d + languageName: node + linkType: hard + "@babel/types@npm:^7.8.3": version: 7.19.3 resolution: "@babel/types@npm:7.19.3" @@ -636,15 +716,6 @@ __metadata: languageName: node linkType: hard -"@cspotcode/source-map-support@npm:^0.8.0": - version: 0.8.1 - resolution: "@cspotcode/source-map-support@npm:0.8.1" - dependencies: - "@jridgewell/trace-mapping": 0.3.9 - checksum: 5718f267085ed8edb3e7ef210137241775e607ee18b77d95aa5bd7514f47f5019aa2d82d96b3bf342ef7aa890a346fa1044532ff7cc3009e7d24fce3ce6200fa - languageName: node - linkType: hard - "@gar/promisify@npm:^1.1.3": version: 1.1.3 resolution: "@gar/promisify@npm:1.1.3" @@ -672,50 +743,50 @@ __metadata: languageName: node linkType: hard -"@jest/console@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/console@npm:27.5.1" +"@jest/console@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/console@npm:29.3.1" dependencies: - "@jest/types": ^27.5.1 + "@jest/types": ^29.3.1 "@types/node": "*" chalk: ^4.0.0 - jest-message-util: ^27.5.1 - jest-util: ^27.5.1 + jest-message-util: ^29.3.1 + jest-util: ^29.3.1 slash: ^3.0.0 - checksum: 7cb20f06a34b09734c0342685ec53aa4c401fe3757c13a9c58fce76b971a322eb884f6de1068ef96f746e5398e067371b89515a07c268d4440a867c87748a706 + checksum: 9eecbfb6df4f5b810374849b7566d321255e6fd6e804546236650384966be532ff75a3e445a3277eadefe67ddf4dc56cd38332abd72d6a450f1bea9866efc6d7 languageName: node linkType: hard -"@jest/core@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/core@npm:27.5.1" +"@jest/core@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/core@npm:29.3.1" dependencies: - "@jest/console": ^27.5.1 - "@jest/reporters": ^27.5.1 - "@jest/test-result": ^27.5.1 - "@jest/transform": ^27.5.1 - "@jest/types": ^27.5.1 + "@jest/console": ^29.3.1 + "@jest/reporters": ^29.3.1 + "@jest/test-result": ^29.3.1 + "@jest/transform": ^29.3.1 + "@jest/types": ^29.3.1 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 - emittery: ^0.8.1 + ci-info: ^3.2.0 exit: ^0.1.2 graceful-fs: ^4.2.9 - jest-changed-files: ^27.5.1 - jest-config: ^27.5.1 - jest-haste-map: ^27.5.1 - jest-message-util: ^27.5.1 - jest-regex-util: ^27.5.1 - jest-resolve: ^27.5.1 - jest-resolve-dependencies: ^27.5.1 - jest-runner: ^27.5.1 - jest-runtime: ^27.5.1 - jest-snapshot: ^27.5.1 - jest-util: ^27.5.1 - jest-validate: ^27.5.1 - jest-watcher: ^27.5.1 + jest-changed-files: ^29.2.0 + jest-config: ^29.3.1 + jest-haste-map: ^29.3.1 + jest-message-util: ^29.3.1 + jest-regex-util: ^29.2.0 + jest-resolve: ^29.3.1 + jest-resolve-dependencies: ^29.3.1 + jest-runner: ^29.3.1 + jest-runtime: ^29.3.1 + jest-snapshot: ^29.3.1 + jest-util: ^29.3.1 + jest-validate: ^29.3.1 + jest-watcher: ^29.3.1 micromatch: ^4.0.4 - rimraf: ^3.0.0 + pretty-format: ^29.3.1 slash: ^3.0.0 strip-ansi: ^6.0.0 peerDependencies: @@ -723,82 +794,101 @@ __metadata: peerDependenciesMeta: node-notifier: optional: true - checksum: 904a94ad8f1b43cd6b48de3b0226659bff3696150ff8cf7680fc2faffdc8a115203bb9ab6e817c1f79f9d6a81f67953053cbc64d8a4604f2e0c42a04c28cf126 + checksum: e3ac9201e8a084ccd832b17877b56490402b919f227622bb24f9372931e77b869e60959d34144222ce20fb619d0a6a6be20b257adb077a6b0f430a4584a45b0f languageName: node linkType: hard -"@jest/environment@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/environment@npm:27.5.1" +"@jest/environment@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/environment@npm:29.3.1" dependencies: - "@jest/fake-timers": ^27.5.1 - "@jest/types": ^27.5.1 + "@jest/fake-timers": ^29.3.1 + "@jest/types": ^29.3.1 "@types/node": "*" - jest-mock: ^27.5.1 - checksum: 2a9e18c35a015508dbec5b90b21c150230fa6c1c8cb8fabe029d46ee2ca4c40eb832fb636157da14c66590d0a4c8a2c053226b041f54a44507d6f6a89abefd66 + jest-mock: ^29.3.1 + checksum: 974102aba7cc80508f787bb5504dcc96e5392e0a7776a63dffbf54ddc2c77d52ef4a3c08ed2eedec91965befff873f70cd7c9ed56f62bb132dcdb821730e6076 languageName: node linkType: hard -"@jest/fake-timers@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/fake-timers@npm:27.5.1" +"@jest/expect-utils@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/expect-utils@npm:29.3.1" dependencies: - "@jest/types": ^27.5.1 - "@sinonjs/fake-timers": ^8.0.1 + jest-get-type: ^29.2.0 + checksum: 7f3b853eb1e4299988f66b9aa49c1aacb7b8da1cf5518dca4ccd966e865947eed8f1bde6c8f5207d8400e9af870112a44b57aa83515ad6ea5e4a04a971863adb + languageName: node + linkType: hard + +"@jest/expect@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/expect@npm:29.3.1" + dependencies: + expect: ^29.3.1 + jest-snapshot: ^29.3.1 + checksum: 1d7b5cc735c8a99bfbed884d80fdb43b23b3456f4ec88c50fd86404b097bb77fba84f44e707fc9b49f106ca1154ae03f7c54dc34754b03f8a54eeb420196e5bf + languageName: node + linkType: hard + +"@jest/fake-timers@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/fake-timers@npm:29.3.1" + dependencies: + "@jest/types": ^29.3.1 + "@sinonjs/fake-timers": ^9.1.2 "@types/node": "*" - jest-message-util: ^27.5.1 - jest-mock: ^27.5.1 - jest-util: ^27.5.1 - checksum: 02a0561ed2f4586093facd4ae500b74694f187ac24d4a00e949a39a1c5325bca8932b4fcb0388a2c5ed0656506fc1cf51fd3e32cdd48cea7497ad9c6e028aba8 + jest-message-util: ^29.3.1 + jest-mock: ^29.3.1 + jest-util: ^29.3.1 + checksum: b1dafa8cdc439ef428cd772c775f0b22703677f52615513eda11a104bbfc352d7ec69b1225db95d4ef2e1b4ef0f23e1a7d96de5313aeb0950f672e6548ae069d languageName: node linkType: hard -"@jest/globals@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/globals@npm:27.5.1" +"@jest/globals@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/globals@npm:29.3.1" dependencies: - "@jest/environment": ^27.5.1 - "@jest/types": ^27.5.1 - expect: ^27.5.1 - checksum: 087f97047e9dcf555f76fe2ce54aee681e005eaa837a0c0c2d251df6b6412c892c9df54cb871b180342114389a5ff895a4e52e6e6d3d0015bf83c02a54f64c3c + "@jest/environment": ^29.3.1 + "@jest/expect": ^29.3.1 + "@jest/types": ^29.3.1 + jest-mock: ^29.3.1 + checksum: 4d2b9458aabf7c28fd167e53984477498c897b64eec67a7f84b8fff465235cae1456ee0721cb0e7943f0cda443c7656adb9801f9f34e27495b8ebbd9f3033100 languageName: node linkType: hard -"@jest/reporters@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/reporters@npm:27.5.1" +"@jest/reporters@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/reporters@npm:29.3.1" dependencies: "@bcoe/v8-coverage": ^0.2.3 - "@jest/console": ^27.5.1 - "@jest/test-result": ^27.5.1 - "@jest/transform": ^27.5.1 - "@jest/types": ^27.5.1 + "@jest/console": ^29.3.1 + "@jest/test-result": ^29.3.1 + "@jest/transform": ^29.3.1 + "@jest/types": ^29.3.1 + "@jridgewell/trace-mapping": ^0.3.15 "@types/node": "*" chalk: ^4.0.0 collect-v8-coverage: ^1.0.0 exit: ^0.1.2 - glob: ^7.1.2 + glob: ^7.1.3 graceful-fs: ^4.2.9 istanbul-lib-coverage: ^3.0.0 istanbul-lib-instrument: ^5.1.0 istanbul-lib-report: ^3.0.0 istanbul-lib-source-maps: ^4.0.0 istanbul-reports: ^3.1.3 - jest-haste-map: ^27.5.1 - jest-resolve: ^27.5.1 - jest-util: ^27.5.1 - jest-worker: ^27.5.1 + jest-message-util: ^29.3.1 + jest-util: ^29.3.1 + jest-worker: ^29.3.1 slash: ^3.0.0 - source-map: ^0.6.0 string-length: ^4.0.1 - terminal-link: ^2.0.0 - v8-to-istanbul: ^8.1.0 + strip-ansi: ^6.0.0 + v8-to-istanbul: ^9.0.1 peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: node-notifier: optional: true - checksum: faba5eafb86e62b62e152cafc8812d56308f9d1e8b77f3a7dcae4a8803a20a60a0909cc43ed73363ef649bf558e4fb181c7a336d144c89f7998279d1882bb69e + checksum: 273e0c6953285f01151e9d84ac1e55744802a1ec79fb62dafeea16a49adfe7b24e7f35bef47a0214e5e057272dbfdacf594208286b7766046fd0f3cfa2043840 languageName: node linkType: hard @@ -811,74 +901,61 @@ __metadata: languageName: node linkType: hard -"@jest/source-map@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/source-map@npm:27.5.1" +"@jest/source-map@npm:^29.2.0": + version: 29.2.0 + resolution: "@jest/source-map@npm:29.2.0" dependencies: + "@jridgewell/trace-mapping": ^0.3.15 callsites: ^3.0.0 graceful-fs: ^4.2.9 - source-map: ^0.6.0 - checksum: 4fb1e743b602841babf7e22bd84eca34676cb05d4eb3b604cae57fc59e406099f5ac759ac1a0d04d901237d143f0f4f234417306e823bde732a1d19982230862 + checksum: 09f76ab63d15dcf44b3035a79412164f43be34ec189575930f1a00c87e36ea0211ebd6a4fbe2253c2516e19b49b131f348ddbb86223ca7b6bbac9a6bc76ec96e languageName: node linkType: hard -"@jest/test-result@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/test-result@npm:27.5.1" +"@jest/test-result@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/test-result@npm:29.3.1" dependencies: - "@jest/console": ^27.5.1 - "@jest/types": ^27.5.1 + "@jest/console": ^29.3.1 + "@jest/types": ^29.3.1 "@types/istanbul-lib-coverage": ^2.0.0 collect-v8-coverage: ^1.0.0 - checksum: 338f7c509d6a3bc6d7dd7388c8f6f548b87638e171dc1fddfedcacb4e8950583288832223ba688058cbcf874b937d22bdc0fa88f79f5fc666f77957e465c06a5 + checksum: b24ac283321189b624c372a6369c0674b0ee6d9e3902c213452c6334d037113718156b315364bee8cee0f03419c2bdff5e2c63967193fb422830e79cbb26866a languageName: node linkType: hard -"@jest/test-sequencer@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/test-sequencer@npm:27.5.1" +"@jest/test-sequencer@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/test-sequencer@npm:29.3.1" dependencies: - "@jest/test-result": ^27.5.1 + "@jest/test-result": ^29.3.1 graceful-fs: ^4.2.9 - jest-haste-map: ^27.5.1 - jest-runtime: ^27.5.1 - checksum: f21f9c8bb746847f7f89accfd29d6046eec1446f0b54e4694444feaa4df379791f76ef0f5a4360aafcbc73b50bc979f68b8a7620de404019d3de166be6720cb0 + jest-haste-map: ^29.3.1 + slash: ^3.0.0 + checksum: a8325b1ea0ce644486fb63bb67cedd3524d04e3d7b1e6c1e3562bf12ef477ecd0cf34044391b2a07d925e1c0c8b4e0f3285035ceca3a474a2c55980f1708caf3 languageName: node linkType: hard -"@jest/transform@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/transform@npm:27.5.1" +"@jest/transform@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/transform@npm:29.3.1" dependencies: - "@babel/core": ^7.1.0 - "@jest/types": ^27.5.1 + "@babel/core": ^7.11.6 + "@jest/types": ^29.3.1 + "@jridgewell/trace-mapping": ^0.3.15 babel-plugin-istanbul: ^6.1.1 chalk: ^4.0.0 - convert-source-map: ^1.4.0 - fast-json-stable-stringify: ^2.0.0 + convert-source-map: ^2.0.0 + fast-json-stable-stringify: ^2.1.0 graceful-fs: ^4.2.9 - jest-haste-map: ^27.5.1 - jest-regex-util: ^27.5.1 - jest-util: ^27.5.1 + jest-haste-map: ^29.3.1 + jest-regex-util: ^29.2.0 + jest-util: ^29.3.1 micromatch: ^4.0.4 pirates: ^4.0.4 slash: ^3.0.0 - source-map: ^0.6.1 - write-file-atomic: ^3.0.0 - checksum: a22079121aedea0f20a03a9c026be971f7b92adbfb4d5fd1fb67be315741deac4f056936d7c72a53b24aa5a1071bc942c003925fd453bf3f6a0ae5da6384e137 - languageName: node - linkType: hard - -"@jest/types@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/types@npm:27.5.1" - dependencies: - "@types/istanbul-lib-coverage": ^2.0.0 - "@types/istanbul-reports": ^3.0.0 - "@types/node": "*" - "@types/yargs": ^16.0.0 - chalk: ^4.0.0 - checksum: d1f43cc946d87543ddd79d49547aab2399481d34025d5c5f2025d3d99c573e1d9832fa83cef25e9d9b07a8583500229d15bbb07b8e233d127d911d133e2f14b1 + write-file-atomic: ^4.0.1 + checksum: 673df5900ffc95bc811084e09d6e47948034dea6ab6cc4f81f80977e3a52468a6c2284d0ba9796daf25a62ae50d12f7e97fc9a3a0c587f11f2a479ff5493ca53 languageName: node linkType: hard @@ -896,6 +973,24 @@ __metadata: languageName: node linkType: hard +"@jridgewell/gen-mapping@npm:^0.3.2": + version: 0.3.2 + resolution: "@jridgewell/gen-mapping@npm:0.3.2" + dependencies: + "@jridgewell/set-array": ^1.0.1 + "@jridgewell/sourcemap-codec": ^1.4.10 + "@jridgewell/trace-mapping": ^0.3.9 + checksum: 1832707a1c476afebe4d0fbbd4b9434fdb51a4c3e009ab1e9938648e21b7a97049fa6009393bdf05cab7504108413441df26d8a3c12193996e65493a4efb6882 + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:3.1.0": + version: 3.1.0 + resolution: "@jridgewell/resolve-uri@npm:3.1.0" + checksum: b5ceaaf9a110fcb2780d1d8f8d4a0bfd216702f31c988d8042e5f8fbe353c55d9b0f55a1733afdc64806f8e79c485d2464680ac48a0d9fcadb9548ee6b81d267 + languageName: node + linkType: hard + "@jridgewell/resolve-uri@npm:^3.0.3": version: 3.0.5 resolution: "@jridgewell/resolve-uri@npm:3.0.5" @@ -903,6 +998,20 @@ __metadata: languageName: node linkType: hard +"@jridgewell/set-array@npm:^1.0.1": + version: 1.1.2 + resolution: "@jridgewell/set-array@npm:1.1.2" + checksum: 69a84d5980385f396ff60a175f7177af0b8da4ddb81824cb7016a9ef914eee9806c72b6b65942003c63f7983d4f39a5c6c27185bbca88eb4690b62075602e28e + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:1.4.14": + version: 1.4.14 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.14" + checksum: 61100637b6d173d3ba786a5dff019e1a74b1f394f323c1fee337ff390239f053b87266c7a948777f4b1ee68c01a8ad0ab61e5ff4abb5a012a0b091bec391ab97 + languageName: node + linkType: hard + "@jridgewell/sourcemap-codec@npm:^1.4.10": version: 1.4.11 resolution: "@jridgewell/sourcemap-codec@npm:1.4.11" @@ -910,16 +1019,6 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:0.3.9": - version: 0.3.9 - resolution: "@jridgewell/trace-mapping@npm:0.3.9" - dependencies: - "@jridgewell/resolve-uri": ^3.0.3 - "@jridgewell/sourcemap-codec": ^1.4.10 - checksum: d89597752fd88d3f3480845691a05a44bd21faac18e2185b6f436c3b0fd0c5a859fbbd9aaa92050c4052caf325ad3e10e2e1d1b64327517471b7d51babc0ddef - languageName: node - linkType: hard - "@jridgewell/trace-mapping@npm:^0.3.0": version: 0.3.8 resolution: "@jridgewell/trace-mapping@npm:0.3.8" @@ -930,6 +1029,16 @@ __metadata: languageName: node linkType: hard +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.15, @jridgewell/trace-mapping@npm:^0.3.9": + version: 0.3.17 + resolution: "@jridgewell/trace-mapping@npm:0.3.17" + dependencies: + "@jridgewell/resolve-uri": 3.1.0 + "@jridgewell/sourcemap-codec": 1.4.14 + checksum: 9d703b859cff5cd83b7308fd457a431387db5db96bd781a63bf48e183418dd9d3d44e76b9e4ae13237f6abeeb25d739ec9215c1d5bfdd08f66f750a50074a339 + languageName: node + linkType: hard + "@npmcli/fs@npm:^2.1.0": version: 2.1.2 resolution: "@npmcli/fs@npm:2.1.2" @@ -1063,12 +1172,12 @@ __metadata: languageName: node linkType: hard -"@sinonjs/fake-timers@npm:^8.0.1": - version: 8.1.0 - resolution: "@sinonjs/fake-timers@npm:8.1.0" +"@sinonjs/fake-timers@npm:^9.1.2": + version: 9.1.2 + resolution: "@sinonjs/fake-timers@npm:9.1.2" dependencies: "@sinonjs/commons": ^1.7.0 - checksum: 09b5a158ce013a6c37613258bad79ca4efeb99b1f59c41c73cca36cac00b258aefcf46eeea970fccf06b989414d86fe9f54c1102272c0c3bdd51a313cea80949 + checksum: 7d3aef54e17c1073101cb64d953157c19d62a40e261a30923fa1ee337b049c5f29cc47b1f0c477880f42b5659848ba9ab897607ac8ea4acd5c30ddcfac57fca6 languageName: node linkType: hard @@ -1086,47 +1195,6 @@ __metadata: languageName: node linkType: hard -"@tsconfig/node10@npm:^1.0.7": - version: 1.0.7 - resolution: "@tsconfig/node10@npm:1.0.7" - checksum: 54c3d90a93c7f0c04a4781403f4ec68f263968380d20e474ef615cec5eacac433b20081c68a084b13cc396bb2d1a1e1ee717592cbe02611b407654c4c50e0178 - languageName: node - linkType: hard - -"@tsconfig/node12@npm:^1.0.7": - version: 1.0.7 - resolution: "@tsconfig/node12@npm:1.0.7" - checksum: e58704bf5132ca95e39935bbb1825e81ca40e12ec6be5446c54b9e612b5b8c16e81a5ab0e706f8c74883210adf25e4d34115dc38457991aefea37003a72ecad8 - languageName: node - linkType: hard - -"@tsconfig/node14@npm:^1.0.0": - version: 1.0.0 - resolution: "@tsconfig/node14@npm:1.0.0" - checksum: a6e564b91e588bc05d37e2689e009ccd12743f6e1a2532ca7d20ca5e80b4d3b5b324b03e477497f2ebf2311901a369095a36c1c3cf744da7f35486923672c1f0 - languageName: node - linkType: hard - -"@tsconfig/node16@npm:^1.0.2": - version: 1.0.2 - resolution: "@tsconfig/node16@npm:1.0.2" - checksum: ca94d3639714672bbfd55f03521d3f56bb6a25479bd425da81faf21f13e1e9d15f40f97377dedbbf477a5841c5b0c8f4cd1b391f33553d750b9202c54c2c07aa - languageName: node - linkType: hard - -"@types/babel__core@npm:^7.0.0": - version: 7.1.12 - resolution: "@types/babel__core@npm:7.1.12" - dependencies: - "@babel/parser": ^7.1.0 - "@babel/types": ^7.0.0 - "@types/babel__generator": "*" - "@types/babel__template": "*" - "@types/babel__traverse": "*" - checksum: ea3b2eee3bc7d06929bd0d921734e7a4afb5eecd0e4ceb5479ba01d00638fe12f59b1e82c917c8776479d8e1eb0f6a515ba9b4df552606fa571dce60a226e9ce - languageName: node - linkType: hard - "@types/babel__core@npm:^7.1.14": version: 7.1.19 resolution: "@types/babel__core@npm:7.1.19" @@ -1159,7 +1227,7 @@ __metadata: languageName: node linkType: hard -"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.4, @types/babel__traverse@npm:^7.0.6": +"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6": version: 7.11.0 resolution: "@types/babel__traverse@npm:7.11.0" dependencies: @@ -1244,12 +1312,12 @@ __metadata: languageName: node linkType: hard -"@types/graceful-fs@npm:^4.1.2": - version: 4.1.4 - resolution: "@types/graceful-fs@npm:4.1.4" +"@types/graceful-fs@npm:^4.1.3": + version: 4.1.5 + resolution: "@types/graceful-fs@npm:4.1.5" dependencies: "@types/node": "*" - checksum: d13028412fdc7dd16bcb566da730a15e49bdc71d2681adc67b01a9df6c5ab775d1d547298adf0cbe36f227781c1400d0b0f1da3cb1c2d4b3f9bea02e8aac75ec + checksum: d076bb61f45d0fc42dee496ef8b1c2f8742e15d5e47e90e20d0243386e426c04d4efd408a48875ab432f7960b4ce3414db20ed0fbbfc7bcc89d84e574f6e045a languageName: node linkType: hard @@ -1287,6 +1355,16 @@ __metadata: languageName: node linkType: hard +"@types/jest@npm:^29.2.4": + version: 29.2.4 + resolution: "@types/jest@npm:29.2.4" + dependencies: + expect: ^29.0.0 + pretty-format: ^29.0.0 + checksum: 9deb4756fe1b438d41ff1aae7d6c216c9e49e5fe60f539f8edb6698ffeb530ff7b25d37e223439b03602ca3a7397c9c2e53e1a39c7bd616353472fce0cc04107 + languageName: node + linkType: hard + "@types/mime@npm:*": version: 2.0.3 resolution: "@types/mime@npm:2.0.3" @@ -1353,15 +1431,6 @@ __metadata: languageName: node linkType: hard -"@types/yargs@npm:^16.0.0": - version: 16.0.4 - resolution: "@types/yargs@npm:16.0.4" - dependencies: - "@types/yargs-parser": "*" - checksum: caa21d2c957592fe2184a8368c8cbe5a82a6c2e2f2893722e489f842dc5963293d2f3120bc06fe3933d60a3a0d1e2eb269649fd6b1947fe1820f8841ba611dd9 - languageName: node - linkType: hard - "@types/yargs@npm:^17.0.8": version: 17.0.13 resolution: "@types/yargs@npm:17.0.13" @@ -1383,20 +1452,6 @@ __metadata: languageName: node linkType: hard -"abab@npm:^2.0.3": - version: 2.0.5 - resolution: "abab@npm:2.0.5" - checksum: 0ec951b46d5418c2c2f923021ec193eaebdb4e802ffd5506286781b454be722a13a8430f98085cd3e204918401d9130ec6cc8f5ae19be315b3a0e857d83196e1 - languageName: node - linkType: hard - -"abab@npm:^2.0.5": - version: 2.0.6 - resolution: "abab@npm:2.0.6" - checksum: 6ffc1af4ff315066c62600123990d87551ceb0aafa01e6539da77b0f5987ac7019466780bf480f1787576d4385e3690c81ccc37cfda12819bf510b8ab47e5a3e - languageName: node - linkType: hard - "abbrev@npm:^1.0.0": version: 1.1.1 resolution: "abbrev@npm:1.1.1" @@ -1414,40 +1469,14 @@ __metadata: languageName: node linkType: hard -"acorn-globals@npm:^6.0.0": - version: 6.0.0 - resolution: "acorn-globals@npm:6.0.0" - dependencies: - acorn: ^7.1.1 - acorn-walk: ^7.1.1 - checksum: 72d95e5b5e585f9acd019b993ab8bbba68bb3cbc9d9b5c1ebb3c2f1fe5981f11deababfb4949f48e6262f9c57878837f5958c0cca396f81023814680ca878042 - languageName: node - linkType: hard - -"acorn-walk@npm:^7.1.1": - version: 7.2.0 - resolution: "acorn-walk@npm:7.2.0" - checksum: 9252158a79b9d92f1bc0dd6acc0fcfb87a67339e84bcc301bb33d6078936d27e35d606b4d35626d2962cd43c256d6f27717e70cbe15c04fff999ab0b2260b21f - languageName: node - linkType: hard - -"acorn-walk@npm:^8.1.1, acorn-walk@npm:^8.2.0": +"acorn-walk@npm:^8.2.0": version: 8.2.0 resolution: "acorn-walk@npm:8.2.0" checksum: 1715e76c01dd7b2d4ca472f9c58968516a4899378a63ad5b6c2d668bba8da21a71976c14ec5f5b75f887b6317c4ae0b897ab141c831d741dc76024d8745f1ad1 languageName: node linkType: hard -"acorn@npm:^7.1.1": - version: 7.4.1 - resolution: "acorn@npm:7.4.1" - bin: - acorn: bin/acorn - checksum: 1860f23c2107c910c6177b7b7be71be350db9e1080d814493fae143ae37605189504152d1ba8743ba3178d0b37269ce1ffc42b101547fdc1827078f82671e407 - languageName: node - linkType: hard - -"acorn@npm:^8.2.4, acorn@npm:^8.4.1, acorn@npm:^8.7.0": +"acorn@npm:^8.7.0": version: 8.8.0 resolution: "acorn@npm:8.8.0" bin: @@ -1587,13 +1616,6 @@ __metadata: languageName: node linkType: hard -"arg@npm:^4.1.0": - version: 4.1.3 - resolution: "arg@npm:4.1.3" - checksum: 544af8dd3f60546d3e4aff084d451b96961d2267d668670199692f8d054f0415d86fc5497d0e641e91546f0aa920e7c29e5250e99fc89f5552a34b5d93b77f43 - languageName: node - linkType: hard - "argparse@npm:^1.0.7": version: 1.0.10 resolution: "argparse@npm:1.0.10" @@ -1645,13 +1667,6 @@ __metadata: languageName: node linkType: hard -"asynckit@npm:^0.4.0": - version: 0.4.0 - resolution: "asynckit@npm:0.4.0" - checksum: 7b78c451df768adba04e2d02e63e2d0bf3b07adcd6e42b4cf665cb7ce899bedd344c69a1dcbce355b5f972d597b25aaa1c1742b52cffd9caccb22f348114f6be - languageName: node - linkType: hard - "auto-parse@npm:^1.3.0": version: 1.8.0 resolution: "auto-parse@npm:1.8.0" @@ -1670,21 +1685,20 @@ __metadata: languageName: node linkType: hard -"babel-jest@npm:^27.5.1": - version: 27.5.1 - resolution: "babel-jest@npm:27.5.1" +"babel-jest@npm:^29.3.1": + version: 29.3.1 + resolution: "babel-jest@npm:29.3.1" dependencies: - "@jest/transform": ^27.5.1 - "@jest/types": ^27.5.1 + "@jest/transform": ^29.3.1 "@types/babel__core": ^7.1.14 babel-plugin-istanbul: ^6.1.1 - babel-preset-jest: ^27.5.1 + babel-preset-jest: ^29.2.0 chalk: ^4.0.0 graceful-fs: ^4.2.9 slash: ^3.0.0 peerDependencies: "@babel/core": ^7.8.0 - checksum: 4e93e6e9fb996cc5f1505e924eb8e8cc7b25c294ba9629762a2715390f48af6a4c14dbb84cd9730013ac0e03267a5a9aa2fb6318c544489cda7f50f4e506def4 + checksum: 793848238a771a931ddeb5930b9ec8ab800522ac8d64933665698f4a39603d157e572e20b57d79610277e1df88d3ee82b180d59a21f3570388f602beeb38a595 languageName: node linkType: hard @@ -1701,15 +1715,15 @@ __metadata: languageName: node linkType: hard -"babel-plugin-jest-hoist@npm:^27.5.1": - version: 27.5.1 - resolution: "babel-plugin-jest-hoist@npm:27.5.1" +"babel-plugin-jest-hoist@npm:^29.2.0": + version: 29.2.0 + resolution: "babel-plugin-jest-hoist@npm:29.2.0" dependencies: "@babel/template": ^7.3.3 "@babel/types": ^7.3.3 - "@types/babel__core": ^7.0.0 + "@types/babel__core": ^7.1.14 "@types/babel__traverse": ^7.0.6 - checksum: 709c17727aa8fd3be755d256fb514bf945a5c2ea6017f037d80280fc44ae5fe7dfeebf63d8412df53796455c2c216119d628d8cc90b099434fd819005943d058 + checksum: 368d271ceae491ae6b96cd691434859ea589fbe5fd5aead7660df75d02394077273c6442f61f390e9347adffab57a32b564d0fabcf1c53c4b83cd426cb644072 languageName: node linkType: hard @@ -1735,15 +1749,15 @@ __metadata: languageName: node linkType: hard -"babel-preset-jest@npm:^27.5.1": - version: 27.5.1 - resolution: "babel-preset-jest@npm:27.5.1" +"babel-preset-jest@npm:^29.2.0": + version: 29.2.0 + resolution: "babel-preset-jest@npm:29.2.0" dependencies: - babel-plugin-jest-hoist: ^27.5.1 + babel-plugin-jest-hoist: ^29.2.0 babel-preset-current-node-syntax: ^1.0.0 peerDependencies: "@babel/core": ^7.0.0 - checksum: 251bcea11c18fd9672fec104eadb45b43f117ceeb326fa7345ced778d4c1feab29343cd7a87a1dcfae4997d6c851a8b386d7f7213792da6e23b74f4443a8976d + checksum: 1b09a2db968c36e064daf98082cfffa39c849b63055112ddc56fc2551fd0d4783897265775b1d2f8a257960a3339745de92e74feb01bad86d41c4cecbfa854fc languageName: node linkType: hard @@ -1825,13 +1839,6 @@ __metadata: languageName: node linkType: hard -"browser-process-hrtime@npm:^1.0.0": - version: 1.0.0 - resolution: "browser-process-hrtime@npm:1.0.0" - checksum: e30f868cdb770b1201afb714ad1575dd86366b6e861900884665fb627109b3cc757c40067d3bfee1ff2a29c835257ea30725a8018a9afd02ac1c24b408b1e45f - languageName: node - linkType: hard - "browserslist@npm:^4.17.5": version: 4.20.2 resolution: "browserslist@npm:4.20.2" @@ -1847,12 +1854,17 @@ __metadata: languageName: node linkType: hard -"bs-logger@npm:0.x": - version: 0.2.6 - resolution: "bs-logger@npm:0.2.6" +"browserslist@npm:^4.21.3": + version: 4.21.4 + resolution: "browserslist@npm:4.21.4" dependencies: - fast-json-stable-stringify: 2.x - checksum: d34bdaf68c64bd099ab97c3ea608c9ae7d3f5faa1178b3f3f345acd94e852e608b2d4f9103fb2e503f5e69780e98293df41691b84be909b41cf5045374d54606 + caniuse-lite: ^1.0.30001400 + electron-to-chromium: ^1.4.251 + node-releases: ^2.0.6 + update-browserslist-db: ^1.0.9 + bin: + browserslist: cli.js + checksum: 4af3793704dbb4615bcd29059ab472344dc7961c8680aa6c4bb84f05340e14038d06a5aead58724eae69455b8fade8b8c69f1638016e87e5578969d74c078b79 languageName: node linkType: hard @@ -1950,6 +1962,13 @@ __metadata: languageName: node linkType: hard +"caniuse-lite@npm:^1.0.30001400": + version: 1.0.30001436 + resolution: "caniuse-lite@npm:1.0.30001436" + checksum: 7928ac7d93741a81b3005ca4623b133e7d790828be70b26ee55e4860facc59bc344f4092e20034981070a4714f70814c8be4929be4b22728031784f267f69099 + languageName: node + linkType: hard + "chalk@npm:3.0.0, chalk@npm:~3.0.0": version: 3.0.0 resolution: "chalk@npm:3.0.0" @@ -2051,14 +2070,14 @@ __metadata: languageName: node linkType: hard -"cliui@npm:^7.0.2": - version: 7.0.4 - resolution: "cliui@npm:7.0.4" +"cliui@npm:^8.0.1": + version: 8.0.1 + resolution: "cliui@npm:8.0.1" dependencies: string-width: ^4.2.0 - strip-ansi: ^6.0.0 + strip-ansi: ^6.0.1 wrap-ansi: ^7.0.0 - checksum: ce2e8f578a4813806788ac399b9e866297740eecd4ad1823c27fd344d78b22c5f8597d548adbcc46f0573e43e21e751f39446c5a5e804a12aace402b7a315d7f + checksum: 79648b3b0045f2e285b76fb2e24e207c6db44323581e421c3acbd0e86454cba1b37aea976ab50195a49e7384b871e6dfb2247ad7dec53c02454ac6497394cb56 languageName: node linkType: hard @@ -2117,15 +2136,6 @@ __metadata: languageName: node linkType: hard -"combined-stream@npm:^1.0.8": - version: 1.0.8 - resolution: "combined-stream@npm:1.0.8" - dependencies: - delayed-stream: ~1.0.0 - checksum: 49fa4aeb4916567e33ea81d088f6584749fc90c7abec76fd516bf1c5aa5c79f3584b5ba3de6b86d26ddd64bae5329c4c7479343250cfe71c75bb366eae53bb7c - languageName: node - linkType: hard - "commander@npm:2.15.1": version: 2.15.1 resolution: "commander@npm:2.15.1" @@ -2173,7 +2183,7 @@ __metadata: languageName: node linkType: hard -"convert-source-map@npm:^1.4.0, convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": +"convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": version: 1.7.0 resolution: "convert-source-map@npm:1.7.0" dependencies: @@ -2182,6 +2192,13 @@ __metadata: languageName: node linkType: hard +"convert-source-map@npm:^2.0.0": + version: 2.0.0 + resolution: "convert-source-map@npm:2.0.0" + checksum: 63ae9933be5a2b8d4509daca5124e20c14d023c820258e484e32dc324d34c2754e71297c94a05784064ad27615037ef677e3f0c00469fb55f409d2bb21261035 + languageName: node + linkType: hard + "cookie-signature@npm:1.0.6": version: 1.0.6 resolution: "cookie-signature@npm:1.0.6" @@ -2203,13 +2220,6 @@ __metadata: languageName: node linkType: hard -"create-require@npm:^1.1.0": - version: 1.1.1 - resolution: "create-require@npm:1.1.1" - checksum: a9a1503d4390d8b59ad86f4607de7870b39cad43d929813599a23714831e81c520bddf61bcdd1f8e30f05fd3a2b71ae8538e946eb2786dc65c2bbc520f692eff - languageName: node - linkType: hard - "croner@npm:~4.1.92": version: 4.1.97 resolution: "croner@npm:4.1.97" @@ -2228,29 +2238,6 @@ __metadata: languageName: node linkType: hard -"cssom@npm:^0.4.4": - version: 0.4.4 - resolution: "cssom@npm:0.4.4" - checksum: e3bc1076e7ee4213d4fef05e7ae03bfa83dc05f32611d8edc341f4ecc3d9647b89c8245474c7dd2cdcdb797a27c462e99da7ad00a34399694559f763478ff53f - languageName: node - linkType: hard - -"cssom@npm:~0.3.6": - version: 0.3.8 - resolution: "cssom@npm:0.3.8" - checksum: 24beb3087c76c0d52dd458be9ee1fbc80ac771478a9baef35dd258cdeb527c68eb43204dd439692bb2b1ae5272fa5f2946d10946edab0d04f1078f85e06bc7f6 - languageName: node - linkType: hard - -"cssstyle@npm:^2.3.0": - version: 2.3.0 - resolution: "cssstyle@npm:2.3.0" - dependencies: - cssom: ~0.3.6 - checksum: 5f05e6fd2e3df0b44695c2f08b9ef38b011862b274e320665176467c0725e44a53e341bc4959a41176e83b66064ab786262e7380fd1cabeae6efee0d255bb4e3 - languageName: node - linkType: hard - "culvert@npm:^0.1.2": version: 0.1.2 resolution: "culvert@npm:0.1.2" @@ -2265,17 +2252,6 @@ __metadata: languageName: node linkType: hard -"data-urls@npm:^2.0.0": - version: 2.0.0 - resolution: "data-urls@npm:2.0.0" - dependencies: - abab: ^2.0.3 - whatwg-mimetype: ^2.3.0 - whatwg-url: ^8.0.0 - checksum: 97caf828aac25e25e04ba6869db0f99c75e6859bb5b424ada28d3e7841941ebf08ddff3c1b1bb4585986bd507a5d54c2a716853ea6cb98af877400e637393e71 - languageName: node - linkType: hard - "dayjs@npm:~1.11.5": version: 1.11.5 resolution: "dayjs@npm:1.11.5" @@ -2332,13 +2308,6 @@ __metadata: languageName: node linkType: hard -"decimal.js@npm:^10.2.1": - version: 10.3.1 - resolution: "decimal.js@npm:10.3.1" - checksum: 0351ac9f05fe050f23227aa6a4573bee2d58fa7378fcf28d969a8c789525032effb488a90320fd3fe86a66e17b4bc507d811b15eada5b7f0e7ec5d2af4c24a59 - languageName: node - linkType: hard - "dedent@npm:^0.7.0": version: 0.7.0 resolution: "dedent@npm:0.7.0" @@ -2372,13 +2341,6 @@ __metadata: languageName: node linkType: hard -"delayed-stream@npm:~1.0.0": - version: 1.0.0 - resolution: "delayed-stream@npm:1.0.0" - checksum: 46fe6e83e2cb1d85ba50bd52803c68be9bd953282fa7096f51fc29edd5d67ff84ff753c51966061e5ba7cb5e47ef6d36a91924eddb7f3f3483b1c560f77a0020 - languageName: node - linkType: hard - "delegates@npm:^1.0.0": version: 1.0.0 resolution: "delegates@npm:1.0.0" @@ -2414,26 +2376,10 @@ __metadata: languageName: node linkType: hard -"diff-sequences@npm:^27.5.1": - version: 27.5.1 - resolution: "diff-sequences@npm:27.5.1" - checksum: a00db5554c9da7da225db2d2638d85f8e41124eccbd56cbaefb3b276dcbb1c1c2ad851c32defe2055a54a4806f030656cbf6638105fd6ce97bb87b90b32a33ca - languageName: node - linkType: hard - -"diff@npm:^4.0.1": - version: 4.0.2 - resolution: "diff@npm:4.0.2" - checksum: f2c09b0ce4e6b301c221addd83bf3f454c0bc00caa3dd837cf6c127d6edf7223aa2bbe3b688feea110b7f262adbfc845b757c44c8a9f8c0c5b15d8fa9ce9d20d - languageName: node - linkType: hard - -"domexception@npm:^2.0.1": - version: 2.0.1 - resolution: "domexception@npm:2.0.1" - dependencies: - webidl-conversions: ^5.0.0 - checksum: d638e9cb05c52999f1b2eb87c374b03311ea5b1d69c2f875bc92da73e17db60c12142b45c950228642ff7f845c536b65305483350d080df59003a653da80b691 +"diff-sequences@npm:^29.3.1": + version: 29.3.1 + resolution: "diff-sequences@npm:29.3.1" + checksum: 8edab8c383355022e470779a099852d595dd856f9f5bd7af24f177e74138a668932268b4c4fd54096eed643861575c3652d4ecbbb1a9d710488286aed3ffa443 languageName: node linkType: hard @@ -2472,6 +2418,13 @@ __metadata: languageName: node linkType: hard +"electron-to-chromium@npm:^1.4.251": + version: 1.4.284 + resolution: "electron-to-chromium@npm:1.4.284" + checksum: be496e9dca6509dbdbb54dc32146fc99f8eb716d28a7ee8ccd3eba0066561df36fc51418d8bd7cf5a5891810bf56c0def3418e74248f51ea4a843d423603d10a + languageName: node + linkType: hard + "electron-to-chromium@npm:^1.4.84": version: 1.4.114 resolution: "electron-to-chromium@npm:1.4.114" @@ -2488,10 +2441,10 @@ __metadata: languageName: node linkType: hard -"emittery@npm:^0.8.1": - version: 0.8.1 - resolution: "emittery@npm:0.8.1" - checksum: 2457e8c7b0688bb006126f2c025b2655abe682f66b184954122a8a065b5277f9813d49d627896a10b076b81c513ec5f491fd9c14fbd42c04b95ca3c9f3c365ee +"emittery@npm:^0.13.1": + version: 0.13.1 + resolution: "emittery@npm:0.13.1" + checksum: 2b089ab6306f38feaabf4f6f02792f9ec85fc054fda79f44f6790e61bbf6bc4e1616afb9b232e0c5ec5289a8a452f79bfa6d905a6fd64e94b49981f0934001c6 languageName: node linkType: hard @@ -2604,25 +2557,6 @@ __metadata: languageName: node linkType: hard -"escodegen@npm:^2.0.0": - version: 2.0.0 - resolution: "escodegen@npm:2.0.0" - dependencies: - esprima: ^4.0.1 - estraverse: ^5.2.0 - esutils: ^2.0.2 - optionator: ^0.8.1 - source-map: ~0.6.1 - dependenciesMeta: - source-map: - optional: true - bin: - escodegen: bin/escodegen.js - esgenerate: bin/esgenerate.js - checksum: 5aa6b2966fafe0545e4e77936300cc94ad57cfe4dc4ebff9950492eaba83eef634503f12d7e3cbd644ecc1bab388ad0e92b06fd32222c9281a75d1cf02ec6cef - languageName: node - linkType: hard - "esprima@npm:^4.0.0, esprima@npm:^4.0.1": version: 4.0.1 resolution: "esprima@npm:4.0.1" @@ -2640,13 +2574,6 @@ __metadata: languageName: node linkType: hard -"estraverse@npm:^5.2.0": - version: 5.3.0 - resolution: "estraverse@npm:5.3.0" - checksum: 072780882dc8416ad144f8fe199628d2b3e7bbc9989d9ed43795d2c90309a2047e6bc5979d7e2322a341163d22cfad9e21f4110597fe487519697389497e4e2b - languageName: node - linkType: hard - "esutils@npm:^2.0.2": version: 2.0.3 resolution: "esutils@npm:2.0.3" @@ -2706,15 +2633,16 @@ __metadata: languageName: node linkType: hard -"expect@npm:^27.5.1": - version: 27.5.1 - resolution: "expect@npm:27.5.1" +"expect@npm:^29.0.0, expect@npm:^29.3.1": + version: 29.3.1 + resolution: "expect@npm:29.3.1" dependencies: - "@jest/types": ^27.5.1 - jest-get-type: ^27.5.1 - jest-matcher-utils: ^27.5.1 - jest-message-util: ^27.5.1 - checksum: b2c66beb52de53ef1872165aace40224e722bca3c2274c54cfa74b6d617d55cf0ccdbf36783ccd64dbea501b280098ed33fd0b207d4f15bc03cd3c7a24364a6a + "@jest/expect-utils": ^29.3.1 + jest-get-type: ^29.2.0 + jest-matcher-utils: ^29.3.1 + jest-message-util: ^29.3.1 + jest-util: ^29.3.1 + checksum: e9588c2a430b558b9a3dc72d4ad05f36b047cb477bc6a7bb9cfeef7614fe7e5edbab424c2c0ce82739ee21ecbbbd24596259528209f84cd72500cc612d910d30 languageName: node linkType: hard @@ -2781,7 +2709,7 @@ __metadata: languageName: node linkType: hard -"fast-json-stable-stringify@npm:2.x, fast-json-stable-stringify@npm:^2.0.0": +"fast-json-stable-stringify@npm:^2.1.0": version: 2.1.0 resolution: "fast-json-stable-stringify@npm:2.1.0" checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb @@ -2869,17 +2797,6 @@ __metadata: languageName: node linkType: hard -"form-data@npm:^3.0.0": - version: 3.0.1 - resolution: "form-data@npm:3.0.1" - dependencies: - asynckit: ^0.4.0 - combined-stream: ^1.0.8 - mime-types: ^2.1.12 - checksum: b019e8d35c8afc14a2bd8a7a92fa4f525a4726b6d5a9740e8d2623c30e308fbb58dc8469f90415a856698933c8479b01646a9dff33c87cc4e76d72aedbbf860d - languageName: node - linkType: hard - "forwarded@npm:0.2.0": version: 0.2.0 resolution: "forwarded@npm:0.2.0" @@ -3004,7 +2921,7 @@ __metadata: languageName: node linkType: hard -"gensync@npm:^1.0.0-beta.1, gensync@npm:^1.0.0-beta.2": +"gensync@npm:^1.0.0-beta.2": version: 1.0.0-beta.2 resolution: "gensync@npm:1.0.0-beta.2" checksum: a7437e58c6be12aa6c90f7730eac7fa9833dc78872b4ad2963d2031b00a3367a93f98aec75f9aaac7220848e4026d67a8655e870b24f20a543d103c0d65952ec @@ -3087,7 +3004,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^7.0.5, glob@npm:^7.1.1, glob@npm:^7.1.2, glob@npm:^7.1.3, glob@npm:^7.1.4": +"glob@npm:^7.0.5, glob@npm:^7.1.3, glob@npm:^7.1.4": version: 7.1.6 resolution: "glob@npm:7.1.6" dependencies: @@ -3207,15 +3124,6 @@ __metadata: languageName: node linkType: hard -"html-encoding-sniffer@npm:^2.0.1": - version: 2.0.1 - resolution: "html-encoding-sniffer@npm:2.0.1" - dependencies: - whatwg-encoding: ^1.0.5 - checksum: bf30cce461015ed7e365736fcd6a3063c7bc016a91f74398ef6158886970a96333938f7c02417ab3c12aa82e3e53b40822145facccb9ddfbcdc15a879ae4d7ba - languageName: node - linkType: hard - "html-escaper@npm:^2.0.0": version: 2.0.2 resolution: "html-escaper@npm:2.0.2" @@ -3485,13 +3393,6 @@ __metadata: languageName: node linkType: hard -"is-potential-custom-element-name@npm:^1.0.1": - version: 1.0.1 - resolution: "is-potential-custom-element-name@npm:1.0.1" - checksum: ced7bbbb6433a5b684af581872afe0e1767e2d1146b2207ca0068a648fb5cab9d898495d1ac0583524faaf24ca98176a7d9876363097c2d14fee6dd324f3a1ab - languageName: node - linkType: hard - "is-stream@npm:^2.0.0": version: 2.0.0 resolution: "is-stream@npm:2.0.0" @@ -3499,13 +3400,6 @@ __metadata: languageName: node linkType: hard -"is-typedarray@npm:^1.0.0": - version: 1.0.0 - resolution: "is-typedarray@npm:1.0.0" - checksum: 3508c6cd0a9ee2e0df2fa2e9baabcdc89e911c7bd5cf64604586697212feec525aa21050e48affb5ffc3df20f0f5d2e2cf79b08caa64e1ccc9578e251763aef7 - languageName: node - linkType: hard - "is-wsl@npm:^1.1.0": version: 1.1.0 resolution: "is-wsl@npm:1.1.0" @@ -3586,60 +3480,59 @@ __metadata: languageName: node linkType: hard -"jest-changed-files@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-changed-files@npm:27.5.1" +"jest-changed-files@npm:^29.2.0": + version: 29.2.0 + resolution: "jest-changed-files@npm:29.2.0" dependencies: - "@jest/types": ^27.5.1 execa: ^5.0.0 - throat: ^6.0.1 - checksum: 95e9dc74c3ca688ef85cfeab270f43f8902721a6c8ade6ac2459459a77890c85977f537d6fb809056deaa6d9c3f075fa7d2699ff5f3bf7d3fda17c3760b79b15 + p-limit: ^3.1.0 + checksum: 8ad8290324db1de2ee3c9443d3e3fbfdcb6d72ec7054c5796be2854b2bc239dea38a7c797c8c9c2bd959f539d44305790f2f75b18f3046b04317ed77c7480cb1 languageName: node linkType: hard -"jest-circus@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-circus@npm:27.5.1" +"jest-circus@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-circus@npm:29.3.1" dependencies: - "@jest/environment": ^27.5.1 - "@jest/test-result": ^27.5.1 - "@jest/types": ^27.5.1 + "@jest/environment": ^29.3.1 + "@jest/expect": ^29.3.1 + "@jest/test-result": ^29.3.1 + "@jest/types": ^29.3.1 "@types/node": "*" chalk: ^4.0.0 co: ^4.6.0 dedent: ^0.7.0 - expect: ^27.5.1 is-generator-fn: ^2.0.0 - jest-each: ^27.5.1 - jest-matcher-utils: ^27.5.1 - jest-message-util: ^27.5.1 - jest-runtime: ^27.5.1 - jest-snapshot: ^27.5.1 - jest-util: ^27.5.1 - pretty-format: ^27.5.1 + jest-each: ^29.3.1 + jest-matcher-utils: ^29.3.1 + jest-message-util: ^29.3.1 + jest-runtime: ^29.3.1 + jest-snapshot: ^29.3.1 + jest-util: ^29.3.1 + p-limit: ^3.1.0 + pretty-format: ^29.3.1 slash: ^3.0.0 stack-utils: ^2.0.3 - throat: ^6.0.1 - checksum: 6192dccbccb3a6acfa361cbb97bdbabe94864ccf3d885932cfd41f19534329d40698078cf9be1489415e8234255d6ea9f9aff5396b79ad842a6fca6e6fc08fd0 + checksum: 125710debd998ad9693893e7c1235e271b79f104033b8169d82afe0bc0d883f8f5245feef87adcbb22ad27ff749fd001aa998d11a132774b03b4e2b8af77d5d8 languageName: node linkType: hard -"jest-cli@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-cli@npm:27.5.1" +"jest-cli@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-cli@npm:29.3.1" dependencies: - "@jest/core": ^27.5.1 - "@jest/test-result": ^27.5.1 - "@jest/types": ^27.5.1 + "@jest/core": ^29.3.1 + "@jest/test-result": ^29.3.1 + "@jest/types": ^29.3.1 chalk: ^4.0.0 exit: ^0.1.2 graceful-fs: ^4.2.9 import-local: ^3.0.2 - jest-config: ^27.5.1 - jest-util: ^27.5.1 - jest-validate: ^27.5.1 + jest-config: ^29.3.1 + jest-util: ^29.3.1 + jest-validate: ^29.3.1 prompts: ^2.0.1 - yargs: ^16.2.0 + yargs: ^17.3.1 peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -3647,212 +3540,173 @@ __metadata: optional: true bin: jest: bin/jest.js - checksum: 6c0a69fb48e500241409e09ff743ed72bc6578d7769e2c994724e7ef1e5587f6c1f85dc429e93b98ae38a365222993ee70f0acc2199358992120900984f349e5 + checksum: 829895d33060042443bd1e9e87eb68993773d74f2c8a9b863acf53cece39d227ae0e7d76df2e9c5934c414bdf70ce398a34b3122cfe22164acb2499a74d7288d languageName: node linkType: hard -"jest-config@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-config@npm:27.5.1" +"jest-config@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-config@npm:29.3.1" dependencies: - "@babel/core": ^7.8.0 - "@jest/test-sequencer": ^27.5.1 - "@jest/types": ^27.5.1 - babel-jest: ^27.5.1 + "@babel/core": ^7.11.6 + "@jest/test-sequencer": ^29.3.1 + "@jest/types": ^29.3.1 + babel-jest: ^29.3.1 chalk: ^4.0.0 ci-info: ^3.2.0 deepmerge: ^4.2.2 - glob: ^7.1.1 + glob: ^7.1.3 graceful-fs: ^4.2.9 - jest-circus: ^27.5.1 - jest-environment-jsdom: ^27.5.1 - jest-environment-node: ^27.5.1 - jest-get-type: ^27.5.1 - jest-jasmine2: ^27.5.1 - jest-regex-util: ^27.5.1 - jest-resolve: ^27.5.1 - jest-runner: ^27.5.1 - jest-util: ^27.5.1 - jest-validate: ^27.5.1 + jest-circus: ^29.3.1 + jest-environment-node: ^29.3.1 + jest-get-type: ^29.2.0 + jest-regex-util: ^29.2.0 + jest-resolve: ^29.3.1 + jest-runner: ^29.3.1 + jest-util: ^29.3.1 + jest-validate: ^29.3.1 micromatch: ^4.0.4 parse-json: ^5.2.0 - pretty-format: ^27.5.1 + pretty-format: ^29.3.1 slash: ^3.0.0 strip-json-comments: ^3.1.1 peerDependencies: + "@types/node": "*" ts-node: ">=9.0.0" peerDependenciesMeta: + "@types/node": + optional: true ts-node: optional: true - checksum: 1188fd46c0ed78cbe3175eb9ad6712ccf74a74be33d9f0d748e147c107f0889f8b701fbff1567f31836ae18597dacdc43d6a8fc30dd34ade6c9229cc6c7cb82d + checksum: 6e663f04ae1024a53a4c2c744499b4408ca9a8b74381dd5e31b11bb3c7393311ecff0fb61b06287768709eb2c9e5a2fd166d258f5a9123abbb4c5812f99c12fe languageName: node linkType: hard -"jest-diff@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-diff@npm:27.5.1" +"jest-diff@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-diff@npm:29.3.1" dependencies: chalk: ^4.0.0 - diff-sequences: ^27.5.1 - jest-get-type: ^27.5.1 - pretty-format: ^27.5.1 - checksum: 8be27c1e1ee57b2bb2bef9c0b233c19621b4c43d53a3c26e2c00a4e805eb4ea11fe1694a06a9fb0e80ffdcfdc0d2b1cb0b85920b3f5c892327ecd1e7bd96b865 + diff-sequences: ^29.3.1 + jest-get-type: ^29.2.0 + pretty-format: ^29.3.1 + checksum: ac5c09745f2b1897e6f53216acaf6ed44fc4faed8e8df053ff4ac3db5d2a1d06a17b876e49faaa15c8a7a26f5671bcbed0a93781dcc2835f781c79a716a591a9 languageName: node linkType: hard -"jest-docblock@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-docblock@npm:27.5.1" +"jest-docblock@npm:^29.2.0": + version: 29.2.0 + resolution: "jest-docblock@npm:29.2.0" dependencies: detect-newline: ^3.0.0 - checksum: c0fed6d55b229d8bffdd8d03f121dd1a3be77c88f50552d374f9e1ea3bde57bf6bea017a0add04628d98abcb1bfb48b456438eeca8a74ef0053f4dae3b95d29c + checksum: b3f1227b7d73fc9e4952180303475cf337b36fa65c7f730ac92f0580f1c08439983262fee21cf3dba11429aa251b4eee1e3bc74796c5777116b400d78f9d2bbe languageName: node linkType: hard -"jest-each@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-each@npm:27.5.1" +"jest-each@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-each@npm:29.3.1" dependencies: - "@jest/types": ^27.5.1 + "@jest/types": ^29.3.1 chalk: ^4.0.0 - jest-get-type: ^27.5.1 - jest-util: ^27.5.1 - pretty-format: ^27.5.1 - checksum: b5a6d8730fd938982569c9e0b42bdf3c242f97b957ed8155a6473b5f7b540970f8685524e7f53963dc1805319f4b6602abfc56605590ca19d55bd7a87e467e63 - languageName: node - linkType: hard - -"jest-environment-jsdom@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-environment-jsdom@npm:27.5.1" - dependencies: - "@jest/environment": ^27.5.1 - "@jest/fake-timers": ^27.5.1 - "@jest/types": ^27.5.1 - "@types/node": "*" - jest-mock: ^27.5.1 - jest-util: ^27.5.1 - jsdom: ^16.6.0 - checksum: bc104aef7d7530d0740402aa84ac812138b6d1e51fe58adecce679f82b99340ddab73e5ec68fa079f33f50c9ddec9728fc9f0ddcca2ad6f0b351eed2762cc555 + jest-get-type: ^29.2.0 + jest-util: ^29.3.1 + pretty-format: ^29.3.1 + checksum: 16d51ef8f96fba44a3479f1c6f7672027e3b39236dc4e41217c38fe60a3b66b022ffcee72f8835a442f7a8a0a65980a93fb8e73a9782d192452526e442ad049a languageName: node linkType: hard -"jest-environment-node@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-environment-node@npm:27.5.1" +"jest-environment-node@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-environment-node@npm:29.3.1" dependencies: - "@jest/environment": ^27.5.1 - "@jest/fake-timers": ^27.5.1 - "@jest/types": ^27.5.1 + "@jest/environment": ^29.3.1 + "@jest/fake-timers": ^29.3.1 + "@jest/types": ^29.3.1 "@types/node": "*" - jest-mock: ^27.5.1 - jest-util: ^27.5.1 - checksum: 0f988330c4f3eec092e3fb37ea753b0c6f702e83cd8f4d770af9c2bf964a70bc45fbd34ec6fdb6d71ce98a778d9f54afd673e63f222e4667fff289e8069dba39 + jest-mock: ^29.3.1 + jest-util: ^29.3.1 + checksum: 16d4854bd2d35501bd4862ca069baf27ce9f5fd7642fdcab9d2dab49acd28c082d0c8882bf2bb28ed7bbaada486da577c814c9688ddc62d1d9f74a954fde996a languageName: node linkType: hard -"jest-get-type@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-get-type@npm:27.5.1" - checksum: 63064ab70195c21007d897c1157bf88ff94a790824a10f8c890392e7d17eda9c3900513cb291ca1c8d5722cad79169764e9a1279f7c8a9c4cd6e9109ff04bbc0 +"jest-get-type@npm:^29.2.0": + version: 29.2.0 + resolution: "jest-get-type@npm:29.2.0" + checksum: e396fd880a30d08940ed8a8e43cd4595db1b8ff09649018eb358ca701811137556bae82626af73459e3c0f8c5e972ed1e57fd3b1537b13a260893dac60a90942 languageName: node linkType: hard -"jest-haste-map@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-haste-map@npm:27.5.1" +"jest-haste-map@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-haste-map@npm:29.3.1" dependencies: - "@jest/types": ^27.5.1 - "@types/graceful-fs": ^4.1.2 + "@jest/types": ^29.3.1 + "@types/graceful-fs": ^4.1.3 "@types/node": "*" anymatch: ^3.0.3 fb-watchman: ^2.0.0 fsevents: ^2.3.2 graceful-fs: ^4.2.9 - jest-regex-util: ^27.5.1 - jest-serializer: ^27.5.1 - jest-util: ^27.5.1 - jest-worker: ^27.5.1 + jest-regex-util: ^29.2.0 + jest-util: ^29.3.1 + jest-worker: ^29.3.1 micromatch: ^4.0.4 - walker: ^1.0.7 + walker: ^1.0.8 dependenciesMeta: fsevents: optional: true - checksum: e092a1412829a9254b4725531ee72926de530f77fda7b0d9ea18008fb7623c16f72e772d8e93be71cac9e591b2c6843a669610887dd2c89bd9eb528856e3ab47 - languageName: node - linkType: hard - -"jest-jasmine2@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-jasmine2@npm:27.5.1" - dependencies: - "@jest/environment": ^27.5.1 - "@jest/source-map": ^27.5.1 - "@jest/test-result": ^27.5.1 - "@jest/types": ^27.5.1 - "@types/node": "*" - chalk: ^4.0.0 - co: ^4.6.0 - expect: ^27.5.1 - is-generator-fn: ^2.0.0 - jest-each: ^27.5.1 - jest-matcher-utils: ^27.5.1 - jest-message-util: ^27.5.1 - jest-runtime: ^27.5.1 - jest-snapshot: ^27.5.1 - jest-util: ^27.5.1 - pretty-format: ^27.5.1 - throat: ^6.0.1 - checksum: b716adf253ceb73db661936153394ab90d7f3a8ba56d6189b7cd4df8e4e2a4153b4e63ebb5d36e29ceb0f4c211d5a6f36ab7048c6abbd881c8646567e2ab8e6d + checksum: 97ea26af0c28a2ba568c9c65d06211487bbcd501cb4944f9d55e07fd2b00ad96653ea2cc9033f3d5b7dc1feda33e47ae9cc56b400191ea4533be213c9f82e67c languageName: node linkType: hard -"jest-leak-detector@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-leak-detector@npm:27.5.1" +"jest-leak-detector@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-leak-detector@npm:29.3.1" dependencies: - jest-get-type: ^27.5.1 - pretty-format: ^27.5.1 - checksum: 5c9689060960567ddaf16c570d87afa760a461885765d2c71ef4f4857bbc3af1482c34e3cce88e50beefde1bf35e33530b020480752057a7e3dbb1ca0bae359f + jest-get-type: ^29.2.0 + pretty-format: ^29.3.1 + checksum: 0dd8ed31ae0b5a3d14f13f567ca8567f2663dd2d540d1e55511d3b3fd7f80a1d075392179674ebe9fab9be0b73678bf4d2f8bbbc0f4bdd52b9815259194da559 languageName: node linkType: hard -"jest-matcher-utils@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-matcher-utils@npm:27.5.1" +"jest-matcher-utils@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-matcher-utils@npm:29.3.1" dependencies: chalk: ^4.0.0 - jest-diff: ^27.5.1 - jest-get-type: ^27.5.1 - pretty-format: ^27.5.1 - checksum: bb2135fc48889ff3fe73888f6cc7168ddab9de28b51b3148f820c89fdfd2effdcad005f18be67d0b9be80eda208ad47290f62f03d0a33f848db2dd0273c8217a + jest-diff: ^29.3.1 + jest-get-type: ^29.2.0 + pretty-format: ^29.3.1 + checksum: 311e8d9f1e935216afc7dd8c6acf1fbda67a7415e1afb1bf72757213dfb025c1f2dc5e2c185c08064a35cdc1f2d8e40c57616666774ed1b03e57eb311c20ec77 languageName: node linkType: hard -"jest-message-util@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-message-util@npm:27.5.1" +"jest-message-util@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-message-util@npm:29.3.1" dependencies: "@babel/code-frame": ^7.12.13 - "@jest/types": ^27.5.1 + "@jest/types": ^29.3.1 "@types/stack-utils": ^2.0.0 chalk: ^4.0.0 graceful-fs: ^4.2.9 micromatch: ^4.0.4 - pretty-format: ^27.5.1 + pretty-format: ^29.3.1 slash: ^3.0.0 stack-utils: ^2.0.3 - checksum: eb6d637d1411c71646de578c49826b6da8e33dd293e501967011de9d1916d53d845afbfb52a5b661ff1c495be7c13f751c48c7f30781fd94fbd64842e8195796 + checksum: 15d0a2fca3919eb4570bbf575734780c4b9e22de6aae903c4531b346699f7deba834c6c86fe6e9a83ad17fac0f7935511cf16dce4d71a93a71ebb25f18a6e07b languageName: node linkType: hard -"jest-mock@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-mock@npm:27.5.1" +"jest-mock@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-mock@npm:29.3.1" dependencies: - "@jest/types": ^27.5.1 + "@jest/types": ^29.3.1 "@types/node": "*" - checksum: f5b5904bb1741b4a1687a5f492535b7b1758dc26534c72a5423305f8711292e96a601dec966df81bb313269fb52d47227e29f9c2e08324d79529172f67311be0 + jest-util: ^29.3.1 + checksum: 9098852cb2866db4a1a59f9f7581741dfc572f648e9e574a1b187fd69f5f2f6190ad387ede21e139a8b80a6a1343ecc3d6751cd2ae1ae11d7ea9fa1950390fb2 languageName: node linkType: hard @@ -3868,156 +3722,132 @@ __metadata: languageName: node linkType: hard -"jest-regex-util@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-regex-util@npm:27.5.1" - checksum: d45ca7a9543616a34f7f3079337439cf07566e677a096472baa2810e274b9808b76767c97b0a4029b8a5b82b9d256dee28ef9ad4138b2b9e5933f6fac106c418 +"jest-regex-util@npm:^29.2.0": + version: 29.2.0 + resolution: "jest-regex-util@npm:29.2.0" + checksum: 7c533e51c51230dac20c0d7395b19b8366cb022f7c6e08e6bcf2921626840ff90424af4c9b4689f02f0addfc9b071c4cd5f8f7a989298a4c8e0f9c94418ca1c3 languageName: node linkType: hard -"jest-resolve-dependencies@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-resolve-dependencies@npm:27.5.1" +"jest-resolve-dependencies@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-resolve-dependencies@npm:29.3.1" dependencies: - "@jest/types": ^27.5.1 - jest-regex-util: ^27.5.1 - jest-snapshot: ^27.5.1 - checksum: c67af97afad1da88f5530317c732bbd1262d1225f6cd7f4e4740a5db48f90ab0bd8564738ac70d1a43934894f9aef62205c1b8f8ee89e5c7a737e6a121ee4c25 + jest-regex-util: ^29.2.0 + jest-snapshot: ^29.3.1 + checksum: 6ec4727a87c6e7954e93de9949ab9967b340ee2f07626144c273355f05a2b65fa47eb8dece2d6e5f4fd99cdb893510a3540aa5e14ba443f70b3feb63f6f98982 languageName: node linkType: hard -"jest-resolve@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-resolve@npm:27.5.1" +"jest-resolve@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-resolve@npm:29.3.1" dependencies: - "@jest/types": ^27.5.1 chalk: ^4.0.0 graceful-fs: ^4.2.9 - jest-haste-map: ^27.5.1 + jest-haste-map: ^29.3.1 jest-pnp-resolver: ^1.2.2 - jest-util: ^27.5.1 - jest-validate: ^27.5.1 + jest-util: ^29.3.1 + jest-validate: ^29.3.1 resolve: ^1.20.0 resolve.exports: ^1.1.0 slash: ^3.0.0 - checksum: 735830e7265b20a348029738680bb2f6e37f80ecea86cda869a4c318ba3a45d39c7a3a873a22f7f746d86258c50ead6e7f501de043e201c095d7ba628a1c440f + checksum: 0dea22ed625e07b8bfee52dea1391d3a4b453c1a0c627a0fa7c22e44bb48e1c289afe6f3c316def70753773f099c4e8f436c7a2cc12fcc6c7dd6da38cba2cd5f languageName: node linkType: hard -"jest-runner@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-runner@npm:27.5.1" +"jest-runner@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-runner@npm:29.3.1" dependencies: - "@jest/console": ^27.5.1 - "@jest/environment": ^27.5.1 - "@jest/test-result": ^27.5.1 - "@jest/transform": ^27.5.1 - "@jest/types": ^27.5.1 + "@jest/console": ^29.3.1 + "@jest/environment": ^29.3.1 + "@jest/test-result": ^29.3.1 + "@jest/transform": ^29.3.1 + "@jest/types": ^29.3.1 "@types/node": "*" chalk: ^4.0.0 - emittery: ^0.8.1 + emittery: ^0.13.1 graceful-fs: ^4.2.9 - jest-docblock: ^27.5.1 - jest-environment-jsdom: ^27.5.1 - jest-environment-node: ^27.5.1 - jest-haste-map: ^27.5.1 - jest-leak-detector: ^27.5.1 - jest-message-util: ^27.5.1 - jest-resolve: ^27.5.1 - jest-runtime: ^27.5.1 - jest-util: ^27.5.1 - jest-worker: ^27.5.1 - source-map-support: ^0.5.6 - throat: ^6.0.1 - checksum: 5bbe6cf847dd322b3332ec9d6977b54f91bd5f72ff620bc1a0192f0f129deda8aa7ca74c98922187a7aa87d8e0ce4f6c50e99a7ccb2a310bf4d94be2e0c3ce8e - languageName: node - linkType: hard - -"jest-runtime@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-runtime@npm:27.5.1" - dependencies: - "@jest/environment": ^27.5.1 - "@jest/fake-timers": ^27.5.1 - "@jest/globals": ^27.5.1 - "@jest/source-map": ^27.5.1 - "@jest/test-result": ^27.5.1 - "@jest/transform": ^27.5.1 - "@jest/types": ^27.5.1 + jest-docblock: ^29.2.0 + jest-environment-node: ^29.3.1 + jest-haste-map: ^29.3.1 + jest-leak-detector: ^29.3.1 + jest-message-util: ^29.3.1 + jest-resolve: ^29.3.1 + jest-runtime: ^29.3.1 + jest-util: ^29.3.1 + jest-watcher: ^29.3.1 + jest-worker: ^29.3.1 + p-limit: ^3.1.0 + source-map-support: 0.5.13 + checksum: 61ad445d8a5f29573332f27a21fc942fb0d2a82bf901a0ea1035bf3bd7f349d1e425f71f54c3a3f89b292a54872c3248d395a2829d987f26b6025b15530ea5d2 + languageName: node + linkType: hard + +"jest-runtime@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-runtime@npm:29.3.1" + dependencies: + "@jest/environment": ^29.3.1 + "@jest/fake-timers": ^29.3.1 + "@jest/globals": ^29.3.1 + "@jest/source-map": ^29.2.0 + "@jest/test-result": ^29.3.1 + "@jest/transform": ^29.3.1 + "@jest/types": ^29.3.1 + "@types/node": "*" chalk: ^4.0.0 cjs-module-lexer: ^1.0.0 collect-v8-coverage: ^1.0.0 - execa: ^5.0.0 glob: ^7.1.3 graceful-fs: ^4.2.9 - jest-haste-map: ^27.5.1 - jest-message-util: ^27.5.1 - jest-mock: ^27.5.1 - jest-regex-util: ^27.5.1 - jest-resolve: ^27.5.1 - jest-snapshot: ^27.5.1 - jest-util: ^27.5.1 + jest-haste-map: ^29.3.1 + jest-message-util: ^29.3.1 + jest-mock: ^29.3.1 + jest-regex-util: ^29.2.0 + jest-resolve: ^29.3.1 + jest-snapshot: ^29.3.1 + jest-util: ^29.3.1 slash: ^3.0.0 strip-bom: ^4.0.0 - checksum: 929e3df0c53dab43f831f2af4e2996b22aa8cb2d6d483919d6b0426cbc100098fd5b777b998c6568b77f8c4d860b2e83127514292ff61416064f5ef926492386 - languageName: node - linkType: hard - -"jest-serializer@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-serializer@npm:27.5.1" - dependencies: - "@types/node": "*" - graceful-fs: ^4.2.9 - checksum: 803e03a552278610edc6753c0dd9fa5bb5cd3ca47414a7b2918106efb62b79fd5e9ae785d0a21f12a299fa599fea8acc1fa6dd41283328cee43962cf7df9bb44 + checksum: 82f27b48f000be074064a854e16e768f9453e9b791d8c5f9316606c37f871b5b10f70544c1b218ab9784f00bd972bb77f868c5ab6752c275be2cd219c351f5a7 languageName: node linkType: hard -"jest-snapshot@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-snapshot@npm:27.5.1" +"jest-snapshot@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-snapshot@npm:29.3.1" dependencies: - "@babel/core": ^7.7.2 + "@babel/core": ^7.11.6 "@babel/generator": ^7.7.2 + "@babel/plugin-syntax-jsx": ^7.7.2 "@babel/plugin-syntax-typescript": ^7.7.2 "@babel/traverse": ^7.7.2 - "@babel/types": ^7.0.0 - "@jest/transform": ^27.5.1 - "@jest/types": ^27.5.1 - "@types/babel__traverse": ^7.0.4 + "@babel/types": ^7.3.3 + "@jest/expect-utils": ^29.3.1 + "@jest/transform": ^29.3.1 + "@jest/types": ^29.3.1 + "@types/babel__traverse": ^7.0.6 "@types/prettier": ^2.1.5 babel-preset-current-node-syntax: ^1.0.0 chalk: ^4.0.0 - expect: ^27.5.1 + expect: ^29.3.1 graceful-fs: ^4.2.9 - jest-diff: ^27.5.1 - jest-get-type: ^27.5.1 - jest-haste-map: ^27.5.1 - jest-matcher-utils: ^27.5.1 - jest-message-util: ^27.5.1 - jest-util: ^27.5.1 + jest-diff: ^29.3.1 + jest-get-type: ^29.2.0 + jest-haste-map: ^29.3.1 + jest-matcher-utils: ^29.3.1 + jest-message-util: ^29.3.1 + jest-util: ^29.3.1 natural-compare: ^1.4.0 - pretty-format: ^27.5.1 - semver: ^7.3.2 - checksum: a5cfadf0d21cd76063925d1434bc076443ed6d87847d0e248f0b245f11db3d98ff13e45cc03b15404027dabecd712d925f47b6eae4f64986f688640a7d362514 - languageName: node - linkType: hard - -"jest-util@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-util@npm:27.5.1" - dependencies: - "@jest/types": ^27.5.1 - "@types/node": "*" - chalk: ^4.0.0 - ci-info: ^3.2.0 - graceful-fs: ^4.2.9 - picomatch: ^2.2.3 - checksum: ac8d122f6daf7a035dcea156641fd3701aeba245417c40836a77e35b3341b9c02ddc5d904cfcd4ddbaa00ab854da76d3b911870cafdcdbaff90ea471de26c7d7 + pretty-format: ^29.3.1 + semver: ^7.3.5 + checksum: d7d0077935e78c353c828be78ccb092e12ba7622cb0577f21641fadd728ae63a7c1f4a0d8113bfb38db3453a64bfa232fb1cdeefe0e2b48c52ef4065b0ab75ae languageName: node linkType: hard -"jest-util@npm:^29.0.0": +"jest-util@npm:^29.3.1": version: 29.3.1 resolution: "jest-util@npm:29.3.1" dependencies: @@ -4031,53 +3861,56 @@ __metadata: languageName: node linkType: hard -"jest-validate@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-validate@npm:27.5.1" +"jest-validate@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-validate@npm:29.3.1" dependencies: - "@jest/types": ^27.5.1 + "@jest/types": ^29.3.1 camelcase: ^6.2.0 chalk: ^4.0.0 - jest-get-type: ^27.5.1 + jest-get-type: ^29.2.0 leven: ^3.1.0 - pretty-format: ^27.5.1 - checksum: 82e870f8ee7e4fb949652711b1567f05ae31c54be346b0899e8353e5c20fad7692b511905b37966945e90af8dc0383eb41a74f3ffefb16140ea4f9164d841412 + pretty-format: ^29.3.1 + checksum: 92584f0b8ac284235f12b3b812ccbc43ef6dea080a3b98b1aa81adbe009e962d0aa6131f21c8157b30ac3d58f335961694238a93d553d1d1e02ab264c923778c languageName: node linkType: hard -"jest-watcher@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-watcher@npm:27.5.1" +"jest-watcher@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-watcher@npm:29.3.1" dependencies: - "@jest/test-result": ^27.5.1 - "@jest/types": ^27.5.1 + "@jest/test-result": ^29.3.1 + "@jest/types": ^29.3.1 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 - jest-util: ^27.5.1 + emittery: ^0.13.1 + jest-util: ^29.3.1 string-length: ^4.0.1 - checksum: 191c4e9c278c0902ade1a8a80883ac244963ba3e6e78607a3d5f729ccca9c6e71fb3b316f87883658132641c5d818aa84202585c76752e03c539e6cbecb820bd + checksum: 60d189473486c73e9d540406a30189da5a3c67bfb0fb4ad4a83991c189135ef76d929ec99284ca5a505fe4ee9349ae3c99b54d2e00363e72837b46e77dec9642 languageName: node linkType: hard -"jest-worker@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-worker@npm:27.5.1" +"jest-worker@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-worker@npm:29.3.1" dependencies: "@types/node": "*" + jest-util: ^29.3.1 merge-stream: ^2.0.0 supports-color: ^8.0.0 - checksum: 98cd68b696781caed61c983a3ee30bf880b5bd021c01d98f47b143d4362b85d0737f8523761e2713d45e18b4f9a2b98af1eaee77afade4111bb65c77d6f7c980 + checksum: 38687fcbdc2b7ddc70bbb5dfc703ae095b46b3c7f206d62ecdf5f4d16e336178e217302138f3b906125576bb1cfe4cfe8d43681276fa5899d138ed9422099fb3 languageName: node linkType: hard -"jest@npm:27.5.1": - version: 27.5.1 - resolution: "jest@npm:27.5.1" +"jest@npm:29.3.1": + version: 29.3.1 + resolution: "jest@npm:29.3.1" dependencies: - "@jest/core": ^27.5.1 + "@jest/core": ^29.3.1 + "@jest/types": ^29.3.1 import-local: ^3.0.2 - jest-cli: ^27.5.1 + jest-cli: ^29.3.1 peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -4085,7 +3918,7 @@ __metadata: optional: true bin: jest: bin/jest.js - checksum: 96f1d69042b3c6dfc695f2a4e4b0db38af6fb78582ad1a02beaa57cfcd77cbd31567d7d865c1c85709b7c3e176eefa3b2035ffecd646005f15d8ef528eccf205 + checksum: 613f4ec657b14dd84c0056b2fef1468502927fd551bef0b19d4a91576a609678fb316c6a5b5fc6120dd30dd4ff4569070ffef3cb507db9bb0260b28ddaa18d7a languageName: node linkType: hard @@ -4120,46 +3953,6 @@ __metadata: languageName: node linkType: hard -"jsdom@npm:^16.6.0": - version: 16.7.0 - resolution: "jsdom@npm:16.7.0" - dependencies: - abab: ^2.0.5 - acorn: ^8.2.4 - acorn-globals: ^6.0.0 - cssom: ^0.4.4 - cssstyle: ^2.3.0 - data-urls: ^2.0.0 - decimal.js: ^10.2.1 - domexception: ^2.0.1 - escodegen: ^2.0.0 - form-data: ^3.0.0 - html-encoding-sniffer: ^2.0.1 - http-proxy-agent: ^4.0.1 - https-proxy-agent: ^5.0.0 - is-potential-custom-element-name: ^1.0.1 - nwsapi: ^2.2.0 - parse5: 6.0.1 - saxes: ^5.0.1 - symbol-tree: ^3.2.4 - tough-cookie: ^4.0.0 - w3c-hr-time: ^1.0.2 - w3c-xmlserializer: ^2.0.0 - webidl-conversions: ^6.1.0 - whatwg-encoding: ^1.0.5 - whatwg-mimetype: ^2.3.0 - whatwg-url: ^8.5.0 - ws: ^7.4.6 - xml-name-validator: ^3.0.0 - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true - checksum: 454b83371857000763ed31130a049acd1b113e3b927e6dcd75c67ddc30cdd242d7ebcac5c2294b7a1a6428155cb1398709c573b3c6d809218692ea68edd93370 - languageName: node - linkType: hard - "jsesc@npm:^2.5.1": version: 2.5.2 resolution: "jsesc@npm:2.5.2" @@ -4183,17 +3976,6 @@ __metadata: languageName: node linkType: hard -"json5@npm:^2.1.2": - version: 2.1.3 - resolution: "json5@npm:2.1.3" - dependencies: - minimist: ^1.2.5 - bin: - json5: lib/cli.js - checksum: b2de57a66520eca0fbb6c5ef59249b8308efb93fe89a8c75f5a6846e4f5f7d99a5a6f2e4db4d7a1c7047802dd816ed602a052d147a415d0e6b7f834885b62bc3 - languageName: node - linkType: hard - "json5@npm:^2.2.1": version: 2.2.1 resolution: "json5@npm:2.2.1" @@ -4275,21 +4057,7 @@ __metadata: languageName: node linkType: hard -"lodash.memoize@npm:4.x": - version: 4.1.2 - resolution: "lodash.memoize@npm:4.1.2" - checksum: 9ff3942feeccffa4f1fafa88d32f0d24fdc62fd15ded5a74a5f950ff5f0c6f61916157246744c620173dddf38d37095a92327d5fd3861e2063e736a5c207d089 - languageName: node - linkType: hard - -"lodash.sortby@npm:^4.7.0": - version: 4.7.0 - resolution: "lodash.sortby@npm:4.7.0" - checksum: db170c9396d29d11fe9a9f25668c4993e0c1331bcb941ddbd48fb76f492e732add7f2a47cfdf8e9d740fa59ac41bbfaf931d268bc72aab3ab49e9f89354d718c - languageName: node - linkType: hard - -"lodash@npm:^4.17.14, lodash@npm:^4.17.19, lodash@npm:^4.7.0": +"lodash@npm:^4.17.14, lodash@npm:^4.17.19": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 @@ -4346,13 +4114,6 @@ __metadata: languageName: node linkType: hard -"make-error@npm:1.x, make-error@npm:^1.1.1": - version: 1.3.6 - resolution: "make-error@npm:1.3.6" - checksum: b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 - languageName: node - linkType: hard - "make-fetch-happen@npm:^10.0.3": version: 10.2.1 resolution: "make-fetch-happen@npm:10.2.1" @@ -4377,12 +4138,12 @@ __metadata: languageName: node linkType: hard -"makeerror@npm:1.0.x": - version: 1.0.11 - resolution: "makeerror@npm:1.0.11" +"makeerror@npm:1.0.12": + version: 1.0.12 + resolution: "makeerror@npm:1.0.12" dependencies: - tmpl: 1.0.x - checksum: 9a62ec2d9648c5329fdc4bc7d779a7305f32b1e55422a4f14244bc890bb43287fe013eb8d965e92a0cf4c443f3e59265b1fc3125eaedb0c2361e28b1a8de565d + tmpl: 1.0.5 + checksum: b38a025a12c8146d6eeea5a7f2bf27d51d8ad6064da8ca9405fcf7bf9b54acd43e3b30ddd7abb9b1bfa4ddb266019133313482570ddb207de568f71ecfcf6060 languageName: node linkType: hard @@ -4467,7 +4228,7 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:^2.1.12, mime-types@npm:~2.1.24": +"mime-types@npm:~2.1.24": version: 2.1.28 resolution: "mime-types@npm:2.1.28" dependencies: @@ -4736,6 +4497,13 @@ __metadata: languageName: node linkType: hard +"node-releases@npm:^2.0.6": + version: 2.0.6 + resolution: "node-releases@npm:2.0.6" + checksum: e86a926dc9fbb3b41b4c4a89d998afdf140e20a4e8dbe6c0a807f7b2948b42ea97d7fd3ad4868041487b6e9ee98409829c6e4d84a734a4215dff060a7fbeb4bf + languageName: node + linkType: hard + "noop6@npm:^1.0.1": version: 1.0.9 resolution: "noop6@npm:1.0.9" @@ -4792,13 +4560,6 @@ __metadata: languageName: node linkType: hard -"nwsapi@npm:^2.2.0": - version: 2.2.0 - resolution: "nwsapi@npm:2.2.0" - checksum: 5ef4a9bc0c1a5b7f2e014aa6a4b359a257503b796618ed1ef0eb852098f77e772305bb0e92856e4bbfa3e6c75da48c0113505c76f144555ff38867229c2400a7 - languageName: node - linkType: hard - "object-inspect@npm:^1.9.0": version: 1.12.0 resolution: "object-inspect@npm:1.12.0" @@ -4872,6 +4633,15 @@ __metadata: languageName: node linkType: hard +"p-limit@npm:^3.1.0": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: ^0.1.0 + checksum: 7c3690c4dbf62ef625671e20b7bdf1cbc9534e83352a2780f165b0d3ceba21907e77ad63401708145ca4e25bfc51636588d89a8c0aeb715e6c37d1c066430360 + languageName: node + linkType: hard + "p-locate@npm:^4.1.0": version: 4.1.0 resolution: "p-locate@npm:4.1.0" @@ -4954,13 +4724,6 @@ __metadata: languageName: node linkType: hard -"parse5@npm:6.0.1": - version: 6.0.1 - resolution: "parse5@npm:6.0.1" - checksum: 7d569a176c5460897f7c8f3377eff640d54132b9be51ae8a8fa4979af940830b2b0c296ce75e5bd8f4041520aadde13170dbdec44889975f906098ea0002f4bd - languageName: node - linkType: hard - "parseurl@npm:~1.3.3": version: 1.3.3 resolution: "parseurl@npm:1.3.3" @@ -5171,14 +4934,14 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^27.5.1": - version: 27.5.1 - resolution: "pretty-format@npm:27.5.1" +"pretty-format@npm:^29.0.0, pretty-format@npm:^29.3.1": + version: 29.3.1 + resolution: "pretty-format@npm:29.3.1" dependencies: - ansi-regex: ^5.0.1 + "@jest/schemas": ^29.0.0 ansi-styles: ^5.0.0 - react-is: ^17.0.1 - checksum: cf610cffcb793885d16f184a62162f2dd0df31642d9a18edf4ca298e909a8fe80bdbf556d5c9573992c102ce8bf948691da91bf9739bee0ffb6e79c8a8a6e088 + react-is: ^18.0.0 + checksum: 9917a0bb859cd7a24a343363f70d5222402c86d10eb45bcc2f77b23a4e67586257390e959061aec22762a782fe6bafb59bf34eb94527bc2e5d211afdb287eb4e languageName: node linkType: hard @@ -5251,20 +5014,6 @@ __metadata: languageName: node linkType: hard -"psl@npm:^1.1.33": - version: 1.8.0 - resolution: "psl@npm:1.8.0" - checksum: 6150048ed2da3f919478bee8a82f3828303bc0fc730fb015a48f83c9977682c7b28c60ab01425a72d82a2891a1681627aa530a991d50c086b48a3be27744bde7 - languageName: node - linkType: hard - -"punycode@npm:^2.1.1": - version: 2.1.1 - resolution: "punycode@npm:2.1.1" - checksum: 823bf443c6dd14f669984dea25757b37993f67e8d94698996064035edd43bed8a5a17a9f12e439c2b35df1078c6bec05a6c86e336209eb1061e8025c481168e8 - languageName: node - linkType: hard - "qs@npm:6.11.0": version: 6.11.0 resolution: "qs@npm:6.11.0" @@ -5305,10 +5054,10 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^17.0.1": - version: 17.0.1 - resolution: "react-is@npm:17.0.1" - checksum: 5e6945a286367894d11b24f41a0065607ba62bdac0df0b567294b2e299c037e3641434e66f9be30536b8c47f7ad94d44e633feb2ba25959c2c42423844e6c2f1 +"react-is@npm:^18.0.0": + version: 18.2.0 + resolution: "react-is@npm:18.2.0" + checksum: e72d0ba81b5922759e4aff17e0252bd29988f9642ed817f56b25a3e217e13eea8a7f2322af99a06edb779da12d5d636e9fda473d620df9a3da0df2a74141d53e languageName: node linkType: hard @@ -5447,7 +5196,7 @@ __metadata: languageName: node linkType: hard -"rimraf@npm:3.0.2, rimraf@npm:^3.0.0, rimraf@npm:^3.0.2": +"rimraf@npm:3.0.2, rimraf@npm:^3.0.2": version: 3.0.2 resolution: "rimraf@npm:3.0.2" dependencies: @@ -5493,15 +5242,6 @@ __metadata: languageName: node linkType: hard -"saxes@npm:^5.0.1": - version: 5.0.1 - resolution: "saxes@npm:5.0.1" - dependencies: - xmlchars: ^2.2.0 - checksum: 5636b55cf15f7cf0baa73f2797bf992bdcf75d1b39d82c0aa4608555c774368f6ac321cb641fd5f3d3ceb87805122cd47540da6a7b5960fe0dbdb8f8c263f000 - languageName: node - linkType: hard - "semver@npm:6.3.0, semver@npm:^6.0.0, semver@npm:^6.3.0": version: 6.3.0 resolution: "semver@npm:6.3.0" @@ -5511,7 +5251,16 @@ __metadata: languageName: node linkType: hard -"semver@npm:7.x, semver@npm:^7.2, semver@npm:^7.3.2": +"semver@npm:^5.3.0, semver@npm:^5.5.0": + version: 5.7.1 + resolution: "semver@npm:5.7.1" + bin: + semver: ./bin/semver + checksum: 57fd0acfd0bac382ee87cd52cd0aaa5af086a7dc8d60379dfe65fea491fb2489b6016400813930ecd61fd0952dae75c115287a1b16c234b1550887117744dfaf + languageName: node + linkType: hard + +"semver@npm:^7.2": version: 7.3.4 resolution: "semver@npm:7.3.4" dependencies: @@ -5522,15 +5271,6 @@ __metadata: languageName: node linkType: hard -"semver@npm:^5.3.0, semver@npm:^5.4.1, semver@npm:^5.5.0": - version: 5.7.1 - resolution: "semver@npm:5.7.1" - bin: - semver: ./bin/semver - checksum: 57fd0acfd0bac382ee87cd52cd0aaa5af086a7dc8d60379dfe65fea491fb2489b6016400813930ecd61fd0952dae75c115287a1b16c234b1550887117744dfaf - languageName: node - linkType: hard - "semver@npm:^7.3.5": version: 7.3.8 resolution: "semver@npm:7.3.8" @@ -5639,7 +5379,7 @@ __metadata: languageName: node linkType: hard -"signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3": +"signal-exit@npm:^3.0.3": version: 3.0.3 resolution: "signal-exit@npm:3.0.3" checksum: f0169d3f1263d06df32ca072b0bf33b34c6f8f0341a7a1621558a2444dfbe8f5fec76b35537fcc6f0bc4944bdb5336fe0bdcf41a5422c4e45a1dba3f45475e6c @@ -5723,23 +5463,23 @@ __metadata: languageName: node linkType: hard -"source-map-support@npm:0.5.21": - version: 0.5.21 - resolution: "source-map-support@npm:0.5.21" +"source-map-support@npm:0.5.13": + version: 0.5.13 + resolution: "source-map-support@npm:0.5.13" dependencies: buffer-from: ^1.0.0 source-map: ^0.6.0 - checksum: 43e98d700d79af1d36f859bdb7318e601dfc918c7ba2e98456118ebc4c4872b327773e5a1df09b0524e9e5063bb18f0934538eace60cca2710d1fa687645d137 + checksum: 933550047b6c1a2328599a21d8b7666507427c0f5ef5eaadd56b5da0fd9505e239053c66fe181bf1df469a3b7af9d775778eee283cbb7ae16b902ddc09e93a97 languageName: node linkType: hard -"source-map-support@npm:^0.5.6": - version: 0.5.19 - resolution: "source-map-support@npm:0.5.19" +"source-map-support@npm:0.5.21": + version: 0.5.21 + resolution: "source-map-support@npm:0.5.21" dependencies: buffer-from: ^1.0.0 source-map: ^0.6.0 - checksum: c72802fdba9cb62b92baef18cc14cc4047608b77f0353e6c36dd993444149a466a2845332c5540d4a6630957254f0f68f4ef5a0120c33d2e83974c51a05afbac + checksum: 43e98d700d79af1d36f859bdb7318e601dfc918c7ba2e98456118ebc4c4872b327773e5a1df09b0524e9e5063bb18f0934538eace60cca2710d1fa687645d137 languageName: node linkType: hard @@ -5757,13 +5497,6 @@ __metadata: languageName: node linkType: hard -"source-map@npm:^0.7.3": - version: 0.7.3 - resolution: "source-map@npm:0.7.3" - checksum: cd24efb3b8fa69b64bf28e3c1b1a500de77e84260c5b7f2b873f88284df17974157cc88d386ee9b6d081f08fdd8242f3fc05c953685a6ad81aad94c7393dedea - languageName: node - linkType: hard - "sprintf-js@npm:1.1.2": version: 1.1.2 resolution: "sprintf-js@npm:1.1.2" @@ -5906,7 +5639,7 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^7.0.0, supports-color@npm:^7.1.0": +"supports-color@npm:^7.1.0": version: 7.2.0 resolution: "supports-color@npm:7.2.0" dependencies: @@ -5924,16 +5657,6 @@ __metadata: languageName: node linkType: hard -"supports-hyperlinks@npm:^2.0.0": - version: 2.1.0 - resolution: "supports-hyperlinks@npm:2.1.0" - dependencies: - has-flag: ^4.0.0 - supports-color: ^7.0.0 - checksum: e4f430c870a258c9854b8bd7f166a9c1e76e3b851da84d4399d6a8f1d4a485e4ec36c16455dde80acf06c86e7c0a6df76ed22b6a4644a6ae3eced8616b3f21b5 - languageName: node - linkType: hard - "supports-preserve-symlinks-flag@npm:^1.0.0": version: 1.0.0 resolution: "supports-preserve-symlinks-flag@npm:1.0.0" @@ -5941,13 +5664,6 @@ __metadata: languageName: node linkType: hard -"symbol-tree@npm:^3.2.4": - version: 3.2.4 - resolution: "symbol-tree@npm:3.2.4" - checksum: 6e8fc7e1486b8b54bea91199d9535bb72f10842e40c79e882fc94fb7b14b89866adf2fd79efa5ebb5b658bc07fb459ccce5ac0e99ef3d72f474e74aaf284029d - languageName: node - linkType: hard - "systeminformation@npm:^5.7": version: 5.7.6 resolution: "systeminformation@npm:5.7.6" @@ -5971,16 +5687,6 @@ __metadata: languageName: node linkType: hard -"terminal-link@npm:^2.0.0": - version: 2.1.1 - resolution: "terminal-link@npm:2.1.1" - dependencies: - ansi-escapes: ^4.2.1 - supports-hyperlinks: ^2.0.0 - checksum: ce3d2cd3a438c4a9453947aa664581519173ea40e77e2534d08c088ee6dda449eabdbe0a76d2a516b8b73c33262fedd10d5270ccf7576ae316e3db170ce6562f - languageName: node - linkType: hard - "test-exclude@npm:^6.0.0": version: 6.0.0 resolution: "test-exclude@npm:6.0.0" @@ -5992,13 +5698,6 @@ __metadata: languageName: node linkType: hard -"throat@npm:^6.0.1": - version: 6.0.1 - resolution: "throat@npm:6.0.1" - checksum: 782d4171ee4e3cf947483ed2ff1af3e17cc4354c693b9d339284f61f99fbc401d171e0b0d2db3295bb7d447630333e9319c174ebd7ef315c6fb791db9675369c - languageName: node - linkType: hard - "tiny-lru@npm:9.0.3": version: 9.0.3 resolution: "tiny-lru@npm:9.0.3" @@ -6006,7 +5705,7 @@ __metadata: languageName: node linkType: hard -"tmpl@npm:1.0.x": +"tmpl@npm:1.0.5": version: 1.0.5 resolution: "tmpl@npm:1.0.5" checksum: cd922d9b853c00fe414c5a774817be65b058d54a2d01ebb415840960406c669a0fc632f66df885e24cb022ec812739199ccbdb8d1164c3e513f85bfca5ab2873 @@ -6043,106 +5742,6 @@ __metadata: languageName: node linkType: hard -"tough-cookie@npm:^4.0.0": - version: 4.0.0 - resolution: "tough-cookie@npm:4.0.0" - dependencies: - psl: ^1.1.33 - punycode: ^2.1.1 - universalify: ^0.1.2 - checksum: 0891b37eb7d17faa3479d47f0dce2e3007f2583094ad272f2670d120fbcc3df3b0b0a631ba96ecad49f9e2297d93ff8995ce0d3292d08dd7eabe162f5b224d69 - languageName: node - linkType: hard - -"tr46@npm:^2.0.2": - version: 2.0.2 - resolution: "tr46@npm:2.0.2" - dependencies: - punycode: ^2.1.1 - checksum: 2b2b3dfa6bc65d027b2fac729fba0fb5b9d98af7b69ad6876c0f088ebf127f2d53e5a4d4464e5de40380cf721f392262c9183d2a05cea4967a890e8801c842f6 - languageName: node - linkType: hard - -"tr46@npm:^2.1.0": - version: 2.1.0 - resolution: "tr46@npm:2.1.0" - dependencies: - punycode: ^2.1.1 - checksum: ffe6049b9dca3ae329b059aada7f515b0f0064c611b39b51ff6b53897e954650f6f63d9319c6c008d36ead477c7b55e5f64c9dc60588ddc91ff720d64eb710b3 - languageName: node - linkType: hard - -"ts-jest@npm:29.0.3": - version: 29.0.3 - resolution: "ts-jest@npm:29.0.3" - dependencies: - bs-logger: 0.x - fast-json-stable-stringify: 2.x - jest-util: ^29.0.0 - json5: ^2.2.1 - lodash.memoize: 4.x - make-error: 1.x - semver: 7.x - yargs-parser: ^21.0.1 - peerDependencies: - "@babel/core": ">=7.0.0-beta.0 <8" - "@jest/types": ^29.0.0 - babel-jest: ^29.0.0 - jest: ^29.0.0 - typescript: ">=4.3" - peerDependenciesMeta: - "@babel/core": - optional: true - "@jest/types": - optional: true - babel-jest: - optional: true - esbuild: - optional: true - bin: - ts-jest: cli.js - checksum: 541e51776d367fa2279af47f75af94b03e0538f1839ea9983de0f4ad7f188002f6eb1fc72440651d96daa62d25a7bc679a129c14e6ef291277eea9346751d56b - languageName: node - linkType: hard - -"ts-node@npm:10.9.1": - version: 10.9.1 - resolution: "ts-node@npm:10.9.1" - dependencies: - "@cspotcode/source-map-support": ^0.8.0 - "@tsconfig/node10": ^1.0.7 - "@tsconfig/node12": ^1.0.7 - "@tsconfig/node14": ^1.0.0 - "@tsconfig/node16": ^1.0.2 - acorn: ^8.4.1 - acorn-walk: ^8.1.1 - arg: ^4.1.0 - create-require: ^1.1.0 - diff: ^4.0.1 - make-error: ^1.1.1 - v8-compile-cache-lib: ^3.0.1 - yn: 3.1.1 - peerDependencies: - "@swc/core": ">=1.2.50" - "@swc/wasm": ">=1.2.50" - "@types/node": "*" - typescript: ">=2.7" - peerDependenciesMeta: - "@swc/core": - optional: true - "@swc/wasm": - optional: true - bin: - ts-node: dist/bin.js - ts-node-cwd: dist/bin-cwd.js - ts-node-esm: dist/bin-esm.js - ts-node-script: dist/bin-script.js - ts-node-transpile-only: dist/bin-transpile.js - ts-script: dist/bin-script-deprecated.js - checksum: 090adff1302ab20bd3486e6b4799e90f97726ed39e02b39e566f8ab674fd5bd5f727f43615debbfc580d33c6d9d1c6b1b3ce7d8e3cca3e20530a145ffa232c35 - languageName: node - linkType: hard - "tslib@npm:1.9.3": version: 1.9.3 resolution: "tslib@npm:1.9.3" @@ -6206,15 +5805,6 @@ __metadata: languageName: node linkType: hard -"typedarray-to-buffer@npm:^3.1.5": - version: 3.1.5 - resolution: "typedarray-to-buffer@npm:3.1.5" - dependencies: - is-typedarray: ^1.0.0 - checksum: 99c11aaa8f45189fcfba6b8a4825fd684a321caa9bd7a76a27cf0c7732c174d198b99f449c52c3818107430b5f41c0ccbbfb75cb2ee3ca4a9451710986d61a60 - languageName: node - linkType: hard - "typescript@npm:4.9.3": version: 4.9.3 resolution: "typescript@npm:4.9.3" @@ -6271,7 +5861,7 @@ __metadata: languageName: node linkType: hard -"universalify@npm:^0.1.0, universalify@npm:^0.1.2": +"universalify@npm:^0.1.0": version: 0.1.2 resolution: "universalify@npm:0.1.2" checksum: 40cdc60f6e61070fe658ca36016a8f4ec216b29bf04a55dce14e3710cc84c7448538ef4dad3728d0bfe29975ccd7bfb5f414c45e7b78883567fb31b246f02dff @@ -6292,6 +5882,20 @@ __metadata: languageName: node linkType: hard +"update-browserslist-db@npm:^1.0.9": + version: 1.0.10 + resolution: "update-browserslist-db@npm:1.0.10" + dependencies: + escalade: ^3.1.1 + picocolors: ^1.0.0 + peerDependencies: + browserslist: ">= 4.21.0" + bin: + browserslist-lint: cli.js + checksum: 12db73b4f63029ac407b153732e7cd69a1ea8206c9100b482b7d12859cd3cd0bc59c602d7ae31e652706189f1acb90d42c53ab24a5ba563ed13aebdddc5561a0 + languageName: node + linkType: hard + "util-deprecate@npm:^1.0.1": version: 1.0.2 resolution: "util-deprecate@npm:1.0.2" @@ -6315,21 +5919,14 @@ __metadata: 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" - checksum: 78089ad549e21bcdbfca10c08850022b22024cdcc2da9b168bcf5a73a6ed7bf01a9cebb9eac28e03cd23a684d81e0502797e88f3ccd27a32aeab1cfc44c39da0 - languageName: node - linkType: hard - -"v8-to-istanbul@npm:^8.1.0": - version: 8.1.1 - resolution: "v8-to-istanbul@npm:8.1.1" +"v8-to-istanbul@npm:^9.0.1": + version: 9.0.1 + resolution: "v8-to-istanbul@npm:9.0.1" dependencies: + "@jridgewell/trace-mapping": ^0.3.12 "@types/istanbul-lib-coverage": ^2.0.1 convert-source-map: ^1.6.0 - source-map: ^0.7.3 - checksum: 54ce92bec2727879626f623d02c8d193f0c7e919941fa373ec135189a8382265117f5316ea317a1e12a5f9c13d84d8449052a731fe3306fa4beaafbfa4cab229 + checksum: a49c34bf0a3af0c11041a3952a2600913904a983bd1bc87148b5c033bc5c1d02d5a13620fcdbfa2c60bc582a2e2970185780f0c844b4c3a220abf405f8af6311 languageName: node linkType: hard @@ -6364,24 +5961,6 @@ __metadata: languageName: node linkType: hard -"w3c-hr-time@npm:^1.0.2": - version: 1.0.2 - resolution: "w3c-hr-time@npm:1.0.2" - dependencies: - browser-process-hrtime: ^1.0.0 - checksum: ec3c2dacbf8050d917bbf89537a101a08c2e333b4c19155f7d3bedde43529d4339db6b3d049d9610789cb915f9515f8be037e0c54c079e9d4735c50b37ed52b9 - languageName: node - linkType: hard - -"w3c-xmlserializer@npm:^2.0.0": - version: 2.0.0 - resolution: "w3c-xmlserializer@npm:2.0.0" - dependencies: - xml-name-validator: ^3.0.0 - checksum: ae25c51cf71f1fb2516df1ab33a481f83461a117565b95e3d0927432522323f93b1b2846cbb60196d337970c421adb604fc2d0d180c6a47a839da01db5b9973b - languageName: node - linkType: hard - "walk@npm:2.3.15": version: 2.3.15 resolution: "walk@npm:2.3.15" @@ -6391,64 +5970,12 @@ __metadata: languageName: node linkType: hard -"walker@npm:^1.0.7": - version: 1.0.7 - resolution: "walker@npm:1.0.7" - dependencies: - makeerror: 1.0.x - checksum: 4038fcf92f6ab0288267ad05008aec9e089a759f1bd32e1ea45cc2eb498eb12095ec43cf8ca2bf23a465f4580a0d33b25b89f450ba521dd27083cbc695ee6bf5 - languageName: node - linkType: hard - -"webidl-conversions@npm:^5.0.0": - version: 5.0.0 - resolution: "webidl-conversions@npm:5.0.0" - checksum: ccf1ec2ca7c0b5671e5440ace4a66806ae09c49016ab821481bec0c05b1b82695082dc0a27d1fe9d804d475a408ba0c691e6803fd21be608e710955d4589cd69 - languageName: node - linkType: hard - -"webidl-conversions@npm:^6.1.0": - version: 6.1.0 - resolution: "webidl-conversions@npm:6.1.0" - checksum: 1f526507aa491f972a0c1409d07f8444e1d28778dfa269a9971f2e157182f3d496dc33296e4ed45b157fdb3bf535bb90c90bf10c50dcf1dd6caacb2a34cc84fb - languageName: node - linkType: hard - -"whatwg-encoding@npm:^1.0.5": - version: 1.0.5 - resolution: "whatwg-encoding@npm:1.0.5" - dependencies: - iconv-lite: 0.4.24 - checksum: 5be4efe111dce29ddee3448d3915477fcc3b28f991d9cf1300b4e50d6d189010d47bca2f51140a844cf9b726e8f066f4aee72a04d687bfe4f2ee2767b2f5b1e6 - languageName: node - linkType: hard - -"whatwg-mimetype@npm:^2.3.0": - version: 2.3.0 - resolution: "whatwg-mimetype@npm:2.3.0" - checksum: 23eb885940bcbcca4ff841c40a78e9cbb893ec42743993a42bf7aed16085b048b44b06f3402018931687153550f9a32d259dfa524e4f03577ab898b6965e5383 - languageName: node - linkType: hard - -"whatwg-url@npm:^8.0.0": - version: 8.4.0 - resolution: "whatwg-url@npm:8.4.0" - dependencies: - lodash.sortby: ^4.7.0 - tr46: ^2.0.2 - webidl-conversions: ^6.1.0 - checksum: a206f1ee22aa1c09d2f605656d5308b214e3e05afd6ba4503bddcf20827ef379cd7f0f9c772b069a4ba0d5aee83fd854de0aeaa674bbf3a94a8e890b1de87f04 - languageName: node - linkType: hard - -"whatwg-url@npm:^8.5.0": - version: 8.7.0 - resolution: "whatwg-url@npm:8.7.0" +"walker@npm:^1.0.8": + version: 1.0.8 + resolution: "walker@npm:1.0.8" dependencies: - lodash: ^4.7.0 - tr46: ^2.1.0 - webidl-conversions: ^6.1.0 - checksum: a87abcc6cefcece5311eb642858c8fdb234e51ec74196bfacf8def2edae1bfbffdf6acb251646ed6301f8cee44262642d8769c707256125a91387e33f405dd1e + makeerror: 1.0.12 + checksum: ad7a257ea1e662e57ef2e018f97b3c02a7240ad5093c392186ce0bcf1f1a60bbadd520d073b9beb921ed99f64f065efb63dfc8eec689a80e569f93c1c5d5e16c languageName: node linkType: hard @@ -6482,6 +6009,7 @@ __metadata: "@types/fs-extra": 9.0.13 "@types/geolite2": 2.0.0 "@types/hbs": 4.0.1 + "@types/jest": ^29.2.4 "@types/node": 12.20.55 "@wireapp/commons": 5.0.3 dotenv: 16.0.3 @@ -6494,15 +6022,13 @@ __metadata: hbs: 4.2.0 helmet: 6.0.1 http-status-codes: 2.2.0 - jest: 27.5.1 + jest: 29.3.1 logdown: 3.3.1 maxmind: 4.3.8 nocache: 3.0.4 opn: 6.0.0 pm2: 5.2.2 rimraf: 3.0.2 - ts-jest: 29.0.3 - ts-node: 10.9.1 typescript: 4.9.3 languageName: unknown linkType: soft @@ -6539,15 +6065,13 @@ __metadata: languageName: node linkType: hard -"write-file-atomic@npm:^3.0.0": - version: 3.0.3 - resolution: "write-file-atomic@npm:3.0.3" +"write-file-atomic@npm:^4.0.1": + version: 4.0.2 + resolution: "write-file-atomic@npm:4.0.2" dependencies: imurmurhash: ^0.1.4 - is-typedarray: ^1.0.0 - signal-exit: ^3.0.2 - typedarray-to-buffer: ^3.1.5 - checksum: c55b24617cc61c3a4379f425fc62a386cc51916a9b9d993f39734d005a09d5a4bb748bc251f1304e7abd71d0a26d339996c275955f527a131b1dcded67878280 + signal-exit: ^3.0.7 + checksum: 5da60bd4eeeb935eec97ead3df6e28e5917a6bd317478e4a85a5285e8480b8ed96032bbcc6ecd07b236142a24f3ca871c924ec4a6575e623ec1b11bf8c1c253c languageName: node linkType: hard @@ -6566,28 +6090,6 @@ __metadata: languageName: node linkType: hard -"ws@npm:^7.4.6": - version: 7.5.7 - resolution: "ws@npm:7.5.7" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: 5c1f669a166fb57560b4e07f201375137fa31d9186afde78b1508926345ce546332f109081574ddc4e38cc474c5406b5fc71c18d71eb75f6e2d2245576976cba - languageName: node - linkType: hard - -"xml-name-validator@npm:^3.0.0": - version: 3.0.0 - resolution: "xml-name-validator@npm:3.0.0" - checksum: b3ac459afed783c285bb98e4960bd1f3ba12754fd4f2320efa0f9181ca28928c53cc75ca660d15d205e81f92304419afe94c531c7cfb3e0649aa6d140d53ecb0 - languageName: node - linkType: hard - "xmlbuilder@npm:^15.1.1": version: 15.1.1 resolution: "xmlbuilder@npm:15.1.1" @@ -6595,13 +6097,6 @@ __metadata: languageName: node linkType: hard -"xmlchars@npm:^2.2.0": - version: 2.2.0 - resolution: "xmlchars@npm:2.2.0" - checksum: 8c70ac94070ccca03f47a81fcce3b271bd1f37a591bf5424e787ae313fcb9c212f5f6786e1fa82076a2c632c0141552babcd85698c437506dfa6ae2d58723062 - languageName: node - linkType: hard - "xregexp@npm:2.0.0": version: 2.0.0 resolution: "xregexp@npm:2.0.0" @@ -6643,38 +6138,31 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:^20.2.2": - version: 20.2.9 - resolution: "yargs-parser@npm:20.2.9" - checksum: 8bb69015f2b0ff9e17b2c8e6bfe224ab463dd00ca211eece72a4cd8a906224d2703fb8a326d36fdd0e68701e201b2a60ed7cf81ce0fd9b3799f9fe7745977ae3 - languageName: node - linkType: hard - -"yargs-parser@npm:^21.0.1": +"yargs-parser@npm:^21.1.1": version: 21.1.1 resolution: "yargs-parser@npm:21.1.1" checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c languageName: node linkType: hard -"yargs@npm:^16.2.0": - version: 16.2.0 - resolution: "yargs@npm:16.2.0" +"yargs@npm:^17.3.1": + version: 17.6.2 + resolution: "yargs@npm:17.6.2" dependencies: - cliui: ^7.0.2 + cliui: ^8.0.1 escalade: ^3.1.1 get-caller-file: ^2.0.5 require-directory: ^2.1.1 - string-width: ^4.2.0 + string-width: ^4.2.3 y18n: ^5.0.5 - yargs-parser: ^20.2.2 - checksum: b14afbb51e3251a204d81937c86a7e9d4bdbf9a2bcee38226c900d00f522969ab675703bee2a6f99f8e20103f608382936034e64d921b74df82b63c07c5e8f59 + yargs-parser: ^21.1.1 + checksum: 47da1b0d854fa16d45a3ded57b716b013b2179022352a5f7467409da5a04a1eef5b3b3d97a2dfc13e8bbe5f2ffc0afe3bc6a4a72f8254e60f5a4bd7947138643 languageName: node linkType: hard -"yn@npm:3.1.1": - version: 3.1.1 - resolution: "yn@npm:3.1.1" - checksum: 2c487b0e149e746ef48cda9f8bad10fc83693cd69d7f9dcd8be4214e985de33a29c9e24f3c0d6bcf2288427040a8947406ab27f7af67ee9456e6b84854f02dd6 +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: f77b3d8d00310def622123df93d4ee654fc6a0096182af8bd60679ddcdfb3474c56c6c7190817c84a2785648cdee9d721c0154eb45698c62176c322fb46fc700 languageName: node linkType: hard From b08692f2906e3730dcbabd10b597b8a737993d74 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Dec 2022 18:01:54 +0100 Subject: [PATCH 093/329] chore(deps-dev): Bump @types/react from 18.0.21 to 18.0.26 (#14244) --- package.json | 2 +- yarn.lock | 523 ++++----------------------------------------------- 2 files changed, 40 insertions(+), 485 deletions(-) diff --git a/package.json b/package.json index 50c807067a8..ea5f334489c 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,7 @@ "@types/open-graph": "0.2.2", "@types/platform": "1.3.4", "@types/prettier": "^2.7.1", - "@types/react": "18.0.21", + "@types/react": "18.0.26", "@types/react-dom": "18.0.9", "@types/react-redux": "7.1.24", "@types/react-transition-group": "4.4.5", diff --git a/yarn.lock b/yarn.lock index c9761585746..b611fc0cef2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -43,7 +43,7 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:7.20.5": +"@babel/core@npm:7.20.5, @babel/core@npm:^7.11.1, @babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3": version: 7.20.5 resolution: "@babel/core@npm:7.20.5" dependencies: @@ -66,29 +66,6 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.11.1, @babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3": - version: 7.20.2 - resolution: "@babel/core@npm:7.20.2" - dependencies: - "@ampproject/remapping": ^2.1.0 - "@babel/code-frame": ^7.18.6 - "@babel/generator": ^7.20.2 - "@babel/helper-compilation-targets": ^7.20.0 - "@babel/helper-module-transforms": ^7.20.2 - "@babel/helpers": ^7.20.1 - "@babel/parser": ^7.20.2 - "@babel/template": ^7.18.10 - "@babel/traverse": ^7.20.1 - "@babel/types": ^7.20.2 - convert-source-map: ^1.7.0 - debug: ^4.1.0 - gensync: ^1.0.0-beta.2 - json5: ^2.2.1 - semver: ^6.3.0 - checksum: 98faaaef26103a276a30a141b951a93bc8418d100d1f668bf7a69d12f3e25df57958e8b6b9100d95663f720db62da85ade736f6629a5ebb1e640251a1b43c0e4 - languageName: node - linkType: hard - "@babel/eslint-parser@npm:7.19.1": version: 7.19.1 resolution: "@babel/eslint-parser@npm:7.19.1" @@ -103,18 +80,7 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.20.1, @babel/generator@npm:^7.20.2, @babel/generator@npm:^7.7.2": - version: 7.20.2 - resolution: "@babel/generator@npm:7.20.2" - dependencies: - "@babel/types": ^7.20.2 - "@jridgewell/gen-mapping": ^0.3.2 - jsesc: ^2.5.1 - checksum: 56b780b8490e007ceeea0c1fc9cea230210488efbcd62b139876ae01958aacab3dd5931fa02ff3a991850af05c01d658baf85f11d4a5cb9c3b899db544214bb9 - languageName: node - linkType: hard - -"@babel/generator@npm:^7.20.5": +"@babel/generator@npm:^7.20.5, @babel/generator@npm:^7.7.2": version: 7.20.5 resolution: "@babel/generator@npm:7.20.5" dependencies: @@ -158,24 +124,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-create-class-features-plugin@npm:^7.18.6": - version: 7.20.2 - resolution: "@babel/helper-create-class-features-plugin@npm:7.20.2" - dependencies: - "@babel/helper-annotate-as-pure": ^7.18.6 - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-function-name": ^7.19.0 - "@babel/helper-member-expression-to-functions": ^7.18.9 - "@babel/helper-optimise-call-expression": ^7.18.6 - "@babel/helper-replace-supers": ^7.19.1 - "@babel/helper-split-export-declaration": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: e89a8841db3f6340996f395fc372ee4bec361230eb9345b763314f768e68421d43461918fdedfb9a69b71f1d0433439f3e318d1b1b9ba04fbd7aac1c84959e37 - languageName: node - linkType: hard - -"@babel/helper-create-class-features-plugin@npm:^7.20.5": +"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.20.5": version: 7.20.5 resolution: "@babel/helper-create-class-features-plugin@npm:7.20.5" dependencies: @@ -392,17 +341,6 @@ __metadata: languageName: node linkType: hard -"@babel/helpers@npm:^7.20.1": - version: 7.20.1 - resolution: "@babel/helpers@npm:7.20.1" - dependencies: - "@babel/template": ^7.18.10 - "@babel/traverse": ^7.20.1 - "@babel/types": ^7.20.0 - checksum: be35f78666bdab895775ed94dbeb098f7b4fa08ce4cfb0c3a9e69b7220cce56960dcdc2b14f5df9d3b80388d4bf7df155c97f6cf6768c0138f4e6931d0f44955 - languageName: node - linkType: hard - "@babel/helpers@npm:^7.20.5": version: 7.20.6 resolution: "@babel/helpers@npm:7.20.6" @@ -425,16 +363,7 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.18.10, @babel/parser@npm:^7.20.1, @babel/parser@npm:^7.20.2, @babel/parser@npm:^7.9.4": - version: 7.20.2 - resolution: "@babel/parser@npm:7.20.2" - bin: - parser: ./bin/babel-parser.js - checksum: 441d0550144f338e1a41de785b914f5942c493dfafdf07cccdc19c3ecf94aa5ea58741566e199e385ba7a09e3e51522df87f7405cdf14ec88da0ff11db8030f1 - languageName: node - linkType: hard - -"@babel/parser@npm:^7.20.5": +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.18.10, @babel/parser@npm:^7.20.5, @babel/parser@npm:^7.9.4": version: 7.20.5 resolution: "@babel/parser@npm:7.20.5" bin: @@ -1490,25 +1419,7 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.18.11, @babel/traverse@npm:^7.19.1, @babel/traverse@npm:^7.20.1, @babel/traverse@npm:^7.7.2": - version: 7.20.1 - resolution: "@babel/traverse@npm:7.20.1" - dependencies: - "@babel/code-frame": ^7.18.6 - "@babel/generator": ^7.20.1 - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-function-name": ^7.19.0 - "@babel/helper-hoist-variables": ^7.18.6 - "@babel/helper-split-export-declaration": ^7.18.6 - "@babel/parser": ^7.20.1 - "@babel/types": ^7.20.0 - debug: ^4.1.0 - globals: ^11.1.0 - checksum: 6696176d574b7ff93466848010bc7e94b250169379ec2a84f1b10da46a7cc2018ea5e3a520c3078487db51e3a4afab9ecff48f25d1dbad8c1319362f4148fb4b - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.20.5": +"@babel/traverse@npm:^7.18.11, @babel/traverse@npm:^7.19.1, @babel/traverse@npm:^7.20.1, @babel/traverse@npm:^7.20.5, @babel/traverse@npm:^7.7.2": version: 7.20.5 resolution: "@babel/traverse@npm:7.20.5" dependencies: @@ -1526,18 +1437,7 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.18.10, @babel/types@npm:^7.18.6, @babel/types@npm:^7.18.9, @babel/types@npm:^7.19.0, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.2, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": - version: 7.20.2 - resolution: "@babel/types@npm:7.20.2" - dependencies: - "@babel/helper-string-parser": ^7.19.4 - "@babel/helper-validator-identifier": ^7.19.1 - to-fast-properties: ^2.0.0 - checksum: 57e76e5f21876135f481bfd4010c87f2d38196bb0a2bc60a28d6e55e3afa90cdd9accf164e4cb71bdfb620517fa0a0cb5600cdce36c21d59fdaccfbb899c024c - languageName: node - linkType: hard - -"@babel/types@npm:^7.20.5": +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.18.10, @babel/types@npm:^7.18.6, @babel/types@npm:^7.18.9, @babel/types@npm:^7.19.0, @babel/types@npm:^7.20.2, @babel/types@npm:^7.20.5, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": version: 7.20.5 resolution: "@babel/types@npm:7.20.5" dependencies: @@ -2525,15 +2425,6 @@ __metadata: languageName: node linkType: hard -"@jest/expect-utils@npm:^29.2.2": - version: 29.2.2 - resolution: "@jest/expect-utils@npm:29.2.2" - dependencies: - jest-get-type: ^29.2.0 - checksum: 42afdd576ae55c31cbcee50f1efecd338073b88cad146b91b653ef9d67970ebcd457b0fc2236b18a7d82945be7ae0674b9e75a34f0f6067585fd5c89a89bb232 - languageName: node - linkType: hard - "@jest/expect-utils@npm:^29.3.1": version: 29.3.1 resolution: "@jest/expect-utils@npm:29.3.1" @@ -2683,20 +2574,6 @@ __metadata: languageName: node linkType: hard -"@jest/types@npm:^29.2.1": - version: 29.2.1 - resolution: "@jest/types@npm:29.2.1" - dependencies: - "@jest/schemas": ^29.0.0 - "@types/istanbul-lib-coverage": ^2.0.0 - "@types/istanbul-reports": ^3.0.0 - "@types/node": "*" - "@types/yargs": ^17.0.8 - chalk: ^4.0.0 - checksum: a83f20727425179aa05974aa7553c307d207fbb6b7ae5ab1e37fbb6ba9b6655f26655301fc804f2545d33f4c4a6b59d41eed1737c005d2b83fce9e14841b4150 - languageName: node - linkType: hard - "@jest/types@npm:^29.3.1": version: 29.3.1 resolution: "@jest/types@npm:29.3.1" @@ -3300,17 +3177,7 @@ __metadata: languageName: node linkType: hard -"@types/eslint-scope@npm:^3.7.3": - version: 3.7.3 - resolution: "@types/eslint-scope@npm:3.7.3" - dependencies: - "@types/eslint": "*" - "@types/estree": "*" - checksum: 6772b05e1b92003d1f295e81bc847a61f4fbe8ddab77ffa49e84ed3f9552513bdde677eb53ef167753901282857dd1d604d9f82eddb34a233495932b2dc3dc17 - languageName: node - linkType: hard - -"@types/eslint-scope@npm:^3.7.4": +"@types/eslint-scope@npm:^3.7.3, @types/eslint-scope@npm:^3.7.4": version: 3.7.4 resolution: "@types/eslint-scope@npm:3.7.4" dependencies: @@ -3465,7 +3332,7 @@ __metadata: languageName: node linkType: hard -"@types/jsdom@npm:20.0.1": +"@types/jsdom@npm:20.0.1, @types/jsdom@npm:^20.0.0": version: 20.0.1 resolution: "@types/jsdom@npm:20.0.1" dependencies: @@ -3476,17 +3343,6 @@ __metadata: languageName: node linkType: hard -"@types/jsdom@npm:^20.0.0": - version: 20.0.0 - resolution: "@types/jsdom@npm:20.0.0" - dependencies: - "@types/node": "*" - "@types/tough-cookie": "*" - parse5: ^7.0.0 - checksum: 13e67d31347e02d46ec6a23919b3ce39d86136665922a2a6cb977e216a2f46c22d2f025d0586a64ab492ebaa5f43da669b6f173a5a8cfd3e3bb7c9d19b6cfa9e - languageName: node - linkType: hard - "@types/json-schema@npm:*, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": version: 7.0.9 resolution: "@types/json-schema@npm:7.0.9" @@ -3562,10 +3418,10 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*, @types/node@npm:>=13.7.0": - version: 18.11.9 - resolution: "@types/node@npm:18.11.9" - checksum: cc0aae109e9b7adefc32eecb838d6fad931663bb06484b5e9cbbbf74865c721b03d16fd8d74ad90e31dbe093d956a7c2c306ba5429ba0c00f3f7505103d7a496 +"@types/node@npm:*, @types/node@npm:>=13.7.0, @types/node@npm:^18.11.10": + version: 18.11.10 + resolution: "@types/node@npm:18.11.10" + checksum: 0f60cb090b2ee91fcd3dc4311bc1ed7889b92f14644c0069f100776f86474c12eebbcc6c75bc0d7d96b975a103b4d5d6b3c22b4e88bea6e7f4e2b1bb0daf5ea8 languageName: node linkType: hard @@ -3576,13 +3432,6 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^18.11.10": - version: 18.11.10 - resolution: "@types/node@npm:18.11.10" - checksum: 0f60cb090b2ee91fcd3dc4311bc1ed7889b92f14644c0069f100776f86474c12eebbcc6c75bc0d7d96b975a103b4d5d6b3c22b4e88bea6e7f4e2b1bb0daf5ea8 - languageName: node - linkType: hard - "@types/node@npm:~14": version: 14.18.21 resolution: "@types/node@npm:14.18.21" @@ -3634,7 +3483,7 @@ __metadata: languageName: node linkType: hard -"@types/react-dom@npm:18.0.9": +"@types/react-dom@npm:18.0.9, @types/react-dom@npm:^18.0.0": version: 18.0.9 resolution: "@types/react-dom@npm:18.0.9" dependencies: @@ -3643,15 +3492,6 @@ __metadata: languageName: node linkType: hard -"@types/react-dom@npm:^18.0.0": - version: 18.0.8 - resolution: "@types/react-dom@npm:18.0.8" - dependencies: - "@types/react": "*" - checksum: 522e5e949d05f35c6037a2290838c9c7ff92a9d06f7d96b993c7c3f5a86d8f3a6337e059c94e6fb0920227f445e5d1ce10fbfe3d9bbd95fb82a5539249d90646 - languageName: node - linkType: hard - "@types/react-redux@npm:7.1.24": version: 7.1.24 resolution: "@types/react-redux@npm:7.1.24" @@ -3673,14 +3513,14 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:*, @types/react@npm:16 || 17 || 18, @types/react@npm:18.0.21": - version: 18.0.21 - resolution: "@types/react@npm:18.0.21" +"@types/react@npm:*, @types/react@npm:16 || 17 || 18, @types/react@npm:18.0.26": + version: 18.0.26 + resolution: "@types/react@npm:18.0.26" dependencies: "@types/prop-types": "*" "@types/scheduler": "*" csstype: ^3.0.2 - checksum: 36c1a7c9d507e81e2e629c1ad3db51d7b84d8b010c2d5008da411874286c6a5ccc711ae1d4c470efc0bdc77153cc8804a40e927e929e5164c669ca41b84b846d + checksum: b62f0ea3cdfa68e106391728325057ad36f1bde7ba2dfae029472c47e01e482bc77c6ba4f1dad59f3f04ee81cb597618ff7c30a33c157c0a20462b6dd6aa2d4d languageName: node linkType: hard @@ -3879,16 +3719,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:5.42.1": - version: 5.42.1 - resolution: "@typescript-eslint/scope-manager@npm:5.42.1" - dependencies: - "@typescript-eslint/types": 5.42.1 - "@typescript-eslint/visitor-keys": 5.42.1 - checksum: cfad5f04328fae4bb6d965a94c980ac2f6fa0eee6183e9bed6d7ebdb067f01a0a9a3b5500fc3638d5e287f46f4412aa462e238c610c1fb96b794b83c575c7fb4 - languageName: node - linkType: hard - "@typescript-eslint/scope-manager@npm:5.45.0": version: 5.45.0 resolution: "@typescript-eslint/scope-manager@npm:5.45.0" @@ -3923,13 +3753,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/types@npm:5.42.1": - version: 5.42.1 - resolution: "@typescript-eslint/types@npm:5.42.1" - checksum: b0eb3df3792dd0e447abcf2b4fd79b2eaa6f944242d00afa8ef2d9f892ea63e52f200e7cb1758ddbc46154aa6764cec8bc796ed96f7554457a20db976f9f2089 - languageName: node - linkType: hard - "@typescript-eslint/types@npm:5.45.0": version: 5.45.0 resolution: "@typescript-eslint/types@npm:5.45.0" @@ -3955,24 +3778,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:5.42.1": - version: 5.42.1 - resolution: "@typescript-eslint/typescript-estree@npm:5.42.1" - dependencies: - "@typescript-eslint/types": 5.42.1 - "@typescript-eslint/visitor-keys": 5.42.1 - debug: ^4.3.4 - globby: ^11.1.0 - is-glob: ^4.0.3 - semver: ^7.3.7 - tsutils: ^3.21.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: dfd3e20d41ba4b574a52d82cc40b38708b8c2c4277d6304a8d914fe2a4a9ce8779f4d79fdac140e77a3afd3c6a2a7e3f31620dc427cabd04e4e906bb0ca3a468 - languageName: node - linkType: hard - "@typescript-eslint/typescript-estree@npm:5.45.0": version: 5.45.0 resolution: "@typescript-eslint/typescript-estree@npm:5.45.0" @@ -4007,7 +3812,7 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/utils@npm:5.45.0": +"@typescript-eslint/utils@npm:5.45.0, @typescript-eslint/utils@npm:^5.10.0, @typescript-eslint/utils@npm:^5.13.0": version: 5.45.0 resolution: "@typescript-eslint/utils@npm:5.45.0" dependencies: @@ -4025,24 +3830,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/utils@npm:^5.10.0, @typescript-eslint/utils@npm:^5.13.0": - version: 5.42.1 - resolution: "@typescript-eslint/utils@npm:5.42.1" - dependencies: - "@types/json-schema": ^7.0.9 - "@types/semver": ^7.3.12 - "@typescript-eslint/scope-manager": 5.42.1 - "@typescript-eslint/types": 5.42.1 - "@typescript-eslint/typescript-estree": 5.42.1 - eslint-scope: ^5.1.1 - eslint-utils: ^3.0.0 - semver: ^7.3.7 - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: 9f1c429a602dad4ba7a52df00924aab6033854234a1e1bf699a3e5b48455b5fdc1a41de459a7f11a3ccfed1528831ecb95fc7e54d30be7d8cccbb689f885fdac - languageName: node - linkType: hard - "@typescript-eslint/visitor-keys@npm:5.10.1": version: 5.10.1 resolution: "@typescript-eslint/visitor-keys@npm:5.10.1" @@ -4053,16 +3840,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:5.42.1": - version: 5.42.1 - resolution: "@typescript-eslint/visitor-keys@npm:5.42.1" - dependencies: - "@typescript-eslint/types": 5.42.1 - eslint-visitor-keys: ^3.3.0 - checksum: d36c59da7bf3b3c150c12cbe4b0331edc15253f59599ec3d8b873b2a3d9fc7a4fea11490c1b20d972afcdc9c842deb5ada527ea9c538aa7e87555699d9a59f24 - languageName: node - linkType: hard - "@typescript-eslint/visitor-keys@npm:5.45.0": version: 5.45.0 resolution: "@typescript-eslint/visitor-keys@npm:5.45.0" @@ -5011,20 +4788,7 @@ __metadata: languageName: node linkType: hard -"array-includes@npm:^3.1.4, array-includes@npm:^3.1.5": - version: 3.1.5 - resolution: "array-includes@npm:3.1.5" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.19.5 - get-intrinsic: ^1.1.1 - is-string: ^1.0.7 - checksum: f6f24d834179604656b7bec3e047251d5cc87e9e87fab7c175c61af48e80e75acd296017abcde21fb52292ab6a2a449ab2ee37213ee48c8709f004d75983f9c5 - languageName: node - linkType: hard - -"array-includes@npm:^3.1.6": +"array-includes@npm:^3.1.4, array-includes@npm:^3.1.5, array-includes@npm:^3.1.6": version: 3.1.6 resolution: "array-includes@npm:3.1.6" dependencies: @@ -5634,9 +5398,9 @@ __metadata: linkType: hard "caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001400, caniuse-lite@npm:^1.0.30001426": - version: 1.0.30001430 - resolution: "caniuse-lite@npm:1.0.30001430" - checksum: 15200fe2658871807341a451b01e3d6ae2bf5e0e30b60af86e1e8d9e1655a5f5011bb23fdc3d6b696019d63d3e60ad6864b15c40c80c538c4500ac5098b9701b + version: 1.0.30001435 + resolution: "caniuse-lite@npm:1.0.30001435" + checksum: ec88b9c37f66095e26ddb8b43110e9564ebccb6de77e495b8e8b9d64fdbfe37f7762be8fd2578c3ecc181a183a159578c9bd8e9b90eb15b44b78e8a6d0e92530 languageName: node linkType: hard @@ -6165,7 +5929,7 @@ __metadata: languageName: node linkType: hard -"cosmiconfig@npm:7.0.1, cosmiconfig@npm:^7.0.0": +"cosmiconfig@npm:7.0.1": version: 7.0.1 resolution: "cosmiconfig@npm:7.0.1" dependencies: @@ -6178,7 +5942,7 @@ __metadata: languageName: node linkType: hard -"cosmiconfig@npm:^7.1.0": +"cosmiconfig@npm:^7.0.0, cosmiconfig@npm:^7.1.0": version: 7.1.0 resolution: "cosmiconfig@npm:7.1.0" dependencies: @@ -6813,13 +6577,6 @@ __metadata: languageName: node linkType: hard -"diff-sequences@npm:^29.2.0": - version: 29.2.0 - resolution: "diff-sequences@npm:29.2.0" - checksum: e7b874cc7a4ce76fd199794c4d5fabb099ab4bce069592407ac2933e3a10e05f035111498e2f2c86572f5cfa9668a191b09e79f1d967dc39d9ca0a12aacde41a - languageName: node - linkType: hard - "diff-sequences@npm:^29.3.1": version: 29.3.1 resolution: "diff-sequences@npm:29.3.1" @@ -7184,38 +6941,7 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.19.0, es-abstract@npm:^1.19.1, es-abstract@npm:^1.19.5": - version: 1.20.1 - resolution: "es-abstract@npm:1.20.1" - dependencies: - call-bind: ^1.0.2 - es-to-primitive: ^1.2.1 - function-bind: ^1.1.1 - function.prototype.name: ^1.1.5 - get-intrinsic: ^1.1.1 - get-symbol-description: ^1.0.0 - has: ^1.0.3 - has-property-descriptors: ^1.0.0 - has-symbols: ^1.0.3 - internal-slot: ^1.0.3 - is-callable: ^1.2.4 - is-negative-zero: ^2.0.2 - is-regex: ^1.1.4 - is-shared-array-buffer: ^1.0.2 - is-string: ^1.0.7 - is-weakref: ^1.0.2 - object-inspect: ^1.12.0 - object-keys: ^1.1.1 - object.assign: ^4.1.2 - regexp.prototype.flags: ^1.4.3 - string.prototype.trimend: ^1.0.5 - string.prototype.trimstart: ^1.0.5 - unbox-primitive: ^1.0.2 - checksum: 28da27ae0ed9c76df7ee8ef5c278df79dcfdb554415faf7068bb7c58f8ba8e2a16bfb59e586844be6429ab4c302ca7748979d48442224cb1140b051866d74b7f - languageName: node - linkType: hard - -"es-abstract@npm:^1.20.4": +"es-abstract@npm:^1.19.0, es-abstract@npm:^1.19.5, es-abstract@npm:^1.20.4": version: 1.20.4 resolution: "es-abstract@npm:1.20.4" dependencies: @@ -7909,20 +7635,7 @@ __metadata: languageName: node linkType: hard -"expect@npm:^29.0.0": - version: 29.2.2 - resolution: "expect@npm:29.2.2" - dependencies: - "@jest/expect-utils": ^29.2.2 - jest-get-type: ^29.2.0 - jest-matcher-utils: ^29.2.2 - jest-message-util: ^29.2.1 - jest-util: ^29.2.1 - checksum: e763df36fe406d2746cdf993b85714c16355b249b063b3f1ab0ff4077435b46ccae937c09930218516c1225203353652a8c6ac07b354474bc81d0ec45133dbf1 - languageName: node - linkType: hard - -"expect@npm:^29.3.1": +"expect@npm:^29.0.0, expect@npm:^29.3.1": version: 29.3.1 resolution: "expect@npm:29.3.1" dependencies: @@ -8427,18 +8140,7 @@ __metadata: languageName: node linkType: hard -"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.0, get-intrinsic@npm:^1.1.1": - version: 1.1.1 - resolution: "get-intrinsic@npm:1.1.1" - dependencies: - function-bind: ^1.1.1 - has: ^1.0.3 - has-symbols: ^1.0.1 - checksum: a9fe2ca8fa3f07f9b0d30fb202bcd01f3d9b9b6b732452e79c48e79f7d6d8d003af3f9e38514250e3553fdc83c61650851cb6870832ac89deaaceb08e3721a17 - languageName: node - linkType: hard - -"get-intrinsic@npm:^1.1.3": +"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.0, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3": version: 1.1.3 resolution: "get-intrinsic@npm:1.1.3" dependencies: @@ -8832,14 +8534,7 @@ __metadata: languageName: node linkType: hard -"highlight.js@npm:*": - version: 11.6.0 - resolution: "highlight.js@npm:11.6.0" - checksum: 3908eb34a4b442ca1e20c1ae6415ea935fbbcdb2b532a89948d82b0fa4ad41fc5de3802a0de4e88a0bcb7d97d4445579048cd2aab1d105ac47f59dd58a9a98ae - languageName: node - linkType: hard - -"highlight.js@npm:11.7.0": +"highlight.js@npm:*, highlight.js@npm:11.7.0": version: 11.7.0 resolution: "highlight.js@npm:11.7.0" checksum: 19e3fb8b56f4b361b057a8523b989dfeb6479bbd1e29cec3fac6fa5c78d09927d5fa61b7dba6631fdb57cfdca9b3084aa4da49405ceaf4a67f67beae2ed5b77d @@ -9092,14 +8787,7 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^5.2.0": - version: 5.2.0 - resolution: "ignore@npm:5.2.0" - checksum: 6b1f926792d614f64c6c83da3a1f9c83f6196c2839aa41e1e32dd7b8d174cef2e329d75caabb62cb61ce9dc432f75e67d07d122a037312db7caa73166a1bdb77 - languageName: node - linkType: hard - -"ignore@npm:^5.2.1": +"ignore@npm:^5.2.0, ignore@npm:^5.2.1": version: 5.2.1 resolution: "ignore@npm:5.2.1" checksum: 7251d00cba49fe88c4f3565fadeb4aa726ba38294a9a79ffed542edc47bafd989d4b2ccf65700c5b1b26a1e91dfc7218fb23017937c79216025d5caeec0ee9d5 @@ -9313,14 +9001,7 @@ __metadata: languageName: node linkType: hard -"is-callable@npm:^1.1.4, is-callable@npm:^1.2.4": - version: 1.2.4 - resolution: "is-callable@npm:1.2.4" - checksum: 1a28d57dc435797dae04b173b65d6d1e77d4f16276e9eff973f994eadcfdc30a017e6a597f092752a083c1103cceb56c91e3dadc6692fedb9898dfaba701575f - languageName: node - linkType: hard - -"is-callable@npm:^1.2.7": +"is-callable@npm:^1.1.4, is-callable@npm:^1.2.7": version: 1.2.7 resolution: "is-callable@npm:1.2.7" checksum: 61fd57d03b0d984e2ed3720fb1c7a897827ea174bd44402878e059542ea8c4aeedee0ea0985998aa5cc2736b2fa6e271c08587addb5b3959ac52cf665173d1ac @@ -9940,18 +9621,6 @@ __metadata: languageName: node linkType: hard -"jest-diff@npm:^29.2.1": - version: 29.2.1 - resolution: "jest-diff@npm:29.2.1" - dependencies: - chalk: ^4.0.0 - diff-sequences: ^29.2.0 - jest-get-type: ^29.2.0 - pretty-format: ^29.2.1 - checksum: e3553e5bf556b786b864e3da0ef0a2cde8b260a7bb281eaf47d34aee0bf303bf557bc75416c20f9454e2e1b6ac0ae53684d5be7af5cfc010dc08805bdcb3f457 - languageName: node - linkType: hard - "jest-diff@npm:^29.3.1": version: 29.3.1 resolution: "jest-diff@npm:29.3.1" @@ -10086,18 +9755,6 @@ __metadata: languageName: node linkType: hard -"jest-matcher-utils@npm:^29.2.2": - version: 29.2.2 - resolution: "jest-matcher-utils@npm:29.2.2" - dependencies: - chalk: ^4.0.0 - jest-diff: ^29.2.1 - jest-get-type: ^29.2.0 - pretty-format: ^29.2.1 - checksum: 97ef2638ab826c25f84bfedea231cef091820ae0876ba316922da81145e950d2b9d2057d3645813b5ee880bb975ed4f22e228dda5d0d26a20715e575b675357d - languageName: node - linkType: hard - "jest-matcher-utils@npm:^29.3.1": version: 29.3.1 resolution: "jest-matcher-utils@npm:29.3.1" @@ -10110,23 +9767,6 @@ __metadata: languageName: node linkType: hard -"jest-message-util@npm:^29.2.1": - version: 29.2.1 - resolution: "jest-message-util@npm:29.2.1" - dependencies: - "@babel/code-frame": ^7.12.13 - "@jest/types": ^29.2.1 - "@types/stack-utils": ^2.0.0 - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - micromatch: ^4.0.4 - pretty-format: ^29.2.1 - slash: ^3.0.0 - stack-utils: ^2.0.3 - checksum: 1ec1341dea7f0f04dfa9912647e5c4a092954c122becd9560e43e317407fd401745d99766048be7ee5f0b0b5ff09c84d3c853aa777af57139050efed0ad78376 - languageName: node - linkType: hard - "jest-message-util@npm:^29.3.1": version: 29.3.1 resolution: "jest-message-util@npm:29.3.1" @@ -10292,20 +9932,6 @@ __metadata: languageName: node linkType: hard -"jest-util@npm:^29.2.1": - version: 29.2.1 - resolution: "jest-util@npm:29.2.1" - dependencies: - "@jest/types": ^29.2.1 - "@types/node": "*" - chalk: ^4.0.0 - ci-info: ^3.2.0 - graceful-fs: ^4.2.9 - picomatch: ^2.2.3 - checksum: 781bd14a65599d24b7449877020f4da32e8cb8fbc31c4e849c589ffde58f0eec27de9f690dba182e3ca369fe651c0bb9c307de29a0927d12777677ded56bafb8 - languageName: node - linkType: hard - "jest-util@npm:^29.3.1": version: 29.3.1 resolution: "jest-util@npm:29.3.1" @@ -12004,7 +11630,7 @@ __metadata: languageName: node linkType: hard -"object-inspect@npm:^1.12.0, object-inspect@npm:^1.12.2, object-inspect@npm:^1.9.0": +"object-inspect@npm:^1.12.2, object-inspect@npm:^1.9.0": version: 1.12.2 resolution: "object-inspect@npm:1.12.2" checksum: a534fc1b8534284ed71f25ce3a496013b7ea030f3d1b77118f6b7b1713829262be9e6243acbcb3ef8c626e2b64186112cb7f6db74e37b2789b9c789ca23048b2 @@ -12018,19 +11644,7 @@ __metadata: languageName: node linkType: hard -"object.assign@npm:^4.0.4, object.assign@npm:^4.1.0, object.assign@npm:^4.1.2": - version: 4.1.2 - resolution: "object.assign@npm:4.1.2" - dependencies: - call-bind: ^1.0.0 - define-properties: ^1.1.3 - has-symbols: ^1.0.1 - object-keys: ^1.1.1 - checksum: d621d832ed7b16ac74027adb87196804a500d80d9aca536fccb7ba48d33a7e9306a75f94c1d29cbfa324bc091bfc530bc24789568efdaee6a47fcfa298993814 - languageName: node - linkType: hard - -"object.assign@npm:^4.1.4": +"object.assign@npm:^4.0.4, object.assign@npm:^4.1.0, object.assign@npm:^4.1.2, object.assign@npm:^4.1.4": version: 4.1.4 resolution: "object.assign@npm:4.1.4" dependencies: @@ -12074,18 +11688,7 @@ __metadata: languageName: node linkType: hard -"object.values@npm:^1.1.5": - version: 1.1.5 - resolution: "object.values@npm:1.1.5" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.3 - es-abstract: ^1.19.1 - checksum: 0f17e99741ebfbd0fa55ce942f6184743d3070c61bd39221afc929c8422c4907618c8da694c6915bc04a83ab3224260c779ba37fc07bb668bdc5f33b66a902a4 - languageName: node - linkType: hard - -"object.values@npm:^1.1.6": +"object.values@npm:^1.1.5, object.values@npm:^1.1.6": version: 1.1.6 resolution: "object.values@npm:1.1.6" dependencies: @@ -13314,17 +12917,7 @@ __metadata: languageName: node linkType: hard -"postcss-selector-parser@npm:^6.0.10, postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.0.5, postcss-selector-parser@npm:^6.0.9": - version: 6.0.10 - resolution: "postcss-selector-parser@npm:6.0.10" - dependencies: - cssesc: ^3.0.0 - util-deprecate: ^1.0.2 - checksum: 46afaa60e3d1998bd7adf6caa374baf857cc58d3ff944e29459c9a9e4680a7fe41597bd5b755fc81d7c388357e9bf67c0251d047c640a09f148e13606b8a8608 - languageName: node - linkType: hard - -"postcss-selector-parser@npm:^6.0.11": +"postcss-selector-parser@npm:^6.0.10, postcss-selector-parser@npm:^6.0.11, postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.0.5, postcss-selector-parser@npm:^6.0.9": version: 6.0.11 resolution: "postcss-selector-parser@npm:6.0.11" dependencies: @@ -13373,7 +12966,7 @@ __metadata: languageName: node linkType: hard -"postcss@npm:8.4.19, postcss@npm:^8.4.18, postcss@npm:^8.4.19": +"postcss@npm:8.4.19, postcss@npm:^8.3.11, postcss@npm:^8.4.18, postcss@npm:^8.4.19": version: 8.4.19 resolution: "postcss@npm:8.4.19" dependencies: @@ -13394,17 +12987,6 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.3.11": - version: 8.4.18 - resolution: "postcss@npm:8.4.18" - dependencies: - nanoid: ^3.3.4 - picocolors: ^1.0.0 - source-map-js: ^1.0.2 - checksum: 9349fd99849b2e3d2e134ff949b7770ecb12375f352723ce2bcc06167eba3850ea7844c1b191a85cd915d6a396b4e8ee9a5267e6cc5d8d003d0cbc7a97555d39 - languageName: node - linkType: hard - "prelude-ls@npm:^1.2.1": version: 1.2.1 resolution: "prelude-ls@npm:1.2.1" @@ -13465,18 +13047,7 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^29.0.0, pretty-format@npm:^29.2.1": - version: 29.2.1 - resolution: "pretty-format@npm:29.2.1" - dependencies: - "@jest/schemas": ^29.0.0 - ansi-styles: ^5.0.0 - react-is: ^18.0.0 - checksum: d192cbd3dee72e9b60764629d1f098d60fddc3fc9435f44774a01dd1c5794f36a81fa6a7377a527f994317950d8fc6c5bf9c9915387c5d32f107525996e32a1c - languageName: node - linkType: hard - -"pretty-format@npm:^29.3.1": +"pretty-format@npm:^29.0.0, pretty-format@npm:^29.3.1": version: 29.3.1 resolution: "pretty-format@npm:29.3.1" dependencies: @@ -14040,7 +13611,7 @@ __metadata: languageName: node linkType: hard -"regexp.prototype.flags@npm:^1.4.1, regexp.prototype.flags@npm:^1.4.3": +"regexp.prototype.flags@npm:^1.4.3": version: 1.4.3 resolution: "regexp.prototype.flags@npm:1.4.3" dependencies: @@ -14982,23 +14553,7 @@ __metadata: languageName: node linkType: hard -"string.prototype.matchall@npm:^4.0.6": - version: 4.0.7 - resolution: "string.prototype.matchall@npm:4.0.7" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.3 - es-abstract: ^1.19.1 - get-intrinsic: ^1.1.1 - has-symbols: ^1.0.3 - internal-slot: ^1.0.3 - regexp.prototype.flags: ^1.4.1 - side-channel: ^1.0.4 - checksum: fc09f3ccbfb325de0472bcc87a6be0598a7499e0b4a31db5789676155b15754a4cc4bb83924f15fc9ed48934dac7366ee52c8b9bd160bed6fd072c93b489e75c - languageName: node - linkType: hard - -"string.prototype.matchall@npm:^4.0.8": +"string.prototype.matchall@npm:^4.0.6, string.prototype.matchall@npm:^4.0.8": version: 4.0.8 resolution: "string.prototype.matchall@npm:4.0.8" dependencies: @@ -16653,7 +16208,7 @@ __metadata: "@types/open-graph": 0.2.2 "@types/platform": 1.3.4 "@types/prettier": ^2.7.1 - "@types/react": 18.0.21 + "@types/react": 18.0.26 "@types/react-dom": 18.0.9 "@types/react-redux": 7.1.24 "@types/react-transition-group": 4.4.5 From febd2e4e7e84edf5e8d46a21d4fed8d8e6290d2e Mon Sep 17 00:00:00 2001 From: Virgile <78490891+V-Gira@users.noreply.github.com> Date: Mon, 5 Dec 2022 18:06:49 +0100 Subject: [PATCH 094/329] refactor: change div to p tag in message list [ACC-24] (#14257) --- .../MessagesList/Message/CallMessage.tsx | 4 ++-- .../Message/CallTimeoutMessage.tsx | 4 ++-- .../asset/FileAssetComponent.tsx | 4 ++-- .../asset/LinkPreviewAssetComponent.tsx | 18 ++++++++--------- .../Message/DecryptErrorMessage.tsx | 4 ++-- .../MessagesList/Message/DeleteMessage.tsx | 4 ++-- .../Message/FileTypeRestrictedMessage.tsx | 4 ++-- .../MessagesList/Message/LegalHoldMessage.tsx | 6 +++--- .../MessagesList/Message/MemberMessage.tsx | 20 +++++++++---------- .../MessagesList/Message/MissedMessage.tsx | 2 +- .../MessagesList/Message/PingMessage.tsx | 8 ++++---- .../MessagesList/Message/SystemMessage.tsx | 4 ++-- .../memberMessage/ConnectedMessage.tsx | 4 ++-- 13 files changed, 43 insertions(+), 43 deletions(-) diff --git a/src/script/components/MessagesList/Message/CallMessage.tsx b/src/script/components/MessagesList/Message/CallMessage.tsx index 947ce6a716d..04cab1274e2 100644 --- a/src/script/components/MessagesList/Message/CallMessage.tsx +++ b/src/script/components/MessagesList/Message/CallMessage.tsx @@ -62,9 +62,9 @@ const CallMessage: React.FC = ({message}) => { {caption}

    -
    +

    -

    +

  • ); }; diff --git a/src/script/components/MessagesList/Message/CallTimeoutMessage.tsx b/src/script/components/MessagesList/Message/CallTimeoutMessage.tsx index 14053194367..8df6ac6f42b 100644 --- a/src/script/components/MessagesList/Message/CallTimeoutMessage.tsx +++ b/src/script/components/MessagesList/Message/CallTimeoutMessage.tsx @@ -55,9 +55,9 @@ const CallTimeoutMessage: React.FC = ({message}) => { {reason === REASON.NOONE_JOINED ? t('callNoOneJoined') : t('callEveryOneLeft')}

    -
    +

    -

    +

    ); }; diff --git a/src/script/components/MessagesList/Message/ContentMessage/asset/FileAssetComponent.tsx b/src/script/components/MessagesList/Message/ContentMessage/asset/FileAssetComponent.tsx index a0e25290920..aa81132b8ad 100644 --- a/src/script/components/MessagesList/Message/ContentMessage/asset/FileAssetComponent.tsx +++ b/src/script/components/MessagesList/Message/ContentMessage/asset/FileAssetComponent.tsx @@ -124,9 +124,9 @@ const FileAsset: React.FC = ({ )}
    -
    +

    {fileName} -

    +

    • {formattedFileSize} diff --git a/src/script/components/MessagesList/Message/ContentMessage/asset/LinkPreviewAssetComponent.tsx b/src/script/components/MessagesList/Message/ContentMessage/asset/LinkPreviewAssetComponent.tsx index 0708ab66667..626974d8a04 100644 --- a/src/script/components/MessagesList/Message/ContentMessage/asset/LinkPreviewAssetComponent.tsx +++ b/src/script/components/MessagesList/Message/ContentMessage/asset/LinkPreviewAssetComponent.tsx @@ -63,7 +63,7 @@ const LinkPreviewAsset: React.FC = ({header = false, mess
      -
      = ({header = false, mess )} > {preview?.title} -
      -
      {preview?.url}
      +

      +

      {preview?.url}

    ) : ( @@ -94,7 +94,7 @@ const LinkPreviewAsset: React.FC = ({header = false, mess {header && } {preview && ( <> -
    = ({header = false, mess data-uie-name="link-preview-title" > {preview.title} -
    +

    {isTweet ? (
    - {author} - {t('conversationTweetAuthor')} +

    {author}

    +

    {t('conversationTweetAuthor')}

    ) : ( -
    {cleanURL(preview.url)} -
    +

    )} )} diff --git a/src/script/components/MessagesList/Message/DecryptErrorMessage.tsx b/src/script/components/MessagesList/Message/DecryptErrorMessage.tsx index 1caf215bec0..d040452eff3 100644 --- a/src/script/components/MessagesList/Message/DecryptErrorMessage.tsx +++ b/src/script/components/MessagesList/Message/DecryptErrorMessage.tsx @@ -60,7 +60,7 @@ const DecryptErrorMessage: React.FC = ({message, onCli
    -
    +

    {message.error_code && ( <> {`${t('conversationUnableToDecryptErrorMessage')} `} @@ -73,7 +73,7 @@ const DecryptErrorMessage: React.FC = ({message, onCli )} -

    +

    {isRecoverable && (
    {isResettingSession ? ( diff --git a/src/script/components/MessagesList/Message/DeleteMessage.tsx b/src/script/components/MessagesList/Message/DeleteMessage.tsx index 94775d8fcd3..8e91b0ad203 100644 --- a/src/script/components/MessagesList/Message/DeleteMessage.tsx +++ b/src/script/components/MessagesList/Message/DeleteMessage.tsx @@ -61,7 +61,7 @@ const DeleteMessage: React.FC = ({message, onClickAvatar}) =

    -
    +

    = ({message, onClickAvatar}) = > {formattedDeletionTime} -

    +

    ); }; diff --git a/src/script/components/MessagesList/Message/FileTypeRestrictedMessage.tsx b/src/script/components/MessagesList/Message/FileTypeRestrictedMessage.tsx index 3474d2b0cdb..99eb613d09c 100644 --- a/src/script/components/MessagesList/Message/FileTypeRestrictedMessage.tsx +++ b/src/script/components/MessagesList/Message/FileTypeRestrictedMessage.tsx @@ -34,14 +34,14 @@ const FileTypeRestrictedMessage: React.FC = ({me
    {message.isIncoming ? ( -
    ) : ( -
    = ({
    {message.isActivationMessage ? ( <> - {t('legalHoldActivated')} +

    {t('legalHoldActivated')}

    ) : ( - +

    {t('legalHoldDeactivated')} - +

    )}
    diff --git a/src/script/components/MessagesList/Message/MemberMessage.tsx b/src/script/components/MessagesList/Message/MemberMessage.tsx index 8887aa8c05b..620ce4c8220 100644 --- a/src/script/components/MessagesList/Message/MemberMessage.tsx +++ b/src/script/components/MessagesList/Message/MemberMessage.tsx @@ -105,7 +105,7 @@ const MemberMessage: React.FC = ({ <> {showNamedCreation && (
    -
    @@ -120,7 +120,7 @@ const MemberMessage: React.FC = ({ {isMemberJoin && }
    - +

    {isMemberChange && (
    @@ -134,13 +134,13 @@ const MemberMessage: React.FC = ({
    )} {hasUsers && message.showServicesWarning && ( -
    +

    {t('conversationServicesWarning')} -

    +

    )} {isGroupCreation && shouldShowInvitePeople && (
    -
    {t('guestRoomConversationHead')}
    +

    {t('guestRoomConversationHead')}

    )} {isMemberLeave && user.isMe && isSelfTemporaryGuest && (
    -
    {t('temporaryGuestLeaveDescription')}
    +

    {t('temporaryGuestLeaveDescription')}

    )} diff --git a/src/script/components/MessagesList/Message/MissedMessage.tsx b/src/script/components/MessagesList/Message/MissedMessage.tsx index d631523c839..aea723d47da 100644 --- a/src/script/components/MessagesList/Message/MissedMessage.tsx +++ b/src/script/components/MessagesList/Message/MissedMessage.tsx @@ -29,7 +29,7 @@ const MissedMessage: React.FC = ({}) => {
    -
    {t('conversationMissedMessages')}
    +

    {t('conversationMissedMessages')}

    ); }; diff --git a/src/script/components/MessagesList/Message/PingMessage.tsx b/src/script/components/MessagesList/Message/PingMessage.tsx index e2c1323841a..948c36d4c2d 100644 --- a/src/script/components/MessagesList/Message/PingMessage.tsx +++ b/src/script/components/MessagesList/Message/PingMessage.tsx @@ -59,18 +59,18 @@ const PingMessage: React.FC = ({
    -
    - +

    {unsafeSenderName} {caption} - -

    +

    +

    = ({message}) => { {message.system_message_type === SystemMessageType.CONVERSATION_MESSAGE_TIMER_UPDATE && } {message.system_message_type === SystemMessageType.CONVERSATION_RECEIPT_MODE_UPDATE && }
    -
    +

    {unsafeSenderName} {caption} -

    +

    diff --git a/src/script/components/MessagesList/Message/memberMessage/ConnectedMessage.tsx b/src/script/components/MessagesList/Message/memberMessage/ConnectedMessage.tsx index b483eb84b50..d28a8fef4b8 100644 --- a/src/script/components/MessagesList/Message/memberMessage/ConnectedMessage.tsx +++ b/src/script/components/MessagesList/Message/memberMessage/ConnectedMessage.tsx @@ -50,9 +50,9 @@ const ConnectedMessage: React.FC = ({

    {name}

    {isService ? ( - {providerName} +

    {providerName}

    ) : ( - {handle} +

    {handle}

    )} {isOutgoingRequest && classifiedDomains && } Date: Mon, 5 Dec 2022 18:07:01 +0100 Subject: [PATCH 095/329] refactor: change div to p tag in right sidebar [ACC-24] (#14259) --- .../ConversationProtocolDetails.tsx | 8 ++++---- src/script/components/panel/ServiceDetails.tsx | 7 +++++-- src/script/components/panel/UserDetails.tsx | 4 ++-- src/script/components/userDevices/DeviceCard.tsx | 4 ++-- src/script/components/userDevices/DeviceDetails.tsx | 2 +- src/script/components/userDevices/DeviceList.tsx | 4 ++-- src/script/components/userDevices/NoDevicesFound.tsx | 4 ++-- .../components/GroupDetails/GroupDetails.tsx | 4 ++-- .../GroupParticipantUser/GroupParticipantUser.tsx | 4 ++-- .../page/RightSidebar/Notifications/Notifications.tsx | 4 ++-- .../page/RightSidebar/TimedMessages/TimedMessages.tsx | 2 +- 11 files changed, 25 insertions(+), 22 deletions(-) diff --git a/src/script/components/panel/ConversationProtocolDetails/ConversationProtocolDetails.tsx b/src/script/components/panel/ConversationProtocolDetails/ConversationProtocolDetails.tsx index c3579130dc0..77cb24bf5f1 100644 --- a/src/script/components/panel/ConversationProtocolDetails/ConversationProtocolDetails.tsx +++ b/src/script/components/panel/ConversationProtocolDetails/ConversationProtocolDetails.tsx @@ -85,15 +85,15 @@ const ConversationProtocolDetails: React.FC =
    {t('conversationDetailsProtocolDetails')}
    Protocol
    -
    +

    {protocol.toUpperCase()} -

    +

    {protocol === ConversationProtocol.MLS && cipherSuite && ( <>
    Cipher Suite
    -
    +

    {Ciphersuite[cipherSuite]} -

    +

    )}
    diff --git a/src/script/components/panel/ServiceDetails.tsx b/src/script/components/panel/ServiceDetails.tsx index 022c6706287..2eb3a6d041d 100644 --- a/src/script/components/panel/ServiceDetails.tsx +++ b/src/script/components/panel/ServiceDetails.tsx @@ -48,9 +48,12 @@ const ServiceDetails: React.FC = ({service}) => { data-uie-name="status-profile-picture" /> -
    +

    {service.description} -

    +

    ); }; diff --git a/src/script/components/panel/UserDetails.tsx b/src/script/components/panel/UserDetails.tsx index 32e4a5f2386..23300cc3b55 100644 --- a/src/script/components/panel/UserDetails.tsx +++ b/src/script/components/panel/UserDetails.tsx @@ -89,9 +89,9 @@ const UserDetails: React.FC = ({
    {participant.handle && ( -
    +

    {participant.handle} -

    +

    )} {classifiedDomains && ( diff --git a/src/script/components/userDevices/DeviceCard.tsx b/src/script/components/userDevices/DeviceCard.tsx index 50df15bc705..e9f926b774f 100644 --- a/src/script/components/userDevices/DeviceCard.tsx +++ b/src/script/components/userDevices/DeviceCard.tsx @@ -80,12 +80,12 @@ const DeviceCard: React.FC = ({
    {name}
    -
    +

    {t('preferencesDevicesId')} -

    +

    {showVerified && } {clickable && } diff --git a/src/script/components/userDevices/DeviceDetails.tsx b/src/script/components/userDevices/DeviceDetails.tsx index a8c05e6520c..f0f33111d41 100644 --- a/src/script/components/userDevices/DeviceDetails.tsx +++ b/src/script/components/userDevices/DeviceDetails.tsx @@ -112,7 +112,7 @@ const DeviceDetails: React.FC = ({ > {t('participantDevicesDetailShowMyDevice')} -
    = ({user, noPadding, clients, clickO return ( <>
    -
    +

    {t('conversationDetailsGroupAdminInfo')} -

    +

    )} diff --git a/src/script/page/RightSidebar/Notifications/Notifications.tsx b/src/script/page/RightSidebar/Notifications/Notifications.tsx index bff690ed652..e29b81bc5c1 100644 --- a/src/script/page/RightSidebar/Notifications/Notifications.tsx +++ b/src/script/page/RightSidebar/Notifications/Notifications.tsx @@ -70,9 +70,9 @@ const Notifications: FC = ({activeConversation, onGoBack, on /> -
    +

    {t('notificationSettingsDisclaimer')} -

    +

    ); diff --git a/src/script/page/RightSidebar/TimedMessages/TimedMessages.tsx b/src/script/page/RightSidebar/TimedMessages/TimedMessages.tsx index bb2d4bf8401..f8e193da7e8 100644 --- a/src/script/page/RightSidebar/TimedMessages/TimedMessages.tsx +++ b/src/script/page/RightSidebar/TimedMessages/TimedMessages.tsx @@ -110,7 +110,7 @@ const TimedMessages: FC = ({activeConversation, onClose ))} -
    {t('timedMessageDisclaimer')}
    +

    {t('timedMessageDisclaimer')}

    ); From 077f681f39a330c5d41f829e231b78950757d38a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20J=C3=B3=C5=BAwik?= Date: Tue, 6 Dec 2022 11:40:27 +0100 Subject: [PATCH 096/329] feat: Update People and Folder Tab [#ACC-78] (#14193) --- .../MessagesList/Message/MemberMessage.tsx | 12 +++++++++--- .../LeftSidebar/panels/StartUI/ServicesTab.tsx | 11 ++++++++--- .../AddParticipants/AddParticipants.tsx | 13 +++++++------ src/style/content/conversation/message-list.less | 3 +-- src/style/list/start-ui.less | 16 ---------------- 5 files changed, 25 insertions(+), 30 deletions(-) diff --git a/src/script/components/MessagesList/Message/MemberMessage.tsx b/src/script/components/MessagesList/Message/MemberMessage.tsx index 620ce4c8220..f4aac298ded 100644 --- a/src/script/components/MessagesList/Message/MemberMessage.tsx +++ b/src/script/components/MessagesList/Message/MemberMessage.tsx @@ -19,6 +19,8 @@ import React from 'react'; +import {Button, ButtonVariant} from '@wireapp/react-ui-kit'; + import {Icon} from 'Components/Icon'; import {User} from 'src/script/entity/User'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; @@ -138,19 +140,23 @@ const MemberMessage: React.FC = ({ {t('conversationServicesWarning')}

    )} + {isGroupCreation && shouldShowInvitePeople && (

    {t('guestRoomConversationHead')}

    - +
    )} + {isGroupCreation && isSelfTemporaryGuest && (

    {t('temporaryGuestJoinMessage')}

    diff --git a/src/script/page/LeftSidebar/panels/StartUI/ServicesTab.tsx b/src/script/page/LeftSidebar/panels/StartUI/ServicesTab.tsx index 1d042a12f4a..f6a48f844ea 100644 --- a/src/script/page/LeftSidebar/panels/StartUI/ServicesTab.tsx +++ b/src/script/page/LeftSidebar/panels/StartUI/ServicesTab.tsx @@ -19,6 +19,8 @@ import React, {useState} from 'react'; +import {Button, ButtonVariant} from '@wireapp/react-ui-kit'; + import {Icon} from 'Components/Icon'; import {ServiceList} from 'Components/ServiceList'; import {IntegrationRepository} from 'src/script/integration/IntegrationRepository'; @@ -81,19 +83,22 @@ export const ServicesTab: React.FC<{ + {canManageServices && manageServicesUrl ? ( <>
    {t('searchNoServicesManager')}
    - + ) : (
    diff --git a/src/script/page/RightSidebar/AddParticipants/AddParticipants.tsx b/src/script/page/RightSidebar/AddParticipants/AddParticipants.tsx index d02007d4a5b..fcf56654582 100644 --- a/src/script/page/RightSidebar/AddParticipants/AddParticipants.tsx +++ b/src/script/page/RightSidebar/AddParticipants/AddParticipants.tsx @@ -21,7 +21,7 @@ import {FC, useMemo, useState} from 'react'; import cx from 'classnames'; -import {Button} from '@wireapp/react-ui-kit'; +import {Button, ButtonVariant} from '@wireapp/react-ui-kit'; import {Icon} from 'Components/Icon'; import {SearchInput} from 'Components/SearchInput'; @@ -284,16 +284,17 @@ const AddParticipants: FC = ({ {t('addParticipantsNoServicesManager')}
    -
    handleKeyDown(event, openManageServices)} data-uie-name="go-enable-services" + style={{marginTop: '1em'}} > {t('addParticipantsManageServicesNoResults')} -
    + )} @@ -310,7 +311,7 @@ const AddParticipants: FC = ({ {isAddPeopleState && (
    -
    diff --git a/src/style/content/conversation/message-list.less b/src/style/content/conversation/message-list.less index eea33d953b6..6c7d0e220ef 100644 --- a/src/style/content/conversation/message-list.less +++ b/src/style/content/conversation/message-list.less @@ -680,8 +680,7 @@ font-weight: @font-weight-bold; } -.message-group-creation-header-button, -.message-member-footer-button { +.message-group-creation-header-button { display: inline-block; padding: 4px 16px; border-radius: 4px; diff --git a/src/style/list/start-ui.less b/src/style/list/start-ui.less index 496527b7f3c..e0ffb063c94 100644 --- a/src/style/list/start-ui.less +++ b/src/style/list/start-ui.less @@ -324,22 +324,6 @@ body.theme-dark .start-ui-list-header { font-weight: 600; text-align: center; } - - &__manage-button { - .button-reset-default; - - padding: 4px 16px; - border-radius: 4px; - margin-top: 16px; - background-color: rgba(255, 255, 255, 0.24); - cursor: pointer; - font-size: @font-size-medium; - font-weight: 600; - - &--alternate { - background-color: @separator-color; - } - } } .start-ui-fed-wrapper { From 80e73e4055cf89b04742624828564666c44988ef Mon Sep 17 00:00:00 2001 From: Timothy LeBon Date: Tue, 6 Dec 2022 14:31:13 +0100 Subject: [PATCH 097/329] fix: update asset api v3 (#14260) --- src/script/conversation/EventMapper.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/script/conversation/EventMapper.ts b/src/script/conversation/EventMapper.ts index e7c3f1bae67..7aaab6ef121 100644 --- a/src/script/conversation/EventMapper.ts +++ b/src/script/conversation/EventMapper.ts @@ -18,6 +18,7 @@ */ import {CONVERSATION_EVENT, ConversationEvent} from '@wireapp/api-client/lib/event/'; +import {container} from 'tsyringe'; import {LinkPreview, Mention} from '@wireapp/protocol-messaging'; @@ -63,6 +64,7 @@ import {MentionEntity} from '../message/MentionEntity'; import {QuoteEntity} from '../message/QuoteEntity'; import {StatusType} from '../message/StatusType'; import {SystemMessageType} from '../message/SystemMessageType'; +import {APIClient} from '../service/APIClientSingleton'; import type {EventRecord} from '../storage'; // Event Mapper to convert all server side JSON events into core entities. @@ -71,7 +73,7 @@ export class EventMapper { /** * Construct a new Event Mapper. */ - constructor() { + constructor(private readonly fallbackDomain = container.resolve(APIClient).context?.domain) { this.logger = getLogger('EventMapper'); } @@ -156,7 +158,7 @@ export class EventMapper { const { preview_id, preview_key, - preview_domain = qualified_conversation?.domain, + preview_domain = qualified_conversation?.domain || this.fallbackDomain, preview_otr_key, preview_sha256, preview_token, From de5971683cc7e6cff4df9f38a42c2d3d339df01a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patryk=20G=C3=B3rka?= Date: Tue, 6 Dec 2022 14:40:26 +0100 Subject: [PATCH 098/329] feat: api v3 access_role change [FS-1192] (#14253) * feat: initial work on v3 api access_role change * runfix: rename method call * runfix: update type * refactor: make mapping functions pure * test: ConversationMapper.mapAccessState * chore: bump core * refactor: apply type name changes * refactor: apply cr suggestions --- package.json | 2 +- .../ConversationAccessPermission.test.ts | 22 ++- .../ConversationAccessPermission.ts | 8 +- .../conversation/ConversationFilter.test.ts | 8 +- .../conversation/ConversationMapper.test.ts | 182 +++++++++++++++++- src/script/conversation/ConversationMapper.ts | 105 ++++++---- .../ConversationRepository.test.ts | 10 +- .../conversation/ConversationService.ts | 6 +- .../conversation/ConversationStateHandler.ts | 4 +- src/script/entity/Conversation.ts | 6 +- .../storage/record/ConversationRecord.ts | 6 +- yarn.lock | 89 ++++++--- 12 files changed, 355 insertions(+), 93 deletions(-) diff --git a/package.json b/package.json index ea5f334489c..89271c0c4ee 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "@types/eslint": "^8.4.10", "@wireapp/antiscroll-2": "1.3.1", "@wireapp/avs": "8.2.17", - "@wireapp/core": "37.2.1", + "@wireapp/core": "37.2.2", "@wireapp/react-ui-kit": "9.2.0", "@wireapp/store-engine-dexie": "2.0.3", "@wireapp/store-engine-sqleet": "1.8.9", diff --git a/src/script/conversation/ConversationAccessPermission.test.ts b/src/script/conversation/ConversationAccessPermission.test.ts index dd86f12eb1f..b0122b83e3a 100644 --- a/src/script/conversation/ConversationAccessPermission.test.ts +++ b/src/script/conversation/ConversationAccessPermission.test.ts @@ -17,7 +17,7 @@ * */ -import {CONVERSATION_ACCESS, ACCESS_ROLE_V2} from '@wireapp/api-client/lib/conversation/'; +import {CONVERSATION_ACCESS, CONVERSATION_ACCESS_ROLE} from '@wireapp/api-client/lib/conversation/'; import {ACCESS_STATE, TEAM} from './AccessState'; import { @@ -134,25 +134,29 @@ describe('ConversationAccessPermissions', () => { const mockRights = { GUESTS_SERVICES: { accessRole: [ - ACCESS_ROLE_V2.GUEST, - ACCESS_ROLE_V2.NON_TEAM_MEMBER, - ACCESS_ROLE_V2.TEAM_MEMBER, - ACCESS_ROLE_V2.SERVICE, + CONVERSATION_ACCESS_ROLE.GUEST, + CONVERSATION_ACCESS_ROLE.NON_TEAM_MEMBER, + CONVERSATION_ACCESS_ROLE.TEAM_MEMBER, + CONVERSATION_ACCESS_ROLE.SERVICE, ], accessModes: [CONVERSATION_ACCESS.INVITE, CONVERSATION_ACCESS.CODE], }, GUEST_ROOM: { - accessRole: [ACCESS_ROLE_V2.GUEST, ACCESS_ROLE_V2.NON_TEAM_MEMBER, ACCESS_ROLE_V2.TEAM_MEMBER], + accessRole: [ + CONVERSATION_ACCESS_ROLE.GUEST, + CONVERSATION_ACCESS_ROLE.NON_TEAM_MEMBER, + CONVERSATION_ACCESS_ROLE.TEAM_MEMBER, + ], accessModes: [CONVERSATION_ACCESS.INVITE, CONVERSATION_ACCESS.CODE], }, SERVICES: { accessModes: [CONVERSATION_ACCESS.INVITE], - accessRole: [ACCESS_ROLE_V2.TEAM_MEMBER, ACCESS_ROLE_V2.SERVICE], + accessRole: [CONVERSATION_ACCESS_ROLE.TEAM_MEMBER, CONVERSATION_ACCESS_ROLE.SERVICE], }, - TEAM_ONLY: {accessModes: [CONVERSATION_ACCESS.INVITE], accessRole: [ACCESS_ROLE_V2.TEAM_MEMBER]}, + TEAM_ONLY: {accessModes: [CONVERSATION_ACCESS.INVITE], accessRole: [CONVERSATION_ACCESS_ROLE.TEAM_MEMBER]}, LEGACY: {accessModes: [], accessRole: []} as UpdatedAccessRights, GUEST_FEATURES: { - accessRole: [ACCESS_ROLE_V2.GUEST, ACCESS_ROLE_V2.NON_TEAM_MEMBER], + accessRole: [CONVERSATION_ACCESS_ROLE.GUEST, CONVERSATION_ACCESS_ROLE.NON_TEAM_MEMBER], accessModes: [CONVERSATION_ACCESS.CODE], }, ONE2ONE: {accessModes: [], accessRole: []} as UpdatedAccessRights, diff --git a/src/script/conversation/ConversationAccessPermission.ts b/src/script/conversation/ConversationAccessPermission.ts index ec8f74a4d99..370c16824bd 100644 --- a/src/script/conversation/ConversationAccessPermission.ts +++ b/src/script/conversation/ConversationAccessPermission.ts @@ -17,7 +17,7 @@ * */ -import {ACCESS_ROLE_V2, CONVERSATION_ACCESS} from '@wireapp/api-client/lib/conversation/'; +import {CONVERSATION_ACCESS_ROLE, CONVERSATION_ACCESS} from '@wireapp/api-client/lib/conversation/'; import {ACCESS_STATE, TEAM} from './AccessState'; @@ -79,7 +79,7 @@ export function featureFromStateChange(prevState: ACCESS_STATE, current: ACCESS_ const [featureName, featureBitmask] = Object.entries(ACCESS).find( ([, bitmask]) => bitmask & (teamPermissionsForAccessState(prevState) ^ teamPermissionsForAccessState(current)), ); - const featString = ACCESS_ROLE_V2[featureName as keyof typeof ACCESS_ROLE_V2]; + const featString = CONVERSATION_ACCESS_ROLE[featureName as keyof typeof CONVERSATION_ACCESS_ROLE]; return { feature: featString, featureName: (featString?.[0].toUpperCase() + featString?.slice(1)) as 'Guest' | 'Service', @@ -118,7 +118,7 @@ export function toggleFeature(feature: number, state: ACCESS_STATE): TEAM { export interface UpdatedAccessRights { accessModes: CONVERSATION_ACCESS[]; - accessRole: ACCESS_ROLE_V2[]; + accessRole: CONVERSATION_ACCESS_ROLE[]; } /** @@ -138,7 +138,7 @@ export function updateAccessRights(accessState: ACCESS_STATE): UpdatedAccessRigh //find the name of the feature with the correct sigfigs .map((bit: '1' | '0', i) => Object.entries(ACCESS).find(([, bitmask]) => bitmask === +bit << i)?.[0]) .forEach(feature => { - const accessRole = ACCESS_ROLE_V2[feature as keyof typeof ACCESS_ROLE_V2]; + const accessRole = CONVERSATION_ACCESS_ROLE[feature as keyof typeof CONVERSATION_ACCESS_ROLE]; const accessModes = CONVERSATION_ACCESS[feature as keyof typeof CONVERSATION_ACCESS]; if (accessRole) { newAccessRights.accessRole.push(accessRole); diff --git a/src/script/conversation/ConversationFilter.test.ts b/src/script/conversation/ConversationFilter.test.ts index ff35efde45c..dd186b8edb5 100644 --- a/src/script/conversation/ConversationFilter.test.ts +++ b/src/script/conversation/ConversationFilter.test.ts @@ -17,7 +17,11 @@ * */ -import {CONVERSATION_ACCESS, CONVERSATION_ACCESS_ROLE, CONVERSATION_TYPE} from '@wireapp/api-client/lib/conversation'; +import { + CONVERSATION_ACCESS, + CONVERSATION_LEGACY_ACCESS_ROLE, + CONVERSATION_TYPE, +} from '@wireapp/api-client/lib/conversation'; import {ConversationProtocol} from '@wireapp/api-client/lib/conversation/NewConversation'; import {ConversationFilter} from './ConversationFilter'; @@ -87,7 +91,7 @@ describe('ConversationFilter', () => { const conversationData: ConversationDatabaseData = { access: [CONVERSATION_ACCESS.PRIVATE], accessRoleV2: undefined, - access_role: CONVERSATION_ACCESS_ROLE.PRIVATE, + access_role: CONVERSATION_LEGACY_ACCESS_ROLE.PRIVATE, archived_state: false, archived_timestamp: 0, cipher_suite: 1, diff --git a/src/script/conversation/ConversationMapper.test.ts b/src/script/conversation/ConversationMapper.test.ts index e62312f6672..aa766fbfb90 100644 --- a/src/script/conversation/ConversationMapper.test.ts +++ b/src/script/conversation/ConversationMapper.test.ts @@ -18,9 +18,10 @@ */ import { + CONVERSATION_ACCESS_ROLE, Conversation as ConversationBackendData, CONVERSATION_ACCESS, - CONVERSATION_ACCESS_ROLE, + CONVERSATION_LEGACY_ACCESS_ROLE, CONVERSATION_TYPE, Member as MemberBackendData, OtherMember as OtherMemberBackendData, @@ -28,6 +29,7 @@ import { } from '@wireapp/api-client/lib/conversation/'; import {RECEIPT_MODE} from '@wireapp/api-client/lib/conversation/data'; import type {QualifiedId} from '@wireapp/api-client/lib/user/'; +import ko from 'knockout'; import { ConversationDatabaseData, @@ -40,6 +42,8 @@ import {Conversation} from 'src/script/entity/Conversation'; import {BaseError} from 'src/script/error/BaseError'; import {createRandomUuid} from 'Util/util'; +import {ACCESS_STATE} from './AccessState'; + import {entities, payload} from '../../../test/api/payloads'; describe('ConversationMapper', () => { @@ -341,7 +345,7 @@ describe('ConversationMapper', () => { const remoteData: Partial = { access: [CONVERSATION_ACCESS.INVITE, CONVERSATION_ACCESS.CODE], - access_role: CONVERSATION_ACCESS_ROLE.NON_ACTIVATED, + access_role: CONVERSATION_LEGACY_ACCESS_ROLE.NON_ACTIVATED, creator: conversationCreatorId, id: conversationId, last_event_timestamp: new Date('1970-01-01T00:00:00.000Z').getTime(), @@ -621,4 +625,178 @@ describe('ConversationMapper', () => { expect(mergedConversation.receipt_mode).toBe(remoteReceiptMode); }); }); + + describe('mapAccessState', () => { + it('maps "access_state_v2" first (if exists)', () => { + const accessModes = [CONVERSATION_ACCESS.INVITE, CONVERSATION_ACCESS.CODE]; + // ACCESS_STATE.TEAM.GUESTS_SERVICES + const accessRole = [ + CONVERSATION_ACCESS_ROLE.GUEST, + CONVERSATION_ACCESS_ROLE.NON_TEAM_MEMBER, + CONVERSATION_ACCESS_ROLE.TEAM_MEMBER, + CONVERSATION_ACCESS_ROLE.SERVICE, + ]; + + // ACCESS_STATE.TEAM.GUEST_ROOM + const accessRoleV2 = [ + CONVERSATION_ACCESS_ROLE.GUEST, + CONVERSATION_ACCESS_ROLE.NON_TEAM_MEMBER, + CONVERSATION_ACCESS_ROLE.TEAM_MEMBER, + ]; + + const conversationEntity = new Conversation('conversation-id', 'domain'); + conversationEntity.team_id = 'team_id'; + + ConversationMapper.mapAccessState(conversationEntity, accessModes, accessRole, accessRoleV2); + expect(conversationEntity.accessState()).toEqual(ACCESS_STATE.TEAM.GUEST_ROOM); + }); + + it('maps "access_state" if "access_state_v2" is not defined', () => { + const accessModes = [CONVERSATION_ACCESS.INVITE, CONVERSATION_ACCESS.CODE]; + // ACCESS_STATE.TEAM.GUESTS_SERVICES + const accessRole = [ + CONVERSATION_ACCESS_ROLE.GUEST, + CONVERSATION_ACCESS_ROLE.NON_TEAM_MEMBER, + CONVERSATION_ACCESS_ROLE.TEAM_MEMBER, + CONVERSATION_ACCESS_ROLE.SERVICE, + ]; + + const accessRoleV2: undefined = undefined; + + const conversationEntity = new Conversation(); + conversationEntity.team_id = 'team_id'; + + ConversationMapper.mapAccessState(conversationEntity, accessModes, accessRole, accessRoleV2); + expect(conversationEntity.accessState()).toEqual(ACCESS_STATE.TEAM.GUESTS_SERVICES); + }); + + describe('maps roles properly for legacy api < v3', () => { + const mockRightsLegacy: [ + ACCESS_STATE, + {accessRole: CONVERSATION_LEGACY_ACCESS_ROLE; accessModes: CONVERSATION_ACCESS[]}, + ][] = [ + [ + ACCESS_STATE.TEAM.TEAM_ONLY, + { + accessRole: CONVERSATION_LEGACY_ACCESS_ROLE.TEAM, + accessModes: [CONVERSATION_ACCESS.INVITE], + }, + ], + [ + ACCESS_STATE.TEAM.GUEST_ROOM, + { + accessRole: CONVERSATION_LEGACY_ACCESS_ROLE.ACTIVATED, + accessModes: [CONVERSATION_ACCESS.INVITE, CONVERSATION_ACCESS.CODE], + }, + ], + [ + ACCESS_STATE.TEAM.GUESTS_SERVICES, + { + accessRole: CONVERSATION_LEGACY_ACCESS_ROLE.NON_ACTIVATED, + accessModes: [CONVERSATION_ACCESS.INVITE, CONVERSATION_ACCESS.CODE], + }, + ], + [ + ACCESS_STATE.TEAM.LEGACY, + { + accessRole: CONVERSATION_LEGACY_ACCESS_ROLE.NON_ACTIVATED, + accessModes: [CONVERSATION_ACCESS.INVITE], + }, + ], + [ + ACCESS_STATE.TEAM.LEGACY, + { + accessRole: CONVERSATION_LEGACY_ACCESS_ROLE.NON_ACTIVATED, + accessModes: [CONVERSATION_ACCESS.CODE], + }, + ], + [ + ACCESS_STATE.TEAM.LEGACY, + { + accessRole: CONVERSATION_LEGACY_ACCESS_ROLE.TEAM, + accessModes: [CONVERSATION_ACCESS.CODE], + }, + ], + [ + ACCESS_STATE.TEAM.LEGACY, + { + accessRole: CONVERSATION_LEGACY_ACCESS_ROLE.TEAM, + accessModes: [CONVERSATION_ACCESS.CODE, CONVERSATION_ACCESS.INVITE], + }, + ], + ]; + + it.each(mockRightsLegacy)('sets correct accessState for %s', (state, {accessModes, accessRole}) => { + const conversationEntity = new Conversation(); + conversationEntity.team_id = 'team_id'; + + ConversationMapper.mapAccessState(conversationEntity, accessModes, accessRole); + expect(conversationEntity.accessState()).toEqual(state); + }); + }); + + describe('maps roles properly for api >= 3v', () => { + const mockRightsV3 = { + [ACCESS_STATE.TEAM.GUESTS_SERVICES]: { + accessRole: [ + CONVERSATION_ACCESS_ROLE.GUEST, + CONVERSATION_ACCESS_ROLE.NON_TEAM_MEMBER, + CONVERSATION_ACCESS_ROLE.TEAM_MEMBER, + CONVERSATION_ACCESS_ROLE.SERVICE, + ], + accessModes: [CONVERSATION_ACCESS.INVITE, CONVERSATION_ACCESS.CODE], + }, + [ACCESS_STATE.TEAM.GUEST_ROOM]: { + accessRole: [ + CONVERSATION_ACCESS_ROLE.GUEST, + CONVERSATION_ACCESS_ROLE.NON_TEAM_MEMBER, + CONVERSATION_ACCESS_ROLE.TEAM_MEMBER, + ], + accessModes: [CONVERSATION_ACCESS.INVITE, CONVERSATION_ACCESS.CODE], + }, + [ACCESS_STATE.TEAM.SERVICES]: { + accessModes: [CONVERSATION_ACCESS.INVITE], + accessRole: [CONVERSATION_ACCESS_ROLE.TEAM_MEMBER, CONVERSATION_ACCESS_ROLE.SERVICE], + }, + [ACCESS_STATE.TEAM.TEAM_ONLY]: { + accessModes: [CONVERSATION_ACCESS.INVITE], + accessRole: [CONVERSATION_ACCESS_ROLE.TEAM_MEMBER], + }, + }; + + const mockAccessRights = Object.entries(mockRightsV3); + + it.each(mockAccessRights)('sets correct accessState for %s', (state, {accessModes, accessRole}) => { + const conversationEntity = new Conversation(); + conversationEntity.team_id = 'team_id'; + + ConversationMapper.mapAccessState(conversationEntity, accessModes, accessRole); + expect(conversationEntity.accessState()).toEqual(state); + }); + }); + + it('maps roles properly for self conversation', () => { + const conversationEntity = new Conversation(); + conversationEntity.type(CONVERSATION_TYPE.SELF); + + ConversationMapper.mapAccessState(conversationEntity, [], []); + expect(conversationEntity.accessState()).toEqual(ACCESS_STATE.OTHER.SELF); + }); + + it('maps roles properly for personal group conversation', () => { + const conversationEntity = new Conversation(); + jest.spyOn(conversationEntity, 'isGroup').mockImplementationOnce(ko.pureComputed(() => true)); + + ConversationMapper.mapAccessState(conversationEntity, [], []); + expect(conversationEntity.accessState()).toEqual(ACCESS_STATE.PERSONAL.GROUP); + }); + + it('maps roles properly for personal one2one conversation', () => { + const conversationEntity = new Conversation(); + jest.spyOn(conversationEntity, 'isGroup').mockImplementationOnce(ko.pureComputed(() => false)); + + ConversationMapper.mapAccessState(conversationEntity, [], []); + expect(conversationEntity.accessState()).toEqual(ACCESS_STATE.PERSONAL.ONE2ONE); + }); + }); }); diff --git a/src/script/conversation/ConversationMapper.ts b/src/script/conversation/ConversationMapper.ts index a64f9ace561..a73d52d11e7 100644 --- a/src/script/conversation/ConversationMapper.ts +++ b/src/script/conversation/ConversationMapper.ts @@ -18,11 +18,11 @@ */ import { - ACCESS_ROLE_V2, + CONVERSATION_ACCESS_ROLE, Conversation as ConversationBackendData, ConversationCode, CONVERSATION_ACCESS, - CONVERSATION_ACCESS_ROLE, + CONVERSATION_LEGACY_ACCESS_ROLE, CONVERSATION_TYPE, DefaultConversationRoleName, RemoteConversations, @@ -69,8 +69,9 @@ export interface SelfStatusUpdateDatabaseData { export type ConversationDatabaseData = ConversationRecord & Partial & { accessModes?: CONVERSATION_ACCESS[]; - accessRole?: CONVERSATION_ACCESS_ROLE; - accessRoleV2?: ACCESS_ROLE_V2[]; + //CONVERSATION_LEGACY_ACCESS_ROLE for api <= v2, CONVERSATION_ACCESS_ROLE[] since api v3 + accessRole?: CONVERSATION_LEGACY_ACCESS_ROLE | CONVERSATION_ACCESS_ROLE[]; + accessRoleV2?: CONVERSATION_ACCESS_ROLE[]; roles: {[userId: string]: DefaultConversationRoleName | string}; status: ConversationStatus; team_id: string; @@ -267,6 +268,7 @@ export class ConversationMapper { if (accessModes && (accessRole || accessRoleV2)) { conversationEntity.accessModes = accessModes; conversationEntity.accessRole = accessRoleV2 || accessRole; + ConversationMapper.mapAccessState(conversationEntity, accessModes, accessRole, accessRoleV2); } @@ -435,49 +437,34 @@ export class ConversationMapper { static mapAccessState( conversationEntity: Conversation, accessModes: CONVERSATION_ACCESS[], - accessRole?: CONVERSATION_ACCESS_ROLE, - accessRoleV2: ACCESS_ROLE_V2[] = [], + accessRole: CONVERSATION_LEGACY_ACCESS_ROLE | CONVERSATION_ACCESS_ROLE[], + accessRoleV2?: CONVERSATION_ACCESS_ROLE[], ): typeof ACCESS_STATE { if (conversationEntity.team_id) { if (conversationEntity.is1to1()) { return conversationEntity.accessState(ACCESS_STATE.TEAM.ONE2ONE); } - if (accessRoleV2.includes(ACCESS_ROLE_V2.TEAM_MEMBER)) { - if (accessRoleV2.includes(ACCESS_ROLE_V2.GUEST) || accessRoleV2.includes(ACCESS_ROLE_V2.NON_TEAM_MEMBER)) { - if (accessRoleV2.includes(ACCESS_ROLE_V2.SERVICE)) { - return conversationEntity.accessState(ACCESS_STATE.TEAM.GUESTS_SERVICES); - } - return conversationEntity.accessState(ACCESS_STATE.TEAM.GUEST_ROOM); - } else if (accessRoleV2.includes(ACCESS_ROLE_V2.SERVICE)) { - return conversationEntity.accessState(ACCESS_STATE.TEAM.SERVICES); - } - return conversationEntity.accessState(ACCESS_STATE.TEAM.TEAM_ONLY); - } - - const isTeamRole = accessRole === CONVERSATION_ACCESS_ROLE.TEAM; + let accessState: ACCESS_STATE | undefined; - const includesInviteMode = accessModes.includes(CONVERSATION_ACCESS.INVITE); - const isInviteModeOnly = includesInviteMode && accessModes.length === 1; + //api <= v2/v3 + //this is important to check this one first (backwards compatibility) + if (Array.isArray(accessRoleV2)) { + accessState = this.mapAccessStateV2(accessRoleV2); - const isTeamOnlyMode = isTeamRole && isInviteModeOnly; - if (isTeamOnlyMode) { - return conversationEntity.accessState(ACCESS_STATE.TEAM.TEAM_ONLY); + //api v3 + } else if (Array.isArray(accessRole)) { + accessState = this.mapAccessStateV2(accessRole); } - const isVerifiedRole = accessRole === CONVERSATION_ACCESS_ROLE.ACTIVATED; - if (isVerifiedRole) { - return conversationEntity.accessState(ACCESS_STATE.TEAM.GUEST_ROOM); + if (accessState) { + return conversationEntity.accessState(accessState); } - const isNonVerifiedRole = accessRole === CONVERSATION_ACCESS_ROLE.NON_ACTIVATED; - const includesCodeMode = accessModes.includes(CONVERSATION_ACCESS.CODE); - const isExpectedModes = includesCodeMode && includesInviteMode && accessModes.length === 2; - - const isGuestRoomMode = isNonVerifiedRole && isExpectedModes; - return isGuestRoomMode - ? conversationEntity.accessState(ACCESS_STATE.TEAM.GUESTS_SERVICES) - : conversationEntity.accessState(ACCESS_STATE.TEAM.LEGACY); + //api <= v2 legacy + if (!Array.isArray(accessRole)) { + return conversationEntity.accessState(this.mapLegacyAccessState(accessModes, accessRole)); + } } if (conversationEntity.isSelf()) { @@ -487,6 +474,54 @@ export class ConversationMapper { const personalAccessState = conversationEntity.isGroup() ? ACCESS_STATE.PERSONAL.GROUP : ACCESS_STATE.PERSONAL.ONE2ONE; + return conversationEntity.accessState(personalAccessState); } + + private static mapAccessStateV2(accessRole: CONVERSATION_ACCESS_ROLE[]) { + if (!accessRole.includes(CONVERSATION_ACCESS_ROLE.TEAM_MEMBER)) { + return undefined; + } + + if ( + accessRole.includes(CONVERSATION_ACCESS_ROLE.GUEST) || + accessRole.includes(CONVERSATION_ACCESS_ROLE.NON_TEAM_MEMBER) + ) { + if (accessRole.includes(CONVERSATION_ACCESS_ROLE.SERVICE)) { + return ACCESS_STATE.TEAM.GUESTS_SERVICES; + } + return ACCESS_STATE.TEAM.GUEST_ROOM; + } else if (accessRole.includes(CONVERSATION_ACCESS_ROLE.SERVICE)) { + return ACCESS_STATE.TEAM.SERVICES; + } + return ACCESS_STATE.TEAM.TEAM_ONLY; + } + + private static mapLegacyAccessState( + accessModes: CONVERSATION_ACCESS[], + accessRole: CONVERSATION_LEGACY_ACCESS_ROLE, + ): ACCESS_STATE { + const isTeamRole = accessRole === CONVERSATION_LEGACY_ACCESS_ROLE.TEAM; + + const includesInviteMode = accessModes.includes(CONVERSATION_ACCESS.INVITE); + const isInviteModeOnly = includesInviteMode && accessModes.length === 1; + + const isTeamOnlyMode = isTeamRole && isInviteModeOnly; + if (isTeamOnlyMode) { + return ACCESS_STATE.TEAM.TEAM_ONLY; + } + + const isActivatedRole = accessRole === CONVERSATION_LEGACY_ACCESS_ROLE.ACTIVATED; + if (isActivatedRole) { + return ACCESS_STATE.TEAM.GUEST_ROOM; + } + const isNonActivatedRole = accessRole === CONVERSATION_LEGACY_ACCESS_ROLE.NON_ACTIVATED; + + const includesCodeMode = accessModes.includes(CONVERSATION_ACCESS.CODE); + const isExpectedModes = includesCodeMode && includesInviteMode && accessModes.length === 2; + + const isGuestRoomMode = isNonActivatedRole && isExpectedModes; + + return isGuestRoomMode ? ACCESS_STATE.TEAM.GUESTS_SERVICES : ACCESS_STATE.TEAM.LEGACY; + } } diff --git a/src/script/conversation/ConversationRepository.test.ts b/src/script/conversation/ConversationRepository.test.ts index 2710039b5f0..832605a7784 100644 --- a/src/script/conversation/ConversationRepository.test.ts +++ b/src/script/conversation/ConversationRepository.test.ts @@ -19,7 +19,11 @@ import {ClientClassification} from '@wireapp/api-client/lib/client/'; import {ConnectionStatus} from '@wireapp/api-client/lib/connection/'; -import {CONVERSATION_ACCESS, CONVERSATION_ACCESS_ROLE, CONVERSATION_TYPE} from '@wireapp/api-client/lib/conversation/'; +import { + CONVERSATION_ACCESS, + CONVERSATION_LEGACY_ACCESS_ROLE, + CONVERSATION_TYPE, +} from '@wireapp/api-client/lib/conversation/'; import {RECEIPT_MODE} from '@wireapp/api-client/lib/conversation/data'; import {ConversationProtocol} from '@wireapp/api-client/lib/conversation/NewConversation'; import {ConversationCreateEvent, ConversationMemberJoinEvent, CONVERSATION_EVENT} from '@wireapp/api-client/lib/event/'; @@ -532,7 +536,7 @@ describe('ConversationRepository', () => { (server as any).respondWith('GET', matchConversations, (xhr: any, conversationId: string) => { const conversation = { access: [CONVERSATION_ACCESS.PRIVATE], - accessRole: CONVERSATION_ACCESS_ROLE.ACTIVATED, + accessRole: CONVERSATION_LEGACY_ACCESS_ROLE.ACTIVATED, creator: '6761450e-1bd6-4027-a338-1191fe5e349f', id: conversationId, members: { @@ -636,7 +640,7 @@ describe('ConversationRepository', () => { conversation: conversationId, data: { access: [CONVERSATION_ACCESS.INVITE], - access_role: CONVERSATION_ACCESS_ROLE.ACTIVATED, + access_role: CONVERSATION_LEGACY_ACCESS_ROLE.ACTIVATED, access_role_v2: [], creator: 'c472ba79-0bca-4a74-aaa3-a559a16705d3', id: 'c9405f98-e25a-4b1f-ade7-227ea765dff7', diff --git a/src/script/conversation/ConversationService.ts b/src/script/conversation/ConversationService.ts index f5bc1950537..1692a8a7e46 100644 --- a/src/script/conversation/ConversationService.ts +++ b/src/script/conversation/ConversationService.ts @@ -18,7 +18,7 @@ */ import type { - ACCESS_ROLE_V2, + CONVERSATION_ACCESS_ROLE, ClientMismatch, Conversation as BackendConversation, ConversationCode, @@ -222,11 +222,11 @@ export class ConversationService { putConversationAccess( conversationId: string, accessModes: CONVERSATION_ACCESS[], - accessRole: ACCESS_ROLE_V2[], + accessRole: CONVERSATION_ACCESS_ROLE[], ): Promise { return this.apiClient.api.conversation.putAccess(conversationId, { access: accessModes, - access_role_v2: accessRole, + access_role: accessRole, }); } diff --git a/src/script/conversation/ConversationStateHandler.ts b/src/script/conversation/ConversationStateHandler.ts index 26de4b86546..6a3b1b3d67e 100644 --- a/src/script/conversation/ConversationStateHandler.ts +++ b/src/script/conversation/ConversationStateHandler.ts @@ -18,7 +18,7 @@ */ import {ConversationCode} from '@wireapp/api-client/lib/conversation/'; -import {ConversationAccessUpdateData, ConversationAccessV2UpdateData} from '@wireapp/api-client/lib/conversation/data/'; +import {ConversationAccessUpdateData} from '@wireapp/api-client/lib/conversation/data/'; import {CONVERSATION_EVENT} from '@wireapp/api-client/lib/event/'; import {StatusCodes as HTTP_STATUS} from 'http-status-codes'; @@ -124,7 +124,7 @@ export class ConversationStateHandler extends AbstractConversationEventHandler { private _mapConversationAccessState( conversationEntity: Conversation, - eventJson: ConversationEvent>, + eventJson: ConversationEvent, ): void { const {access: accessModes, ...roles} = eventJson.data; ConversationMapper.mapAccessState(conversationEntity, accessModes, roles?.access_role, roles?.access_role_v2); diff --git a/src/script/entity/Conversation.ts b/src/script/entity/Conversation.ts index c798e22be59..ece825dcf6f 100644 --- a/src/script/entity/Conversation.ts +++ b/src/script/entity/Conversation.ts @@ -18,9 +18,9 @@ */ import { - ACCESS_ROLE_V2, - CONVERSATION_ACCESS, CONVERSATION_ACCESS_ROLE, + CONVERSATION_ACCESS, + CONVERSATION_LEGACY_ACCESS_ROLE, CONVERSATION_TYPE, } from '@wireapp/api-client/lib/conversation/'; import {RECEIPT_MODE} from '@wireapp/api-client/lib/conversation/data'; @@ -173,7 +173,7 @@ export class Conversation { public readonly hasExternal: ko.PureComputed; public readonly hasFederatedUsers: ko.PureComputed; public accessModes?: CONVERSATION_ACCESS[]; - public accessRole?: CONVERSATION_ACCESS_ROLE | ACCESS_ROLE_V2[]; + public accessRole?: CONVERSATION_LEGACY_ACCESS_ROLE | CONVERSATION_ACCESS_ROLE[]; public domain: string; static get TIMESTAMP_TYPE(): typeof TIMESTAMP_TYPE { diff --git a/src/script/storage/record/ConversationRecord.ts b/src/script/storage/record/ConversationRecord.ts index 219473944ab..00e17fd36ea 100644 --- a/src/script/storage/record/ConversationRecord.ts +++ b/src/script/storage/record/ConversationRecord.ts @@ -18,9 +18,9 @@ */ import { - ACCESS_ROLE_V2, - CONVERSATION_ACCESS, CONVERSATION_ACCESS_ROLE, + CONVERSATION_ACCESS, + CONVERSATION_LEGACY_ACCESS_ROLE, CONVERSATION_TYPE, DefaultConversationRoleName, } from '@wireapp/api-client/lib/conversation'; @@ -34,7 +34,7 @@ import {ConversationStatus} from '../../conversation/ConversationStatus'; import {ConversationVerificationState} from '../../conversation/ConversationVerificationState'; export interface ConversationRecord { - access_role: CONVERSATION_ACCESS_ROLE | ACCESS_ROLE_V2[]; + access_role: CONVERSATION_LEGACY_ACCESS_ROLE | CONVERSATION_ACCESS_ROLE[]; access: CONVERSATION_ACCESS[]; archived_state: boolean; archived_timestamp: number; diff --git a/yarn.lock b/yarn.lock index b611fc0cef2..6151fd2939e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4041,22 +4041,22 @@ __metadata: languageName: node linkType: hard -"@wireapp/api-client@npm:^22.7.0": - version: 22.7.0 - resolution: "@wireapp/api-client@npm:22.7.0" +"@wireapp/api-client@npm:^22.8.0": + version: 22.8.0 + resolution: "@wireapp/api-client@npm:22.8.0" dependencies: - "@wireapp/commons": ^5.0.3 + "@wireapp/commons": ^5.0.4 "@wireapp/priority-queue": ^2.0.3 "@wireapp/protocol-messaging": 1.42.0 - axios: 1.1.2 + axios: 1.2.1 axios-retry: 3.3.1 http-status-codes: 2.2.0 logdown: 3.3.1 reconnecting-websocket: 4.4.0 spark-md5: 3.0.2 tough-cookie: 4.1.2 - ws: 8.10.0 - checksum: f8c17729cc2ff32c23af26ac2259785d8b593532175d5592a496673d9fdd42bc628bcbbac5db768b183669f8fb93f18b27cc12b9a22272b277fe849ebd40a8ca + ws: 8.11.0 + checksum: 7ff2614b46987d0b36aecf2dac120189501e916a647910ff0f40d882ad1b1e9f9957607982d7b3e13d8937e301a3bf05eaee7f0f73432c58f8d2584cf61fc75b languageName: node linkType: hard @@ -4074,15 +4074,15 @@ __metadata: languageName: node linkType: hard -"@wireapp/commons@npm:^5.0.3": - version: 5.0.3 - resolution: "@wireapp/commons@npm:5.0.3" +"@wireapp/commons@npm:^5.0.4": + version: 5.0.4 + resolution: "@wireapp/commons@npm:5.0.4" dependencies: ansi-regex: 5.0.1 - fs-extra: 10.1.0 + fs-extra: 11.1.0 logdown: 3.3.1 platform: 1.3.6 - checksum: cf69ac8d0c3c116b0ccde13cee46d3c6623f36c395f449a73ac4dbb602aff229abb86b0a811b3cc91e8773ee9c6892ffc455612aa876009ddba63f782b73e5b0 + checksum: 714285b048d4c8b708d662b55e78c0fec1a6fa8c976c78fef420b4325c91087af8f32551850c78cea947710bad8b1ac288e21006f62cd982fe01a6f4983b1b24 languageName: node linkType: hard @@ -4109,18 +4109,18 @@ __metadata: languageName: node linkType: hard -"@wireapp/core@npm:37.2.1": - version: 37.2.1 - resolution: "@wireapp/core@npm:37.2.1" +"@wireapp/core@npm:37.2.2": + version: 37.2.2 + resolution: "@wireapp/core@npm:37.2.2" dependencies: - "@wireapp/api-client": ^22.7.0 - "@wireapp/commons": ^5.0.3 + "@wireapp/api-client": ^22.8.0 + "@wireapp/commons": ^5.0.4 "@wireapp/core-crypto": 0.6.0-pre.4 "@wireapp/cryptobox": 12.8.0 - "@wireapp/promise-queue": ^2.1.0 + "@wireapp/promise-queue": ^2.1.1 "@wireapp/protocol-messaging": 1.42.0 "@wireapp/store-engine-dexie": ^2.0.3 - axios: 1.1.2 + axios: 1.2.1 bazinga64: 6.0.3 hash.js: 1.1.7 http-status-codes: 2.2.0 @@ -4128,7 +4128,7 @@ __metadata: logdown: 3.3.1 long: ^5.2.0 uuidjs: 4.2.12 - checksum: 070d02030dde19bdd626d4451fe23d6dc6bcc5017660a466841cd8c101587fea71ab0a94a037bd4a0fce65940c8b488514e19060a15f41b3794a9a5aef31dfc6 + checksum: 4061147740e6f6b5cf462d8c7c68b8904a5fd9b923f6d4c9966b2808985f1aa3eeb825d870d9ec2f7e26faa98624df4464ab8a8d89317df13bc9b8986cdf55a6 languageName: node linkType: hard @@ -4208,10 +4208,10 @@ __metadata: languageName: node linkType: hard -"@wireapp/promise-queue@npm:^2.1.0": - version: 2.1.0 - resolution: "@wireapp/promise-queue@npm:2.1.0" - checksum: 6785d8e21d4b57fc8b4848276678b83c9f0483897d9b4147ebc79b72a178e81187356fff2a07cfdd61e1cde36aeb1e0651d036ec372a26bde2a31ca63afde703 +"@wireapp/promise-queue@npm:^2.1.1": + version: 2.1.1 + resolution: "@wireapp/promise-queue@npm:2.1.1" + checksum: 16da2f1d44bf3a7e488a9789956be8946115a7593407755324583e1743518c61340df46c115789f1ce0f0ba5e4159988525b16bbfd56cc82cf4f7a392bc118ca languageName: node linkType: hard @@ -4953,6 +4953,17 @@ __metadata: languageName: node linkType: hard +"axios@npm:1.2.1": + version: 1.2.1 + resolution: "axios@npm:1.2.1" + dependencies: + follow-redirects: ^1.15.0 + form-data: ^4.0.0 + proxy-from-env: ^1.1.0 + checksum: c4dc4e119064c9aed09a3de309bedb797a139a6fb372223aafe3e0c10a7d4a14e4d3e9c9d309467fadb9d2b490b891ee3df96ef5b55716bb971910466ff9f0c5 + languageName: node + linkType: hard + "axobject-query@npm:^2.2.0": version: 2.2.0 resolution: "axobject-query@npm:2.2.0" @@ -7975,6 +7986,17 @@ __metadata: languageName: node linkType: hard +"fs-extra@npm:11.1.0": + version: 11.1.0 + resolution: "fs-extra@npm:11.1.0" + dependencies: + graceful-fs: ^4.2.0 + jsonfile: ^6.0.1 + universalify: ^2.0.0 + checksum: 5ca476103fa1f5ff4a9b3c4f331548f8a3c1881edaae323a4415d3153b5dc11dc6a981c8d1dd93eec8367ceee27b53f8bd27eecbbf66ffcdd04927510c171e7f + languageName: node + linkType: hard + "fs-extra@npm:^9.0.1": version: 9.1.0 resolution: "fs-extra@npm:9.1.0" @@ -16224,7 +16246,7 @@ __metadata: "@wireapp/antiscroll-2": 1.3.1 "@wireapp/avs": 8.2.17 "@wireapp/copy-config": 2.0.3 - "@wireapp/core": 37.2.1 + "@wireapp/core": 37.2.2 "@wireapp/eslint-config": 2.1.0 "@wireapp/prettier-config": 0.5.2 "@wireapp/react-ui-kit": 9.2.0 @@ -16625,7 +16647,22 @@ __metadata: languageName: node linkType: hard -"ws@npm:8.10.0, ws@npm:^8.8.0": +"ws@npm:8.11.0": + version: 8.11.0 + resolution: "ws@npm:8.11.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 316b33aba32f317cd217df66dbfc5b281a2f09ff36815de222bc859e3424d83766d9eb2bd4d667de658b6ab7be151f258318fb1da812416b30be13103e5b5c67 + languageName: node + linkType: hard + +"ws@npm:^8.8.0": version: 8.10.0 resolution: "ws@npm:8.10.0" peerDependencies: From f679ff4e89dd63aadc34a773bc7dabd98e6b352e Mon Sep 17 00:00:00 2001 From: Otto the Bot Date: Tue, 6 Dec 2022 15:01:51 +0100 Subject: [PATCH 099/329] chore: Update translations (#14261) --- src/i18n/de-DE.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/i18n/de-DE.json b/src/i18n/de-DE.json index 0b2ba8055ac..91977a4bdcb 100644 --- a/src/i18n/de-DE.json +++ b/src/i18n/de-DE.json @@ -266,7 +266,7 @@ "connectionRequestConnect": "Kontakt hinzufügen", "connectionRequestIgnore": "Ignorieren", "conversationAssetDownloading": "Herunterladen…", - "conversationAssetFailedDecryptDownloading": "DOWNLOAD FAILED (File could not be decrypted)", + "conversationAssetFailedDecryptDownloading": "DOWNLOAD FEHLGESCHLADEN (Datei konnte nicht entschlüsselt werden)", "conversationAssetFailedHashDownloading": "DOWNLOAD FAILED (HASH DOES NOT MATCH)", "conversationAssetRestrictedAudioMessageHeadline": "Audionachricht", "conversationAssetUploadFailed": "Hochladen fehlgeschlagen", From 95b5266fe2f472d573d772d2f8d88f631acd4222 Mon Sep 17 00:00:00 2001 From: Thomas Belin Date: Tue, 6 Dec 2022 17:05:39 +0100 Subject: [PATCH 100/329] refactor: Remove outdated global imports (#14262) --- setupTests.js | 1 - .../components/AppContainer/AppContainer.tsx | 2 ++ src/script/components/icons.ts | 28 --------------- src/script/entity/Conversation.test.ts | 2 +- src/script/localization/Localizer.ts | 11 ++---- src/script/main/app.ts | 17 --------- src/script/main/globals.ts | 35 ------------------- src/script/util/LocalizerUtil.ts | 2 -- .../script/util/SanitizationUtil.test.ts | 23 ++++++------ src/script/util/SanitizationUtil.ts | 2 +- src/script/util/test/mock/iconsMock.ts | 30 ---------------- src/script/util/wrapper.ts | 3 ++ .../NotificationRepositorySpec.js | 26 +++++++------- 13 files changed, 32 insertions(+), 150 deletions(-) delete mode 100644 src/script/components/icons.ts delete mode 100644 src/script/main/globals.ts rename test/unit_tests/util/SanitizationUtilSpec.js => src/script/util/SanitizationUtil.test.ts (85%) delete mode 100644 src/script/util/test/mock/iconsMock.ts diff --git a/setupTests.js b/setupTests.js index 0ac548936c7..6ccea002da7 100644 --- a/setupTests.js +++ b/setupTests.js @@ -26,7 +26,6 @@ require('fake-indexeddb/auto'); require('src/script/util/test/mock/createObjectURLMock'); require('src/script/util/test/mock/cryptoMock'); -require('src/script/util/test/mock/iconsMock'); require('src/script/util/test/mock/matchMediaMock'); require('src/script/util/test/mock/mediaDevicesMock'); require('src/script/util/test/mock/navigatorPermissionsMock'); diff --git a/src/script/components/AppContainer/AppContainer.tsx b/src/script/components/AppContainer/AppContainer.tsx index 18a8b63c6c3..627d1d495c7 100644 --- a/src/script/components/AppContainer/AppContainer.tsx +++ b/src/script/components/AppContainer/AppContainer.tsx @@ -23,6 +23,7 @@ import {ClientType} from '@wireapp/api-client/lib/client/'; import {container} from 'tsyringe'; import {Configuration} from '../../Config'; +import {setAppLocale} from '../../localization/Localizer'; import {App} from '../../main/app'; import {AppMain} from '../../page/AppMain'; import {APIClient} from '../../service/APIClientSingleton'; @@ -36,6 +37,7 @@ interface AppProps { } export const AppContainer: FC = ({config, clientType}) => { + setAppLocale(); const app = new App(container.resolve(Core), container.resolve(APIClient), config); // Publishing application on the global scope for debug and testing purposes. window.wire.app = app; diff --git a/src/script/components/icons.ts b/src/script/components/icons.ts deleted file mode 100644 index 186ebc350b3..00000000000 --- a/src/script/components/icons.ts +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Wire - * Copyright (C) 2018 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/. - * - */ - -const fileList = require.context('Resource/image/icon', true, /.+\.svg$/); - -fileList.keys().forEach(iconFileName => { - const iconPath = iconFileName.replace(/^\.\//, ''); - const iconName = iconFileName.substring(iconFileName.lastIndexOf('/') + 1).replace(/\.svg$/i, ''); - ko.components.register(iconName, { - template: require(`Resource/image/icon/${iconPath}`), - }); -}); diff --git a/src/script/entity/Conversation.test.ts b/src/script/entity/Conversation.test.ts index e0112ba875a..d713f2afbab 100644 --- a/src/script/entity/Conversation.test.ts +++ b/src/script/entity/Conversation.test.ts @@ -508,7 +508,7 @@ describe('Conversation', () => { it('displays "Empty Conversation" if no other participants are in the conversation', () => { conversation_et.type(CONVERSATION_TYPE.REGULAR); - expect(conversation_et.display_name()).toBe(window.z.string.conversationsEmptyConversation); + expect(conversation_et.display_name()).toBe('Group conversation'); }); it('displays a fallback if no user name has been set for a group conversation', () => { diff --git a/src/script/localization/Localizer.ts b/src/script/localization/Localizer.ts index 2d821948b92..cb2a40a00aa 100644 --- a/src/script/localization/Localizer.ts +++ b/src/script/localization/Localizer.ts @@ -47,8 +47,6 @@ import {getParameter} from 'Util/UrlUtil'; import {URLParameter} from '../auth/URLParameter'; import {StorageKey} from '../storage/StorageKey'; -window.z = window.z || {}; - const strings = { cs, da, @@ -74,10 +72,9 @@ const strings = { uk, }; -window.z.string = strings; setStrings(strings); -(function setAppLocale() { +export function setAppLocale() { const queryParam = getParameter(URLParameter.LOCALE); const currentBrowserLocale = navigator.language.slice(0, 2) as LocaleType; @@ -91,8 +88,4 @@ setStrings(strings); setDateLocale(locale); document.getElementsByTagName('html')[0].setAttribute('lang', locale); - - if (window.z.string[locale]) { - window.z.string = {...window.z.string, ...window.z.string[DEFAULT_LOCALE], ...window.z.string[locale]}; - } -})(); +} diff --git a/src/script/main/app.ts b/src/script/main/app.ts index 748b9744658..825788ae2a2 100644 --- a/src/script/main/app.ts +++ b/src/script/main/app.ts @@ -25,7 +25,6 @@ import {Context} from '@wireapp/api-client/lib/auth'; import {ClientClassification, ClientType} from '@wireapp/api-client/lib/client/'; import {amplify} from 'amplify'; import Dexie from 'dexie'; -import ko from 'knockout'; import platform from 'platform'; import {container} from 'tsyringe'; @@ -41,7 +40,6 @@ import {TIME_IN_MILLIS} from 'Util/TimeUtil'; import {appendParameter} from 'Util/UrlUtil'; import {checkIndexedDb, createRandomUuid, supportsMLS} from 'Util/util'; -import './globals'; import {migrateToQualifiedSessionIds} from './sessionIdMigrator'; import {SingleInstanceHandler} from './SingleInstanceHandler'; @@ -103,7 +101,6 @@ import {AppInitTimingsStep} from '../telemetry/app_init/AppInitTimingsStep'; import {serverTimeHandler} from '../time/serverTimeHandler'; import {EventTrackingRepository} from '../tracking/EventTrackingRepository'; import {WindowHandler} from '../ui/WindowHandler'; -import * as UserPermission from '../user/UserPermission'; import {UserRepository} from '../user/UserRepository'; import {UserService} from '../user/UserService'; import {ViewModelRepositories} from '../view_model/MainViewModel'; @@ -191,8 +188,6 @@ export class App { }); } - this._publishGlobals(); - const onExtraInstanceStarted = () => this._redirectToLogin(SIGN_OUT_REASON.MULTIPLE_TABS); this.singleInstanceHandler = new SingleInstanceHandler(onExtraInstanceStarted); @@ -831,16 +826,4 @@ export class App { doRedirect(signOutReason); } - - //############################################################################## - // Debugging - //############################################################################## - - private _publishGlobals() { - window.z.userPermission = ko.observable({}); - ko.pureComputed(() => { - const selfUser = this.repository.user['userState'].self(); - return selfUser && selfUser.teamRole(); - }).subscribe(role => window.z.userPermission(UserPermission.generatePermissionHelpers(role))); - } } diff --git a/src/script/main/globals.ts b/src/script/main/globals.ts deleted file mode 100644 index c684a2527df..00000000000 --- a/src/script/main/globals.ts +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Wire - * Copyright (C) 2019 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 {amplify} from 'amplify'; -import jQuery from 'jquery'; -import ko from 'knockout'; - -import 'Components/icons'; -import 'Util/LocalizerUtil'; - -import '../Config'; -import '../localization/Localizer'; -import '../page/AppMain'; -import '../view_model/MainViewModel'; - -window.amplify = amplify; -// we need to publish jQuery on the window so that knockout can use it -window.jQuery = jQuery; -window.ko = ko; diff --git a/src/script/util/LocalizerUtil.ts b/src/script/util/LocalizerUtil.ts index e402bbd384d..3d51d5bbb33 100644 --- a/src/script/util/LocalizerUtil.ts +++ b/src/script/util/LocalizerUtil.ts @@ -145,5 +145,3 @@ export const replaceLink = (href: string, className: string = '', uieName: strin '/link': '
    ', link: ``, }); - -window.t = LocalizerUtil.translate; diff --git a/test/unit_tests/util/SanitizationUtilSpec.js b/src/script/util/SanitizationUtil.test.ts similarity index 85% rename from test/unit_tests/util/SanitizationUtilSpec.js rename to src/script/util/SanitizationUtil.test.ts index 25f67a01e4c..affcef8ea60 100644 --- a/test/unit_tests/util/SanitizationUtilSpec.js +++ b/src/script/util/SanitizationUtil.test.ts @@ -17,16 +17,13 @@ * */ -import {User} from 'src/script/entity/User'; -import 'src/script/localization/Localizer'; -import {escapeRegex, getSelfName, getUserName, safeWindowOpen} from 'src/script/util/SanitizationUtil'; -import {Declension, LocalizerUtil, setStrings} from 'Util/LocalizerUtil'; +import {Declension, LocalizerUtil, t} from 'Util/LocalizerUtil'; -describe('SanitizationUtil', () => { - beforeEach(() => { - setStrings({en: z.string}); - }); +import {escapeRegex, getSelfName, getUserName, safeWindowOpen} from './SanitizationUtil'; +import {User} from '../entity/User'; + +describe('SanitizationUtil', () => { describe('escapeRegex', () => { it('will return escaped regex strings', () => { const escapedRegex = escapeRegex(':)'); @@ -48,7 +45,7 @@ describe('SanitizationUtil', () => { userEntity.isMe = true; const escapedSelfName = getUserName(userEntity); - expect(escapedSelfName).toEqual('you'); + expect(escapedSelfName).toEqual(t('conversationYouNominative')); }); }); @@ -57,15 +54,15 @@ describe('SanitizationUtil', () => { // eslint-disable-line const escapedNominativeName = getSelfName(Declension.NOMINATIVE); - expect(escapedNominativeName).toEqual('you'); + expect(escapedNominativeName).toEqual(t('conversationYouNominative')); const unescapedNominativeName = getSelfName(Declension.NOMINATIVE, true); - expect(unescapedNominativeName).toEqual('you'); + expect(unescapedNominativeName).toEqual(t('conversationYouNominative')); const escapedDativeName = getSelfName(Declension.DATIVE); - expect(escapedDativeName).toEqual('you'); + expect(escapedDativeName).toEqual(t('conversationYouDative')); spyOn(LocalizerUtil, 'translate').and.returnValue(''); const escapedAccusativeName = getSelfName(Declension.DATIVE); @@ -84,7 +81,7 @@ describe('SanitizationUtil', () => { focus: jest.fn(), opener: 'remove me', }; - jest.spyOn(window, 'open').mockImplementation(() => mockedWindow); + jest.spyOn(window, 'open').mockImplementation(() => mockedWindow as any); const newWindow = safeWindowOpen('https://wire.com/'); expect(newWindow.opener).toBeNull(); diff --git a/src/script/util/SanitizationUtil.ts b/src/script/util/SanitizationUtil.ts index 3041730c88b..fa07987b6a3 100644 --- a/src/script/util/SanitizationUtil.ts +++ b/src/script/util/SanitizationUtil.ts @@ -37,7 +37,7 @@ export const getSelfName = (declension = Declension.NOMINATIVE, bypassSanitizati return bypassSanitization ? selfName : escape(selfName); }; -export const getUserName = (userEntity: User, declension: string, bypassSanitization: boolean = false): string => { +export const getUserName = (userEntity: User, declension?: string, bypassSanitization: boolean = false): string => { if (userEntity.isMe) { return getSelfName(declension, bypassSanitization); } diff --git a/src/script/util/test/mock/iconsMock.ts b/src/script/util/test/mock/iconsMock.ts deleted file mode 100644 index fe85029d60f..00000000000 --- a/src/script/util/test/mock/iconsMock.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Wire - * Copyright (C) 2020 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 ko from 'knockout'; - -jest.mock('Components/icons', () => ({Icon: {}})); - -ko.components.register('profile-icon', {template: ''}); -ko.components.register('leave-icon', {template: ''}); -ko.components.register('edit-icon', {template: ''}); -ko.components.register('message-icon', {template: ''}); -ko.components.register('copy-icon', {template: ''}); -ko.components.register('block-icon', {template: ''}); -ko.components.register('pickup-icon', {template: ''}); diff --git a/src/script/util/wrapper.ts b/src/script/util/wrapper.ts index 81669cacf94..f68a8380482 100644 --- a/src/script/util/wrapper.ts +++ b/src/script/util/wrapper.ts @@ -17,6 +17,8 @@ * */ +import {amplify} from 'amplify'; + import {Runtime} from '@wireapp/commons'; import {WebAppEvents} from '@wireapp/webapp-events'; @@ -26,6 +28,7 @@ import {ROLE} from '../user/UserPermission'; export function exposeWrapperGlobals(): void { if (Runtime.isDesktopApp()) { + window.amplify = amplify; window.z ||= {}; window.z.event ||= {}; diff --git a/test/unit_tests/notification/NotificationRepositorySpec.js b/test/unit_tests/notification/NotificationRepositorySpec.js index 789f778ca50..f5e37c2666d 100644 --- a/test/unit_tests/notification/NotificationRepositorySpec.js +++ b/test/unit_tests/notification/NotificationRepositorySpec.js @@ -153,9 +153,9 @@ describe('NotificationRepository', () => { expect(testFactory.notification_repository.showNotification).toHaveBeenCalledTimes(1); const trigger = testFactory.notification_repository.createTrigger(message_et, null, conversation_et); - notification_content.options.body = z.string.notificationObfuscated; + notification_content.options.body = t('notificationObfuscated'); notification_content.options.data.messageType = _message.type; - notification_content.title = z.string.notificationObfuscatedTitle; + notification_content.title = t('notificationObfuscatedTitle'); notification_content.trigger = trigger; const [firstResultArgs] = testFactory.notification_repository.showNotification.calls.first().args; @@ -176,11 +176,11 @@ describe('NotificationRepository', () => { const titleLength = NotificationRepository.CONFIG.TITLE_LENGTH; const titleText = `${message_et.user().name()} in ${conversation_et.display_name()}`; - notification_content.options.body = z.string.notificationObfuscated; + notification_content.options.body = t('notificationObfuscated'); notification_content.title = truncate(titleText, titleLength, false); } else { - notification_content.options.body = z.string.notificationObfuscated; - notification_content.title = z.string.notificationObfuscatedTitle; + notification_content.options.body = t('notificationObfuscated'); + notification_content.title = t('notificationObfuscatedTitle'); } notification_content.options.data.messageType = _message.type; @@ -372,7 +372,7 @@ describe('NotificationRepository', () => { describe('shows a well-formed call notification', () => { describe('for an incoming call', () => { - const expected_body = z.string.notificationVoiceChannelActivate; + const expected_body = t('notificationVoiceChannelActivate'); beforeEach(() => { message_et = new CallMessage(); @@ -391,7 +391,7 @@ describe('NotificationRepository', () => { }); describe('for a missed call', () => { - const expected_body = z.string.notificationVoiceChannelDeactivate; + const expected_body = t('notificationVoiceChannelDeactivate'); beforeEach(() => { message_et = new CallMessage(); @@ -451,7 +451,7 @@ describe('NotificationRepository', () => { describe('for a picture', () => { beforeEach(() => { message_et.assets.push(new MediumImage()); - expected_body = z.string.notificationAssetAdd; + expected_body = t('notificationAssetAdd'); }); it('in a 1:1 conversation', () => { @@ -479,7 +479,7 @@ describe('NotificationRepository', () => { describe('for a location', () => { beforeEach(() => { message_et.assets.push(new Location()); - expected_body = z.string.notificationSharedLocation; + expected_body = t('notificationSharedLocation'); }); it('in a 1:1 conversation', () => { @@ -685,7 +685,7 @@ describe('NotificationRepository', () => { connectionEntity.status = 'pending'; message_et.memberMessageType = SystemMessageType.CONNECTION_REQUEST; - const expected_body = z.string.notificationConnectionRequest; + const expected_body = t('notificationConnectionRequest'); expect(expected_body).toBeDefined(); return verifyNotificationSystem(conversation_et, message_et, expected_body, expected_title); }); @@ -693,7 +693,7 @@ describe('NotificationRepository', () => { it('if your connection request was accepted', () => { message_et.memberMessageType = SystemMessageType.CONNECTION_ACCEPTED; - const expected_body = z.string.notificationConnectionAccepted; + const expected_body = t('notificationConnectionAccepted'); expect(expected_body).toBeDefined(); return verifyNotificationSystem(conversation_et, message_et, expected_body, expected_title); }); @@ -701,14 +701,14 @@ describe('NotificationRepository', () => { it('if you are automatically connected', () => { message_et.memberMessageType = SystemMessageType.CONNECTION_CONNECTED; - const expected_body = z.string.notificationConnectionConnected; + const expected_body = t('notificationConnectionConnected'); expect(expected_body).toBeDefined(); return verifyNotificationSystem(conversation_et, message_et, expected_body, expected_title); }); }); describe('shows a well-formed ping notification', () => { - const expected_body = z.string.notificationPing; + const expected_body = t('notificationPing'); beforeAll(() => { user_et = testFactory.user_repository.userMapper.mapUserFromJson(payload.users.get.one[0]); From 1922665832116be12ebcf6fbeb0a202e735ab32e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patryk=20G=C3=B3rka?= Date: Wed, 7 Dec 2022 11:48:42 +0100 Subject: [PATCH 101/329] feat: add api v3 support [FS-1268] (#14264) * feat: support for apiv3 for put access method * feat: pass qualified id to putAccess * feat: send accessRole in a proper field based on api version * runfix: access role field name based on api version in put method * chore: bump core to get new api client --- package.json | 2 +- .../conversation/ConversationRepository.ts | 10 ++++++++-- .../conversation/ConversationService.ts | 6 ++++-- .../conversation/ConversationStateHandler.ts | 6 +++++- yarn.lock | 20 +++++++++---------- 5 files changed, 28 insertions(+), 16 deletions(-) diff --git a/package.json b/package.json index 89271c0c4ee..12b8af9f1a4 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "@types/eslint": "^8.4.10", "@wireapp/antiscroll-2": "1.3.1", "@wireapp/avs": "8.2.17", - "@wireapp/core": "37.2.2", + "@wireapp/core": "37.2.3", "@wireapp/react-ui-kit": "9.2.0", "@wireapp/store-engine-dexie": "2.0.3", "@wireapp/store-engine-sqleet": "1.8.9", diff --git a/src/script/conversation/ConversationRepository.ts b/src/script/conversation/ConversationRepository.ts index 6cb458003cf..2970f881d47 100644 --- a/src/script/conversation/ConversationRepository.ts +++ b/src/script/conversation/ConversationRepository.ts @@ -396,9 +396,15 @@ export class ConversationRepository { }; if (accessState) { - const {accessModes: access, accessRole: access_role_v2} = updateAccessRights(accessState); + const {accessModes: access, accessRole} = updateAccessRights(accessState); - payload = {...payload, access, access_role_v2}; + const accessRoleField = this.core.backendFeatures.version >= 3 ? 'access_role' : 'access_role_v2'; + + payload = { + ...payload, + access, + [accessRoleField]: accessRole, + }; } } diff --git a/src/script/conversation/ConversationService.ts b/src/script/conversation/ConversationService.ts index 1692a8a7e46..87fe2b5a1fd 100644 --- a/src/script/conversation/ConversationService.ts +++ b/src/script/conversation/ConversationService.ts @@ -220,13 +220,15 @@ export class ConversationService { * @returns Resolves with the server response */ putConversationAccess( - conversationId: string, + conversationId: QualifiedId, accessModes: CONVERSATION_ACCESS[], accessRole: CONVERSATION_ACCESS_ROLE[], ): Promise { + const accessRoleField = this.apiClient.backendFeatures.version >= 3 ? 'access_role' : 'access_role_v2'; + return this.apiClient.api.conversation.putAccess(conversationId, { access: accessModes, - access_role: accessRole, + [accessRoleField]: accessRole, }); } diff --git a/src/script/conversation/ConversationStateHandler.ts b/src/script/conversation/ConversationStateHandler.ts index 6a3b1b3d67e..dcba39684ac 100644 --- a/src/script/conversation/ConversationStateHandler.ts +++ b/src/script/conversation/ConversationStateHandler.ts @@ -67,7 +67,11 @@ export class ConversationStateHandler extends AbstractConversationEventHandler { conversationEntity.accessCode(undefined); await this.revokeAccessCode(conversationEntity); } - await this.conversationService.putConversationAccess(conversationEntity.id, accessModes, accessRole); + + const {domain, id} = conversationEntity; + const conversationId = {id, domain}; + + await this.conversationService.putConversationAccess(conversationId, accessModes, accessRole); conversationEntity.accessState(accessState); } catch (e) { diff --git a/yarn.lock b/yarn.lock index 6151fd2939e..eb6c4293951 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4041,9 +4041,9 @@ __metadata: languageName: node linkType: hard -"@wireapp/api-client@npm:^22.8.0": - version: 22.8.0 - resolution: "@wireapp/api-client@npm:22.8.0" +"@wireapp/api-client@npm:^22.9.0": + version: 22.9.0 + resolution: "@wireapp/api-client@npm:22.9.0" dependencies: "@wireapp/commons": ^5.0.4 "@wireapp/priority-queue": ^2.0.3 @@ -4056,7 +4056,7 @@ __metadata: spark-md5: 3.0.2 tough-cookie: 4.1.2 ws: 8.11.0 - checksum: 7ff2614b46987d0b36aecf2dac120189501e916a647910ff0f40d882ad1b1e9f9957607982d7b3e13d8937e301a3bf05eaee7f0f73432c58f8d2584cf61fc75b + checksum: 36b0f95baed6c7b1ec0e8cb9ded30ea4fe85eaace4709185c47f60ab02d8391a0dd350b9d2811cee1361a223dea9c082c40c194ec0b1dc3dc5edcb2faaec790b languageName: node linkType: hard @@ -4109,11 +4109,11 @@ __metadata: languageName: node linkType: hard -"@wireapp/core@npm:37.2.2": - version: 37.2.2 - resolution: "@wireapp/core@npm:37.2.2" +"@wireapp/core@npm:37.2.3": + version: 37.2.3 + resolution: "@wireapp/core@npm:37.2.3" dependencies: - "@wireapp/api-client": ^22.8.0 + "@wireapp/api-client": ^22.9.0 "@wireapp/commons": ^5.0.4 "@wireapp/core-crypto": 0.6.0-pre.4 "@wireapp/cryptobox": 12.8.0 @@ -4128,7 +4128,7 @@ __metadata: logdown: 3.3.1 long: ^5.2.0 uuidjs: 4.2.12 - checksum: 4061147740e6f6b5cf462d8c7c68b8904a5fd9b923f6d4c9966b2808985f1aa3eeb825d870d9ec2f7e26faa98624df4464ab8a8d89317df13bc9b8986cdf55a6 + checksum: 7cfda05e9d1b1021a694109ed161504537c476079ceffdb2b5d7a045f3fa656e387e024507e47c89bf89d2c231adb42579bbc1faa86b9230b3d0e0e927963469 languageName: node linkType: hard @@ -16246,7 +16246,7 @@ __metadata: "@wireapp/antiscroll-2": 1.3.1 "@wireapp/avs": 8.2.17 "@wireapp/copy-config": 2.0.3 - "@wireapp/core": 37.2.2 + "@wireapp/core": 37.2.3 "@wireapp/eslint-config": 2.1.0 "@wireapp/prettier-config": 0.5.2 "@wireapp/react-ui-kit": 9.2.0 From 918bc10d82ab99256370436159271fcf3a5986c0 Mon Sep 17 00:00:00 2001 From: Virgile <78490891+V-Gira@users.noreply.github.com> Date: Wed, 7 Dec 2022 14:38:19 +0100 Subject: [PATCH 102/329] runfix: address design review of the font size slider [ACC-302] (#14266) --- package.json | 2 +- src/style/common/accent-color.less | 20 ++++++++++++-------- yarn.lock | 20 ++++++++++---------- 3 files changed, 23 insertions(+), 19 deletions(-) diff --git a/package.json b/package.json index 12b8af9f1a4..b8d7c87850f 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "@wireapp/antiscroll-2": "1.3.1", "@wireapp/avs": "8.2.17", "@wireapp/core": "37.2.3", - "@wireapp/react-ui-kit": "9.2.0", + "@wireapp/react-ui-kit": "9.2.2", "@wireapp/store-engine-dexie": "2.0.3", "@wireapp/store-engine-sqleet": "1.8.9", "@wireapp/webapp-events": "0.16.0", diff --git a/src/style/common/accent-color.less b/src/style/common/accent-color.less index 6123663cd2b..cf73b4c4db8 100644 --- a/src/style/common/accent-color.less +++ b/src/style/common/accent-color.less @@ -206,8 +206,6 @@ each(.colors(), .(@color-key, @color-name) { @accent-color-border: '@{name}-500'; @accent-color-focus: '@{name}-400'; @accent-color-selection: '@{name}-300'; - @icon-primary-active-fill: '@{name}-500'; - @icon-secondary-active-border: 'accent_colors-0'; @button-primary-hover: '@{name}-600'; @button-primary-focus-border: '@{name}-700'; @button-primary-active: '@{name}-800'; @@ -216,11 +214,12 @@ each(.colors(), .(@color-key, @color-name) { @button-secondary-active-bg: '@{name}-50'; @button-secondary-active-border: '@{name}-500'; @toggle-button-hover-bg: '@{name}-700'; + @icon-primary-active-fill: '@{name}-500'; + @icon-secondary-active-border: 'accent_colors-0'; + @indicator-range-input-thumb: '@{name}-700'; @toggle-button-unselected-bg: '@{name}-100'; .main-accent-color-@{color-key} { - --icon-primary-active-fill: @@icon-primary-active-fill; - --icon-secondary-active-border: @@icon-secondary-active-border; --button-primary-hover: @@button-primary-hover; --button-primary-focus-border: @@button-primary-focus-border; --button-primary-active: @@button-primary-active; @@ -229,6 +228,9 @@ each(.colors(), .(@color-key, @color-name) { --button-secondary-active-bg: @@button-secondary-active-bg; --button-secondary-active-border: @@button-secondary-active-border; --toggle-button-hover-bg: @@toggle-button-hover-bg; + --icon-primary-active-fill: @@icon-primary-active-fill; + --icon-secondary-active-border: @@icon-secondary-active-border; + --indicator-range-input-thumb: @@indicator-range-input-thumb; --toggle-button-unselected-bg: @@toggle-button-unselected-bg; --accent-color: @@accent-color; --accent-color-highlight: @@accent-color-highlight; @@ -256,8 +258,6 @@ each(.colors(), .(@color-key, @color-name) { @accent-color-border-dark: '@{name}-dark-600'; @accent-color-focus-dark: '@{name}-dark-600'; @accent-color-selection-dark: '@{name}-dark-700'; - @icon-primary-active-fill-dark: 'w-white'; - @icon-secondary-active-border-dark: '@{name}-dark-800' ; @button-primary-hover-dark: '@{name}-dark-400'; @button-primary-focus-border-dark: '@{name}-dark-100'; @button-primary-active-dark: '@{name}-dark-800'; @@ -266,10 +266,11 @@ each(.colors(), .(@color-key, @color-name) { @button-secondary-active-bg-dark: 'w-gray-95'; @button-secondary-active-border-dark: '@{name}-dark-800'; @toggle-button-hover-bg-dark: '@{name}-dark-300'; + @icon-primary-active-fill-dark: 'w-white'; + @icon-secondary-active-border-dark: '@{name}-dark-800' ; + @indicator-range-input-thumb-dark: '@{name}-dark-300'; @toggle-button-unselected-bg-dark: '@{name}-dark-800'; .main-accent-color-@{color-key} { - --icon-primary-active-fill: @@icon-primary-active-fill-dark; - --icon-secondary-active-border: @@icon-secondary-active-border-dark; --button-primary-hover: @@button-primary-hover-dark; --button-primary-focus-border: @@button-primary-focus-border-dark; --button-primary-active: @@button-primary-active-dark; @@ -277,6 +278,9 @@ each(.colors(), .(@color-key, @color-name) { --button-secondary-hover-border: @@button-secondary-hover-border-dark; --button-secondary-active-bg: @@button-secondary-active-bg-dark; --button-secondary-active-border: @@button-secondary-active-border-dark; + --icon-primary-active-fill: @@icon-primary-active-fill-dark; + --icon-secondary-active-border: @@icon-secondary-active-border-dark; + --indicator-range-input-thumb: @@indicator-range-input-thumb-dark; --toggle-button-hover-bg: @@toggle-button-hover-bg-dark; --toggle-button-unselected-bg: @@toggle-button-unselected-bg-dark; --accent-color: @@accent-color-dark; diff --git a/yarn.lock b/yarn.lock index eb6c4293951..ffc133beebd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4239,14 +4239,14 @@ __metadata: languageName: node linkType: hard -"@wireapp/react-ui-kit@npm:9.2.0": - version: 9.2.0 - resolution: "@wireapp/react-ui-kit@npm:9.2.0" +"@wireapp/react-ui-kit@npm:9.2.2": + version: 9.2.2 + resolution: "@wireapp/react-ui-kit@npm:9.2.2" dependencies: "@types/color": 3.0.3 color: 4.2.3 emotion-normalize: 11.0.1 - react-select: 5.6.0 + react-select: 5.7.0 react-transition-group: 4.4.5 peerDependencies: "@emotion/react": 11.10.4 @@ -4256,7 +4256,7 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 706df6c53ccf7a71a71904bfd1e07d3ee1c348fe81f8efa92de9628ee745e7b7d5f8b41af1d82be8d16580faa8457235710e92762892e9639f655e9d1512c58c + checksum: 04ecd580987ab65f26b7ac0e01cd9536bc71ab4d2cfa362931a260f8e5e2ddec5c03299cb6da0bd601548899d23582fc1fd260502c0381c790795e3a5fcafb71 languageName: node linkType: hard @@ -13387,9 +13387,9 @@ __metadata: languageName: node linkType: hard -"react-select@npm:5.6.0": - version: 5.6.0 - resolution: "react-select@npm:5.6.0" +"react-select@npm:5.7.0": + version: 5.7.0 + resolution: "react-select@npm:5.7.0" dependencies: "@babel/runtime": ^7.12.0 "@emotion/cache": ^11.4.0 @@ -13403,7 +13403,7 @@ __metadata: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: d0a51e618168f3f275fbf96e23eb88ac6066006bcca136e293327f6eddd0b419ef02aaa847bf1670c5f07c8e9d9fc4b975fcae833085e11fc41e29e2b802a75b + checksum: 3d29f7bb6dd66ad55396d820f05da6112f1d21b67526422a8ff5aa6cd47c783804c1b73042ac2949ba0871056a3dc68c06a73a8281abb61571e475d72bbd80dc languageName: node linkType: hard @@ -16249,7 +16249,7 @@ __metadata: "@wireapp/core": 37.2.3 "@wireapp/eslint-config": 2.1.0 "@wireapp/prettier-config": 0.5.2 - "@wireapp/react-ui-kit": 9.2.0 + "@wireapp/react-ui-kit": 9.2.2 "@wireapp/store-engine": ^5.0.3 "@wireapp/store-engine-dexie": 2.0.3 "@wireapp/store-engine-sqleet": 1.8.9 From 40e54b364ab8d2db0da450acf8679feebfbb8b5d Mon Sep 17 00:00:00 2001 From: Timothy LeBon Date: Wed, 7 Dec 2022 16:23:13 +0100 Subject: [PATCH 103/329] runfix: old images missing domain (FS-1001) (#14268) * runfix: domain finally defined * chore: add getter --- src/script/conversation/EventMapper.ts | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/script/conversation/EventMapper.ts b/src/script/conversation/EventMapper.ts index 7aaab6ef121..7bc2f45874d 100644 --- a/src/script/conversation/EventMapper.ts +++ b/src/script/conversation/EventMapper.ts @@ -73,10 +73,14 @@ export class EventMapper { /** * Construct a new Event Mapper. */ - constructor(private readonly fallbackDomain = container.resolve(APIClient).context?.domain) { + constructor(private readonly apiClient = container.resolve(APIClient)) { this.logger = getLogger('EventMapper'); } + private get fallbackDomain() { + return this.apiClient.context?.domain; + } + /** * Convert multiple JSON events into message entities. * @@ -743,7 +747,7 @@ export class EventMapper { const { preview_id, preview_key, - preview_domain = qualified_conversation?.domain, + preview_domain = qualified_conversation?.domain || this.fallbackDomain, preview_otr_key, preview_sha256, preview_token, @@ -771,7 +775,6 @@ export class EventMapper { const {data: eventData, conversation: conversationId, qualified_conversation} = event; const {content_length, content_type, id: assetId, info} = eventData; const assetEntity = new MediumImage(assetId); - assetEntity.file_size = content_length; assetEntity.file_type = content_type; @@ -780,12 +783,11 @@ export class EventMapper { assetEntity.height = `${info.height}px`; } - const {key, otr_key, sha256, token, domain = qualified_conversation?.domain} = eventData; + const {key, otr_key, sha256, token, domain = qualified_conversation?.domain || this.fallbackDomain} = eventData; if (!otr_key || !sha256) { return assetEntity; } - const remoteData = key ? AssetRemoteData.v3(key, domain, otr_key, sha256, token, true) : AssetRemoteData.v2(conversationId, assetId, otr_key, sha256, true); @@ -820,7 +822,14 @@ export class EventMapper { otrKey = new Uint8Array(otrKey); sha256 = new Uint8Array(sha256); - const remoteData = AssetRemoteData.v3(assetKey, assetDomain, otrKey, sha256, assetToken, true); + const remoteData = AssetRemoteData.v3( + assetKey, + assetDomain || this.fallbackDomain, + otrKey, + sha256, + assetToken, + true, + ); linkPreviewData.image = remoteData; } } From e165a298b9da2a9f5c14bf52ae0bb77c99eaeb05 Mon Sep 17 00:00:00 2001 From: Virgile <78490891+V-Gira@users.noreply.github.com> Date: Wed, 7 Dec 2022 17:52:36 +0100 Subject: [PATCH 104/329] runfix: correct mention font-size and edit icon in replies (#14267) --- src/script/components/InputBar/ReplyBar.tsx | 7 ++++++- src/style/content/conversation/input-bar.less | 9 +++------ src/style/content/conversation/message-quote.less | 4 ++++ 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/script/components/InputBar/ReplyBar.tsx b/src/script/components/InputBar/ReplyBar.tsx index 7032e0b8c95..bc2d82a8617 100644 --- a/src/script/components/InputBar/ReplyBar.tsx +++ b/src/script/components/InputBar/ReplyBar.tsx @@ -66,7 +66,12 @@ const ReplyBar: FC = ({replyMessageEntity, onCancel}) => { {wasEdited && ( - + )}
    diff --git a/src/style/content/conversation/input-bar.less b/src/style/content/conversation/input-bar.less index ba6b76e6b98..f9bf5684b2f 100644 --- a/src/style/content/conversation/input-bar.less +++ b/src/style/content/conversation/input-bar.less @@ -325,13 +325,10 @@ font-weight: @font-weight-bold; .edit-icon { + width: 8px; + height: 8px; margin-left: 4px; - - svg { - width: 8px; - height: 8px; - fill: var(--background-fade-40); - } + fill: var(--background-fade-40); } } diff --git a/src/style/content/conversation/message-quote.less b/src/style/content/conversation/message-quote.less index 8e16abe4fe2..9faf3c901b8 100644 --- a/src/style/content/conversation/message-quote.less +++ b/src/style/content/conversation/message-quote.less @@ -117,4 +117,8 @@ .video-asset { background-color: transparent; } + + .message-mention { + font-size: @font-size-medium; + } } From 3c85b5cd5b639919953dd3cb8c45b4b1c3dd8672 Mon Sep 17 00:00:00 2001 From: Thomas Belin Date: Thu, 8 Dec 2022 10:56:28 +0100 Subject: [PATCH 105/329] fix: Avoid double file pasting trigger (#14269) --- src/script/components/InputBar/InputBar.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/script/components/InputBar/InputBar.tsx b/src/script/components/InputBar/InputBar.tsx index 8ac63300b58..d09ff1821fa 100644 --- a/src/script/components/InputBar/InputBar.tsx +++ b/src/script/components/InputBar/InputBar.tsx @@ -934,7 +934,6 @@ const InputBar = ({ onClick={handleMentionFlow} onInput={updateMentions} onChange={onChange} - onPaste={onPasteFiles} onBlur={() => setIsTyping(false)} value={inputValue} placeholder={inputPlaceholder} From b3ee121034ec3691ce51df6af1360a6678cec6fc Mon Sep 17 00:00:00 2001 From: Thomas Belin Date: Thu, 8 Dec 2022 11:24:39 +0100 Subject: [PATCH 106/329] chore: Remove antiscroll (#14272) --- package.json | 1 - yarn.lock | 8 -------- 2 files changed, 9 deletions(-) diff --git a/package.json b/package.json index b8d7c87850f..fefe3cb6e20 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,6 @@ "dependencies": { "@emotion/react": "11.10.5", "@types/eslint": "^8.4.10", - "@wireapp/antiscroll-2": "1.3.1", "@wireapp/avs": "8.2.17", "@wireapp/core": "37.2.3", "@wireapp/react-ui-kit": "9.2.2", diff --git a/yarn.lock b/yarn.lock index ffc133beebd..16f9b6be48e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4034,13 +4034,6 @@ __metadata: languageName: node linkType: hard -"@wireapp/antiscroll-2@npm:1.3.1": - version: 1.3.1 - resolution: "@wireapp/antiscroll-2@npm:1.3.1" - checksum: 28464b4a02250c13ad3816a0a7303fc9cf3cd4586b4202c192d25b82f64541dc3ebc7f5c147548f3e478df4a56e4ffa26edfcb806438d3ae453c7ba9fcd3b124 - languageName: node - linkType: hard - "@wireapp/api-client@npm:^22.9.0": version: 22.9.0 resolution: "@wireapp/api-client@npm:22.9.0" @@ -16243,7 +16236,6 @@ __metadata: "@types/webpack-env": 1.18.0 "@typescript-eslint/eslint-plugin": ^5.45.0 "@typescript-eslint/parser": ^5.45.0 - "@wireapp/antiscroll-2": 1.3.1 "@wireapp/avs": 8.2.17 "@wireapp/copy-config": 2.0.3 "@wireapp/core": 37.2.3 From 19c12ebb28e7a476576f0dfff3ea04f55d513bbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patryk=20G=C3=B3rka?= Date: Thu, 8 Dec 2022 11:27:51 +0100 Subject: [PATCH 107/329] fix: user not able to send multiple files [FS-1276] (#14271) * fix: user not able to send multiple files * feat: enalbe multiple file upload on img/asset button click --- src/script/hooks/useDropFiles.tsx | 2 +- .../page/message-list/AssetUploadButton/AssetUploadButton.tsx | 1 + .../page/message-list/ImageUploadButton/ImageUploadButton.tsx | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/script/hooks/useDropFiles.tsx b/src/script/hooks/useDropFiles.tsx index 7dcfca4e683..852b22422db 100644 --- a/src/script/hooks/useDropFiles.tsx +++ b/src/script/hooks/useDropFiles.tsx @@ -33,7 +33,7 @@ const useDropFiles = (selector: string, onDropOrPastedFile: (files: File[]) => v const files = eventDataTransfer.files || new FileList(); if (files.length > 0) { - onDropOrPastedFile([files[0]]); + onDropOrPastedFile(Array.from(files)); } } }; diff --git a/src/script/page/message-list/AssetUploadButton/AssetUploadButton.tsx b/src/script/page/message-list/AssetUploadButton/AssetUploadButton.tsx index ad6a44e94ba..dea5361d41a 100644 --- a/src/script/page/message-list/AssetUploadButton/AssetUploadButton.tsx +++ b/src/script/page/message-list/AssetUploadButton/AssetUploadButton.tsx @@ -65,6 +65,7 @@ export const AssetUploadButton = ({onSelectFiles}: AssetUploadButtonProps) => { tabIndex={-1} onChange={handleFileChange} type="file" + multiple /> diff --git a/src/script/page/message-list/ImageUploadButton/ImageUploadButton.tsx b/src/script/page/message-list/ImageUploadButton/ImageUploadButton.tsx index 289091dbf63..99d3d79c46c 100644 --- a/src/script/page/message-list/ImageUploadButton/ImageUploadButton.tsx +++ b/src/script/page/message-list/ImageUploadButton/ImageUploadButton.tsx @@ -64,6 +64,7 @@ export const ImageUploadButton = ({onSelectImages}: ImageUploadButtonProps) => { id="conversation-input-bar-photo" onChange={handleImageFileChange} type="file" + multiple /> From 70065912d45cf8a772b6924e420315f23ff92310 Mon Sep 17 00:00:00 2001 From: Thomas Belin Date: Thu, 8 Dec 2022 12:54:24 +0100 Subject: [PATCH 108/329] refactor: Cleanup file dropping/pasting in InputBar (#14270) * refactoring: Cleanup file dropping/pasting in InputBar * add tests --- src/script/components/InputBar/InputBar.tsx | 81 +++++++------------ .../InputBar/hooks/useDropFiles.ts} | 37 ++++----- .../InputBar/hooks/useFilePaste.test.ts | 45 +++++++++++ .../components/InputBar/hooks/useFilePaste.ts | 38 +++++++++ .../InputBar}/hooks/useResizeTarget.ts | 0 .../InputBar}/hooks/useScrollSync.ts | 0 .../InputBar}/hooks/useTextAreaFocus.ts | 0 7 files changed, 131 insertions(+), 70 deletions(-) rename src/script/{hooks/useDropFiles.tsx => components/InputBar/hooks/useDropFiles.ts} (61%) create mode 100644 src/script/components/InputBar/hooks/useFilePaste.test.ts create mode 100644 src/script/components/InputBar/hooks/useFilePaste.ts rename src/script/{ => components/InputBar}/hooks/useResizeTarget.ts (100%) rename src/script/{ => components/InputBar}/hooks/useScrollSync.ts (100%) rename src/script/{ => components/InputBar}/hooks/useTextAreaFocus.ts (100%) diff --git a/src/script/components/InputBar/InputBar.tsx b/src/script/components/InputBar/InputBar.tsx index d09ff1821fa..9a6f3df1dd5 100644 --- a/src/script/components/InputBar/InputBar.tsx +++ b/src/script/components/InputBar/InputBar.tsx @@ -17,16 +17,7 @@ * */ -import { - ChangeEvent, - ClipboardEvent as ReactClipboardEvent, - FormEvent, - KeyboardEvent as ReactKeyboardEvent, - useEffect, - useMemo, - useRef, - useState, -} from 'react'; +import {ChangeEvent, FormEvent, KeyboardEvent as ReactKeyboardEvent, useEffect, useMemo, useRef, useState} from 'react'; import {amplify} from 'amplify'; import cx from 'classnames'; @@ -41,10 +32,6 @@ import {useEmoji} from 'Components/Emoji/useEmoji'; import {Icon} from 'Components/Icon'; import {ClassifiedBar} from 'Components/input/ClassifiedBar'; import {PrimaryModal} from 'Components/Modals/PrimaryModal'; -import {useDropFiles} from 'src/script/hooks/useDropFiles'; -import {useResizeTarget} from 'src/script/hooks/useResizeTarget'; -import {useScrollSync} from 'src/script/hooks/useScrollSync'; -import {useTextAreaFocus} from 'src/script/hooks/useTextAreaFocus'; import {ControlButtons} from 'src/script/page/message-list/InputBarControls/ControlButtons'; import {GiphyButton} from 'src/script/page/message-list/InputBarControls/GiphyButton'; import {MentionSuggestionList} from 'src/script/page/message-list/MentionSuggestions'; @@ -65,6 +52,11 @@ import {formatLocale, TIME_IN_MILLIS} from 'Util/TimeUtil'; import {formatBytes, getSelectionPosition} from 'Util/util'; import {getRichTextInput} from './getRichTextInput'; +import {useDropFiles} from './hooks/useDropFiles'; +import {useFilePaste} from './hooks/useFilePaste'; +import {useResizeTarget} from './hooks/useResizeTarget'; +import {useScrollSync} from './hooks/useScrollSync'; +import {useTextAreaFocus} from './hooks/useTextAreaFocus'; import {PastedFileControls} from './PastedFileControls'; import {ReplyBar} from './ReplyBar'; import {TYPING_TIMEOUT} from './TypingIndicator'; @@ -257,19 +249,10 @@ const InputBar = ({ const clearPastedFile = () => setPastedFile(null); - const onDropOrPastedFile = (droppedFiles: File[]) => { + const uploadDroppedFiles = (droppedFiles: File[]) => { const images: File[] = []; const files: File[] = []; - if (!isFileSharingSendingEnabled) { - showWarningModal( - t('conversationModalRestrictedFileSharingHeadline'), - t('conversationModalRestrictedFileSharingDescription'), - ); - - return; - } - if (!isHittingUploadLimit(droppedFiles, assetRepository)) { Array.from(droppedFiles).forEach(file => { const isSupportedImage = CONFIG.ALLOWED_IMAGE_TYPES.includes(file.type); @@ -288,7 +271,7 @@ const InputBar = ({ const sendPastedFile = () => { if (pastedFile) { - onDropOrPastedFile([pastedFile]); + uploadDroppedFiles([pastedFile]); clearPastedFile(); } }; @@ -680,34 +663,36 @@ const InputBar = ({ } }; - const onPasteFiles = (event: ClipboardEvent | ReactClipboardEvent): void => { - if (event?.clipboardData?.types.includes('text/plain')) { - return; + /** + * higher order function to check if file sharing is enabled. + * If not enabled, it will show a warning modal else will return the given callback + * + * @param callback - function to be called if file sharing is enabled + */ + function checkFileSharingPermission void>(callback: T): T | (() => void) { + if (isFileSharingSendingEnabled) { + return callback; } - - if (!isFileSharingSendingEnabled) { + return () => { showWarningModal( t('conversationModalRestrictedFileSharingHeadline'), t('conversationModalRestrictedFileSharingDescription'), ); + }; + } - return; - } - - const pastedFiles = event?.clipboardData?.files; - if (pastedFiles) { - const [pastedFile] = pastedFiles; - const {lastModified} = pastedFile; + const handlePasteFiles = (files: FileList): void => { + const [pastedFile] = files; + const {lastModified} = pastedFile; - const date = formatLocale(lastModified || new Date(), 'PP, pp'); - const fileName = t('conversationSendPastedFile', date); + const date = formatLocale(lastModified || new Date(), 'PP, pp'); + const fileName = t('conversationSendPastedFile', date); - const newFile = new File([pastedFile], fileName, { - type: pastedFile.type, - }); + const newFile = new File([pastedFile], fileName, { + type: pastedFile.type, + }); - setPastedFile(newFile); - } + setPastedFile(newFile); }; const loadInitialStateForConversation = async (): Promise => { @@ -840,12 +825,8 @@ const InputBar = ({ }, [isEditing]); // Temporarily functionality for dropping files on conversation container, should be moved to Conversation Component - useDropFiles('#conversation', onDropOrPastedFile, [isFileSharingSendingEnabled]); - - useEffect(() => { - document.addEventListener('paste', onPasteFiles); - return () => document.removeEventListener('paste', onPasteFiles); - }, []); + useDropFiles('#conversation', checkFileSharingPermission(uploadDroppedFiles)); + useFilePaste(checkFileSharingPermission(handlePasteFiles)); const sendImageOnEnterClick = (event: KeyboardEvent) => { if (event.key === KEY.ENTER && !event.shiftKey && !event.altKey && !event.metaKey) { diff --git a/src/script/hooks/useDropFiles.tsx b/src/script/components/InputBar/hooks/useDropFiles.ts similarity index 61% rename from src/script/hooks/useDropFiles.tsx rename to src/script/components/InputBar/hooks/useDropFiles.ts index 852b22422db..114ea024b56 100644 --- a/src/script/hooks/useDropFiles.tsx +++ b/src/script/components/InputBar/hooks/useDropFiles.ts @@ -19,40 +19,37 @@ import {useEffect} from 'react'; -import {isDragEvent} from '../guards/Event'; +import {isDragEvent} from '../../../guards/Event'; const onDragOver = (event: Event) => event.preventDefault(); -const useDropFiles = (selector: string, onDropOrPastedFile: (files: File[]) => void, deps: unknown[] = []) => { - const onDropFiles = (event: Event) => { - event.preventDefault(); +export const useDropFiles = (selector: string, onFileDropped: (files: File[]) => void) => { + useEffect(() => { + const container = document.querySelector(selector); + const handleDrop = (event: Event) => { + event.preventDefault(); - if (isDragEvent(event)) { - const {dataTransfer} = event; - const eventDataTransfer: Partial = dataTransfer || {}; - const files = eventDataTransfer.files || new FileList(); + if (isDragEvent(event)) { + const {dataTransfer} = event; + const eventDataTransfer: Partial = dataTransfer || {}; + const files = eventDataTransfer.files || new FileList(); - if (files.length > 0) { - onDropOrPastedFile(Array.from(files)); + if (files.length > 0) { + onFileDropped(Array.from(files)); + } } - } - }; - - useEffect(() => { - const container = document.querySelector(selector); + }; if (container) { - container.addEventListener('drop', onDropFiles); + container.addEventListener('drop', handleDrop); container.addEventListener('dragover', onDragOver); return () => { - container.removeEventListener('drop', onDropFiles); + container.removeEventListener('drop', handleDrop); container.removeEventListener('dragover', onDragOver); }; } return () => undefined; - }, [selector, ...deps]); + }, [onFileDropped, selector]); }; - -export {useDropFiles}; diff --git a/src/script/components/InputBar/hooks/useFilePaste.test.ts b/src/script/components/InputBar/hooks/useFilePaste.test.ts new file mode 100644 index 00000000000..d9fac3b410a --- /dev/null +++ b/src/script/components/InputBar/hooks/useFilePaste.test.ts @@ -0,0 +1,45 @@ +/* + * Wire + * Copyright (C) 2022 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 {renderHook, act, fireEvent} from '@testing-library/react'; + +import {useFilePaste} from './useFilePaste'; + +describe('useFilePaste', () => { + it('Calls the onFilePasted callback when a file is pasted', async () => { + const onFilePasted = jest.fn(); + renderHook(() => useFilePaste(onFilePasted)); + const files = [new File([''], 'test.jpg', {type: 'image/jpeg'})]; + + act(() => { + fireEvent.paste(document, {clipboardData: {types: ['image/jpeg'], files}}); + }); + expect(onFilePasted).toHaveBeenCalledWith(files); + }); + + it('Ignores paste that are plain text', async () => { + const onFilePasted = jest.fn(); + renderHook(() => useFilePaste(onFilePasted)); + + act(() => { + fireEvent.paste(document, {clipboardData: {types: ['text/plain']}}); + }); + expect(onFilePasted).not.toHaveBeenCalled(); + }); +}); diff --git a/src/script/components/InputBar/hooks/useFilePaste.ts b/src/script/components/InputBar/hooks/useFilePaste.ts new file mode 100644 index 00000000000..5e55baefb42 --- /dev/null +++ b/src/script/components/InputBar/hooks/useFilePaste.ts @@ -0,0 +1,38 @@ +/* + * Wire + * Copyright (C) 2022 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 {useEffect} from 'react'; + +export const useFilePaste = (onFilePasted: (files: FileList) => void) => { + useEffect(() => { + const handleFilePasting = (event: ClipboardEvent) => { + if (event.clipboardData?.types.includes('text/plain')) { + return; + } + // Avoid copying the filename into the input field + event.preventDefault(); + const files = event.clipboardData?.files; + if (files) { + onFilePasted(files); + } + }; + document.addEventListener('paste', handleFilePasting); + return () => document.removeEventListener('paste', handleFilePasting); + }, [onFilePasted]); +}; diff --git a/src/script/hooks/useResizeTarget.ts b/src/script/components/InputBar/hooks/useResizeTarget.ts similarity index 100% rename from src/script/hooks/useResizeTarget.ts rename to src/script/components/InputBar/hooks/useResizeTarget.ts diff --git a/src/script/hooks/useScrollSync.ts b/src/script/components/InputBar/hooks/useScrollSync.ts similarity index 100% rename from src/script/hooks/useScrollSync.ts rename to src/script/components/InputBar/hooks/useScrollSync.ts diff --git a/src/script/hooks/useTextAreaFocus.ts b/src/script/components/InputBar/hooks/useTextAreaFocus.ts similarity index 100% rename from src/script/hooks/useTextAreaFocus.ts rename to src/script/components/InputBar/hooks/useTextAreaFocus.ts From 111cb4c048b2c32233238d4a0289f647d3285dd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patryk=20G=C3=B3rka?= Date: Thu, 8 Dec 2022 13:33:14 +0100 Subject: [PATCH 109/329] feat: api v3 support for typing endpoint [FS-1311] (#14274) * feat: api v3 support for typing endpoint * chore: bump core --- package.json | 2 +- .../conversation/ConversationRepository.ts | 20 ++----------------- yarn.lock | 20 +++++++++---------- 3 files changed, 13 insertions(+), 29 deletions(-) diff --git a/package.json b/package.json index fefe3cb6e20..3bd778b37b4 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "@emotion/react": "11.10.5", "@types/eslint": "^8.4.10", "@wireapp/avs": "8.2.17", - "@wireapp/core": "37.2.3", + "@wireapp/core": "37.3.0", "@wireapp/react-ui-kit": "9.2.2", "@wireapp/store-engine-dexie": "2.0.3", "@wireapp/store-engine-sqleet": "1.8.9", diff --git a/src/script/conversation/ConversationRepository.ts b/src/script/conversation/ConversationRepository.ts index 2970f881d47..0a3cacab929 100644 --- a/src/script/conversation/ConversationRepository.ts +++ b/src/script/conversation/ConversationRepository.ts @@ -1717,27 +1717,11 @@ export class ConversationRepository { } public async sendTypingStart(conversationEntity: Conversation) { - /* - Currently typing endpoint is not implemented on backend for federated environments - @todo: remove this condition when backend is ready and api-client in packages is updated to support domain in typing endpoint - */ - const isFederated = this.core.backendFeatures?.isFederated; - if (isFederated) { - return; - } - this.core.service!.conversation.sendTypingStart(conversationEntity.id); + this.core.service!.conversation.sendTypingStart(conversationEntity.qualifiedId); } public async sendTypingStop(conversationEntity: Conversation) { - /* - Currently typing endpoint is not implemented on backend for federated environments - @todo: remove this condition when backend is ready and api-client in packages is updated to support domain in typing endpoint - */ - const isFederated = this.core.backendFeatures?.isFederated; - if (isFederated) { - return; - } - this.core.service!.conversation.sendTypingStop(conversationEntity.id); + this.core.service!.conversation.sendTypingStop(conversationEntity.qualifiedId); } private async toggleArchiveConversation( diff --git a/yarn.lock b/yarn.lock index 16f9b6be48e..8d6f9ba6ffc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4034,9 +4034,9 @@ __metadata: languageName: node linkType: hard -"@wireapp/api-client@npm:^22.9.0": - version: 22.9.0 - resolution: "@wireapp/api-client@npm:22.9.0" +"@wireapp/api-client@npm:^22.10.0": + version: 22.10.0 + resolution: "@wireapp/api-client@npm:22.10.0" dependencies: "@wireapp/commons": ^5.0.4 "@wireapp/priority-queue": ^2.0.3 @@ -4049,7 +4049,7 @@ __metadata: spark-md5: 3.0.2 tough-cookie: 4.1.2 ws: 8.11.0 - checksum: 36b0f95baed6c7b1ec0e8cb9ded30ea4fe85eaace4709185c47f60ab02d8391a0dd350b9d2811cee1361a223dea9c082c40c194ec0b1dc3dc5edcb2faaec790b + checksum: 4e6f330d7ef18c138a281fc08aec800ec6a3925e9d663275b46246ed336249e12241a0a928b058cd88d548cf3a1aad2dd2fd0e55caf86e0cd274226e6345d049 languageName: node linkType: hard @@ -4102,11 +4102,11 @@ __metadata: languageName: node linkType: hard -"@wireapp/core@npm:37.2.3": - version: 37.2.3 - resolution: "@wireapp/core@npm:37.2.3" +"@wireapp/core@npm:37.3.0": + version: 37.3.0 + resolution: "@wireapp/core@npm:37.3.0" dependencies: - "@wireapp/api-client": ^22.9.0 + "@wireapp/api-client": ^22.10.0 "@wireapp/commons": ^5.0.4 "@wireapp/core-crypto": 0.6.0-pre.4 "@wireapp/cryptobox": 12.8.0 @@ -4121,7 +4121,7 @@ __metadata: logdown: 3.3.1 long: ^5.2.0 uuidjs: 4.2.12 - checksum: 7cfda05e9d1b1021a694109ed161504537c476079ceffdb2b5d7a045f3fa656e387e024507e47c89bf89d2c231adb42579bbc1faa86b9230b3d0e0e927963469 + checksum: 202d1bc8a4d441805bd74e5120fc81ff2ac9c677e361bd7e7bf5354bd1b25aae91356b4069dd9f9ad04ecd4024a1db2e25bf33a9e38682b13029c807ccaf1605 languageName: node linkType: hard @@ -16238,7 +16238,7 @@ __metadata: "@typescript-eslint/parser": ^5.45.0 "@wireapp/avs": 8.2.17 "@wireapp/copy-config": 2.0.3 - "@wireapp/core": 37.2.3 + "@wireapp/core": 37.3.0 "@wireapp/eslint-config": 2.1.0 "@wireapp/prettier-config": 0.5.2 "@wireapp/react-ui-kit": 9.2.2 From dda44d2c03ac8dd87e58533bb227c3115a17dd5a Mon Sep 17 00:00:00 2001 From: Arjita Date: Thu, 8 Dec 2022 16:08:32 +0100 Subject: [PATCH 110/329] feat: Typing Indicator settings - Turn on or Off(ACC-307) (#14273) * feat: Typing Indicator settings - Turn on or Off(ACC-307) * feat: typing indicator is not visible when user is typing but typing mode is disabled(ACC-307) * fix: revert deleted hook dependecy(ACC-307) * refactor: remove extra if(ACC-307) * fix: code review comments(ACC-307) * fix: rename configuration variable(ACC-307) --- src/i18n/en-US.json | 2 + .../components/InputBar/InputBar.test.tsx | 98 ++++++++++++++----- src/script/components/InputBar/InputBar.tsx | 9 +- .../accountPreferences/PrivacySection.tsx | 23 +++++ src/script/properties/PropertiesRepository.ts | 38 ++++++- src/script/user/TypingIndicatorMode.ts | 23 +++++ 6 files changed, 166 insertions(+), 27 deletions(-) create mode 100644 src/script/user/TypingIndicatorMode.ts diff --git a/src/i18n/en-US.json b/src/i18n/en-US.json index 76549a91129..113d346c1c4 100644 --- a/src/i18n/en-US.json +++ b/src/i18n/en-US.json @@ -1000,6 +1000,8 @@ "preferencesAccountPrivacy": "Privacy", "preferencesAccountReadReceiptsCheckbox": "Read receipts", "preferencesAccountReadReceiptsDetail": "When this is off, you won’t be able to see read receipts from other people. This setting does not apply to group conversations.", + "preferencesAccountTypingIndicatorCheckbox": "Typing Indicator", + "preferencesAccountTypingIndicatorsDetail": "When this is off, you won’t be able to see when other people are typing, and others won’t see when you are typing. This setting applies to all conversations on this device.", "preferencesAccountResetAppLockPassphrase": "Reset app lock passcode", "preferencesAccountResetPassword": "Reset password", "preferencesAccountSetAppLockPassphrase": "Set app lock passcode", diff --git a/src/script/components/InputBar/InputBar.test.tsx b/src/script/components/InputBar/InputBar.test.tsx index aeede0e78b8..232e7483e2f 100644 --- a/src/script/components/InputBar/InputBar.test.tsx +++ b/src/script/components/InputBar/InputBar.test.tsx @@ -22,6 +22,8 @@ import {act, fireEvent, render, waitFor} from '@testing-library/react'; import {InputBar} from 'Components/InputBar/index'; import {withTheme} from 'src/script/auth/util/test/TestUtil'; import {Config} from 'src/script/Config'; +import {PropertiesService} from 'src/script/properties/PropertiesService'; +import {SelfService} from 'src/script/self/SelfService'; import {createMentionEntity, getMentionCandidate} from 'Util/MentionUtil'; import {createRandomUuid} from 'Util/util'; @@ -40,10 +42,6 @@ import {TeamState} from '../../team/TeamState'; import {UserState} from '../../user/UserState'; const testFactory = new TestFactory(); -const conversationRepository = { - sendTypingStart: jest.fn(), - sendTypingStop: jest.fn(), -} as unknown as ConversationRepository; let eventRepository: EventRepository; let searchRepository: SearchRepository; @@ -71,34 +69,86 @@ beforeAll(() => { }); }); -const getDefaultProps = () => ({ - assetRepository: new AssetRepository(new AssetService()), - conversationEntity: new Conversation(createRandomUuid()), - conversationRepository, - eventRepository, - messageRepository: {} as MessageRepository, - openGiphy: jest.fn(), - propertiesRepository: new PropertiesRepository({} as any, {} as any), - searchRepository, - storageRepository, - teamState: new TeamState(), - userState: { - self: () => new User('id'), - } as UserState, - onShiftTab: jest.fn(), -}); - describe('InputBar', () => { + let propertiesRepository: PropertiesRepository; + + const getDefaultProps = () => ({ + assetRepository: new AssetRepository(new AssetService()), + conversationEntity: new Conversation(createRandomUuid()), + conversationRepository: { + sendTypingStart: jest.fn(), + sendTypingStop: jest.fn(), + } as unknown as ConversationRepository, + eventRepository, + messageRepository: {} as MessageRepository, + openGiphy: jest.fn(), + propertiesRepository, + searchRepository, + storageRepository, + teamState: new TeamState(), + userState: { + self: () => new User('id'), + } as UserState, + onShiftTab: jest.fn(), + }); + + beforeEach(() => { + const propertiesService = new PropertiesService(); + const selfService = new SelfService(); + propertiesRepository = new PropertiesRepository(propertiesService, selfService); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + const testMessage = 'Write custom text message'; const pngFile = new File(['(⌐□_□)'], 'wire-example-image.png', {type: 'image/png'}); it('has passed value', async () => { const promise = Promise.resolve(); const props = getDefaultProps(); - const {container} = render(withTheme()); + const {getByTestId} = render(withTheme()); await act(() => promise); - const textArea = await container.querySelector('textarea[data-uie-name="input-message"]'); + const textArea = getByTestId('input-message'); + + expect(textArea).not.toBeNull(); + fireEvent.change(textArea!, {target: {value: testMessage}}); + + await waitFor(() => { + expect((textArea as HTMLTextAreaElement).value).toBe(testMessage); + }); + }); + + it('typing request is sent if the typing indicator mode is enabled and user is typing', async () => { + const props = getDefaultProps(); + const {getByTestId} = render(withTheme()); + const textArea = getByTestId('input-message'); + + expect(textArea).not.toBeNull(); + fireEvent.change(textArea!, {target: {value: testMessage}}); + + await waitFor(() => { + expect((textArea as HTMLTextAreaElement).value).toBe(testMessage); + }); + + const property = PropertiesRepository.CONFIG.WIRE_TYPING_MODE; + const defaultValue = property.defaultValue; + + expect(propertiesRepository.typingIndicatorMode()).toBe(defaultValue); + expect(props.conversationRepository.sendTypingStart).toHaveBeenCalledTimes(1); + }); + + it('typing request is not sent when user is typing but the typing indicator mode is disabled', async () => { + const props = getDefaultProps(); + const {getByTestId} = render(withTheme()); + const textArea = getByTestId('input-message'); + const property = PropertiesRepository.CONFIG.WIRE_TYPING_MODE; + const defaultValue = property.defaultValue; + + propertiesRepository.setProperty(property.key, !defaultValue); + expect(propertiesRepository.typingIndicatorMode()).not.toBe(defaultValue); expect(textArea).not.toBeNull(); fireEvent.change(textArea!, {target: {value: testMessage}}); @@ -106,6 +156,8 @@ describe('InputBar', () => { await waitFor(() => { expect((textArea as HTMLTextAreaElement).value).toBe(testMessage); }); + expect(props.conversationRepository.sendTypingStart).not.toHaveBeenCalled(); + expect(props.conversationRepository.sendTypingStop).not.toHaveBeenCalled(); }); it('has pasted image', async () => { diff --git a/src/script/components/InputBar/InputBar.tsx b/src/script/components/InputBar/InputBar.tsx index 9a6f3df1dd5..0a49b75e42e 100644 --- a/src/script/components/InputBar/InputBar.tsx +++ b/src/script/components/InputBar/InputBar.tsx @@ -36,6 +36,7 @@ import {ControlButtons} from 'src/script/page/message-list/InputBarControls/Cont import {GiphyButton} from 'src/script/page/message-list/InputBarControls/GiphyButton'; import {MentionSuggestionList} from 'src/script/page/message-list/MentionSuggestions'; import {PropertiesRepository} from 'src/script/properties/PropertiesRepository'; +import {CONVERSATION_TYPING_INDICATOR_MODE} from 'src/script/user/TypingIndicatorMode'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; import {loadDraftState, saveDraftState} from 'Util/DraftStateUtil'; import {allowsAllFiles, getFileExtensionOrName, hasAllowedExtension} from 'Util/FileTypeUtil'; @@ -155,6 +156,8 @@ const InputBar = ({ 'isIncomingRequest', ]); + const {typingIndicatorMode} = useKoSubscribableChildren(propertiesRepository, ['typingIndicatorMode']); + const isTypingIndicatorEnabled = typingIndicatorMode === CONVERSATION_TYPING_INDICATOR_MODE.ON; const shadowInputRef = useRef(null); const textareaRef = useRef(null); @@ -378,7 +381,7 @@ const InputBar = ({ }, [editMessageEntity]); // eslint-disable-line react-hooks/exhaustive-deps useEffect(() => { - if (!hasUserTyped.current) { + if (!hasUserTyped.current || !isTypingIndicatorEnabled) { return; } if (isTyping) { @@ -386,7 +389,7 @@ const InputBar = ({ } else { conversationRepository.sendTypingStop(conversationEntity); } - }, [isTyping, conversationRepository, conversationEntity]); + }, [isTyping, conversationRepository, conversationEntity, isTypingIndicatorEnabled]); useEffect(() => { if (!hasUserTyped.current) { @@ -882,7 +885,7 @@ const InputBar = ({ id="conversation-input-bar" className={cx('conversation-input-bar', {'is-right-panel-open': isRightSidebarOpen})} > - + {!!isTypingIndicatorEnabled && } {classifiedDomains && !isConnectionRequest && ( diff --git a/src/script/page/MainContent/panels/preferences/accountPreferences/PrivacySection.tsx b/src/script/page/MainContent/panels/preferences/accountPreferences/PrivacySection.tsx index 6b6021b7593..a1dfcd747e1 100644 --- a/src/script/page/MainContent/panels/preferences/accountPreferences/PrivacySection.tsx +++ b/src/script/page/MainContent/panels/preferences/accountPreferences/PrivacySection.tsx @@ -31,6 +31,7 @@ import {formatDurationCaption} from 'Util/TimeUtil'; import {PropertiesRepository} from '../../../../../properties/PropertiesRepository'; import {AppLockRepository} from '../../../../../user/AppLockRepository'; import {AppLockState} from '../../../../../user/AppLockState'; +import {CONVERSATION_TYPING_INDICATOR_MODE} from '../../../../../user/TypingIndicatorMode'; import {PreferencesSection} from '../components/PreferencesSection'; interface PrivacySectionProps { @@ -53,7 +54,15 @@ const PrivacySection: React.FC = ({ ]); const {receiptMode} = useKoSubscribableChildren(propertiesRepository, ['receiptMode']); + const {typingIndicatorMode} = useKoSubscribableChildren(propertiesRepository, ['typingIndicatorMode']); + const handleTypingModeChange = (event: React.ChangeEvent) => { + const isChecked = event.target.checked; + propertiesRepository.updateProperty( + PropertiesRepository.CONFIG.WIRE_TYPING_MODE.key, + isChecked ? CONVERSATION_TYPING_INDICATOR_MODE.ON : CONVERSATION_TYPING_INDICATOR_MODE.OFF, + ); + }; return ( <> @@ -74,6 +83,20 @@ const PrivacySection: React.FC = ({

    {t('preferencesAccountReadReceiptsDetail')}

    +
    + + + {t('preferencesAccountTypingIndicatorCheckbox')} + + +

    + {t('preferencesAccountTypingIndicatorsDetail')} +

    +
    {isAppLockAvailable && (
    ; + public readonly typingIndicatorMode: ko.Observable; private readonly selfService: SelfService; private readonly selfUser: ko.Observable; public properties: WebappProperties; @@ -100,6 +106,7 @@ export class PropertiesRepository { }; this.selfUser = ko.observable(); this.receiptMode = ko.observable(PropertiesRepository.CONFIG.WIRE_RECEIPT_MODE.defaultValue); + this.typingIndicatorMode = ko.observable(PropertiesRepository.CONFIG.WIRE_TYPING_MODE.defaultValue); /** @type {ko.Observable} */ this.marketingConsent = ko.observable(PropertiesRepository.CONFIG.WIRE_MARKETING_CONSENT.defaultValue); } @@ -205,8 +212,26 @@ export class PropertiesRepository { }); } + private fetchTypingIndicatorSetting(): Promise { + const {key: propertyKey, defaultValue} = PropertiesRepository.CONFIG.WIRE_TYPING_MODE; + + return this.propertiesService + .getPropertiesByKey(propertyKey) + .then(value => { + this.setProperty(propertyKey, value); + }) + .catch(() => { + const message = `Property "${propertyKey}" doesn't exist for this account. Continuing with the default value of "${defaultValue}".`; + this.logger.warn(message); + }); + } + private initActivatedAccount(): Promise { - return Promise.all([this.fetchWebAppAccountSettings(), this.fetchReadReceiptsSetting()]).then(() => { + return Promise.all([ + this.fetchWebAppAccountSettings(), + this.fetchReadReceiptsSetting(), + this.fetchTypingIndicatorSetting(), + ]).then(() => { this.logger.info('Loaded user properties', this.properties); this.publishProperties(); }); @@ -240,6 +265,9 @@ export class PropertiesRepository { case PropertiesRepository.CONFIG.WIRE_RECEIPT_MODE.key: this.setProperty(key, RECEIPT_MODE.OFF); break; + case PropertiesRepository.CONFIG.WIRE_TYPING_MODE.key: + this.setProperty(key, CONVERSATION_TYPING_INDICATOR_MODE.OFF); + break; case PropertiesRepository.CONFIG.WIRE_MARKETING_CONSENT.key: this.setProperty(key, ConsentValue.NOT_GIVEN); break; @@ -262,6 +290,9 @@ export class PropertiesRepository { case PropertiesRepository.CONFIG.WIRE_RECEIPT_MODE.key: this.receiptMode(value); break; + case PropertiesRepository.CONFIG.WIRE_TYPING_MODE.key: + this.typingIndicatorMode(value); + break; } } @@ -273,6 +304,11 @@ export class PropertiesRepository { return this.propertiesService.deletePropertiesByKey(key); } return this.propertiesService.putPropertiesByKey(key, value); + case PropertiesRepository.CONFIG.WIRE_TYPING_MODE.key: + if (value === CONVERSATION_TYPING_INDICATOR_MODE.ON) { + return this.propertiesService.deletePropertiesByKey(key); + } + return this.propertiesService.putPropertiesByKey(key, value); case PropertiesRepository.CONFIG.WIRE_MARKETING_CONSENT.key: await this.selfService.putSelfConsent(ConsentType.MARKETING, value, `Webapp ${Environment.version(false)}`); if (value === ConsentValue.NOT_GIVEN) { diff --git a/src/script/user/TypingIndicatorMode.ts b/src/script/user/TypingIndicatorMode.ts new file mode 100644 index 00000000000..9c43eb4534c --- /dev/null +++ b/src/script/user/TypingIndicatorMode.ts @@ -0,0 +1,23 @@ +/* + * Wire + * Copyright (C) 2018 Wire Swiss GmbH + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see http://www.gnu.org/licenses/. + * + */ + +export enum CONVERSATION_TYPING_INDICATOR_MODE { + OFF = 0, + ON = 1, +} From 06fba7b6ba6d5659e24f2d5cf10640d7f76521dc Mon Sep 17 00:00:00 2001 From: Thomas Belin Date: Thu, 8 Dec 2022 16:24:00 +0100 Subject: [PATCH 111/329] refactor: Improve file tree structure (#14275) --- src/script/components/InputBar/InputBar.tsx | 14 +++---- .../AssetUploadButton.test.tsx | 11 +----- .../AssetUploadButton/AssetUploadButton.tsx | 9 ++--- .../components}/AssetUploadButton/index.ts | 0 .../ImageUploadButton.test.tsx | 19 ++++----- .../ImageUploadButton/ImageUploadButton.tsx | 9 ++--- .../components}/ImageUploadButton/index.ts | 0 .../InputBarControls/ControlButtons.test.tsx | 9 ----- .../InputBarControls/ControlButtons.tsx | 11 +++++- .../InputBarControls/GiphyButton.tsx | 0 .../MentionSuggestions.test.tsx | 2 +- .../MentionSuggestions/MentionSuggestions.tsx | 4 +- .../MentionSuggestionsItem.tsx | 2 +- .../components}/MentionSuggestions/index.ts | 0 .../MessageTimerButton.test.tsx | 0 .../MessageTimerButton/MessageTimerButton.tsx | 0 .../components}/MessageTimerButton/index.ts | 0 .../{ => components}/PastedFileControls.tsx | 2 +- .../InputBar/{ => components}/ReplyBar.tsx | 2 +- .../TypingIndicator/TypingIndicator.state.tsx | 2 +- .../TypingIndicator/TypingIndicator.styles.ts | 0 .../TypingIndicator/TypingIndicator.test.tsx | 2 +- .../TypingIndicator/TypingIndicator.tsx | 0 .../{ => components}/TypingIndicator/index.ts | 0 .../components/MessagesList/MessageList.tsx | 6 +-- .../GroupCreation/GroupCreationModal.tsx | 2 +- .../Modals/PrimaryModal/PrimaryModal.tsx | 3 +- src/script/components/calling/CallingCell.tsx | 2 +- .../components/panel/EnrichedFields.test.tsx | 39 +++++-------------- src/script/components/utils/InViewport.tsx | 4 +- .../conversation/ConversationRepository.ts | 2 +- .../page/LeftSidebar/panels/ListWrapper.tsx | 3 +- .../panels/Collection/CollectionDetails.tsx | 2 +- .../components/PreferencesPage.tsx | 2 +- .../AddParticipants/AddParticipants.tsx | 2 +- .../ConversationDetails.tsx | 2 +- .../ConversationParticipants.tsx | 2 +- .../GroupParticipantService.tsx | 2 +- .../GroupParticipantUser.tsx | 2 +- .../GuestServicesOptions.tsx | 2 +- .../MessageDetails/MessageDetails.tsx | 2 +- .../Notifications/Notifications.tsx | 2 +- .../ParticipantDevices/ParticipantDevices.tsx | 2 +- .../TimedMessages/TimedMessages.tsx | 2 +- .../{ui => util/DOM}/fadingScrollbar.ts | 0 .../{ui => util/DOM}/onHitTopOrBottom.ts | 8 ++-- .../script/util/DOM/overlayedObserver.test.ts | 8 +++- .../{ui => util/DOM}/overlayedObserver.ts | 0 src/script/{ui => util/DOM}/resizeObserver.ts | 0 .../{ui => util/DOM}/viewportObserver.ts | 0 50 files changed, 81 insertions(+), 118 deletions(-) rename src/script/{page/message-list => components/InputBar/components}/AssetUploadButton/AssetUploadButton.test.tsx (88%) rename src/script/{page/message-list => components/InputBar/components}/AssetUploadButton/AssetUploadButton.tsx (87%) rename src/script/{page/message-list => components/InputBar/components}/AssetUploadButton/index.ts (100%) rename src/script/{page/message-list => components/InputBar/components}/ImageUploadButton/ImageUploadButton.test.tsx (80%) rename src/script/{page/message-list => components/InputBar/components}/ImageUploadButton/ImageUploadButton.tsx (88%) rename src/script/{page/message-list => components/InputBar/components}/ImageUploadButton/index.ts (100%) rename src/script/{page/message-list => components/InputBar/components}/InputBarControls/ControlButtons.test.tsx (92%) rename src/script/{page/message-list => components/InputBar/components}/InputBarControls/ControlButtons.tsx (88%) rename src/script/{page/message-list => components/InputBar/components}/InputBarControls/GiphyButton.tsx (100%) rename src/script/{page/message-list => components/InputBar/components}/MentionSuggestions/MentionSuggestions.test.tsx (98%) rename src/script/{page/message-list => components/InputBar/components}/MentionSuggestions/MentionSuggestions.tsx (97%) rename src/script/{page/message-list => components/InputBar/components}/MentionSuggestions/MentionSuggestionsItem.tsx (98%) rename src/script/{page/message-list => components/InputBar/components}/MentionSuggestions/index.ts (100%) rename src/script/{page/message-list => components/InputBar/components}/MessageTimerButton/MessageTimerButton.test.tsx (100%) rename src/script/{page/message-list => components/InputBar/components}/MessageTimerButton/MessageTimerButton.tsx (100%) rename src/script/{page/message-list => components/InputBar/components}/MessageTimerButton/index.ts (100%) rename src/script/components/InputBar/{ => components}/PastedFileControls.tsx (98%) rename src/script/components/InputBar/{ => components}/ReplyBar.tsx (98%) rename src/script/components/InputBar/{ => components}/TypingIndicator/TypingIndicator.state.tsx (98%) rename src/script/components/InputBar/{ => components}/TypingIndicator/TypingIndicator.styles.ts (100%) rename src/script/components/InputBar/{ => components}/TypingIndicator/TypingIndicator.test.tsx (98%) rename src/script/components/InputBar/{ => components}/TypingIndicator/TypingIndicator.tsx (100%) rename src/script/components/InputBar/{ => components}/TypingIndicator/index.ts (100%) rename src/script/{ui => util/DOM}/fadingScrollbar.ts (100%) rename src/script/{ui => util/DOM}/onHitTopOrBottom.ts (92%) rename test/unit_tests/ui/overlayedObserverSpec.js => src/script/util/DOM/overlayedObserver.test.ts (91%) rename src/script/{ui => util/DOM}/overlayedObserver.ts (100%) rename src/script/{ui => util/DOM}/resizeObserver.ts (100%) rename src/script/{ui => util/DOM}/viewportObserver.ts (100%) diff --git a/src/script/components/InputBar/InputBar.tsx b/src/script/components/InputBar/InputBar.tsx index 0a49b75e42e..a8dc320816f 100644 --- a/src/script/components/InputBar/InputBar.tsx +++ b/src/script/components/InputBar/InputBar.tsx @@ -32,9 +32,6 @@ import {useEmoji} from 'Components/Emoji/useEmoji'; import {Icon} from 'Components/Icon'; import {ClassifiedBar} from 'Components/input/ClassifiedBar'; import {PrimaryModal} from 'Components/Modals/PrimaryModal'; -import {ControlButtons} from 'src/script/page/message-list/InputBarControls/ControlButtons'; -import {GiphyButton} from 'src/script/page/message-list/InputBarControls/GiphyButton'; -import {MentionSuggestionList} from 'src/script/page/message-list/MentionSuggestions'; import {PropertiesRepository} from 'src/script/properties/PropertiesRepository'; import {CONVERSATION_TYPING_INDICATOR_MODE} from 'src/script/user/TypingIndicatorMode'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; @@ -52,16 +49,19 @@ import { import {formatLocale, TIME_IN_MILLIS} from 'Util/TimeUtil'; import {formatBytes, getSelectionPosition} from 'Util/util'; +import {ControlButtons} from './components/InputBarControls/ControlButtons'; +import {GiphyButton} from './components/InputBarControls/GiphyButton'; +import {MentionSuggestionList} from './components/MentionSuggestions'; +import {PastedFileControls} from './components/PastedFileControls'; +import {ReplyBar} from './components/ReplyBar'; +import {TYPING_TIMEOUT} from './components/TypingIndicator'; +import {TypingIndicator} from './components/TypingIndicator/TypingIndicator'; import {getRichTextInput} from './getRichTextInput'; import {useDropFiles} from './hooks/useDropFiles'; import {useFilePaste} from './hooks/useFilePaste'; import {useResizeTarget} from './hooks/useResizeTarget'; import {useScrollSync} from './hooks/useScrollSync'; import {useTextAreaFocus} from './hooks/useTextAreaFocus'; -import {PastedFileControls} from './PastedFileControls'; -import {ReplyBar} from './ReplyBar'; -import {TYPING_TIMEOUT} from './TypingIndicator'; -import {TypingIndicator} from './TypingIndicator/TypingIndicator'; import {AssetRepository} from '../../assets/AssetRepository'; import {Config} from '../../Config'; diff --git a/src/script/page/message-list/AssetUploadButton/AssetUploadButton.test.tsx b/src/script/components/InputBar/components/AssetUploadButton/AssetUploadButton.test.tsx similarity index 88% rename from src/script/page/message-list/AssetUploadButton/AssetUploadButton.test.tsx rename to src/script/components/InputBar/components/AssetUploadButton/AssetUploadButton.test.tsx index c144c503b2b..cdaeaa049ef 100644 --- a/src/script/page/message-list/AssetUploadButton/AssetUploadButton.test.tsx +++ b/src/script/components/InputBar/components/AssetUploadButton/AssetUploadButton.test.tsx @@ -19,16 +19,7 @@ import {render, fireEvent} from '@testing-library/react'; -import {AssetUploadButton} from './'; - -jest.mock('../../../Config', () => ({ - Config: { - getConfig: () => ({ - ALLOWED_IMAGE_TYPES: ['image/gif', 'image/avif'], - FEATURE: {ALLOWED_FILE_UPLOAD_EXTENSIONS: ['*']}, - }), - }, -})); +import {AssetUploadButton} from '.'; const pngFile = new File(['(⌐□_□)'], 'chucknorris.png', {type: 'image/png'}); diff --git a/src/script/page/message-list/AssetUploadButton/AssetUploadButton.tsx b/src/script/components/InputBar/components/AssetUploadButton/AssetUploadButton.tsx similarity index 87% rename from src/script/page/message-list/AssetUploadButton/AssetUploadButton.tsx rename to src/script/components/InputBar/components/AssetUploadButton/AssetUploadButton.tsx index dea5361d41a..88c0bc9f90b 100644 --- a/src/script/page/message-list/AssetUploadButton/AssetUploadButton.tsx +++ b/src/script/components/InputBar/components/AssetUploadButton/AssetUploadButton.tsx @@ -22,15 +22,12 @@ import {useRef} from 'react'; import {Icon} from 'Components/Icon'; import {t} from 'Util/LocalizerUtil'; -import {Config} from '../../../Config'; - interface AssetUploadButtonProps { onSelectFiles: (files: File[]) => void; + acceptedFileTypes?: string[]; } -export const AssetUploadButton = ({onSelectFiles}: AssetUploadButtonProps) => { - const acceptedFileTypes = Config.getConfig().FEATURE.ALLOWED_FILE_UPLOAD_EXTENSIONS.join(','); - +export const AssetUploadButton = ({onSelectFiles, acceptedFileTypes}: AssetUploadButtonProps) => { const fileRef = useRef(null); const formRef = useRef(null); @@ -60,7 +57,7 @@ export const AssetUploadButton = ({onSelectFiles}: AssetUploadButtonProps) => { ({ - Config: { - getConfig: () => ({ - ALLOWED_IMAGE_TYPES: ['image/gif', 'image/avif'], - FEATURE: {ALLOWED_FILE_UPLOAD_EXTENSIONS: ['*']}, - }), - }, -})); +const ALLOWED_IMAGE_TYPES = ['image/gif', 'image/avif']; const pngFile = new File(['(⌐□_□)'], 'chucknorris.png', {type: 'image/png'}); @@ -36,7 +29,9 @@ describe('ImageUploadButton', () => { it('Does call onSelectImages with uploaded image file', () => { const onSelectImages = jest.fn(); - const {container} = render(); + const {container} = render( + , + ); const fileInput = container.querySelector('input[type="file"]') as HTMLInputElement; fireEvent.change(fileInput, { @@ -49,7 +44,9 @@ describe('ImageUploadButton', () => { it('Does reset a form with input after upload', () => { const onSelectImages = jest.fn(); - const {container} = render(); + const {container} = render( + , + ); const form = container.querySelector('form'); jest.spyOn(form!, 'reset'); diff --git a/src/script/page/message-list/ImageUploadButton/ImageUploadButton.tsx b/src/script/components/InputBar/components/ImageUploadButton/ImageUploadButton.tsx similarity index 88% rename from src/script/page/message-list/ImageUploadButton/ImageUploadButton.tsx rename to src/script/components/InputBar/components/ImageUploadButton/ImageUploadButton.tsx index 99d3d79c46c..061022ad88f 100644 --- a/src/script/page/message-list/ImageUploadButton/ImageUploadButton.tsx +++ b/src/script/components/InputBar/components/ImageUploadButton/ImageUploadButton.tsx @@ -22,15 +22,12 @@ import {useRef} from 'react'; import {Icon} from 'Components/Icon'; import {t} from 'Util/LocalizerUtil'; -import {Config} from '../../../Config'; - interface ImageUploadButtonProps { onSelectImages: (files: File[]) => void; + acceptedImageTypes: string[]; } -export const ImageUploadButton = ({onSelectImages}: ImageUploadButtonProps) => { - const acceptedImageTypes = Config.getConfig().ALLOWED_IMAGE_TYPES.join(','); - +export const ImageUploadButton = ({onSelectImages, acceptedImageTypes}: ImageUploadButtonProps) => { const imageRef = useRef(null); const formRef = useRef(null); @@ -59,7 +56,7 @@ export const ImageUploadButton = ({onSelectImages}: ImageUploadButtonProps) => { ({ - Config: {getConfig: () => mockConfig}, -})); - type PropsType = React.ComponentProps; const defaultParams: PropsType = { conversation: undefined, diff --git a/src/script/page/message-list/InputBarControls/ControlButtons.tsx b/src/script/components/InputBar/components/InputBarControls/ControlButtons.tsx similarity index 88% rename from src/script/page/message-list/InputBarControls/ControlButtons.tsx rename to src/script/components/InputBar/components/InputBarControls/ControlButtons.tsx index e43104231cd..3595ed233fa 100644 --- a/src/script/page/message-list/InputBarControls/ControlButtons.tsx +++ b/src/script/components/InputBar/components/InputBarControls/ControlButtons.tsx @@ -20,6 +20,7 @@ import React from 'react'; import {Icon} from 'Components/Icon'; +import {Config} from 'src/script/Config'; import {Conversation} from 'src/script/entity/Conversation'; import {t} from 'Util/LocalizerUtil'; @@ -98,11 +99,17 @@ const ControlButtons: React.FC = ({
  • - +
  • - +
  • )} diff --git a/src/script/page/message-list/InputBarControls/GiphyButton.tsx b/src/script/components/InputBar/components/InputBarControls/GiphyButton.tsx similarity index 100% rename from src/script/page/message-list/InputBarControls/GiphyButton.tsx rename to src/script/components/InputBar/components/InputBarControls/GiphyButton.tsx diff --git a/src/script/page/message-list/MentionSuggestions/MentionSuggestions.test.tsx b/src/script/components/InputBar/components/MentionSuggestions/MentionSuggestions.test.tsx similarity index 98% rename from src/script/page/message-list/MentionSuggestions/MentionSuggestions.test.tsx rename to src/script/components/InputBar/components/MentionSuggestions/MentionSuggestions.test.tsx index 9b329eeb559..eb94ca50e76 100644 --- a/src/script/page/message-list/MentionSuggestions/MentionSuggestions.test.tsx +++ b/src/script/components/InputBar/components/MentionSuggestions/MentionSuggestions.test.tsx @@ -23,7 +23,7 @@ import {createRandomUuid} from 'Util/util'; import {MentionSuggestionList} from './MentionSuggestions'; -import {User} from '../../../entity/User'; +import {User} from '../../../../entity/User'; // mocked data const first = generateUser('patryktest1', 'patryktest1'); diff --git a/src/script/page/message-list/MentionSuggestions/MentionSuggestions.tsx b/src/script/components/InputBar/components/MentionSuggestions/MentionSuggestions.tsx similarity index 97% rename from src/script/page/message-list/MentionSuggestions/MentionSuggestions.tsx rename to src/script/components/InputBar/components/MentionSuggestions/MentionSuggestions.tsx index 9f26d90b8f7..b0ba61e030a 100644 --- a/src/script/page/message-list/MentionSuggestions/MentionSuggestions.tsx +++ b/src/script/components/InputBar/components/MentionSuggestions/MentionSuggestions.tsx @@ -19,13 +19,13 @@ import React, {useEffect, useMemo, useRef, useState} from 'react'; +import {initFadingScrollbar} from 'Util/DOM/fadingScrollbar'; import {KEY} from 'Util/KeyboardUtil'; import {clamp} from 'Util/NumberUtil'; import {MentionSuggestionsItem} from './MentionSuggestionsItem'; -import {User} from '../../../entity/User'; -import {initFadingScrollbar} from '../../../ui/fadingScrollbar'; +import {User} from '../../../../entity/User'; type MentionSuggestionListProps = { onSelectionValidated: (data: User) => void; diff --git a/src/script/page/message-list/MentionSuggestions/MentionSuggestionsItem.tsx b/src/script/components/InputBar/components/MentionSuggestions/MentionSuggestionsItem.tsx similarity index 98% rename from src/script/page/message-list/MentionSuggestions/MentionSuggestionsItem.tsx rename to src/script/components/InputBar/components/MentionSuggestions/MentionSuggestionsItem.tsx index fe8596c2b06..363ffde6b04 100644 --- a/src/script/page/message-list/MentionSuggestions/MentionSuggestionsItem.tsx +++ b/src/script/components/InputBar/components/MentionSuggestions/MentionSuggestionsItem.tsx @@ -26,7 +26,7 @@ import {Icon} from 'Components/Icon'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; import {handleKeyDown} from 'Util/KeyboardUtil'; -import {User} from '../../../entity/User'; +import {User} from '../../../../entity/User'; type MentionSuggestionsItemProps = { isSelected: boolean; diff --git a/src/script/page/message-list/MentionSuggestions/index.ts b/src/script/components/InputBar/components/MentionSuggestions/index.ts similarity index 100% rename from src/script/page/message-list/MentionSuggestions/index.ts rename to src/script/components/InputBar/components/MentionSuggestions/index.ts diff --git a/src/script/page/message-list/MessageTimerButton/MessageTimerButton.test.tsx b/src/script/components/InputBar/components/MessageTimerButton/MessageTimerButton.test.tsx similarity index 100% rename from src/script/page/message-list/MessageTimerButton/MessageTimerButton.test.tsx rename to src/script/components/InputBar/components/MessageTimerButton/MessageTimerButton.test.tsx diff --git a/src/script/page/message-list/MessageTimerButton/MessageTimerButton.tsx b/src/script/components/InputBar/components/MessageTimerButton/MessageTimerButton.tsx similarity index 100% rename from src/script/page/message-list/MessageTimerButton/MessageTimerButton.tsx rename to src/script/components/InputBar/components/MessageTimerButton/MessageTimerButton.tsx diff --git a/src/script/page/message-list/MessageTimerButton/index.ts b/src/script/components/InputBar/components/MessageTimerButton/index.ts similarity index 100% rename from src/script/page/message-list/MessageTimerButton/index.ts rename to src/script/components/InputBar/components/MessageTimerButton/index.ts diff --git a/src/script/components/InputBar/PastedFileControls.tsx b/src/script/components/InputBar/components/PastedFileControls.tsx similarity index 98% rename from src/script/components/InputBar/PastedFileControls.tsx rename to src/script/components/InputBar/components/PastedFileControls.tsx index 63efce0913f..39a6e487671 100644 --- a/src/script/components/InputBar/PastedFileControls.tsx +++ b/src/script/components/InputBar/components/PastedFileControls.tsx @@ -22,7 +22,7 @@ import {FC} from 'react'; import {Icon} from 'Components/Icon'; import {t} from 'Util/LocalizerUtil'; -import {Config} from '../../Config'; +import {Config} from '../../../Config'; interface PastedFileControlsProps { pastedFile: File; diff --git a/src/script/components/InputBar/ReplyBar.tsx b/src/script/components/InputBar/components/ReplyBar.tsx similarity index 98% rename from src/script/components/InputBar/ReplyBar.tsx rename to src/script/components/InputBar/components/ReplyBar.tsx index bc2d82a8617..7d878f64a08 100644 --- a/src/script/components/InputBar/ReplyBar.tsx +++ b/src/script/components/InputBar/components/ReplyBar.tsx @@ -29,7 +29,7 @@ import {useKoSubscribableChildren} from 'Util/ComponentUtil'; import {t} from 'Util/LocalizerUtil'; import {renderMessage} from 'Util/messageRenderer'; -import {ContentMessage} from '../../entity/message/ContentMessage'; +import {ContentMessage} from '../../../entity/message/ContentMessage'; interface ReplyBarProps { replyMessageEntity: ContentMessage; diff --git a/src/script/components/InputBar/TypingIndicator/TypingIndicator.state.tsx b/src/script/components/InputBar/components/TypingIndicator/TypingIndicator.state.tsx similarity index 98% rename from src/script/components/InputBar/TypingIndicator/TypingIndicator.state.tsx rename to src/script/components/InputBar/components/TypingIndicator/TypingIndicator.state.tsx index a1f75541f3b..2a5beec3b91 100644 --- a/src/script/components/InputBar/TypingIndicator/TypingIndicator.state.tsx +++ b/src/script/components/InputBar/components/TypingIndicator/TypingIndicator.state.tsx @@ -19,7 +19,7 @@ import create from 'zustand'; -import {User} from '../../../entity/User'; +import {User} from '../../../../entity/User'; type TypingUser = { conversationId: string; diff --git a/src/script/components/InputBar/TypingIndicator/TypingIndicator.styles.ts b/src/script/components/InputBar/components/TypingIndicator/TypingIndicator.styles.ts similarity index 100% rename from src/script/components/InputBar/TypingIndicator/TypingIndicator.styles.ts rename to src/script/components/InputBar/components/TypingIndicator/TypingIndicator.styles.ts diff --git a/src/script/components/InputBar/TypingIndicator/TypingIndicator.test.tsx b/src/script/components/InputBar/components/TypingIndicator/TypingIndicator.test.tsx similarity index 98% rename from src/script/components/InputBar/TypingIndicator/TypingIndicator.test.tsx rename to src/script/components/InputBar/components/TypingIndicator/TypingIndicator.test.tsx index a7522a0cfea..d99f0fa3bd5 100644 --- a/src/script/components/InputBar/TypingIndicator/TypingIndicator.test.tsx +++ b/src/script/components/InputBar/components/TypingIndicator/TypingIndicator.test.tsx @@ -23,7 +23,7 @@ import {act} from 'react-dom/test-utils'; import {TypingIndicator, TypingIndicatorProps} from './TypingIndicator'; import {useTypingIndicatorState} from './TypingIndicator.state'; -import {User} from '../../../entity/User'; +import {User} from '../../../../entity/User'; describe('TypingIndicator', () => { afterEach(() => { diff --git a/src/script/components/InputBar/TypingIndicator/TypingIndicator.tsx b/src/script/components/InputBar/components/TypingIndicator/TypingIndicator.tsx similarity index 100% rename from src/script/components/InputBar/TypingIndicator/TypingIndicator.tsx rename to src/script/components/InputBar/components/TypingIndicator/TypingIndicator.tsx diff --git a/src/script/components/InputBar/TypingIndicator/index.ts b/src/script/components/InputBar/components/TypingIndicator/index.ts similarity index 100% rename from src/script/components/InputBar/TypingIndicator/index.ts rename to src/script/components/InputBar/components/TypingIndicator/index.ts diff --git a/src/script/components/MessagesList/MessageList.tsx b/src/script/components/MessagesList/MessageList.tsx index f3e583ccc67..8da755202e3 100644 --- a/src/script/components/MessagesList/MessageList.tsx +++ b/src/script/components/MessagesList/MessageList.tsx @@ -31,15 +31,15 @@ import {User} from 'src/script/entity/User'; import {useRoveFocus} from 'src/script/hooks/useRoveFocus'; import {ServiceEntity} from 'src/script/integration/ServiceEntity'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; +import {initFadingScrollbar} from 'Util/DOM/fadingScrollbar'; +import {onHitTopOrBottom} from 'Util/DOM/onHitTopOrBottom'; +import {useResizeObserver} from 'Util/DOM/resizeObserver'; import {Message, MessageActions} from './Message'; import {Conversation as ConversationEntity, Conversation} from '../../entity/Conversation'; import {isMemberMessage, isContentMessage} from '../../guards/Message'; import {StatusType} from '../../message/StatusType'; -import {initFadingScrollbar} from '../../ui/fadingScrollbar'; -import {onHitTopOrBottom} from '../../ui/onHitTopOrBottom'; -import {useResizeObserver} from '../../ui/resizeObserver'; type FocusedElement = {center?: boolean; element: Element}; diff --git a/src/script/components/Modals/GroupCreation/GroupCreationModal.tsx b/src/script/components/Modals/GroupCreation/GroupCreationModal.tsx index f9b6e19ff13..c4c59aa8566 100644 --- a/src/script/components/Modals/GroupCreation/GroupCreationModal.tsx +++ b/src/script/components/Modals/GroupCreation/GroupCreationModal.tsx @@ -36,6 +36,7 @@ import {BaseToggle} from 'Components/toggle/BaseToggle'; import {InfoToggle} from 'Components/toggle/InfoToggle'; import {UserSearchableList} from 'Components/UserSearchableList'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; +import {initFadingScrollbar} from 'Util/DOM/fadingScrollbar'; import {handleEnterDown, offEscKey, onEscKey} from 'Util/KeyboardUtil'; import {t} from 'Util/LocalizerUtil'; import {getLogger} from 'Util/Logger'; @@ -53,7 +54,6 @@ import {User} from '../../../entity/User'; import {isProtocolOption, ProtocolOption} from '../../../guards/Protocol'; import {RootContext} from '../../../page/RootProvider'; import {TeamState} from '../../../team/TeamState'; -import {initFadingScrollbar} from '../../../ui/fadingScrollbar'; import {UserState} from '../../../user/UserState'; interface GroupCreationModalProps { diff --git a/src/script/components/Modals/PrimaryModal/PrimaryModal.tsx b/src/script/components/Modals/PrimaryModal/PrimaryModal.tsx index 97e9d5d1a5f..bdb560b90dc 100644 --- a/src/script/components/Modals/PrimaryModal/PrimaryModal.tsx +++ b/src/script/components/Modals/PrimaryModal/PrimaryModal.tsx @@ -23,12 +23,11 @@ import cx from 'classnames'; import {Icon} from 'Components/Icon'; import {ModalComponent} from 'Components/ModalComponent'; +import {initFadingScrollbar} from 'Util/DOM/fadingScrollbar'; import {usePrimaryModalState, showNextModalInQueue, defaultContent, removeCurrentModal} from './PrimaryModalState'; import {Action, PrimaryModalType} from './PrimaryModalTypes'; -import {initFadingScrollbar} from '../../../ui/fadingScrollbar'; - export const PrimaryModalComponent: FC = () => { const [inputValue, updateInputValue] = useState(''); const [passwordValue, updatePasswordValue] = useState(''); diff --git a/src/script/components/calling/CallingCell.tsx b/src/script/components/calling/CallingCell.tsx index 1a092ba18d3..cac32dde0c4 100644 --- a/src/script/components/calling/CallingCell.tsx +++ b/src/script/components/calling/CallingCell.tsx @@ -34,6 +34,7 @@ import {ClassifiedBar} from 'Components/input/ClassifiedBar'; import {ParticipantItem} from 'Components/list/ParticipantItem'; import {useAppMainState, ViewType} from 'src/script/page/state'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; +import {initFadingScrollbar} from 'Util/DOM/fadingScrollbar'; import {KEY} from 'Util/KeyboardUtil'; import {t} from 'Util/LocalizerUtil'; import {sortUsersByPriority} from 'Util/StringUtil'; @@ -49,7 +50,6 @@ import {generateConversationUrl} from '../../router/routeGenerator'; import {createNavigate, createNavigateKeyboard} from '../../router/routerBindings'; import {TeamState} from '../../team/TeamState'; import {ContextMenuEntry, showContextMenu} from '../../ui/ContextMenu'; -import {initFadingScrollbar} from '../../ui/fadingScrollbar'; import {CallActions, CallViewTab} from '../../view_model/CallingViewModel'; interface VideoCallProps { diff --git a/src/script/components/panel/EnrichedFields.test.tsx b/src/script/components/panel/EnrichedFields.test.tsx index a12ce9fd45d..cda4f105711 100644 --- a/src/script/components/panel/EnrichedFields.test.tsx +++ b/src/script/components/panel/EnrichedFields.test.tsx @@ -19,7 +19,6 @@ import {render, waitFor} from '@testing-library/react'; import type {RichInfo} from '@wireapp/api-client/lib/user/'; -import {act} from 'react-dom/test-utils'; import {User} from 'src/script/entity/User'; import {RichProfileRepository} from 'src/script/user/RichProfileRepository'; @@ -51,13 +50,9 @@ describe('EnrichedFields', () => { const {getAllByTestId} = render(); - await act(() => - waitFor(() => { - expect(richProfileRepository.getUserRichProfile).toHaveBeenCalled(); - }), - ); + await waitFor(() => getAllByTestId('item-enriched-key')); - expect(getAllByTestId('item-enriched-key')).toHaveLength(2); + expect(getAllByTestId('item-enriched-key')).toHaveLength(richInfo.fields!.length); }); it('displays the email if set on user', async () => { @@ -69,11 +64,7 @@ describe('EnrichedFields', () => { const {getAllByTestId} = render(); - await act(() => - waitFor(() => { - expect(richProfileRepository.getUserRichProfile).toHaveBeenCalled(); - }), - ); + await waitFor(() => getAllByTestId('item-enriched-key')); expect(getAllByTestId('item-enriched-key')).toHaveLength(3); }); @@ -85,13 +76,9 @@ describe('EnrichedFields', () => { const props = {richProfileRepository, showDomain: true, user}; - const {container} = render(); + const {container, getAllByTestId} = render(); - await act(() => - waitFor(() => { - expect(richProfileRepository.getUserRichProfile).toHaveBeenCalled(); - }), - ); + await waitFor(() => getAllByTestId('item-enriched-key')); const itemEnrichedValues = container.querySelectorAll( `[data-uie-name="item-enriched-value"][data-uie-value="${domain}"]`, @@ -107,13 +94,9 @@ describe('EnrichedFields', () => { const props = {richProfileRepository, user}; - const {container} = render(); + const {container, getAllByTestId} = render(); - await act(() => - waitFor(() => { - expect(richProfileRepository.getUserRichProfile).toHaveBeenCalled(); - }), - ); + await waitFor(() => getAllByTestId('item-enriched-key')); const itemEnrichedValues = container.querySelectorAll( `[data-uie-name="item-enriched-value"][data-uie-value="${domain}"]`, @@ -129,13 +112,9 @@ describe('EnrichedFields', () => { const props = {onFieldsLoaded, richProfileRepository, user}; - render(); + const {getAllByTestId} = render(); - await act(() => - waitFor(() => { - expect(richProfileRepository.getUserRichProfile).toHaveBeenCalled(); - }), - ); + await waitFor(() => getAllByTestId('item-enriched-key')); expect(onFieldsLoaded).toHaveBeenCalledWith(richInfo.fields); }); diff --git a/src/script/components/utils/InViewport.tsx b/src/script/components/utils/InViewport.tsx index fa256fea19c..f8cb0d36805 100644 --- a/src/script/components/utils/InViewport.tsx +++ b/src/script/components/utils/InViewport.tsx @@ -19,8 +19,8 @@ import React, {useEffect, useRef} from 'react'; -import {overlayedObserver} from '../../ui/overlayedObserver'; -import {viewportObserver} from '../../ui/viewportObserver'; +import {overlayedObserver} from 'Util/DOM/overlayedObserver'; +import {viewportObserver} from 'Util/DOM/viewportObserver'; interface InViewportParams { onVisible: () => void; diff --git a/src/script/conversation/ConversationRepository.ts b/src/script/conversation/ConversationRepository.ts index 0a3cacab929..c761e5a1b5a 100644 --- a/src/script/conversation/ConversationRepository.ts +++ b/src/script/conversation/ConversationRepository.ts @@ -49,7 +49,7 @@ import {flatten} from 'underscore'; import {Asset as ProtobufAsset, Confirmation, LegalHoldStatus} from '@wireapp/protocol-messaging'; import {WebAppEvents} from '@wireapp/webapp-events'; -import {TYPING_TIMEOUT, useTypingIndicatorState} from 'Components/InputBar/TypingIndicator'; +import {TYPING_TIMEOUT, useTypingIndicatorState} from 'Components/InputBar/components/TypingIndicator'; import {getNextItem} from 'Util/ArrayUtil'; import {allowsAllFiles, getFileExtensionOrName, isAllowedFile} from 'Util/FileTypeUtil'; import {replaceLink, t} from 'Util/LocalizerUtil'; diff --git a/src/script/page/LeftSidebar/panels/ListWrapper.tsx b/src/script/page/LeftSidebar/panels/ListWrapper.tsx index 1b5dd42ad06..808b0d83b4f 100644 --- a/src/script/page/LeftSidebar/panels/ListWrapper.tsx +++ b/src/script/page/LeftSidebar/panels/ListWrapper.tsx @@ -23,11 +23,10 @@ import {css} from '@emotion/react'; import {throttle} from 'underscore'; import {Icon} from 'Components/Icon'; +import {initFadingScrollbar} from 'Util/DOM/fadingScrollbar'; import {t} from 'Util/LocalizerUtil'; import {isScrollable, isScrolledBottom, isScrolledTop} from 'Util/scroll-helpers'; -import {initFadingScrollbar} from '../../../ui/fadingScrollbar'; - type LeftListWrapperProps = { /** A react element that will be inserted after the header but before the list */ before?: ReactElement; diff --git a/src/script/page/MainContent/panels/Collection/CollectionDetails.tsx b/src/script/page/MainContent/panels/Collection/CollectionDetails.tsx index 5a8efb05009..3ac2d93b967 100644 --- a/src/script/page/MainContent/panels/Collection/CollectionDetails.tsx +++ b/src/script/page/MainContent/panels/Collection/CollectionDetails.tsx @@ -21,6 +21,7 @@ import React, {Fragment} from 'react'; import {ContentMessage} from 'src/script/entity/message/ContentMessage'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; +import {initFadingScrollbar} from 'Util/DOM/fadingScrollbar'; import {t} from 'Util/LocalizerUtil'; import {formatLocale, isThisYear, isToday} from 'Util/TimeUtil'; import {noop} from 'Util/util'; @@ -28,7 +29,6 @@ import {noop} from 'Util/util'; import {CollectionItem} from './CollectionItem'; import {Conversation} from '../../../../entity/Conversation'; -import {initFadingScrollbar} from '../../../../ui/fadingScrollbar'; interface CollectionDetailsProps { conversation: Conversation; diff --git a/src/script/page/MainContent/panels/preferences/components/PreferencesPage.tsx b/src/script/page/MainContent/panels/preferences/components/PreferencesPage.tsx index 84fa27bb0d8..d68e06e98b9 100644 --- a/src/script/page/MainContent/panels/preferences/components/PreferencesPage.tsx +++ b/src/script/page/MainContent/panels/preferences/components/PreferencesPage.tsx @@ -23,7 +23,7 @@ import {IconButton, IconButtonVariant, useMatchMedia} from '@wireapp/react-ui-ki import {RootContext} from 'src/script/page/RootProvider'; import {useAppMainState, ViewType} from 'src/script/page/state'; -import {initFadingScrollbar} from 'src/script/ui/fadingScrollbar'; +import {initFadingScrollbar} from 'Util/DOM/fadingScrollbar'; interface PreferencesPageProps { children: React.ReactNode; diff --git a/src/script/page/RightSidebar/AddParticipants/AddParticipants.tsx b/src/script/page/RightSidebar/AddParticipants/AddParticipants.tsx index fcf56654582..a04f1240827 100644 --- a/src/script/page/RightSidebar/AddParticipants/AddParticipants.tsx +++ b/src/script/page/RightSidebar/AddParticipants/AddParticipants.tsx @@ -28,6 +28,7 @@ import {SearchInput} from 'Components/SearchInput'; import {ServiceList} from 'Components/ServiceList'; import {UserSearchableList} from 'Components/UserSearchableList'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; +import {initFadingScrollbar} from 'Util/DOM/fadingScrollbar'; import {handleKeyDown} from 'Util/KeyboardUtil'; import {t} from 'Util/LocalizerUtil'; import {matchQualifiedIds} from 'Util/QualifiedId'; @@ -43,7 +44,6 @@ import {ServiceEntity} from '../../../integration/ServiceEntity'; import {SearchRepository} from '../../../search/SearchRepository'; import {TeamRepository} from '../../../team/TeamRepository'; import {TeamState} from '../../../team/TeamState'; -import {initFadingScrollbar} from '../../../ui/fadingScrollbar'; import {generatePermissionHelpers} from '../../../user/UserPermission'; import {UserState} from '../../../user/UserState'; import {PanelHeader} from '../PanelHeader'; diff --git a/src/script/page/RightSidebar/ConversationDetails/ConversationDetails.tsx b/src/script/page/RightSidebar/ConversationDetails/ConversationDetails.tsx index 32fb31b44f5..68c6a76d799 100644 --- a/src/script/page/RightSidebar/ConversationDetails/ConversationDetails.tsx +++ b/src/script/page/RightSidebar/ConversationDetails/ConversationDetails.tsx @@ -28,6 +28,7 @@ import {ServiceDetails} from 'Components/panel/ServiceDetails'; import {ServiceList} from 'Components/ServiceList'; import {UserSearchableList} from 'Components/UserSearchableList'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; +import {initFadingScrollbar} from 'Util/DOM/fadingScrollbar'; import {t} from 'Util/LocalizerUtil'; import {sortUsersByPriority} from 'Util/StringUtil'; import {formatDuration} from 'Util/TimeUtil'; @@ -49,7 +50,6 @@ import {ServiceEntity} from '../../../integration/ServiceEntity'; import {SearchRepository} from '../../../search/SearchRepository'; import {TeamRepository} from '../../../team/TeamRepository'; import {TeamState} from '../../../team/TeamState'; -import {initFadingScrollbar} from '../../../ui/fadingScrollbar'; import {Shortcut} from '../../../ui/Shortcut'; import {ShortcutType} from '../../../ui/ShortcutType'; import {UserState} from '../../../user/UserState'; diff --git a/src/script/page/RightSidebar/ConversationParticipants/ConversationParticipants.tsx b/src/script/page/RightSidebar/ConversationParticipants/ConversationParticipants.tsx index 7d64ea70c44..2664d7a743f 100644 --- a/src/script/page/RightSidebar/ConversationParticipants/ConversationParticipants.tsx +++ b/src/script/page/RightSidebar/ConversationParticipants/ConversationParticipants.tsx @@ -22,6 +22,7 @@ import {FC, useMemo, useState} from 'react'; import {SearchInput} from 'Components/SearchInput'; import {UserSearchableList} from 'Components/UserSearchableList'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; +import {initFadingScrollbar} from 'Util/DOM/fadingScrollbar'; import {t} from 'Util/LocalizerUtil'; import {sortUsersByPriority} from 'Util/StringUtil'; @@ -31,7 +32,6 @@ import {User} from '../../../entity/User'; import {isServiceEntity} from '../../../guards/Service'; import {SearchRepository} from '../../../search/SearchRepository'; import {TeamRepository} from '../../../team/TeamRepository'; -import {initFadingScrollbar} from '../../../ui/fadingScrollbar'; import {PanelHeader} from '../PanelHeader'; import {PanelEntity, PanelState} from '../RightSidebar'; diff --git a/src/script/page/RightSidebar/GroupParticipantService/GroupParticipantService.tsx b/src/script/page/RightSidebar/GroupParticipantService/GroupParticipantService.tsx index cef852edae0..3053e3b1987 100644 --- a/src/script/page/RightSidebar/GroupParticipantService/GroupParticipantService.tsx +++ b/src/script/page/RightSidebar/GroupParticipantService/GroupParticipantService.tsx @@ -22,6 +22,7 @@ import {FC, useEffect} from 'react'; import {Icon} from 'Components/Icon'; import {ServiceDetails} from 'Components/panel/ServiceDetails'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; +import {initFadingScrollbar} from 'Util/DOM/fadingScrollbar'; import {handleKeyDown} from 'Util/KeyboardUtil'; import {t} from 'Util/LocalizerUtil'; import {matchQualifiedIds} from 'Util/QualifiedId'; @@ -30,7 +31,6 @@ import {Conversation} from '../../../entity/Conversation'; import {User} from '../../../entity/User'; import {IntegrationRepository} from '../../../integration/IntegrationRepository'; import {ServiceEntity} from '../../../integration/ServiceEntity'; -import {initFadingScrollbar} from '../../../ui/fadingScrollbar'; import {generatePermissionHelpers} from '../../../user/UserPermission'; import {UserState} from '../../../user/UserState'; import {ActionsViewModel} from '../../../view_model/ActionsViewModel'; diff --git a/src/script/page/RightSidebar/GroupParticipantUser/GroupParticipantUser.tsx b/src/script/page/RightSidebar/GroupParticipantUser/GroupParticipantUser.tsx index 2d175a4e190..ca203775d12 100644 --- a/src/script/page/RightSidebar/GroupParticipantUser/GroupParticipantUser.tsx +++ b/src/script/page/RightSidebar/GroupParticipantUser/GroupParticipantUser.tsx @@ -30,6 +30,7 @@ import {UserActions, Actions} from 'Components/panel/UserActions'; import {UserDetails} from 'Components/panel/UserDetails'; import {BaseToggle} from 'Components/toggle/BaseToggle'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; +import {initFadingScrollbar} from 'Util/DOM/fadingScrollbar'; import {handleKeyDown} from 'Util/KeyboardUtil'; import {t} from 'Util/LocalizerUtil'; @@ -40,7 +41,6 @@ import {User} from '../../../entity/User'; import {ClientEvent} from '../../../event/Client'; import {TeamRepository} from '../../../team/TeamRepository'; import {TeamState} from '../../../team/TeamState'; -import {initFadingScrollbar} from '../../../ui/fadingScrollbar'; import {UserState} from '../../../user/UserState'; import {ActionsViewModel} from '../../../view_model/ActionsViewModel'; import {PanelHeader} from '../PanelHeader'; diff --git a/src/script/page/RightSidebar/GuestServicesOptions/GuestServicesOptions.tsx b/src/script/page/RightSidebar/GuestServicesOptions/GuestServicesOptions.tsx index 7895d4ed78a..b2777bfd80f 100644 --- a/src/script/page/RightSidebar/GuestServicesOptions/GuestServicesOptions.tsx +++ b/src/script/page/RightSidebar/GuestServicesOptions/GuestServicesOptions.tsx @@ -21,6 +21,7 @@ import {FC, useState} from 'react'; import {PrimaryModal} from 'Components/Modals/PrimaryModal'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; +import {initFadingScrollbar} from 'Util/DOM/fadingScrollbar'; import {t} from 'Util/LocalizerUtil'; import {GuestOptions} from './components/GuestOptions'; @@ -31,7 +32,6 @@ import {ConversationRepository} from '../../../conversation/ConversationReposito import {Conversation} from '../../../entity/Conversation'; import {TeamRepository} from '../../../team/TeamRepository'; import {TeamState} from '../../../team/TeamState'; -import {initFadingScrollbar} from '../../../ui/fadingScrollbar'; import {PanelHeader} from '../PanelHeader'; interface GuestServicesOptionsProps { diff --git a/src/script/page/RightSidebar/MessageDetails/MessageDetails.tsx b/src/script/page/RightSidebar/MessageDetails/MessageDetails.tsx index a6f7f5578b3..1fafc45064c 100644 --- a/src/script/page/RightSidebar/MessageDetails/MessageDetails.tsx +++ b/src/script/page/RightSidebar/MessageDetails/MessageDetails.tsx @@ -28,6 +28,7 @@ import {WebAppEvents} from '@wireapp/webapp-events'; import {Icon} from 'Components/Icon'; import {UserSearchableList} from 'Components/UserSearchableList'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; +import {initFadingScrollbar} from 'Util/DOM/fadingScrollbar'; import {t} from 'Util/LocalizerUtil'; import {formatLocale} from 'Util/TimeUtil'; @@ -41,7 +42,6 @@ import {SuperType} from '../../../message/SuperType'; import {SearchRepository} from '../../../search/SearchRepository'; import {UserReactionMap} from '../../../storage'; import {TeamRepository} from '../../../team/TeamRepository'; -import {initFadingScrollbar} from '../../../ui/fadingScrollbar'; import {UserRepository} from '../../../user/UserRepository'; import {PanelHeader} from '../PanelHeader'; diff --git a/src/script/page/RightSidebar/Notifications/Notifications.tsx b/src/script/page/RightSidebar/Notifications/Notifications.tsx index e29b81bc5c1..54aedf9c928 100644 --- a/src/script/page/RightSidebar/Notifications/Notifications.tsx +++ b/src/script/page/RightSidebar/Notifications/Notifications.tsx @@ -20,11 +20,11 @@ import {useState, FC} from 'react'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; +import {initFadingScrollbar} from 'Util/DOM/fadingScrollbar'; import {t} from 'Util/LocalizerUtil'; import {NOTIFICATION_STATE, getNotificationText} from '../../../conversation/NotificationSetting'; import {Conversation} from '../../../entity/Conversation'; -import {initFadingScrollbar} from '../../../ui/fadingScrollbar'; import {ViewModelRepositories} from '../../../view_model/MainViewModel'; import {PreferencesRadio} from '../../MainContent/panels/preferences/components/PreferencesRadio'; import {PanelHeader} from '../PanelHeader'; diff --git a/src/script/page/RightSidebar/ParticipantDevices/ParticipantDevices.tsx b/src/script/page/RightSidebar/ParticipantDevices/ParticipantDevices.tsx index c9b55e26f67..02424423a21 100644 --- a/src/script/page/RightSidebar/ParticipantDevices/ParticipantDevices.tsx +++ b/src/script/page/RightSidebar/ParticipantDevices/ParticipantDevices.tsx @@ -20,10 +20,10 @@ import {FC} from 'react'; import {UserDevices, UserDevicesState, useUserDevicesHistory} from 'Components/UserDevices'; +import {initFadingScrollbar} from 'Util/DOM/fadingScrollbar'; import {t} from 'Util/LocalizerUtil'; import type {User} from '../../../entity/User'; -import {initFadingScrollbar} from '../../../ui/fadingScrollbar'; import {ViewModelRepositories} from '../../../view_model/MainViewModel'; import {PanelHeader} from '../PanelHeader'; diff --git a/src/script/page/RightSidebar/TimedMessages/TimedMessages.tsx b/src/script/page/RightSidebar/TimedMessages/TimedMessages.tsx index f8e193da7e8..f574383ae4e 100644 --- a/src/script/page/RightSidebar/TimedMessages/TimedMessages.tsx +++ b/src/script/page/RightSidebar/TimedMessages/TimedMessages.tsx @@ -20,12 +20,12 @@ import {FC, useEffect, useState} from 'react'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; +import {initFadingScrollbar} from 'Util/DOM/fadingScrollbar'; import {t} from 'Util/LocalizerUtil'; import {formatDuration} from 'Util/TimeUtil'; import {Conversation} from '../../../entity/Conversation'; import {EphemeralTimings} from '../../../ephemeral/EphemeralTimings'; -import {initFadingScrollbar} from '../../../ui/fadingScrollbar'; import {ViewModelRepositories} from '../../../view_model/MainViewModel'; import {PanelHeader} from '../PanelHeader'; diff --git a/src/script/ui/fadingScrollbar.ts b/src/script/util/DOM/fadingScrollbar.ts similarity index 100% rename from src/script/ui/fadingScrollbar.ts rename to src/script/util/DOM/fadingScrollbar.ts diff --git a/src/script/ui/onHitTopOrBottom.ts b/src/script/util/DOM/onHitTopOrBottom.ts similarity index 92% rename from src/script/ui/onHitTopOrBottom.ts rename to src/script/util/DOM/onHitTopOrBottom.ts index 92ce3bad183..6b13af0192d 100644 --- a/src/script/ui/onHitTopOrBottom.ts +++ b/src/script/util/DOM/onHitTopOrBottom.ts @@ -17,7 +17,11 @@ * */ -const onHitTopOrBottom = (scrollingElement: HTMLElement | null, onHitTop: () => void, onHitBottom: () => void) => { +export const onHitTopOrBottom = ( + scrollingElement: HTMLElement | null, + onHitTop: () => void, + onHitBottom: () => void, +) => { const onScroll = (event: Event) => { const element = event.target as HTMLElement; const scrollPosition = Math.ceil(element.scrollTop); @@ -55,5 +59,3 @@ const onHitTopOrBottom = (scrollingElement: HTMLElement | null, onHitTop: () => scrollingElement.addEventListener('wheel', onMouseWheel); } }; - -export {onHitTopOrBottom}; diff --git a/test/unit_tests/ui/overlayedObserverSpec.js b/src/script/util/DOM/overlayedObserver.test.ts similarity index 91% rename from test/unit_tests/ui/overlayedObserverSpec.js rename to src/script/util/DOM/overlayedObserver.test.ts index 8f972176fba..80315771d7c 100644 --- a/test/unit_tests/ui/overlayedObserverSpec.js +++ b/src/script/util/DOM/overlayedObserver.test.ts @@ -17,9 +17,9 @@ * */ -import {overlayedObserver} from 'src/script/ui/overlayedObserver'; +import {overlayedObserver} from './overlayedObserver'; -describe.skip('overlayedObserver', () => { +describe('overlayedObserver', () => { beforeEach(() => { jest.useFakeTimers(); }); @@ -38,6 +38,7 @@ describe.skip('overlayedObserver', () => { const element = document.createElement('div'); element.style.height = '10px'; document.body.appendChild(element); + document.elementFromPoint = () => element; overlayedObserver.onElementVisible(element, callbackSpy.onVisible); @@ -64,6 +65,7 @@ describe.skip('overlayedObserver', () => { element.style.width = '10px'; document.body.appendChild(element); document.body.appendChild(overlay); + document.elementFromPoint = () => overlay; overlayedObserver.onElementVisible(element, callbackSpy.onVisible); @@ -91,12 +93,14 @@ describe.skip('overlayedObserver', () => { element.style.width = '10px'; document.body.appendChild(element); document.body.appendChild(overlay); + document.elementFromPoint = () => overlay; overlayedObserver.onElementVisible(element, callbackSpy.onVisible); expect(callbackSpy.onVisible).not.toHaveBeenCalled(); document.body.removeChild(overlay); + document.elementFromPoint = () => element; jest.advanceTimersByTime(301); expect(callbackSpy.onVisible).toHaveBeenCalled(); diff --git a/src/script/ui/overlayedObserver.ts b/src/script/util/DOM/overlayedObserver.ts similarity index 100% rename from src/script/ui/overlayedObserver.ts rename to src/script/util/DOM/overlayedObserver.ts diff --git a/src/script/ui/resizeObserver.ts b/src/script/util/DOM/resizeObserver.ts similarity index 100% rename from src/script/ui/resizeObserver.ts rename to src/script/util/DOM/resizeObserver.ts diff --git a/src/script/ui/viewportObserver.ts b/src/script/util/DOM/viewportObserver.ts similarity index 100% rename from src/script/ui/viewportObserver.ts rename to src/script/util/DOM/viewportObserver.ts From e3982c63c7c9fdb2d9a5c34b38c30d4c71371cb0 Mon Sep 17 00:00:00 2001 From: Virgile <78490891+V-Gira@users.noreply.github.com> Date: Thu, 8 Dec 2022 17:30:32 +0100 Subject: [PATCH 112/329] runfix: prevent call button to stay on screen in responsive view [ACC-324] (#14278) * runfix: prevent call button to stay on screen in responsive view [ACC-324] --- src/script/components/TitleBar/TitleBar.tsx | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/script/components/TitleBar/TitleBar.tsx b/src/script/components/TitleBar/TitleBar.tsx index e189636a671..4875be43265 100644 --- a/src/script/components/TitleBar/TitleBar.tsx +++ b/src/script/components/TitleBar/TitleBar.tsx @@ -301,16 +301,17 @@ export const TitleBar: React.FC = ({ > {t('tooltipConversationSearch')} - - - - + {showCallControls && ( + + + + )} ) : (
    -
    + {(messageHtml || messageText) && (
    {messageHtml && -
    +
    )} diff --git a/src/script/components/calling/CallingCell.tsx b/src/script/components/calling/CallingCell.tsx index cac32dde0c4..7cfd3da154c 100644 --- a/src/script/components/calling/CallingCell.tsx +++ b/src/script/components/calling/CallingCell.tsx @@ -29,12 +29,12 @@ import {Avatar, AVATAR_SIZE} from 'Components/Avatar'; import {GroupAvatar} from 'Components/avatar/GroupAvatar'; import {Duration} from 'Components/calling/Duration'; import {GroupVideoGrid} from 'Components/calling/GroupVideoGrid'; +import {FadingScrollbar} from 'Components/FadingScrollbar'; import {Icon} from 'Components/Icon'; import {ClassifiedBar} from 'Components/input/ClassifiedBar'; import {ParticipantItem} from 'Components/list/ParticipantItem'; import {useAppMainState, ViewType} from 'src/script/page/state'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; -import {initFadingScrollbar} from 'Util/DOM/fadingScrollbar'; import {KEY} from 'Util/KeyboardUtil'; import {t} from 'Util/LocalizerUtil'; import {sortUsersByPriority} from 'Util/StringUtil'; @@ -473,7 +473,7 @@ const CallingCell: React.FC = ({ 'call-ui__participant-list__wrapper--active': showParticipants, })} > -
    +
      {participants .slice() @@ -498,7 +498,7 @@ const CallingCell: React.FC = ({ ))}
    -
    +
    )} diff --git a/src/script/page/LeftSidebar/panels/ListWrapper.tsx b/src/script/page/LeftSidebar/panels/ListWrapper.tsx index 808b0d83b4f..4757c943e99 100644 --- a/src/script/page/LeftSidebar/panels/ListWrapper.tsx +++ b/src/script/page/LeftSidebar/panels/ListWrapper.tsx @@ -22,8 +22,8 @@ import React, {ReactElement} from 'react'; import {css} from '@emotion/react'; import {throttle} from 'underscore'; +import {FadingScrollbar} from 'Components/FadingScrollbar'; import {Icon} from 'Components/Icon'; -import {initFadingScrollbar} from 'Util/DOM/fadingScrollbar'; import {t} from 'Util/LocalizerUtil'; import {isScrollable, isScrolledBottom, isScrolledTop} from 'Util/scroll-helpers'; @@ -109,17 +109,14 @@ const ListWrapper: React.FC = ({ )} {before ?? null} -
    { - initBorderedScroll(element); - initFadingScrollbar(element); - }} + ref={initBorderedScroll} > {children} -
    + {footer ?? null}
    ); diff --git a/src/script/page/MainContent/panels/Collection/CollectionDetails.tsx b/src/script/page/MainContent/panels/Collection/CollectionDetails.tsx index 3ac2d93b967..b07fd0c6b40 100644 --- a/src/script/page/MainContent/panels/Collection/CollectionDetails.tsx +++ b/src/script/page/MainContent/panels/Collection/CollectionDetails.tsx @@ -19,9 +19,9 @@ import React, {Fragment} from 'react'; +import {FadingScrollbar} from 'Components/FadingScrollbar'; import {ContentMessage} from 'src/script/entity/message/ContentMessage'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; -import {initFadingScrollbar} from 'Util/DOM/fadingScrollbar'; import {t} from 'Util/LocalizerUtil'; import {formatLocale, isThisYear, isToday} from 'Util/TimeUtil'; import {noop} from 'Util/util'; @@ -81,7 +81,7 @@ const CollectionDetails: React.FC = ({
    -
    +
    {groupByDate(messages).map(([groupName, groupMessages]) => { return ( @@ -99,7 +99,7 @@ const CollectionDetails: React.FC = ({ ); })}
    -
    +
    ); diff --git a/src/script/page/MainContent/panels/preferences/components/PreferencesPage.tsx b/src/script/page/MainContent/panels/preferences/components/PreferencesPage.tsx index d68e06e98b9..c1493b84ea3 100644 --- a/src/script/page/MainContent/panels/preferences/components/PreferencesPage.tsx +++ b/src/script/page/MainContent/panels/preferences/components/PreferencesPage.tsx @@ -21,9 +21,9 @@ import {useContext, FC} from 'react'; import {IconButton, IconButtonVariant, useMatchMedia} from '@wireapp/react-ui-kit'; +import {FadingScrollbar} from 'Components/FadingScrollbar'; import {RootContext} from 'src/script/page/RootProvider'; import {useAppMainState, ViewType} from 'src/script/page/state'; -import {initFadingScrollbar} from 'Util/DOM/fadingScrollbar'; interface PreferencesPageProps { children: React.ReactNode; @@ -62,9 +62,7 @@ const PreferencesPage: FC = ({title, children}) => { /> )} -
    - {children} -
    + {children} ); }; diff --git a/src/script/page/RightSidebar/AddParticipants/AddParticipants.tsx b/src/script/page/RightSidebar/AddParticipants/AddParticipants.tsx index a04f1240827..86b6c98daa5 100644 --- a/src/script/page/RightSidebar/AddParticipants/AddParticipants.tsx +++ b/src/script/page/RightSidebar/AddParticipants/AddParticipants.tsx @@ -23,12 +23,12 @@ import cx from 'classnames'; import {Button, ButtonVariant} from '@wireapp/react-ui-kit'; +import {FadingScrollbar} from 'Components/FadingScrollbar'; import {Icon} from 'Components/Icon'; import {SearchInput} from 'Components/SearchInput'; import {ServiceList} from 'Components/ServiceList'; import {UserSearchableList} from 'Components/UserSearchableList'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; -import {initFadingScrollbar} from 'Util/DOM/fadingScrollbar'; import {handleKeyDown} from 'Util/KeyboardUtil'; import {t} from 'Util/LocalizerUtil'; import {matchQualifiedIds} from 'Util/QualifiedId'; @@ -228,7 +228,7 @@ const AddParticipants: FC = ({ )} -
    + {isAddPeopleState && ( = ({ )} )} -
    + {isAddPeopleState && (
    diff --git a/src/script/page/RightSidebar/ConversationDetails/ConversationDetails.tsx b/src/script/page/RightSidebar/ConversationDetails/ConversationDetails.tsx index 68c6a76d799..84d4e228494 100644 --- a/src/script/page/RightSidebar/ConversationDetails/ConversationDetails.tsx +++ b/src/script/page/RightSidebar/ConversationDetails/ConversationDetails.tsx @@ -21,6 +21,7 @@ import {FC, useCallback, useEffect, useMemo, useState} from 'react'; import {RECEIPT_MODE} from '@wireapp/api-client/lib/conversation/data/'; +import {FadingScrollbar} from 'Components/FadingScrollbar'; import {Icon} from 'Components/Icon'; import {ConversationProtocolDetails} from 'Components/panel/ConversationProtocolDetails/ConversationProtocolDetails'; import {PanelActions} from 'Components/panel/PanelActions'; @@ -28,7 +29,6 @@ import {ServiceDetails} from 'Components/panel/ServiceDetails'; import {ServiceList} from 'Components/ServiceList'; import {UserSearchableList} from 'Components/UserSearchableList'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; -import {initFadingScrollbar} from 'Util/DOM/fadingScrollbar'; import {t} from 'Util/LocalizerUtil'; import {sortUsersByPriority} from 'Util/StringUtil'; import {formatDuration} from 'Util/TimeUtil'; @@ -270,7 +270,7 @@ const ConversationDetails: FC = ({ onToggleMute={toggleMute} /> -
    + {isSingleUserMode && isServiceMode && selectedService && } {isSingleUserMode && !isServiceMode && firstParticipant && ( @@ -411,7 +411,7 @@ const ConversationDetails: FC = ({ protocol={activeConversation.protocol} cipherSuite={activeConversation.cipherSuite} /> -
    +
    ); }; diff --git a/src/script/page/RightSidebar/ConversationParticipants/ConversationParticipants.tsx b/src/script/page/RightSidebar/ConversationParticipants/ConversationParticipants.tsx index 2664d7a743f..e97b89a7a36 100644 --- a/src/script/page/RightSidebar/ConversationParticipants/ConversationParticipants.tsx +++ b/src/script/page/RightSidebar/ConversationParticipants/ConversationParticipants.tsx @@ -19,10 +19,10 @@ import {FC, useMemo, useState} from 'react'; +import {FadingScrollbar} from 'Components/FadingScrollbar'; import {SearchInput} from 'Components/SearchInput'; import {UserSearchableList} from 'Components/UserSearchableList'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; -import {initFadingScrollbar} from 'Util/DOM/fadingScrollbar'; import {t} from 'Util/LocalizerUtil'; import {sortUsersByPriority} from 'Util/StringUtil'; @@ -100,7 +100,7 @@ const ConversationParticipants: FC = ({ forceDark /> -
    + = ({ selfFirst={false} noSelfInteraction /> -
    + ); diff --git a/src/script/page/RightSidebar/GroupParticipantService/GroupParticipantService.tsx b/src/script/page/RightSidebar/GroupParticipantService/GroupParticipantService.tsx index 3053e3b1987..fd500ffe2f5 100644 --- a/src/script/page/RightSidebar/GroupParticipantService/GroupParticipantService.tsx +++ b/src/script/page/RightSidebar/GroupParticipantService/GroupParticipantService.tsx @@ -19,10 +19,10 @@ import {FC, useEffect} from 'react'; +import {FadingScrollbar} from 'Components/FadingScrollbar'; import {Icon} from 'Components/Icon'; import {ServiceDetails} from 'Components/panel/ServiceDetails'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; -import {initFadingScrollbar} from 'Util/DOM/fadingScrollbar'; import {handleKeyDown} from 'Util/KeyboardUtil'; import {t} from 'Util/LocalizerUtil'; import {matchQualifiedIds} from 'Util/QualifiedId'; @@ -97,7 +97,7 @@ const GroupParticipantService: FC = ({
    -
    + {showActions && canChatWithServices() && ( @@ -133,7 +133,7 @@ const GroupParticipantService: FC = ({
    {t('groupParticipantActionRemove')}
    )} -
    + {isAddMode && (
    diff --git a/src/script/page/RightSidebar/GroupParticipantUser/GroupParticipantUser.tsx b/src/script/page/RightSidebar/GroupParticipantUser/GroupParticipantUser.tsx index ca203775d12..2f7b1c37e46 100644 --- a/src/script/page/RightSidebar/GroupParticipantUser/GroupParticipantUser.tsx +++ b/src/script/page/RightSidebar/GroupParticipantUser/GroupParticipantUser.tsx @@ -24,13 +24,13 @@ import {amplify} from 'amplify'; import {WebAppEvents} from '@wireapp/webapp-events'; +import {FadingScrollbar} from 'Components/FadingScrollbar'; import {Icon} from 'Components/Icon'; import {EnrichedFields} from 'Components/panel/EnrichedFields'; import {UserActions, Actions} from 'Components/panel/UserActions'; import {UserDetails} from 'Components/panel/UserDetails'; import {BaseToggle} from 'Components/toggle/BaseToggle'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; -import {initFadingScrollbar} from 'Util/DOM/fadingScrollbar'; import {handleKeyDown} from 'Util/KeyboardUtil'; import {t} from 'Util/LocalizerUtil'; @@ -145,7 +145,7 @@ const GroupParticipantUser: FC = ({ onClose={onClose} /> -
    + = ({ conversationRoleRepository={conversationRoleRepository} selfUser={selfUser} /> -
    +
    ); }; diff --git a/src/script/page/RightSidebar/GuestServicesOptions/GuestServicesOptions.tsx b/src/script/page/RightSidebar/GuestServicesOptions/GuestServicesOptions.tsx index b2777bfd80f..0e0dbf19207 100644 --- a/src/script/page/RightSidebar/GuestServicesOptions/GuestServicesOptions.tsx +++ b/src/script/page/RightSidebar/GuestServicesOptions/GuestServicesOptions.tsx @@ -19,9 +19,9 @@ import {FC, useState} from 'react'; +import {FadingScrollbar} from 'Components/FadingScrollbar'; import {PrimaryModal} from 'Components/Modals/PrimaryModal'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; -import {initFadingScrollbar} from 'Util/DOM/fadingScrollbar'; import {t} from 'Util/LocalizerUtil'; import {GuestOptions} from './components/GuestOptions'; @@ -106,7 +106,7 @@ const GuestServicesOptions: FC = ({ title={isGuest ? t('guestOptionsTitle') : t('servicesOptionsTitle')} /> -
    + {isGuest ? ( = ({ isToggleDisabled={isToggleDisabled} /> )} -
    + ); }; diff --git a/src/script/page/RightSidebar/MessageDetails/MessageDetails.tsx b/src/script/page/RightSidebar/MessageDetails/MessageDetails.tsx index 1fafc45064c..0e9e868bad6 100644 --- a/src/script/page/RightSidebar/MessageDetails/MessageDetails.tsx +++ b/src/script/page/RightSidebar/MessageDetails/MessageDetails.tsx @@ -25,10 +25,10 @@ import cx from 'classnames'; import {WebAppEvents} from '@wireapp/webapp-events'; +import {FadingScrollbar} from 'Components/FadingScrollbar'; import {Icon} from 'Components/Icon'; import {UserSearchableList} from 'Components/UserSearchableList'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; -import {initFadingScrollbar} from 'Util/DOM/fadingScrollbar'; import {t} from 'Util/LocalizerUtil'; import {formatLocale} from 'Util/TimeUtil'; @@ -217,7 +217,7 @@ const MessageDetails: FC = ({ )} -
    + {messageState === MESSAGE_STATES.RECEIPTS && ( = ({
    {t('messageDetailsReceiptsOff')}
    )} - +
    diff --git a/src/script/page/RightSidebar/Notifications/Notifications.tsx b/src/script/page/RightSidebar/Notifications/Notifications.tsx index 54aedf9c928..6137f76727d 100644 --- a/src/script/page/RightSidebar/Notifications/Notifications.tsx +++ b/src/script/page/RightSidebar/Notifications/Notifications.tsx @@ -19,8 +19,8 @@ import {useState, FC} from 'react'; +import {FadingScrollbar} from 'Components/FadingScrollbar'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; -import {initFadingScrollbar} from 'Util/DOM/fadingScrollbar'; import {t} from 'Util/LocalizerUtil'; import {NOTIFICATION_STATE, getNotificationText} from '../../../conversation/NotificationSetting'; @@ -60,7 +60,7 @@ const Notifications: FC = ({activeConversation, onGoBack, on closeBtnTitle={t('accessibility.closeNotificationsLabel')} /> -
    +
    = ({activeConversation, onGoBack, on

    {t('notificationSettingsDisclaimer')}

    -
    +
    ); }; diff --git a/src/script/page/RightSidebar/ParticipantDevices/ParticipantDevices.tsx b/src/script/page/RightSidebar/ParticipantDevices/ParticipantDevices.tsx index 02424423a21..da79fcccdf8 100644 --- a/src/script/page/RightSidebar/ParticipantDevices/ParticipantDevices.tsx +++ b/src/script/page/RightSidebar/ParticipantDevices/ParticipantDevices.tsx @@ -19,8 +19,8 @@ import {FC} from 'react'; +import {FadingScrollbar} from 'Components/FadingScrollbar'; import {UserDevices, UserDevicesState, useUserDevicesHistory} from 'Components/UserDevices'; -import {initFadingScrollbar} from 'Util/DOM/fadingScrollbar'; import {t} from 'Util/LocalizerUtil'; import type {User} from '../../../entity/User'; @@ -53,7 +53,7 @@ const ParticipantDevices: FC = ({repositories, onClose, goBackUie="go-back-participant-devices" /> -
    + = ({repositories, onClose, goTo={history.goTo} user={user} /> -
    +
    ); }; diff --git a/src/script/page/RightSidebar/TimedMessages/TimedMessages.tsx b/src/script/page/RightSidebar/TimedMessages/TimedMessages.tsx index f574383ae4e..0f484f10d9c 100644 --- a/src/script/page/RightSidebar/TimedMessages/TimedMessages.tsx +++ b/src/script/page/RightSidebar/TimedMessages/TimedMessages.tsx @@ -19,8 +19,8 @@ import {FC, useEffect, useState} from 'react'; +import {FadingScrollbar} from 'Components/FadingScrollbar'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; -import {initFadingScrollbar} from 'Util/DOM/fadingScrollbar'; import {t} from 'Util/LocalizerUtil'; import {formatDuration} from 'Util/TimeUtil'; @@ -91,7 +91,7 @@ const TimedMessages: FC = ({activeConversation, onClose goBackUie="go-back-timed-messages-options" /> -
    + {messageTimes.map(({text, isCustom, value}) => (
    + ); }; diff --git a/src/script/util/DOM/fadingScrollbar.ts b/src/script/util/DOM/fadingScrollbar.ts deleted file mode 100644 index 87119632faa..00000000000 --- a/src/script/util/DOM/fadingScrollbar.ts +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Wire - * Copyright (C) 2021 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 {debounce} from 'underscore'; - -const config = { - ANIMATION_SPEED: 0.05, - DEBOUNCE_THRESHOLD: 1000, -}; - -export const initFadingScrollbar = (element: HTMLElement | null): void => { - if (!element) { - return; - } - - function parseColor(color: string) { - const el = document.body.appendChild(document.createElement('thiselementdoesnotexist')); - el.style.color = color; - const col = getComputedStyle(el).color; - document.body.removeChild(el); - const [, r, g, b, a = 1] = /rgba?\((\d+), *(\d+), *(\d+),? *(\d*\.?\d*)?\)/.exec(col) ?? [0, 0, 0, 0, 1]; - return [+r, +g, +b, +a]; - } - - const initialColor = parseColor(window.getComputedStyle(element).getPropertyValue('--scrollbar-color')); - const currentColor = initialColor.slice(); - let state = 'idle'; - let animating = false; - - function setAnimationState(newState: string) { - state = newState; - if (!animating) { - animate(); - } - } - - function animate() { - switch (state) { - case 'fadein': - fadeStep(config.ANIMATION_SPEED); - break; - case 'fadeout': - fadeStep(-config.ANIMATION_SPEED); - break; - - default: - animating = false; - return; - } - animating = true; - window.requestAnimationFrame(animate); - } - - const fadeStep = (delta: number) => { - const alphaChanelIndex = 3; - const initialAlpha = initialColor[alphaChanelIndex]; - const currentAlpha = currentColor[alphaChanelIndex]; - const hasAppeared = delta > 0 && currentAlpha >= initialAlpha; - const hasDisappeared = delta < 0 && currentAlpha <= 0; - if (hasAppeared || hasDisappeared) { - return setAnimationState('idle'); - } - currentColor[alphaChanelIndex] += delta; - element.style.setProperty('--scrollbar-color', `rgba(${currentColor})`); - }; - const fadeIn = () => setAnimationState('fadein'); - const fadeOut = () => setAnimationState('fadeout'); - const debouncedFadeOut = debounce(fadeOut, config.DEBOUNCE_THRESHOLD); - const fadeInIdle = () => { - fadeIn(); - debouncedFadeOut(); - }; - - const events = { - mouseenter: fadeIn, - mouseleave: fadeOut, - mousemove: fadeInIdle, - scroll: fadeInIdle, - }; - - Object.entries(events).forEach(([eventName, handler]) => element.addEventListener(eventName, handler)); -}; From 90c28f5f7996842a212f78f408d0ea38e95dc806 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 11 Dec 2022 15:11:33 +0000 Subject: [PATCH 117/329] chore(deps): Bump @wireapp/commons from 5.0.3 to 5.0.4 in /server (#14285) Bumps [@wireapp/commons](https://github.com/wireapp/wire-web-packages) from 5.0.3 to 5.0.4. - [Release notes](https://github.com/wireapp/wire-web-packages/releases) - [Commits](https://github.com/wireapp/wire-web-packages/compare/@wireapp/commons@5.0.3...@wireapp/commons@5.0.4) --- updated-dependencies: - dependency-name: "@wireapp/commons" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- server/package.json | 2 +- server/yarn.lock | 23 ++++++----------------- 2 files changed, 7 insertions(+), 18 deletions(-) diff --git a/server/package.json b/server/package.json index 293125593a2..a9422a41fd3 100644 --- a/server/package.json +++ b/server/package.json @@ -4,7 +4,7 @@ "main": "dist/index.js", "license": "GPL-3.0", "dependencies": { - "@wireapp/commons": "5.0.3", + "@wireapp/commons": "5.0.4", "dotenv": "16.0.3", "dotenv-extended": "2.9.0", "express": "4.18.2", diff --git a/server/yarn.lock b/server/yarn.lock index 08f7d7e4792..8aa9f2d6286 100644 --- a/server/yarn.lock +++ b/server/yarn.lock @@ -1440,15 +1440,15 @@ __metadata: languageName: node linkType: hard -"@wireapp/commons@npm:5.0.3": - version: 5.0.3 - resolution: "@wireapp/commons@npm:5.0.3" +"@wireapp/commons@npm:5.0.4": + version: 5.0.4 + resolution: "@wireapp/commons@npm:5.0.4" dependencies: ansi-regex: 5.0.1 - fs-extra: 10.1.0 + fs-extra: 11.1.0 logdown: 3.3.1 platform: 1.3.6 - checksum: cf69ac8d0c3c116b0ccde13cee46d3c6623f36c395f449a73ac4dbb602aff229abb86b0a811b3cc91e8773ee9c6892ffc455612aa876009ddba63f782b73e5b0 + checksum: 714285b048d4c8b708d662b55e78c0fec1a6fa8c976c78fef420b4325c91087af8f32551850c78cea947710bad8b1ac288e21006f62cd982fe01a6f4983b1b24 languageName: node linkType: hard @@ -2811,17 +2811,6 @@ __metadata: languageName: node linkType: hard -"fs-extra@npm:10.1.0": - version: 10.1.0 - resolution: "fs-extra@npm:10.1.0" - dependencies: - graceful-fs: ^4.2.0 - jsonfile: ^6.0.1 - universalify: ^2.0.0 - checksum: dc94ab37096f813cc3ca12f0f1b5ad6744dfed9ed21e953d72530d103cea193c2f81584a39e9dee1bea36de5ee66805678c0dddc048e8af1427ac19c00fffc50 - languageName: node - linkType: hard - "fs-extra@npm:11.1.0": version: 11.1.0 resolution: "fs-extra@npm:11.1.0" @@ -6011,7 +6000,7 @@ __metadata: "@types/hbs": 4.0.1 "@types/jest": ^29.2.4 "@types/node": 12.20.55 - "@wireapp/commons": 5.0.3 + "@wireapp/commons": 5.0.4 dotenv: 16.0.3 dotenv-extended: 2.9.0 express: 4.18.2 From ec1be0880e7a5f1c751b9bd3a53cc9102e9beffc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 11 Dec 2022 15:11:50 +0000 Subject: [PATCH 118/329] chore(deps-dev): Bump typescript from 4.9.3 to 4.9.4 in /server (#14284) Bumps [typescript](https://github.com/Microsoft/TypeScript) from 4.9.3 to 4.9.4. - [Release notes](https://github.com/Microsoft/TypeScript/releases) - [Commits](https://github.com/Microsoft/TypeScript/compare/v4.9.3...v4.9.4) --- updated-dependencies: - dependency-name: typescript dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] 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 a9422a41fd3..b34e9389fa8 100644 --- a/server/package.json +++ b/server/package.json @@ -32,7 +32,7 @@ "@types/node": "12.20.55", "jest": "29.3.1", "rimraf": "3.0.2", - "typescript": "4.9.3" + "typescript": "4.9.4" }, "scripts": { "build": "yarn clean && tsc && yarn copy-assets && yarn create-commit-sha && yarn create-version-file", diff --git a/server/yarn.lock b/server/yarn.lock index 8aa9f2d6286..18ba48b99ad 100644 --- a/server/yarn.lock +++ b/server/yarn.lock @@ -5794,23 +5794,23 @@ __metadata: languageName: node linkType: hard -"typescript@npm:4.9.3": - version: 4.9.3 - resolution: "typescript@npm:4.9.3" +"typescript@npm:4.9.4": + version: 4.9.4 + resolution: "typescript@npm:4.9.4" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 17b8f816050b412403e38d48eef0e893deb6be522d6dc7caf105e54a72e34daf6835c447735fd2b28b66784e72bfbf87f627abb4818a8e43d1fa8106396128dc + checksum: e782fb9e0031cb258a80000f6c13530288c6d63f1177ed43f770533fdc15740d271554cdae86701c1dd2c83b082cea808b07e97fd68b38a172a83dbf9e0d0ef9 languageName: node linkType: hard -"typescript@patch:typescript@4.9.3#~builtin": - version: 4.9.3 - resolution: "typescript@patch:typescript@npm%3A4.9.3#~builtin::version=4.9.3&hash=a1c5e5" +"typescript@patch:typescript@4.9.4#~builtin": + version: 4.9.4 + resolution: "typescript@patch:typescript@npm%3A4.9.4#~builtin::version=4.9.4&hash=a1c5e5" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: ef65c22622d864497d0a0c5db693523329b3284c15fe632e93ad9aa059e8dc38ef3bd767d6f26b1e5ecf9446f49bd0f6c4e5714a2eeaf352805dc002479843d1 + checksum: 37f6e2c3c5e2aa5934b85b0fddbf32eeac8b1bacf3a5b51d01946936d03f5377fe86255d4e5a4ae628fd0cd553386355ad362c57f13b4635064400f3e8e05b9d languageName: node linkType: hard @@ -6018,7 +6018,7 @@ __metadata: opn: 6.0.0 pm2: 5.2.2 rimraf: 3.0.2 - typescript: 4.9.3 + typescript: 4.9.4 languageName: unknown linkType: soft From 59fef8f860fbacce4ac00e004a25fc19be25f889 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 11 Dec 2022 15:12:35 +0000 Subject: [PATCH 119/329] chore(deps-dev): Bump postcss-import from 15.0.1 to 15.1.0 (#14287) Bumps [postcss-import](https://github.com/postcss/postcss-import) from 15.0.1 to 15.1.0. - [Release notes](https://github.com/postcss/postcss-import/releases) - [Changelog](https://github.com/postcss/postcss-import/blob/master/CHANGELOG.md) - [Commits](https://github.com/postcss/postcss-import/compare/15.0.1...15.1.0) --- updated-dependencies: - dependency-name: postcss-import dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] 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 3bd778b37b4..d9510d1eb1e 100644 --- a/package.json +++ b/package.json @@ -147,7 +147,7 @@ "os-browserify": "0.3.0", "path-browserify": "1.0.1", "postcss": "8.4.19", - "postcss-import": "^15.0.1", + "postcss-import": "^15.1.0", "postcss-less": "6.0.0", "postcss-loader": "^7.0.2", "postcss-preset-env": "^7.8.3", diff --git a/yarn.lock b/yarn.lock index 8d6f9ba6ffc..caccb0de404 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12433,16 +12433,16 @@ __metadata: languageName: node linkType: hard -"postcss-import@npm:^15.0.1": - version: 15.0.1 - resolution: "postcss-import@npm:15.0.1" +"postcss-import@npm:^15.1.0": + version: 15.1.0 + resolution: "postcss-import@npm:15.1.0" dependencies: postcss-value-parser: ^4.0.0 read-cache: ^1.0.0 resolve: ^1.1.7 peerDependencies: postcss: ^8.0.0 - checksum: c673a0247525b3ad9f29d40605866968f2d2525cd107f287171c3baad496385618419d0e0565a792eefb7192311d54d40b2837409cfe2451371a7ef1d0da5125 + checksum: 7bd04bd8f0235429009d0022cbf00faebc885de1d017f6d12ccb1b021265882efc9302006ba700af6cab24c46bfa2f3bc590be3f9aee89d064944f171b04e2a3 languageName: node linkType: hard @@ -16317,7 +16317,7 @@ __metadata: path-browserify: 1.0.1 platform: 1.3.6 postcss: 8.4.19 - postcss-import: ^15.0.1 + postcss-import: ^15.1.0 postcss-less: 6.0.0 postcss-loader: ^7.0.2 postcss-preset-env: ^7.8.3 From ef03e0dfd1bc7a934d9b72ec68b0f410f2b2f707 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 11 Dec 2022 15:13:16 +0000 Subject: [PATCH 120/329] chore(deps-dev): Bump webpack-cli from 5.0.0 to 5.0.1 (#14288) Bumps [webpack-cli](https://github.com/webpack/webpack-cli) from 5.0.0 to 5.0.1. - [Release notes](https://github.com/webpack/webpack-cli/releases) - [Changelog](https://github.com/webpack/webpack-cli/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack/webpack-cli/compare/webpack-cli@5.0.0...webpack-cli@5.0.1) --- updated-dependencies: - dependency-name: webpack-cli dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 40 ++++++++++++++++++++-------------------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/package.json b/package.json index d9510d1eb1e..9b9e92dc147 100644 --- a/package.json +++ b/package.json @@ -171,7 +171,7 @@ "tsc-watch": "5.0.3", "typescript": "^4.9.3", "webpack": "5.75.0", - "webpack-cli": "5.0.0", + "webpack-cli": "5.0.1", "webpack-dev-middleware": "6.0.1", "webpack-hot-middleware": "2.25.3", "workbox-webpack-plugin": "6.5.4" diff --git a/yarn.lock b/yarn.lock index caccb0de404..641f278e241 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4001,36 +4001,36 @@ __metadata: languageName: node linkType: hard -"@webpack-cli/configtest@npm:^2.0.0": - version: 2.0.0 - resolution: "@webpack-cli/configtest@npm:2.0.0" +"@webpack-cli/configtest@npm:^2.0.1": + version: 2.0.1 + resolution: "@webpack-cli/configtest@npm:2.0.1" peerDependencies: webpack: 5.x.x webpack-cli: 5.x.x - checksum: 7d1977c833c4dcd7cc30a6873bf5f79564a194e4799bcdaf8158081595409adf64e3179beada4f7b6522086c8e18ee802f7b505692d6359aab6503e8caa82de8 + checksum: 15d0ca835f2e16ec99e9f295f07b676435b9e706d7700df0ad088692fea065e34772fc44b96a4f6a86178b9ca8cf1ff941fbce15269587cf0925d70b18928cea languageName: node linkType: hard -"@webpack-cli/info@npm:^2.0.0": - version: 2.0.0 - resolution: "@webpack-cli/info@npm:2.0.0" +"@webpack-cli/info@npm:^2.0.1": + version: 2.0.1 + resolution: "@webpack-cli/info@npm:2.0.1" peerDependencies: webpack: 5.x.x webpack-cli: 5.x.x - checksum: d354d50dbef180066279b548e91b84372a99e1026fa1c228dcb4a6923a6aefc76e8a9c4e328e048732dc086c60fab967ff323690f170cc6a3c1a83c06bbf043e + checksum: b8fba49fee10d297c2affb0b064c9a81e9038d75517c6728fb85f9fb254cae634e5d33e696dac5171e6944ae329d85fddac72f781c7d833f7e9dfe43151ce60d languageName: node linkType: hard -"@webpack-cli/serve@npm:^2.0.0": - version: 2.0.0 - resolution: "@webpack-cli/serve@npm:2.0.0" +"@webpack-cli/serve@npm:^2.0.1": + version: 2.0.1 + resolution: "@webpack-cli/serve@npm:2.0.1" peerDependencies: webpack: 5.x.x webpack-cli: 5.x.x peerDependenciesMeta: webpack-dev-server: optional: true - checksum: d5cd72589d3563e21dedbd9e05102ef87f7e325a1de15fb7db0906132440556920719ce012e0f052efd1bc4c1fbaf3fb123552c5f3476339657ebf29c5c81732 + checksum: 75c55f8398dd60e4821f81bec6e96287cebb3ab1837ef016779bc2f0c76a1d29c45b99e53daa99ba1fa156b5e2b61c19abf58098de20c2b58391b1f496ecc145 languageName: node linkType: hard @@ -15938,14 +15938,14 @@ __metadata: languageName: node linkType: hard -"webpack-cli@npm:5.0.0": - version: 5.0.0 - resolution: "webpack-cli@npm:5.0.0" +"webpack-cli@npm:5.0.1": + version: 5.0.1 + resolution: "webpack-cli@npm:5.0.1" dependencies: "@discoveryjs/json-ext": ^0.5.0 - "@webpack-cli/configtest": ^2.0.0 - "@webpack-cli/info": ^2.0.0 - "@webpack-cli/serve": ^2.0.0 + "@webpack-cli/configtest": ^2.0.1 + "@webpack-cli/info": ^2.0.1 + "@webpack-cli/serve": ^2.0.1 colorette: ^2.0.14 commander: ^9.4.1 cross-spawn: ^7.0.3 @@ -15966,7 +15966,7 @@ __metadata: optional: true bin: webpack-cli: bin/cli.js - checksum: 514874b6625d5a0077d9f52fe67dd0528115823d15612dbdc99fece271d26825fbedd3e7b209ed7726edc8528c0e7f787acbba57929ac4cb6d0618ec1c834933 + checksum: b1544eea669442e78c3dba9f79c0f8d0136759b8b2fe9cd32c0d410250fd719988ae037778ba88993215d44971169f2c268c0c934068be561711615f1951bd53 languageName: node linkType: hard @@ -16357,7 +16357,7 @@ __metadata: underscore: 1.13.6 uuidjs: 4.2.12 webpack: 5.75.0 - webpack-cli: 5.0.0 + webpack-cli: 5.0.1 webpack-dev-middleware: 6.0.1 webpack-hot-middleware: 2.25.3 webrtc-adapter: 6.4.8 From 1a82e447ba965df849d0372ee0cafdc46780bcff Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 11 Dec 2022 15:14:32 +0000 Subject: [PATCH 121/329] chore(deps-dev): Bump prettier from 2.8.0 to 2.8.1 (#14290) Bumps [prettier](https://github.com/prettier/prettier) from 2.8.0 to 2.8.1. - [Release notes](https://github.com/prettier/prettier/releases) - [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md) - [Commits](https://github.com/prettier/prettier/compare/2.8.0...2.8.1) --- updated-dependencies: - dependency-name: prettier dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] 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 9b9e92dc147..3f0077543af 100644 --- a/package.json +++ b/package.json @@ -152,7 +152,7 @@ "postcss-loader": "^7.0.2", "postcss-preset-env": "^7.8.3", "postcss-scss": "4.0.6", - "prettier": "^2.8.0", + "prettier": "^2.8.1", "raf": "3.4.1", "redux-devtools-extension": "2.13.9", "redux-mock-store": "1.5.4", diff --git a/yarn.lock b/yarn.lock index 641f278e241..c95253947b3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13025,12 +13025,12 @@ __metadata: languageName: node linkType: hard -"prettier@npm:^2.8.0": - version: 2.8.0 - resolution: "prettier@npm:2.8.0" +"prettier@npm:^2.8.1": + version: 2.8.1 + resolution: "prettier@npm:2.8.1" bin: prettier: bin-prettier.js - checksum: 72004ce0cc9bb097daf3e3833f62495768724392c1d5b178dd47372337616e9e50ecbb0804f236596223f7b5eb1bbe69cefc8957dca21112c5777e77ef73a564 + checksum: 4f21a0f1269f76fb36f54e9a8a1ea4c11e27478958bf860661fb4b6d7ac69aac1581f8724fa98ea3585e56d42a2ea317a17ff6e3324f40cb11ff9e20b73785cc languageName: node linkType: hard @@ -16322,7 +16322,7 @@ __metadata: postcss-loader: ^7.0.2 postcss-preset-env: ^7.8.3 postcss-scss: 4.0.6 - prettier: ^2.8.0 + prettier: ^2.8.1 raf: 3.4.1 react: 18.2.0 react-dom: 18.2.0 From d837a4a2226d82c7a90b18a166e996f89c8b64fe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 11 Dec 2022 15:15:53 +0000 Subject: [PATCH 122/329] chore(deps-dev): Bump @wireapp/copy-config from 2.0.3 to 2.0.4 (#14292) Bumps [@wireapp/copy-config](https://github.com/wireapp/wire-web-packages) from 2.0.3 to 2.0.4. - [Release notes](https://github.com/wireapp/wire-web-packages/releases) - [Commits](https://github.com/wireapp/wire-web-packages/compare/@wireapp/copy-config@2.0.3...@wireapp/copy-config@2.0.4) --- updated-dependencies: - dependency-name: "@wireapp/copy-config" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 66 +++++++++++++++++----------------------------------- 2 files changed, 22 insertions(+), 46 deletions(-) diff --git a/package.json b/package.json index 3f0077543af..1842ee908cc 100644 --- a/package.json +++ b/package.json @@ -92,7 +92,7 @@ "@types/webpack-env": "1.18.0", "@typescript-eslint/eslint-plugin": "^5.45.0", "@typescript-eslint/parser": "^5.45.0", - "@wireapp/copy-config": "2.0.3", + "@wireapp/copy-config": "2.0.4", "@wireapp/eslint-config": "2.1.0", "@wireapp/prettier-config": "0.5.2", "@wireapp/store-engine": "^5.0.3", diff --git a/yarn.lock b/yarn.lock index c95253947b3..0a1239f6888 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4079,19 +4079,19 @@ __metadata: languageName: node linkType: hard -"@wireapp/copy-config@npm:2.0.3": - version: 2.0.3 - resolution: "@wireapp/copy-config@npm:2.0.3" +"@wireapp/copy-config@npm:2.0.4": + version: 2.0.4 + resolution: "@wireapp/copy-config@npm:2.0.4" dependencies: - axios: 1.1.2 + axios: 1.2.1 copy: 0.3.2 - cosmiconfig: 7.0.1 - fs-extra: 10.1.0 + cosmiconfig: 8.0.0 + fs-extra: 11.1.0 jszip: 3.10.1 logdown: 3.3.1 bin: copy-config: lib/cli.js - checksum: 3af6008b9050a12f87e71c9fd8af2b391bfca54c8c502c312595e18f64018d9d75150552061b74a724248ec41396b3bf185c18f7bb3b38109ac27f6055652448 + checksum: 9ab53638d75bdd4c07b103ca77da8614c57c5b53a2e01a64d7f8cba6816e5a3bf8479b207be6a628950cf2d1bc100fb2c73dba96c7fdf046de1d588e78c2670f languageName: node linkType: hard @@ -4935,17 +4935,6 @@ __metadata: languageName: node linkType: hard -"axios@npm:1.1.2": - version: 1.1.2 - resolution: "axios@npm:1.1.2" - dependencies: - follow-redirects: ^1.15.0 - form-data: ^4.0.0 - proxy-from-env: ^1.1.0 - checksum: 136c25a5031aa2845fdbda3006c36888bbe351b11d1195f1f898a23c5df1430febbdb1ad034a61f27967e83762d5b5a3e851fff8a363cb4badeb883f8ff21461 - languageName: node - linkType: hard - "axios@npm:1.2.1": version: 1.2.1 resolution: "axios@npm:1.2.1" @@ -5933,16 +5922,15 @@ __metadata: languageName: node linkType: hard -"cosmiconfig@npm:7.0.1": - version: 7.0.1 - resolution: "cosmiconfig@npm:7.0.1" +"cosmiconfig@npm:8.0.0, cosmiconfig@npm:^8.0.0": + version: 8.0.0 + resolution: "cosmiconfig@npm:8.0.0" dependencies: - "@types/parse-json": ^4.0.0 import-fresh: ^3.2.1 + js-yaml: ^4.1.0 parse-json: ^5.0.0 path-type: ^4.0.0 - yaml: ^1.10.0 - checksum: 4be63e7117955fd88333d7460e4c466a90f556df6ef34efd59034d2463484e339666c41f02b523d574a797ec61f4a91918c5b89a316db2ea2f834e0d2d09465b + checksum: ff4cdf89ac1ae52e7520816622c21a9e04380d04b82d653f5139ec581aa4f7f29e096d46770bc76c4a63c225367e88a1dfa233ea791669a35101f5f9b972c7d1 languageName: node linkType: hard @@ -5959,18 +5947,6 @@ __metadata: languageName: node linkType: hard -"cosmiconfig@npm:^8.0.0": - version: 8.0.0 - resolution: "cosmiconfig@npm:8.0.0" - dependencies: - import-fresh: ^3.2.1 - js-yaml: ^4.1.0 - parse-json: ^5.0.0 - path-type: ^4.0.0 - checksum: ff4cdf89ac1ae52e7520816622c21a9e04380d04b82d653f5139ec581aa4f7f29e096d46770bc76c4a63c225367e88a1dfa233ea791669a35101f5f9b972c7d1 - languageName: node - linkType: hard - "countly-sdk-web@npm:22.6.4": version: 22.6.4 resolution: "countly-sdk-web@npm:22.6.4" @@ -7968,25 +7944,25 @@ __metadata: languageName: node linkType: hard -"fs-extra@npm:10.1.0, fs-extra@npm:^10.1.0": - version: 10.1.0 - resolution: "fs-extra@npm:10.1.0" +"fs-extra@npm:11.1.0": + version: 11.1.0 + resolution: "fs-extra@npm:11.1.0" dependencies: graceful-fs: ^4.2.0 jsonfile: ^6.0.1 universalify: ^2.0.0 - checksum: dc94ab37096f813cc3ca12f0f1b5ad6744dfed9ed21e953d72530d103cea193c2f81584a39e9dee1bea36de5ee66805678c0dddc048e8af1427ac19c00fffc50 + checksum: 5ca476103fa1f5ff4a9b3c4f331548f8a3c1881edaae323a4415d3153b5dc11dc6a981c8d1dd93eec8367ceee27b53f8bd27eecbbf66ffcdd04927510c171e7f languageName: node linkType: hard -"fs-extra@npm:11.1.0": - version: 11.1.0 - resolution: "fs-extra@npm:11.1.0" +"fs-extra@npm:^10.1.0": + version: 10.1.0 + resolution: "fs-extra@npm:10.1.0" dependencies: graceful-fs: ^4.2.0 jsonfile: ^6.0.1 universalify: ^2.0.0 - checksum: 5ca476103fa1f5ff4a9b3c4f331548f8a3c1881edaae323a4415d3153b5dc11dc6a981c8d1dd93eec8367ceee27b53f8bd27eecbbf66ffcdd04927510c171e7f + checksum: dc94ab37096f813cc3ca12f0f1b5ad6744dfed9ed21e953d72530d103cea193c2f81584a39e9dee1bea36de5ee66805678c0dddc048e8af1427ac19c00fffc50 languageName: node linkType: hard @@ -16237,7 +16213,7 @@ __metadata: "@typescript-eslint/eslint-plugin": ^5.45.0 "@typescript-eslint/parser": ^5.45.0 "@wireapp/avs": 8.2.17 - "@wireapp/copy-config": 2.0.3 + "@wireapp/copy-config": 2.0.4 "@wireapp/core": 37.3.0 "@wireapp/eslint-config": 2.1.0 "@wireapp/prettier-config": 0.5.2 From 2a6bd7a5e534cc53499739cb9b5a98b8f5a7feaf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 11 Dec 2022 15:18:15 +0000 Subject: [PATCH 123/329] chore(deps-dev): Bump caniuse-lite from 1.0.30001436 to 1.0.30001439 (#14293) Bumps [caniuse-lite](https://github.com/browserslist/caniuse-lite) from 1.0.30001436 to 1.0.30001439. - [Release notes](https://github.com/browserslist/caniuse-lite/releases) - [Commits](https://github.com/browserslist/caniuse-lite/compare/1.0.30001436...1.0.30001439) --- updated-dependencies: - dependency-name: caniuse-lite dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] 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 1842ee908cc..577a1741c68 100644 --- a/package.json +++ b/package.json @@ -100,7 +100,7 @@ "archiver": "^5.3.1", "autoprefixer": "^10.4.13", "babel-loader": "9.1.0", - "caniuse-lite": "^1.0.30001436", + "caniuse-lite": "^1.0.30001439", "cross-env": "7.0.3", "cspell": "6.16.0", "css-loader": "^6.7.2", diff --git a/yarn.lock b/yarn.lock index 0a1239f6888..ee2e6175b2b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5397,10 +5397,10 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.30001436": - version: 1.0.30001436 - resolution: "caniuse-lite@npm:1.0.30001436" - checksum: 7928ac7d93741a81b3005ca4623b133e7d790828be70b26ee55e4860facc59bc344f4092e20034981070a4714f70814c8be4929be4b22728031784f267f69099 +"caniuse-lite@npm:^1.0.30001439": + version: 1.0.30001439 + resolution: "caniuse-lite@npm:1.0.30001439" + checksum: 3912dd536c9735713ca85e47721988bbcefb881ddb4886b0b9923fa984247fd22cba032cf268e57d158af0e8a2ae2eae042ae01942a1d6d7849fa9fa5d62fb82 languageName: node linkType: hard @@ -16228,7 +16228,7 @@ __metadata: autoprefixer: ^10.4.13 babel-loader: 9.1.0 beautiful-react-hooks: ^3.11.2 - caniuse-lite: ^1.0.30001436 + caniuse-lite: ^1.0.30001439 classnames: 2.3.2 copy-webpack-plugin: 11.0.0 core-js: 3.25.5 From 708fb55412eb04a437db2128ad41f112dc7ac27a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 11 Dec 2022 15:19:12 +0000 Subject: [PATCH 124/329] chore(deps): Bump zustand from 4.1.4 to 4.1.5 (#14289) Bumps [zustand](https://github.com/pmndrs/zustand) from 4.1.4 to 4.1.5. - [Release notes](https://github.com/pmndrs/zustand/releases) - [Commits](https://github.com/pmndrs/zustand/compare/v4.1.4...v4.1.5) --- updated-dependencies: - dependency-name: zustand dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] 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 577a1741c68..a15693e86c2 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "underscore": "1.13.6", "uuidjs": "4.2.12", "webrtc-adapter": "6.4.8", - "zustand": "4.1.4" + "zustand": "4.1.5" }, "devDependencies": { "@babel/core": "7.20.5", diff --git a/yarn.lock b/yarn.lock index ee2e6175b2b..48944ad434c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -16338,7 +16338,7 @@ __metadata: webpack-hot-middleware: 2.25.3 webrtc-adapter: 6.4.8 workbox-webpack-plugin: 6.5.4 - zustand: 4.1.4 + zustand: 4.1.5 languageName: unknown linkType: soft @@ -16800,9 +16800,9 @@ __metadata: languageName: node linkType: hard -"zustand@npm:4.1.4": - version: 4.1.4 - resolution: "zustand@npm:4.1.4" +"zustand@npm:4.1.5": + version: 4.1.5 + resolution: "zustand@npm:4.1.5" dependencies: use-sync-external-store: 1.2.0 peerDependencies: @@ -16813,6 +16813,6 @@ __metadata: optional: true react: optional: true - checksum: a9ceb7849ebf407d31a6121be09acfb041324f6f45ca9a3f62ab85e2d840d0f48f157abd99ed7b9e08b96ebb4e15480b4a196ed8b1df8a5a9a2ba9afd7c639a7 + checksum: 13190ee8e8a797c5347b525a7c392be62b2addacdd9645dd20d37ea053f96c7c7067c099c6201e98ebb8d54991f2e04e241cc323f9a25b841d44f0ae048e3afc languageName: node linkType: hard From 4725eb70488df36814ab07681b6975eccf0135e3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 11 Dec 2022 15:21:12 +0000 Subject: [PATCH 125/329] chore(deps): Bump react-router-dom from 6.4.4 to 6.4.5 (#14297) Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.4.4 to 6.4.5. - [Release notes](https://github.com/remix-run/react-router/releases) - [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md) - [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.4.5/packages/react-router-dom) --- updated-dependencies: - dependency-name: react-router-dom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] 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, 26 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index a15693e86c2..25aaa2fb17a 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "react-intl": "6.2.5", "react-redux": "8.0.5", "react-router": "6.4.4", - "react-router-dom": "6.4.4", + "react-router-dom": "6.4.5", "react-transition-group": "4.4.5", "redux": "4.2.0", "redux-logdown": "1.0.4", diff --git a/yarn.lock b/yarn.lock index 48944ad434c..7b0291060a8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2851,6 +2851,13 @@ __metadata: languageName: node linkType: hard +"@remix-run/router@npm:1.0.5": + version: 1.0.5 + resolution: "@remix-run/router@npm:1.0.5" + checksum: 5d66750b7defc10c80d9748fa003fcfe2af9ef82de3c06be88c926ede36a15b9e971ed2222981db843494e2f77c3de14470efe6dc877530cea774dc31162ec6f + languageName: node + linkType: hard + "@rollup/plugin-babel@npm:^5.2.0": version: 5.2.2 resolution: "@rollup/plugin-babel@npm:5.2.2" @@ -13332,16 +13339,16 @@ __metadata: languageName: node linkType: hard -"react-router-dom@npm:6.4.4": - version: 6.4.4 - resolution: "react-router-dom@npm:6.4.4" +"react-router-dom@npm:6.4.5": + version: 6.4.5 + resolution: "react-router-dom@npm:6.4.5" dependencies: - "@remix-run/router": 1.0.4 - react-router: 6.4.4 + "@remix-run/router": 1.0.5 + react-router: 6.4.5 peerDependencies: react: ">=16.8" react-dom: ">=16.8" - checksum: 95f31ae84979b404db7483309e1063fbf724046103dc8b7be7e6df79f7b81e4e63dcdb587f11d8be38e3aaf62b71f9e0d83344ef8d8c5e962de7819c793de781 + checksum: 09d7841dd52efd2c60947171f95d9d1860cabd7540ac74dede86a6c36a2dd26a645e4928cbc8aa4e1c9d1f906f2ef144ba6da5ac69243590df855a6df8cfe1aa languageName: node linkType: hard @@ -13356,6 +13363,17 @@ __metadata: languageName: node linkType: hard +"react-router@npm:6.4.5": + version: 6.4.5 + resolution: "react-router@npm:6.4.5" + dependencies: + "@remix-run/router": 1.0.5 + peerDependencies: + react: ">=16.8" + checksum: 0d471df39f0487224240f9910c2f2939519f3e9909a7b19f72767aeea2caf1c9fa4e8ea9a51b17c20051ec252db0fcc34a7a0b3068b338dd9d8eb656ffd489c1 + languageName: node + linkType: hard + "react-select@npm:5.7.0": version: 5.7.0 resolution: "react-select@npm:5.7.0" @@ -16305,7 +16323,7 @@ __metadata: react-intl: 6.2.5 react-redux: 8.0.5 react-router: 6.4.4 - react-router-dom: 6.4.4 + react-router-dom: 6.4.5 react-transition-group: 4.4.5 redux: 4.2.0 redux-devtools-extension: 2.13.9 From 965bf6b252236691baf865f149fde291db4263d8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 11 Dec 2022 15:21:57 +0000 Subject: [PATCH 126/329] chore(deps): Bump @wireapp/react-ui-kit from 9.2.2 to 9.2.3 (#14300) Bumps [@wireapp/react-ui-kit](https://github.com/wireapp/wire-web-packages) from 9.2.2 to 9.2.3. - [Release notes](https://github.com/wireapp/wire-web-packages/releases) - [Commits](https://github.com/wireapp/wire-web-packages/compare/@wireapp/react-ui-kit@9.2.2...@wireapp/react-ui-kit@9.2.3) --- updated-dependencies: - dependency-name: "@wireapp/react-ui-kit" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] 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 25aaa2fb17a..f142c30eba3 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "@types/eslint": "^8.4.10", "@wireapp/avs": "8.2.17", "@wireapp/core": "37.3.0", - "@wireapp/react-ui-kit": "9.2.2", + "@wireapp/react-ui-kit": "9.2.3", "@wireapp/store-engine-dexie": "2.0.3", "@wireapp/store-engine-sqleet": "1.8.9", "@wireapp/webapp-events": "0.16.0", diff --git a/yarn.lock b/yarn.lock index 7b0291060a8..2eee5997d83 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4239,9 +4239,9 @@ __metadata: languageName: node linkType: hard -"@wireapp/react-ui-kit@npm:9.2.2": - version: 9.2.2 - resolution: "@wireapp/react-ui-kit@npm:9.2.2" +"@wireapp/react-ui-kit@npm:9.2.3": + version: 9.2.3 + resolution: "@wireapp/react-ui-kit@npm:9.2.3" dependencies: "@types/color": 3.0.3 color: 4.2.3 @@ -4256,7 +4256,7 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 04ecd580987ab65f26b7ac0e01cd9536bc71ab4d2cfa362931a260f8e5e2ddec5c03299cb6da0bd601548899d23582fc1fd260502c0381c790795e3a5fcafb71 + checksum: fe688252c01eb93e8f5ad2a46e2f272be298383915f179b15b9d65658b1e190cbfc17088a8449badf2b0786f4ac4cae8f389086e66d7e8c13404119e49bc16eb languageName: node linkType: hard @@ -16235,7 +16235,7 @@ __metadata: "@wireapp/core": 37.3.0 "@wireapp/eslint-config": 2.1.0 "@wireapp/prettier-config": 0.5.2 - "@wireapp/react-ui-kit": 9.2.2 + "@wireapp/react-ui-kit": 9.2.3 "@wireapp/store-engine": ^5.0.3 "@wireapp/store-engine-dexie": 2.0.3 "@wireapp/store-engine-sqleet": 1.8.9 From 73a073a9582732ec3e6deb2128ec38734e6dfaca Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 11 Dec 2022 15:25:27 +0000 Subject: [PATCH 127/329] chore(deps-dev): Bump @types/node from 18.11.10 to 18.11.13 (#14291) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 18.11.10 to 18.11.13. - [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] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index f142c30eba3..c42bb322ff5 100644 --- a/package.json +++ b/package.json @@ -75,7 +75,7 @@ "@types/libsodium-wrappers-sumo": "0.7.5", "@types/linkify-it": "3.0.2", "@types/markdown-it": "12.2.3", - "@types/node": "^18.11.10", + "@types/node": "^18.11.13", "@types/open-graph": "0.2.2", "@types/platform": "1.3.4", "@types/prettier": "^2.7.1", diff --git a/yarn.lock b/yarn.lock index 2eee5997d83..7adb460ea0c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3425,7 +3425,7 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*, @types/node@npm:>=13.7.0, @types/node@npm:^18.11.10": +"@types/node@npm:*, @types/node@npm:>=13.7.0": version: 18.11.10 resolution: "@types/node@npm:18.11.10" checksum: 0f60cb090b2ee91fcd3dc4311bc1ed7889b92f14644c0069f100776f86474c12eebbcc6c75bc0d7d96b975a103b4d5d6b3c22b4e88bea6e7f4e2b1bb0daf5ea8 @@ -3439,6 +3439,13 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:^18.11.13": + version: 18.11.13 + resolution: "@types/node@npm:18.11.13" + checksum: b0c1aa3bd2f5df8240e61096a49d6d4be600109b824d23408ec4ba1ec057dc0c60588e09f73b8a60455ad26d367e9c5562fad8403099f885cbc7b4cace83ec4c + languageName: node + linkType: hard + "@types/node@npm:~14": version: 14.18.21 resolution: "@types/node@npm:14.18.21" @@ -16213,7 +16220,7 @@ __metadata: "@types/libsodium-wrappers-sumo": 0.7.5 "@types/linkify-it": 3.0.2 "@types/markdown-it": 12.2.3 - "@types/node": ^18.11.10 + "@types/node": ^18.11.13 "@types/open-graph": 0.2.2 "@types/platform": 1.3.4 "@types/prettier": ^2.7.1 From 0b02828605b0dcc8740a1297c762aeb864273535 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 11 Dec 2022 15:28:10 +0000 Subject: [PATCH 128/329] chore(deps-dev): Bump @types/jest from 29.2.3 to 29.2.4 (#14294) Bumps [@types/jest](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jest) from 29.2.3 to 29.2.4. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/jest) --- updated-dependencies: - dependency-name: "@types/jest" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] 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 c42bb322ff5..fee09d82478 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,7 @@ "@types/fs-extra": "9.0.13", "@types/generate-changelog": "1.8.1", "@types/highlight.js": "10.1.0", - "@types/jest": "29.2.3", + "@types/jest": "29.2.4", "@types/jquery": "^3", "@types/js-cookie": "3.0.2", "@types/jsdom": "20.0.1", diff --git a/yarn.lock b/yarn.lock index 7adb460ea0c..3dab06c63e1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3304,13 +3304,13 @@ __metadata: languageName: node linkType: hard -"@types/jest@npm:29.2.3": - version: 29.2.3 - resolution: "@types/jest@npm:29.2.3" +"@types/jest@npm:29.2.4": + version: 29.2.4 + resolution: "@types/jest@npm:29.2.4" dependencies: expect: ^29.0.0 pretty-format: ^29.0.0 - checksum: 55370906711b600a05b9e497c22aa74d80d8adcdbe4ac2f1bc9311f6f6ca0dd192862b6f38df6ac0d45e92396bcd796e377b1d8058c10bdfd584aeee580c3ce1 + checksum: 9deb4756fe1b438d41ff1aae7d6c216c9e49e5fe60f539f8edb6698ffeb530ff7b25d37e223439b03602ca3a7397c9c2e53e1a39c7bd616353472fce0cc04107 languageName: node linkType: hard @@ -16212,7 +16212,7 @@ __metadata: "@types/fs-extra": 9.0.13 "@types/generate-changelog": 1.8.1 "@types/highlight.js": 10.1.0 - "@types/jest": 29.2.3 + "@types/jest": 29.2.4 "@types/jquery": ^3 "@types/js-cookie": 3.0.2 "@types/jsdom": 20.0.1 From 36b90b8ec623eb48da5b70a10e06eb88f4e027c7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 11 Dec 2022 15:32:41 +0000 Subject: [PATCH 129/329] chore(deps-dev): Bump typescript from 4.9.3 to 4.9.4 (#14296) Bumps [typescript](https://github.com/Microsoft/TypeScript) from 4.9.3 to 4.9.4. - [Release notes](https://github.com/Microsoft/TypeScript/releases) - [Commits](https://github.com/Microsoft/TypeScript/compare/v4.9.3...v4.9.4) --- updated-dependencies: - dependency-name: typescript dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index fee09d82478..48d810cb8dc 100644 --- a/package.json +++ b/package.json @@ -169,7 +169,7 @@ "text-encoding": "0.7.0", "ts-node": "10.9.1", "tsc-watch": "5.0.3", - "typescript": "^4.9.3", + "typescript": "^4.9.4", "webpack": "5.75.0", "webpack-cli": "5.0.1", "webpack-dev-middleware": "6.0.1", diff --git a/yarn.lock b/yarn.lock index 3dab06c63e1..b686ef90df3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15464,13 +15464,13 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^4.9.3": - version: 4.9.3 - resolution: "typescript@npm:4.9.3" +"typescript@npm:^4.9.4": + version: 4.9.4 + resolution: "typescript@npm:4.9.4" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 17b8f816050b412403e38d48eef0e893deb6be522d6dc7caf105e54a72e34daf6835c447735fd2b28b66784e72bfbf87f627abb4818a8e43d1fa8106396128dc + checksum: e782fb9e0031cb258a80000f6c13530288c6d63f1177ed43f770533fdc15740d271554cdae86701c1dd2c83b082cea808b07e97fd68b38a172a83dbf9e0d0ef9 languageName: node linkType: hard @@ -15484,13 +15484,13 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@^4.9.3#~builtin": - version: 4.9.3 - resolution: "typescript@patch:typescript@npm%3A4.9.3#~builtin::version=4.9.3&hash=a1c5e5" +"typescript@patch:typescript@^4.9.4#~builtin": + version: 4.9.4 + resolution: "typescript@patch:typescript@npm%3A4.9.4#~builtin::version=4.9.4&hash=a1c5e5" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: ef65c22622d864497d0a0c5db693523329b3284c15fe632e93ad9aa059e8dc38ef3bd767d6f26b1e5ecf9446f49bd0f6c4e5714a2eeaf352805dc002479843d1 + checksum: 37f6e2c3c5e2aa5934b85b0fddbf32eeac8b1bacf3a5b51d01946936d03f5377fe86255d4e5a4ae628fd0cd553386355ad362c57f13b4635064400f3e8e05b9d languageName: node linkType: hard @@ -16353,7 +16353,7 @@ __metadata: ts-node: 10.9.1 tsc-watch: 5.0.3 tsyringe: 4.7.0 - typescript: ^4.9.3 + typescript: ^4.9.4 uint32: 0.2.1 underscore: 1.13.6 uuidjs: 4.2.12 From 10f249a6c12a7e6999fa72a645cc7b12540f8bf3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 11 Dec 2022 15:33:37 +0000 Subject: [PATCH 130/329] chore(deps-dev): Bump @typescript-eslint/eslint-plugin (#14295) Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 5.45.0 to 5.46.0. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.46.0/packages/eslint-plugin) --- updated-dependencies: - dependency-name: "@typescript-eslint/eslint-plugin" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 93 +++++++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 79 insertions(+), 16 deletions(-) diff --git a/package.json b/package.json index 48d810cb8dc..abad84c3b59 100644 --- a/package.json +++ b/package.json @@ -90,7 +90,7 @@ "@types/uint32": "0.2.0", "@types/underscore": "1.11.4", "@types/webpack-env": "1.18.0", - "@typescript-eslint/eslint-plugin": "^5.45.0", + "@typescript-eslint/eslint-plugin": "^5.46.0", "@typescript-eslint/parser": "^5.45.0", "@wireapp/copy-config": "2.0.4", "@wireapp/eslint-config": "2.1.0", diff --git a/yarn.lock b/yarn.lock index b686ef90df3..90a2a0847d2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3672,13 +3672,13 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:^5.45.0": - version: 5.45.0 - resolution: "@typescript-eslint/eslint-plugin@npm:5.45.0" +"@typescript-eslint/eslint-plugin@npm:^5.46.0": + version: 5.46.0 + resolution: "@typescript-eslint/eslint-plugin@npm:5.46.0" dependencies: - "@typescript-eslint/scope-manager": 5.45.0 - "@typescript-eslint/type-utils": 5.45.0 - "@typescript-eslint/utils": 5.45.0 + "@typescript-eslint/scope-manager": 5.46.0 + "@typescript-eslint/type-utils": 5.46.0 + "@typescript-eslint/utils": 5.46.0 debug: ^4.3.4 ignore: ^5.2.0 natural-compare-lite: ^1.4.0 @@ -3691,7 +3691,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 7cff671a9ba33afa86f0ece6d0ebaeb5fc16596fc659ef230f6f65bfddfef2ffb6434310e3a4444fb852e79e40c85c5e62c559df6ddc9312aac235a18afdd269 + checksum: 5b7dde66a3db3d3009c9da5c1357d72c19b94d75474d8f51b6ac765962aa181bf8fe88fcca02a70faaceb2ed5739f790313d1d521d77149cab94ab5e3a987cf3 languageName: node linkType: hard @@ -3743,12 +3743,22 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:5.45.0": - version: 5.45.0 - resolution: "@typescript-eslint/type-utils@npm:5.45.0" +"@typescript-eslint/scope-manager@npm:5.46.0": + version: 5.46.0 + resolution: "@typescript-eslint/scope-manager@npm:5.46.0" dependencies: - "@typescript-eslint/typescript-estree": 5.45.0 - "@typescript-eslint/utils": 5.45.0 + "@typescript-eslint/types": 5.46.0 + "@typescript-eslint/visitor-keys": 5.46.0 + checksum: 10d992a6f9bbe747a8fb5f8b02732e3a289d2667e32ea835de825efe7a841688e683ae1d15d250df84c2ada313b9a3f41c9c9b5ae924c3d9b90d73f23241ae7f + languageName: node + linkType: hard + +"@typescript-eslint/type-utils@npm:5.46.0": + version: 5.46.0 + resolution: "@typescript-eslint/type-utils@npm:5.46.0" + dependencies: + "@typescript-eslint/typescript-estree": 5.46.0 + "@typescript-eslint/utils": 5.46.0 debug: ^4.3.4 tsutils: ^3.21.0 peerDependencies: @@ -3756,7 +3766,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: be96c89b91116b8fbed160631f3cdd345d47e34248a38e8a730fa9e09a4aa21184259414547d3c7a741b83fa68d4a14f77e9fc93b84aba4752f67bd5a772bf27 + checksum: 96feae3b67b78bc74b916bb7c3c654c13c6f000fc1f6945709764010fb6644e7cbf7749faa6ab0562255197b49fbf7c28c9a5b558378fa74e2cd38aeddc459cb languageName: node linkType: hard @@ -3774,6 +3784,13 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/types@npm:5.46.0": + version: 5.46.0 + resolution: "@typescript-eslint/types@npm:5.46.0" + checksum: 162e2e7841369598d3018f315545e85b79e57cc2f9033770397dbbdab0c80d72a8ee791710d10570b70624b5f343f7f8fc7ffabaec62f708cd7bfc5b432ad595 + languageName: node + linkType: hard + "@typescript-eslint/typescript-estree@npm:5.10.1": version: 5.10.1 resolution: "@typescript-eslint/typescript-estree@npm:5.10.1" @@ -3810,6 +3827,24 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/typescript-estree@npm:5.46.0": + version: 5.46.0 + resolution: "@typescript-eslint/typescript-estree@npm:5.46.0" + dependencies: + "@typescript-eslint/types": 5.46.0 + "@typescript-eslint/visitor-keys": 5.46.0 + debug: ^4.3.4 + globby: ^11.1.0 + is-glob: ^4.0.3 + semver: ^7.3.7 + tsutils: ^3.21.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 645f9fd65836019073fd7af5bfa0e4c3d47303deda0917c4d8fb6ed6790bebaaeb7020a7a104b96c5fda707eb20e248c38fc711cdc83439775c563ef9f169746 + languageName: node + linkType: hard + "@typescript-eslint/utils@npm:5.10.1": version: 5.10.1 resolution: "@typescript-eslint/utils@npm:5.10.1" @@ -3826,7 +3861,25 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/utils@npm:5.45.0, @typescript-eslint/utils@npm:^5.10.0, @typescript-eslint/utils@npm:^5.13.0": +"@typescript-eslint/utils@npm:5.46.0": + version: 5.46.0 + resolution: "@typescript-eslint/utils@npm:5.46.0" + dependencies: + "@types/json-schema": ^7.0.9 + "@types/semver": ^7.3.12 + "@typescript-eslint/scope-manager": 5.46.0 + "@typescript-eslint/types": 5.46.0 + "@typescript-eslint/typescript-estree": 5.46.0 + eslint-scope: ^5.1.1 + eslint-utils: ^3.0.0 + semver: ^7.3.7 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: f4962a7d34f55c44b238df550d45aacbc7b8fcba7d172fd96ee17eb5ce964481e3e68376205598146f4f3aa69df7627686a9bd16022b51246d6e9fe94ffb2bb8 + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:^5.10.0, @typescript-eslint/utils@npm:^5.13.0": version: 5.45.0 resolution: "@typescript-eslint/utils@npm:5.45.0" dependencies: @@ -3864,6 +3917,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/visitor-keys@npm:5.46.0": + version: 5.46.0 + resolution: "@typescript-eslint/visitor-keys@npm:5.46.0" + dependencies: + "@typescript-eslint/types": 5.46.0 + eslint-visitor-keys: ^3.3.0 + checksum: 83ec2514b2469db395f006576c934bd60b21e74e2e67c183f8d9249954119c56074de286ce8c55d42e20b06d0083d4665f3baf0eed720712203796be488f0944 + languageName: node + linkType: hard + "@webassemblyjs/ast@npm:1.11.1": version: 1.11.1 resolution: "@webassemblyjs/ast@npm:1.11.1" @@ -16235,7 +16298,7 @@ __metadata: "@types/uint32": 0.2.0 "@types/underscore": 1.11.4 "@types/webpack-env": 1.18.0 - "@typescript-eslint/eslint-plugin": ^5.45.0 + "@typescript-eslint/eslint-plugin": ^5.46.0 "@typescript-eslint/parser": ^5.45.0 "@wireapp/avs": 8.2.17 "@wireapp/copy-config": 2.0.4 From b6aa1f38f31eeaa7af93534c11556805dbbccb15 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 11 Dec 2022 15:36:43 +0000 Subject: [PATCH 131/329] chore(deps): Bump react-router from 6.4.4 to 6.4.5 (#14301) Bumps [react-router](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router) from 6.4.4 to 6.4.5. - [Release notes](https://github.com/remix-run/react-router/releases) - [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router/CHANGELOG.md) - [Commits](https://github.com/remix-run/react-router/commits/react-router@6.4.5/packages/react-router) --- updated-dependencies: - dependency-name: react-router dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] 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, 2 insertions(+), 20 deletions(-) diff --git a/package.json b/package.json index abad84c3b59..25e03945d4d 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "react-dom": "18.2.0", "react-intl": "6.2.5", "react-redux": "8.0.5", - "react-router": "6.4.4", + "react-router": "6.4.5", "react-router-dom": "6.4.5", "react-transition-group": "4.4.5", "redux": "4.2.0", diff --git a/yarn.lock b/yarn.lock index 90a2a0847d2..841ffb96787 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2844,13 +2844,6 @@ __metadata: languageName: node linkType: hard -"@remix-run/router@npm:1.0.4": - version: 1.0.4 - resolution: "@remix-run/router@npm:1.0.4" - checksum: db6b1e111fb6e7e22c3d274bd6cef3054a0a989245894fde5735efd9cb46d18511e528e813ff50bcbdd7eda1c559f4e76e9d0c54396624e33396168d80b09c42 - languageName: node - linkType: hard - "@remix-run/router@npm:1.0.5": version: 1.0.5 resolution: "@remix-run/router@npm:1.0.5" @@ -13422,17 +13415,6 @@ __metadata: languageName: node linkType: hard -"react-router@npm:6.4.4": - version: 6.4.4 - resolution: "react-router@npm:6.4.4" - dependencies: - "@remix-run/router": 1.0.4 - peerDependencies: - react: ">=16.8" - checksum: d82cc8b8bdf10e02e07d089f9d82987fa161c2f07583c973126f5f8a052c02b3d2339891ddbda1738f877755a407e2c35f0dc1ac52aaa1d2c853774d19753ea7 - languageName: node - linkType: hard - "react-router@npm:6.4.5": version: 6.4.5 resolution: "react-router@npm:6.4.5" @@ -16392,7 +16374,7 @@ __metadata: react-dom: 18.2.0 react-intl: 6.2.5 react-redux: 8.0.5 - react-router: 6.4.4 + react-router: 6.4.5 react-router-dom: 6.4.5 react-transition-group: 4.4.5 redux: 4.2.0 From d62df7291fc0f109b00b579cb18a67953e977f0f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 11 Dec 2022 15:37:56 +0000 Subject: [PATCH 132/329] chore(deps-dev): Bump cspell from 6.16.0 to 6.17.0 (#14299) Bumps [cspell](https://github.com/streetsidesoftware/cspell) from 6.16.0 to 6.17.0. - [Release notes](https://github.com/streetsidesoftware/cspell/releases) - [Changelog](https://github.com/streetsidesoftware/cspell/blob/main/CHANGELOG.md) - [Commits](https://github.com/streetsidesoftware/cspell/compare/v6.16.0...v6.17.0) --- updated-dependencies: - dependency-name: cspell dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 160 +++++++++++++++++++++++++-------------------------- 2 files changed, 81 insertions(+), 81 deletions(-) diff --git a/package.json b/package.json index 25e03945d4d..917d4ae6a3b 100644 --- a/package.json +++ b/package.json @@ -102,7 +102,7 @@ "babel-loader": "9.1.0", "caniuse-lite": "^1.0.30001439", "cross-env": "7.0.3", - "cspell": "6.16.0", + "cspell": "6.17.0", "css-loader": "^6.7.2", "cssnano": "^5.1.14", "dexie": "^3.2.2", diff --git a/yarn.lock b/yarn.lock index 841ffb96787..a6c6a74ff79 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1455,9 +1455,9 @@ __metadata: languageName: node linkType: hard -"@cspell/cspell-bundled-dicts@npm:6.16.0": - version: 6.16.0 - resolution: "@cspell/cspell-bundled-dicts@npm:6.16.0" +"@cspell/cspell-bundled-dicts@npm:6.17.0": + version: 6.17.0 + resolution: "@cspell/cspell-bundled-dicts@npm:6.17.0" dependencies: "@cspell/dict-ada": ^4.0.0 "@cspell/dict-aws": ^3.0.0 @@ -1487,7 +1487,7 @@ __metadata: "@cspell/dict-lorem-ipsum": ^3.0.0 "@cspell/dict-lua": ^3.0.0 "@cspell/dict-node": ^4.0.1 - "@cspell/dict-npm": ^4.0.1 + "@cspell/dict-npm": ^5.0.0 "@cspell/dict-php": ^3.0.3 "@cspell/dict-powershell": ^3.0.0 "@cspell/dict-public-licenses": ^2.0.0 @@ -1502,28 +1502,28 @@ __metadata: "@cspell/dict-swift": ^2.0.0 "@cspell/dict-typescript": ^3.0.1 "@cspell/dict-vue": ^3.0.0 - checksum: 76d896b639b77f3d57f2b0972b8e67cf4fd0c9435ad523872b05d2aada7f9447e720ecb0529df7d88ce489ac892b0b192495fefc23202066039acedd31e1daf1 + checksum: a48f4b509ed957cac3f2cf080ad8e377133c8ee3193673e812fdb3a9f741d08ced69696f0b7a15c3c30852af14ae60df245ea8227c9ecc5adb44cd15394519ee languageName: node linkType: hard -"@cspell/cspell-pipe@npm:6.16.0": - version: 6.16.0 - resolution: "@cspell/cspell-pipe@npm:6.16.0" - checksum: 1f9a3588051b778cf1ebdeffd58a41b1393d49b496f9ef23b27eae2f7a4bc10fc539f3afa33ddbbe7847b13d2426c4e2d27c7bedb953075f063c6b77628b9ba0 +"@cspell/cspell-pipe@npm:6.17.0": + version: 6.17.0 + resolution: "@cspell/cspell-pipe@npm:6.17.0" + checksum: 48c6fa6868a500519e04f61bf3d8e7d1c4ee5150a8661a3e14705ab9d61ad35c971fb53f05e0628f61440142a83a2c10a0833aa22762138977dbd7ed1eea37af languageName: node linkType: hard -"@cspell/cspell-service-bus@npm:6.16.0": - version: 6.16.0 - resolution: "@cspell/cspell-service-bus@npm:6.16.0" - checksum: 56fb2f1eb4b3331ff8b8ab1e23b413929d6d7ff5906a57d22f90d0b913357d51b6b6851f087c2b2f2ea504ef3b668d7d0ff61a579afe55e751d912cbb54d246a +"@cspell/cspell-service-bus@npm:6.17.0": + version: 6.17.0 + resolution: "@cspell/cspell-service-bus@npm:6.17.0" + checksum: 33054400304e6ebd6168fd1a84ba9fc83cb50fd24897606e7fd963a2c3aedee77a615063fe42bd0ff46f1a0e734a95ecc8c65a2c57cfb943c0be85b1d355138b languageName: node linkType: hard -"@cspell/cspell-types@npm:6.16.0": - version: 6.16.0 - resolution: "@cspell/cspell-types@npm:6.16.0" - checksum: d00c39bf76e34a9dd3e4852d8db0a28fbea8a58a6f25abd9043885850784c4a38e69f31718bd9c47e4865e45d1505a08d26e43e1f03f7657b7edffb237a7f50e +"@cspell/cspell-types@npm:6.17.0": + version: 6.17.0 + resolution: "@cspell/cspell-types@npm:6.17.0" + checksum: 5dd8d4cdc5d800142b0e5086d65b7b9918c665d607ded691719a3c283271ec45135ad08284d63d039a6479206727504a85ae1cc6655714cedbd59662e75f76af languageName: node linkType: hard @@ -1723,10 +1723,10 @@ __metadata: languageName: node linkType: hard -"@cspell/dict-npm@npm:^4.0.1": - version: 4.0.1 - resolution: "@cspell/dict-npm@npm:4.0.1" - checksum: f76f720079e29ec0bc232c2263fafcf4593730f94cc244a5db60cf30607fc0b9f435804b77123175cb99930af9bc4c4fda07a6c4f720c81f06f322e6f33d8383 +"@cspell/dict-npm@npm:^5.0.0": + version: 5.0.0 + resolution: "@cspell/dict-npm@npm:5.0.0" + checksum: 7a1a38f669688045f0b2e63ac9ce87c57feb03f9521af4d1a7f7f40e4af351ed241ef34b54ea53569826efccfa5475796558c36c26bede0c1fdfca5fc53be045 languageName: node linkType: hard @@ -1828,10 +1828,10 @@ __metadata: languageName: node linkType: hard -"@cspell/strong-weak-map@npm:6.16.0": - version: 6.16.0 - resolution: "@cspell/strong-weak-map@npm:6.16.0" - checksum: e4d39ea36e7df6ac58edf11d6a94baae7f4c54404ab624a8a8a31bc69724f613d75d19039bfb43d7908859a25fa62f66a043e074c9824c9bc08879878349e438 +"@cspell/strong-weak-map@npm:6.17.0": + version: 6.17.0 + resolution: "@cspell/strong-weak-map@npm:6.17.0" + checksum: 178a417eadcb81d15d04692b669bef7ffba37ed687a3097fd7dcc995b64843e28d555e8c538b7fd43331bc6c18da4f1047733f45fa60de993e184868acae4315 languageName: node linkType: hard @@ -6094,79 +6094,79 @@ __metadata: languageName: node linkType: hard -"cspell-dictionary@npm:6.16.0": - version: 6.16.0 - resolution: "cspell-dictionary@npm:6.16.0" +"cspell-dictionary@npm:6.17.0": + version: 6.17.0 + resolution: "cspell-dictionary@npm:6.17.0" dependencies: - "@cspell/cspell-pipe": 6.16.0 - "@cspell/cspell-types": 6.16.0 - cspell-trie-lib: 6.16.0 + "@cspell/cspell-pipe": 6.17.0 + "@cspell/cspell-types": 6.17.0 + cspell-trie-lib: 6.17.0 fast-equals: ^4.0.3 gensequence: ^4.0.2 - checksum: c35c6e04e1d8bb8cca0cac056d46a9f6c03aa4cba979ae5c9e618809764307c6f77c86ef6d3b82003fa330e8a3f27879e1f7cf814cd1cba5cef4b9c09a61c37c + checksum: 1c252b13e5c6d699c5a7c9f69417c9d8ce69cba4def1f91b394f8a495b4f2759b7b4ad2cb1fa0782fc6573a4f4a1a50012fb5447870cc71f38c5decd4a1d09f0 languageName: node linkType: hard -"cspell-gitignore@npm:6.16.0": - version: 6.16.0 - resolution: "cspell-gitignore@npm:6.16.0" +"cspell-gitignore@npm:6.17.0": + version: 6.17.0 + resolution: "cspell-gitignore@npm:6.17.0" dependencies: - cspell-glob: 6.16.0 + cspell-glob: 6.17.0 find-up: ^5.0.0 bin: cspell-gitignore: bin.js - checksum: 01ecef291d4f2d6279f9185f849af828cdaeef27c4c71fbac121f4dcb7e5c50de7dbcfcabe52b72a2eda83e3d5e158e9f624f5fe22dc25fe8b9262a49ff1d4f4 + checksum: 23f6543ed2df33c37b97f9638e951ea90a3e906de83325f58c9d39dcbae83517505ad587025c42fae059107e1f795deb5caff642d9cba1d864e87fbdc794a064 languageName: node linkType: hard -"cspell-glob@npm:6.16.0": - version: 6.16.0 - resolution: "cspell-glob@npm:6.16.0" +"cspell-glob@npm:6.17.0": + version: 6.17.0 + resolution: "cspell-glob@npm:6.17.0" dependencies: micromatch: ^4.0.5 - checksum: bd0c0b33eeda3f82686f2ce213de1224a0e25d05726aa130188b726971f0800a39f95d5f576c07021763b67b5227baf2a1a1b698902f59a3fe47de04b4f7a5cd + checksum: 4389e90b7cda5c4903ffd5f0e26594e492d8bd8ad501cf657740be51b9f024994958d0e757791c07c00276dfee056725c56a32bb80364ddb078cc57b5e5c6644 languageName: node linkType: hard -"cspell-grammar@npm:6.16.0": - version: 6.16.0 - resolution: "cspell-grammar@npm:6.16.0" +"cspell-grammar@npm:6.17.0": + version: 6.17.0 + resolution: "cspell-grammar@npm:6.17.0" dependencies: - "@cspell/cspell-pipe": 6.16.0 - "@cspell/cspell-types": 6.16.0 + "@cspell/cspell-pipe": 6.17.0 + "@cspell/cspell-types": 6.17.0 bin: cspell-grammar: bin.js - checksum: 839489ad0b639789eacd605af0e16e9c65b4b691403e6b28aa1eb67098f21a1a4449767d5d5b7fdd2f0f3af91c47928abe997b55bb21b2374414c91d64557157 + checksum: e45ff8a57e5c93c13f40dc62fb5f1d3092eaedbebea6c888073de253183da93e781df8ea132a3687f0ac90228b0e91e5a2cfff018e16e13d62890aad29ca91aa languageName: node linkType: hard -"cspell-io@npm:6.16.0": - version: 6.16.0 - resolution: "cspell-io@npm:6.16.0" +"cspell-io@npm:6.17.0": + version: 6.17.0 + resolution: "cspell-io@npm:6.17.0" dependencies: - "@cspell/cspell-service-bus": 6.16.0 + "@cspell/cspell-service-bus": 6.17.0 node-fetch: ^2.6.7 - checksum: 325100a9caefefdcd69cdc33ca32d6fefb9aa1639f9414862860d99be1e1db7c73115dd063d59fc9a79e536b44a609247bb16eef2aef892fe8cd4c8a7c87487c + checksum: 8a53c11594f041512a4f2b07e865a2791e9967c45425e889432ab4bd24977eba4d4f46182942d76ff3b1a0729c06fcc143332699e9773d4b13ead23965cdffc2 languageName: node linkType: hard -"cspell-lib@npm:6.16.0": - version: 6.16.0 - resolution: "cspell-lib@npm:6.16.0" +"cspell-lib@npm:6.17.0": + version: 6.17.0 + resolution: "cspell-lib@npm:6.17.0" dependencies: - "@cspell/cspell-bundled-dicts": 6.16.0 - "@cspell/cspell-pipe": 6.16.0 - "@cspell/cspell-types": 6.16.0 - "@cspell/strong-weak-map": 6.16.0 + "@cspell/cspell-bundled-dicts": 6.17.0 + "@cspell/cspell-pipe": 6.17.0 + "@cspell/cspell-types": 6.17.0 + "@cspell/strong-weak-map": 6.17.0 clear-module: ^4.1.2 comment-json: ^4.2.3 configstore: ^5.0.1 cosmiconfig: ^8.0.0 - cspell-dictionary: 6.16.0 - cspell-glob: 6.16.0 - cspell-grammar: 6.16.0 - cspell-io: 6.16.0 - cspell-trie-lib: 6.16.0 + cspell-dictionary: 6.17.0 + cspell-glob: 6.17.0 + cspell-grammar: 6.17.0 + cspell-io: 6.17.0 + cspell-trie-lib: 6.17.0 fast-equals: ^4.0.3 find-up: ^5.0.0 fs-extra: ^10.1.0 @@ -6176,32 +6176,32 @@ __metadata: resolve-global: ^1.0.0 vscode-languageserver-textdocument: ^1.0.7 vscode-uri: ^3.0.6 - checksum: a737b89c7c0683f80707f80844ee9f01b90e0a150785aee97174993e9eda9ed63df1c76292518abb53bbe1f27de846852fa24ca3c206f13074c90b5f0ef136b6 + checksum: 1bfb3ed266c1f5edd247aa918d6368999b77d2fdc6d8f1f5a5e835ab1fd5a936d9daae03af4427ac0497b4ff932c2fe3f538e7122c491084219ce4afc75a3d45 languageName: node linkType: hard -"cspell-trie-lib@npm:6.16.0": - version: 6.16.0 - resolution: "cspell-trie-lib@npm:6.16.0" +"cspell-trie-lib@npm:6.17.0": + version: 6.17.0 + resolution: "cspell-trie-lib@npm:6.17.0" dependencies: - "@cspell/cspell-pipe": 6.16.0 - "@cspell/cspell-types": 6.16.0 + "@cspell/cspell-pipe": 6.17.0 + "@cspell/cspell-types": 6.17.0 fs-extra: ^10.1.0 gensequence: ^4.0.2 - checksum: c6b5cab25e4cdc7e7e9a40d92860de0bfd55036f3bb24a4b8bf34620663f58f263482c3304b10f95b1f090e190cfec92d09e83597744aaed4f455743dd86f23d + checksum: bf599a9cdb4d3ddee75c2aed95735fa68aa72148427675d15b95bfabce3146b59083d7df9649659d5f64101caf1f14749505a76bd5d1c40e9f0e6eb13a1d5624 languageName: node linkType: hard -"cspell@npm:6.16.0": - version: 6.16.0 - resolution: "cspell@npm:6.16.0" +"cspell@npm:6.17.0": + version: 6.17.0 + resolution: "cspell@npm:6.17.0" dependencies: - "@cspell/cspell-pipe": 6.16.0 + "@cspell/cspell-pipe": 6.17.0 chalk: ^4.1.2 commander: ^9.4.1 - cspell-gitignore: 6.16.0 - cspell-glob: 6.16.0 - cspell-lib: 6.16.0 + cspell-gitignore: 6.17.0 + cspell-glob: 6.17.0 + cspell-lib: 6.17.0 fast-json-stable-stringify: ^2.1.0 file-entry-cache: ^6.0.1 fs-extra: ^10.1.0 @@ -6213,7 +6213,7 @@ __metadata: vscode-uri: ^3.0.6 bin: cspell: bin.js - checksum: 9273e58e585ec019596214e0c8e461f42ca35b89b97f5488e39366e12bcaef50210b5a1f3f2d5031f36287516a70df39f31a3732cbcc838d8c05c1c58e890313 + checksum: 396d333b73add4217c86b790b1b2e7362e2c26853500a3820e7203f9ba21b1ed811ba3bbc058b85a7f084d49200f94c67904c4df1392e21367b00c5c1da83454 languageName: node linkType: hard @@ -16304,7 +16304,7 @@ __metadata: core-js: 3.25.5 countly-sdk-web: 22.6.4 cross-env: 7.0.3 - cspell: 6.16.0 + cspell: 6.17.0 css-loader: ^6.7.2 cssnano: ^5.1.14 date-fns: 2.29.3 From 8fbc0c53497033ea2844e4eba70a78dbbc5b6600 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 11 Dec 2022 16:30:09 +0000 Subject: [PATCH 133/329] chore(deps-dev): Bump @typescript-eslint/parser from 5.45.0 to 5.46.0 (#14298) Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 5.45.0 to 5.46.0. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.46.0/packages/parser) --- updated-dependencies: - dependency-name: "@typescript-eslint/parser" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 917d4ae6a3b..a9aaf5b3cd3 100644 --- a/package.json +++ b/package.json @@ -91,7 +91,7 @@ "@types/underscore": "1.11.4", "@types/webpack-env": "1.18.0", "@typescript-eslint/eslint-plugin": "^5.46.0", - "@typescript-eslint/parser": "^5.45.0", + "@typescript-eslint/parser": "^5.46.0", "@wireapp/copy-config": "2.0.4", "@wireapp/eslint-config": "2.1.0", "@wireapp/prettier-config": "0.5.2", diff --git a/yarn.lock b/yarn.lock index a6c6a74ff79..1ed294b31ae 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3699,20 +3699,20 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/parser@npm:^5.45.0": - version: 5.45.0 - resolution: "@typescript-eslint/parser@npm:5.45.0" +"@typescript-eslint/parser@npm:^5.46.0": + version: 5.46.0 + resolution: "@typescript-eslint/parser@npm:5.46.0" dependencies: - "@typescript-eslint/scope-manager": 5.45.0 - "@typescript-eslint/types": 5.45.0 - "@typescript-eslint/typescript-estree": 5.45.0 + "@typescript-eslint/scope-manager": 5.46.0 + "@typescript-eslint/types": 5.46.0 + "@typescript-eslint/typescript-estree": 5.46.0 debug: ^4.3.4 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true - checksum: b8ce3af72de3ff22bb206c3299e728d37a836dbe1f75bcb66ad3bb7962204174b7fff834992b84f0e661de507729c01c7ad71ad2707c217cccc3c0f798a9dc23 + checksum: 34e2e8fb35050ac119ed2696293ecd9a1b40c3ccc915d06b8d48880c6656e8f40665b969807b76058eb9198227481653f1d1465a89a4ac6a98bc7ab9850ada1f languageName: node linkType: hard @@ -16281,7 +16281,7 @@ __metadata: "@types/underscore": 1.11.4 "@types/webpack-env": 1.18.0 "@typescript-eslint/eslint-plugin": ^5.46.0 - "@typescript-eslint/parser": ^5.45.0 + "@typescript-eslint/parser": ^5.46.0 "@wireapp/avs": 8.2.17 "@wireapp/copy-config": 2.0.4 "@wireapp/core": 37.3.0 From 3d527d6d5d24e61c59f794c567c4ffafb855bdf2 Mon Sep 17 00:00:00 2001 From: Arjita Date: Mon, 12 Dec 2022 10:09:15 +0100 Subject: [PATCH 134/329] refactor: rename the property WIRE_TYPING_MODE to WIRE_TYPING_INDICATOR_MODE (#14282) * feat: Typing Indicator settings - Turn on or Off(ACC-307) * feat: typing indicator is not visible when user is typing but typing mode is disabled(ACC-307) * fix: revert deleted hook dependecy(ACC-307) * refactor: remove extra if(ACC-307) * fix: code review comments(ACC-307) * fix: rename configuration variable(ACC-307) * refactor: rename the property WIRE_TYPING_MODE to WIRE_TYPING_INDICATOR_MODE(ACC-307) --- src/script/components/InputBar/InputBar.test.tsx | 4 ++-- .../accountPreferences/PrivacySection.tsx | 2 +- src/script/properties/PropertiesRepository.ts | 14 +++++++------- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/script/components/InputBar/InputBar.test.tsx b/src/script/components/InputBar/InputBar.test.tsx index 41516f2c9c0..e4d201e0a06 100644 --- a/src/script/components/InputBar/InputBar.test.tsx +++ b/src/script/components/InputBar/InputBar.test.tsx @@ -136,7 +136,7 @@ describe('InputBar', () => { expect((textArea as HTMLTextAreaElement).value).toBe(testMessage); }); - const property = PropertiesRepository.CONFIG.WIRE_TYPING_MODE; + const property = PropertiesRepository.CONFIG.WIRE_TYPING_INDICATOR_MODE; const defaultValue = property.defaultValue; expect(propertiesRepository.typingIndicatorMode()).toBe(defaultValue); @@ -147,7 +147,7 @@ describe('InputBar', () => { const props = getDefaultProps(); const {getByTestId} = render(withTheme()); const textArea = getByTestId('input-message'); - const property = PropertiesRepository.CONFIG.WIRE_TYPING_MODE; + const property = PropertiesRepository.CONFIG.WIRE_TYPING_INDICATOR_MODE; const defaultValue = property.defaultValue; propertiesRepository.setProperty(property.key, !defaultValue); diff --git a/src/script/page/MainContent/panels/preferences/accountPreferences/PrivacySection.tsx b/src/script/page/MainContent/panels/preferences/accountPreferences/PrivacySection.tsx index a1dfcd747e1..3e232dc4427 100644 --- a/src/script/page/MainContent/panels/preferences/accountPreferences/PrivacySection.tsx +++ b/src/script/page/MainContent/panels/preferences/accountPreferences/PrivacySection.tsx @@ -59,7 +59,7 @@ const PrivacySection: React.FC = ({ const handleTypingModeChange = (event: React.ChangeEvent) => { const isChecked = event.target.checked; propertiesRepository.updateProperty( - PropertiesRepository.CONFIG.WIRE_TYPING_MODE.key, + PropertiesRepository.CONFIG.WIRE_TYPING_INDICATOR_MODE.key, isChecked ? CONVERSATION_TYPING_INDICATOR_MODE.ON : CONVERSATION_TYPING_INDICATOR_MODE.OFF, ); }; diff --git a/src/script/properties/PropertiesRepository.ts b/src/script/properties/PropertiesRepository.ts index 4e13ca93603..16950ea1164 100644 --- a/src/script/properties/PropertiesRepository.ts +++ b/src/script/properties/PropertiesRepository.ts @@ -52,9 +52,9 @@ export class PropertiesRepository { defaultValue: RECEIPT_MODE.OFF, key: 'WIRE_RECEIPT_MODE', }, - WIRE_TYPING_MODE: { + WIRE_TYPING_INDICATOR_MODE: { defaultValue: CONVERSATION_TYPING_INDICATOR_MODE.ON, - key: 'WIRE_TYPING_MODE', + key: 'WIRE_TYPING_INDICATOR_MODE', }, }; } @@ -106,7 +106,7 @@ export class PropertiesRepository { }; this.selfUser = ko.observable(); this.receiptMode = ko.observable(PropertiesRepository.CONFIG.WIRE_RECEIPT_MODE.defaultValue); - this.typingIndicatorMode = ko.observable(PropertiesRepository.CONFIG.WIRE_TYPING_MODE.defaultValue); + this.typingIndicatorMode = ko.observable(PropertiesRepository.CONFIG.WIRE_TYPING_INDICATOR_MODE.defaultValue); /** @type {ko.Observable} */ this.marketingConsent = ko.observable(PropertiesRepository.CONFIG.WIRE_MARKETING_CONSENT.defaultValue); } @@ -213,7 +213,7 @@ export class PropertiesRepository { } private fetchTypingIndicatorSetting(): Promise { - const {key: propertyKey, defaultValue} = PropertiesRepository.CONFIG.WIRE_TYPING_MODE; + const {key: propertyKey, defaultValue} = PropertiesRepository.CONFIG.WIRE_TYPING_INDICATOR_MODE; return this.propertiesService .getPropertiesByKey(propertyKey) @@ -265,7 +265,7 @@ export class PropertiesRepository { case PropertiesRepository.CONFIG.WIRE_RECEIPT_MODE.key: this.setProperty(key, RECEIPT_MODE.OFF); break; - case PropertiesRepository.CONFIG.WIRE_TYPING_MODE.key: + case PropertiesRepository.CONFIG.WIRE_TYPING_INDICATOR_MODE.key: this.setProperty(key, CONVERSATION_TYPING_INDICATOR_MODE.OFF); break; case PropertiesRepository.CONFIG.WIRE_MARKETING_CONSENT.key: @@ -290,7 +290,7 @@ export class PropertiesRepository { case PropertiesRepository.CONFIG.WIRE_RECEIPT_MODE.key: this.receiptMode(value); break; - case PropertiesRepository.CONFIG.WIRE_TYPING_MODE.key: + case PropertiesRepository.CONFIG.WIRE_TYPING_INDICATOR_MODE.key: this.typingIndicatorMode(value); break; } @@ -304,7 +304,7 @@ export class PropertiesRepository { return this.propertiesService.deletePropertiesByKey(key); } return this.propertiesService.putPropertiesByKey(key, value); - case PropertiesRepository.CONFIG.WIRE_TYPING_MODE.key: + case PropertiesRepository.CONFIG.WIRE_TYPING_INDICATOR_MODE.key: if (value === CONVERSATION_TYPING_INDICATOR_MODE.ON) { return this.propertiesService.deletePropertiesByKey(key); } From ad1de417c8eb5377a2f25d7cb1934c121f57e8b5 Mon Sep 17 00:00:00 2001 From: Thomas Belin Date: Mon, 12 Dec 2022 11:45:07 +0100 Subject: [PATCH 135/329] fix: Do not store accessToken on login [FS-1309] (#14303) --- .../auth/module/action/AuthAction.test.ts | 2 +- src/script/auth/module/action/AuthAction.ts | 37 ++++++------------- .../auth/module/action/LocalStorageAction.ts | 6 --- 3 files changed, 13 insertions(+), 32 deletions(-) diff --git a/src/script/auth/module/action/AuthAction.test.ts b/src/script/auth/module/action/AuthAction.test.ts index 3e16ff08d84..529b0020279 100644 --- a/src/script/auth/module/action/AuthAction.test.ts +++ b/src/script/auth/module/action/AuthAction.test.ts @@ -74,7 +74,7 @@ describe('AuthAction', () => { await store.dispatch(actionRoot.authAction.doLoginPlain({clientType: ClientType.PERMANENT, email, password})); expect(store.getActions()).toEqual([AuthActionCreator.startLogin(), AuthActionCreator.successfulLogin()]); - expect(spies.setLocalStorage.calls.count()).toEqual(5); + expect(spies.setLocalStorage.calls.count()).toEqual(1); expect(spies.setCookie.calls.count()).toEqual(1); expect(spies.fetchSelf.calls.count()).toEqual(1); expect(spies.generateClientPayload.calls.count()).toEqual(1); diff --git a/src/script/auth/module/action/AuthAction.ts b/src/script/auth/module/action/AuthAction.ts index e9e8fcea54f..6bf3e018994 100644 --- a/src/script/auth/module/action/AuthAction.ts +++ b/src/script/auth/module/action/AuthAction.ts @@ -24,7 +24,6 @@ import {ClientType} from '@wireapp/api-client/lib/client/'; import {LowDiskSpaceError} from '@wireapp/store-engine/lib/engine/error'; import {StatusCodes as HTTP_STATUS} from 'http-status-codes'; -import type {Account} from '@wireapp/core'; import type {CRUDEngine} from '@wireapp/store-engine'; import {SQLeetEngine} from '@wireapp/store-engine-sqleet'; @@ -103,7 +102,7 @@ export class AuthAction { try { await onBeforeLogin(dispatch, getState, global); await core.login(loginData, false, clientAction.generateClientPayload(loginData.clientType)); - await this.persistAuthData(loginData.clientType, core, dispatch, localStorageAction); + await this.persistClientData(loginData.clientType, dispatch, localStorageAction); await dispatch( cookieAction.setCookie(COOKIE_NAME_APP_OPENED, {appInstanceId: global.getConfig().APP_INSTANCE_ID}), ); @@ -176,7 +175,7 @@ export class AuthAction { try { // we first init the core without initializing the client for now (this will be done later on) await core.init(clientType, {initClient: false}); - await this.persistAuthData(clientType, core, dispatch, localStorageAction); + await this.persistClientData(clientType, dispatch, localStorageAction); await dispatch(selfAction.fetchSelf()); await dispatch(cookieAction.setCookie(COOKIE_NAME_APP_OPENED, {appInstanceId: getConfig().APP_INSTANCE_ID})); await dispatch(clientAction.doInitializeClient(clientType)); @@ -221,26 +220,16 @@ export class AuthAction { }; }; - persistAuthData = ( + private persistClientData = ( clientType: ClientType, - core: Account, dispatch: ThunkDispatch, localStorageAction: LocalStorageAction, - ): Promise => { - const persist = clientType === ClientType.PERMANENT; - const accessToken = core['apiClient']['accessTokenStore'].accessToken; - const expiresMillis = accessToken.expires_in * 1000; - const expireTimestamp = Date.now() + expiresMillis; - const saveTasks = [ - dispatch(localStorageAction.setLocalStorage(LocalStorageKey.AUTH.ACCESS_TOKEN.EXPIRATION, expireTimestamp)), - dispatch(localStorageAction.setLocalStorage(LocalStorageKey.AUTH.ACCESS_TOKEN.TTL, expiresMillis)), - dispatch(localStorageAction.setLocalStorage(LocalStorageKey.AUTH.ACCESS_TOKEN.TYPE, accessToken.token_type)), - dispatch(localStorageAction.setLocalStorage(LocalStorageKey.AUTH.ACCESS_TOKEN.VALUE, accessToken.access_token)), - ]; - if (clientType !== ClientType.NONE) { - saveTasks.push(dispatch(localStorageAction.setLocalStorage(LocalStorageKey.AUTH.PERSIST, persist))); + ): Promise => { + if (clientType === ClientType.NONE) { + return Promise.resolve(); } - return Promise.all(saveTasks); + const persist = clientType === ClientType.PERMANENT; + return dispatch(localStorageAction.setLocalStorage(LocalStorageKey.AUTH.PERSIST, persist)); }; pushAccountRegistrationData = (registration: Partial): ThunkAction => { @@ -279,7 +268,7 @@ export class AuthAction { try { await dispatch(this.doSilentLogout()); await core.register(registration, clientType); - await this.persistAuthData(clientType, core, dispatch, localStorageAction); + await this.persistClientData(clientType, dispatch, localStorageAction); await dispatch(cookieAction.setCookie(COOKIE_NAME_APP_OPENED, {appInstanceId: getConfig().APP_INSTANCE_ID})); await dispatch(selfAction.fetchSelf()); await dispatch(clientAction.doInitializeClient(clientType)); @@ -306,7 +295,7 @@ export class AuthAction { try { await dispatch(authAction.doSilentLogout()); await core.register(registration, clientType); - await this.persistAuthData(clientType, core, dispatch, localStorageAction); + await this.persistClientData(clientType, dispatch, localStorageAction); await dispatch(cookieAction.setCookie(COOKIE_NAME_APP_OPENED, {appInstanceId: getConfig().APP_INSTANCE_ID})); await dispatch(selfAction.fetchSelf()); await dispatch(clientAction.doInitializeClient(clientType, undefined, undefined, entropyData)); @@ -336,7 +325,7 @@ export class AuthAction { try { await dispatch(authAction.doSilentLogout()); await core.register(registrationData, clientType); - await this.persistAuthData(clientType, core, dispatch, localStorageAction); + await this.persistClientData(clientType, dispatch, localStorageAction); await dispatch(cookieAction.setCookie(COOKIE_NAME_APP_OPENED, {appInstanceId: getConfig().APP_INSTANCE_ID})); await dispatch(selfAction.fetchSelf()); await (clientType !== ClientType.NONE && @@ -365,7 +354,7 @@ export class AuthAction { const clientType = persist ? ClientType.PERMANENT : ClientType.TEMPORARY; await core.init(clientType, {initClient: false}); - await this.persistAuthData(clientType, core, dispatch, localStorageAction); + await this.persistClientData(clientType, dispatch, localStorageAction); if (options.shouldValidateLocalClient) { await dispatch(authAction.validateLocalClient()); @@ -428,7 +417,6 @@ export class AuthAction { window.location.reload(); } await dispatch(cookieAction.safelyRemoveCookie(COOKIE_NAME_APP_OPENED, getConfig().APP_INSTANCE_ID)); - await dispatch(localStorageAction.deleteLocalStorage(LocalStorageKey.AUTH.ACCESS_TOKEN.VALUE)); dispatch(AuthActionCreator.successfulLogout()); } catch (error) { dispatch(AuthActionCreator.failedLogout(error)); @@ -442,7 +430,6 @@ export class AuthAction { try { await core.logout(); await dispatch(cookieAction.safelyRemoveCookie(COOKIE_NAME_APP_OPENED, getConfig().APP_INSTANCE_ID)); - await dispatch(localStorageAction.deleteLocalStorage(LocalStorageKey.AUTH.ACCESS_TOKEN.VALUE)); dispatch(AuthActionCreator.successfulSilentLogout()); } catch (error) { dispatch(AuthActionCreator.failedLogout(error)); diff --git a/src/script/auth/module/action/LocalStorageAction.ts b/src/script/auth/module/action/LocalStorageAction.ts index 01449711aff..16647e15ae1 100644 --- a/src/script/auth/module/action/LocalStorageAction.ts +++ b/src/script/auth/module/action/LocalStorageAction.ts @@ -23,12 +23,6 @@ import type {ThunkAction} from '../reducer'; export const LocalStorageKey = { AUTH: { - ACCESS_TOKEN: { - EXPIRATION: '__amplify__z.storage.StorageKey.AUTH.ACCESS_TOKEN.EXPIRATION', - TTL: '__amplify__z.storage.StorageKey.AUTH.ACCESS_TOKEN.TTL', - TYPE: '__amplify__z.storage.StorageKey.AUTH.ACCESS_TOKEN.TYPE', - VALUE: '__amplify__z.storage.StorageKey.AUTH.ACCESS_TOKEN.VALUE', - }, COOKIE_LABEL: '__amplify__z.storage.StorageKey.AUTH.COOKIE_LABEL', LOGIN_CONVERSATION_KEY: 'LOGIN_CONVERSATION_KEY', PERSIST: '__amplify__z.storage.StorageKey.AUTH.PERSIST', From c98b6599c088d6c6508fff62068d729fb54f557a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patryk=20G=C3=B3rka?= Date: Mon, 12 Dec 2022 11:45:54 +0100 Subject: [PATCH 136/329] refactor: use disposable ref hook (#14302) * refactor: new implementation of disposable ref * refactor: use new disposable ref for detecting long quotes * refactor: rename original function and fix tests * refactor: improve message rendere key * refactor: get rid of useDisposableRef hook in MemberMessage component * refactor: remove useDisposableRef hook from TextMessageRenderer component * refactor: remove useDisposableRef hook --- .../asset/TextMessageRenderer.tsx | 40 ++++----- .../MessagesList/Message/MemberMessage.tsx | 20 ++--- src/script/util/useDisposableRef/index.ts | 20 ----- .../useDisposableRef.test.tsx | 90 ------------------- .../util/useDisposableRef/useDisposableRef.ts | 39 -------- 5 files changed, 26 insertions(+), 183 deletions(-) delete mode 100644 src/script/util/useDisposableRef/index.ts delete mode 100644 src/script/util/useDisposableRef/useDisposableRef.test.tsx delete mode 100644 src/script/util/useDisposableRef/useDisposableRef.ts diff --git a/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer.tsx b/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer.tsx index 6879739ae96..1fb91e7aae7 100644 --- a/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer.tsx +++ b/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer.tsx @@ -17,12 +17,11 @@ * */ -import {useEffect, useRef, FC} from 'react'; +import {useEffect, FC, useState} from 'react'; import {Text} from 'src/script/entity/message/Text'; import {getAllFocusableElements, setElementsTabIndex} from 'Util/focusUtil'; import {handleKeyDown} from 'Util/KeyboardUtil'; -import {useDisposableRef} from 'Util/useDisposableRef'; export type ElementType = 'markdownLink' | 'email' | 'mention'; @@ -59,32 +58,34 @@ export const TextMessageRenderer: FC = ({ setCanShowMore, ...props }) => { - const containerRef = useRef(null); - const detectLongQuotes = useDisposableRef( - element => { + const [containerRef, setContainerRef] = useState(null); + + useEffect(() => { + const element = containerRef; + + if (element && isQuoteMsg) { const preNode = element.querySelector('pre'); const width = Math.max(element.scrollWidth, preNode ? preNode.scrollWidth : 0); const height = Math.max(element.scrollHeight, preNode ? preNode.scrollHeight : 0); const isWider = width > element.clientWidth; const isHigher = height > element.clientHeight; setCanShowMore?.(isWider || isHigher); - return () => {}; - }, - [editedTimestamp], - ); + } + }, [isQuoteMsg, setCanShowMore, containerRef]); useEffect(() => { - if (!containerRef.current) { + const element = containerRef; + if (!element) { return undefined; } - const interactiveMsgElements = getAllFocusableElements(containerRef.current); + const interactiveMsgElements = getAllFocusableElements(element); setElementsTabIndex(interactiveMsgElements, isCurrentConversationFocused); - const emailLinks = [...containerRef.current.querySelectorAll('[data-email-link]')]; - const markdownLinkTargets = [...containerRef.current.querySelectorAll('[data-md-link]')]; + const emailLinks = [...element.querySelectorAll('[data-email-link]')]; + const markdownLinkTargets = [...element.querySelectorAll('[data-md-link]')]; const hasMentions = asset && asset.mentions().length; - const msgMentions = hasMentions ? [...containerRef.current.querySelectorAll('.message-mention')] : []; + const msgMentions = hasMentions ? [...element.querySelectorAll('.message-mention')] : []; const handleKeyEvent = (event: KeyboardEvent, elementType: ElementType, messageDetails: MessageDetails) => { if (isCurrentConversationFocused) { @@ -153,17 +154,12 @@ export const TextMessageRenderer: FC = ({ removeEventListener(markdownLinkTargets); removeEventListener(msgMentions); }; - }, [onMessageClick, asset, isCurrentConversationFocused]); + }, [onMessageClick, asset, isCurrentConversationFocused, containerRef]); return (

    { - if (isQuoteMsg) { - containerRef.current = detectLongQuotes(element); - } else { - containerRef.current = element; - } - }} + ref={setContainerRef} + key={`${editedTimestamp}:${text}`} className={msgClass} dangerouslySetInnerHTML={{__html: text}} dir="auto" diff --git a/src/script/components/MessagesList/Message/MemberMessage.tsx b/src/script/components/MessagesList/Message/MemberMessage.tsx index f4aac298ded..41743b79c72 100644 --- a/src/script/components/MessagesList/Message/MemberMessage.tsx +++ b/src/script/components/MessagesList/Message/MemberMessage.tsx @@ -25,7 +25,6 @@ import {Icon} from 'Components/Icon'; import {User} from 'src/script/entity/User'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; import {t} from 'Util/LocalizerUtil'; -import {useDisposableRef} from 'Util/useDisposableRef'; import {ConnectedMessage} from './memberMessage/ConnectedMessage'; import {MessageTime} from './MessageTime'; @@ -82,17 +81,12 @@ const MemberMessage: React.FC = ({ const isMemberLeave = message.isMemberLeave(); const isMemberChange = message.isMemberChange(); - const initShowMore = useDisposableRef(element => { - const link = element.querySelector('.message-header-show-more'); - if (link) { - const listener = () => onClickParticipants(highlightedUsers); - link.addEventListener('click', listener); - return () => { - link.removeEventListener('click', listener); - }; + const handleShowMoreClick = (event: React.MouseEvent) => { + const clickedOnShowMore = (event.target as HTMLElement).closest('.message-header-show-more'); + if (clickedOnShowMore) { + onClickParticipants(highlightedUsers); } - return () => {}; - }); + }; return ( <> @@ -121,7 +115,9 @@ const MemberMessage: React.FC = ({ {isMemberRemoval && } {isMemberJoin && } -

    + {/* event is being triggered only when clicked on tag with specified class (keyboard accessible by default) */} + {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions */} +

    {isMemberChange && ( diff --git a/src/script/util/useDisposableRef/index.ts b/src/script/util/useDisposableRef/index.ts deleted file mode 100644 index b92524efb8c..00000000000 --- a/src/script/util/useDisposableRef/index.ts +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Wire - * Copyright (C) 2022 Wire Swiss GmbH - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see http://www.gnu.org/licenses/. - * - */ - -export * from './useDisposableRef'; diff --git a/src/script/util/useDisposableRef/useDisposableRef.test.tsx b/src/script/util/useDisposableRef/useDisposableRef.test.tsx deleted file mode 100644 index 73d1ed33827..00000000000 --- a/src/script/util/useDisposableRef/useDisposableRef.test.tsx +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Wire - * Copyright (C) 2022 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, waitFor} from '@testing-library/react'; - -import {useDisposableRef} from './useDisposableRef'; - -interface ComponentProps { - callback: (element: HTMLElement) => () => void; - state?: number; - otherState?: number; -} -const Component: React.FC = ({callback, state = 0}: ComponentProps) => { - const disposableRef = useDisposableRef(callback, [state]); - - return ( -
    -
    {state}
    -
    - ); -}; - -describe('useDisposableRef', () => { - it('initialize the function when the component is mounted', async () => { - const initFn = jest.fn(); - render(); - await waitFor(() => expect(initFn).toHaveBeenCalled()); - }); - - it('runs the dispose function when component is unmounted', async () => { - const disposeFn = jest.fn(); - const initFn = jest.fn(() => disposeFn); - - const {unmount} = render(); - await waitFor(() => expect(initFn).toHaveBeenCalled()); - - expect(disposeFn).not.toHaveBeenCalled(); - unmount(); - expect(disposeFn).toHaveBeenCalled(); - }); - - it('runs the dispose and the init when element updates', async () => { - const disposeFn = jest.fn(); - const initFn = jest.fn(e => { - return disposeFn; - }); - - const {rerender} = render(); - await waitFor(() => expect(initFn).toHaveBeenCalled()); - - expect(initFn).toHaveBeenCalledTimes(1); - expect(disposeFn).not.toHaveBeenCalled(); - - rerender(); - expect(disposeFn).toHaveBeenCalled(); - expect(initFn).toHaveBeenCalledTimes(2); - }); - - it('does not re-run if component is rerendered but dependencies have not changed', () => { - const disposeFn = jest.fn(); - const initFn = jest.fn(e => { - return disposeFn; - }); - - const {rerender} = render(); - - expect(initFn).toHaveBeenCalledTimes(1); - expect(disposeFn).not.toHaveBeenCalled(); - - rerender(); - expect(disposeFn).not.toHaveBeenCalled(); - expect(initFn).toHaveBeenCalledTimes(1); - }); -}); diff --git a/src/script/util/useDisposableRef/useDisposableRef.ts b/src/script/util/useDisposableRef/useDisposableRef.ts deleted file mode 100644 index a623cadc7b6..00000000000 --- a/src/script/util/useDisposableRef/useDisposableRef.ts +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Wire - * Copyright (C) 2022 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 {useLayoutEffect, useRef} from 'react'; - -/** - * Hooks that takes an init function that will be ran whenever a DOM element changes - * The initFunction can return a dispose callback for when the element is removed from the DOM - * @param init The function to run on the DOM element pointed as ref - * @param dependencies List of dependencies that should re trigger the initFunction - */ -export function useDisposableRef(init: (element: HTMLElement) => () => void, dependencies?: unknown[]) { - const elementRef = useRef(null!); - - useLayoutEffect(() => { - return elementRef.current ? init(elementRef.current) : () => {}; - }, dependencies); - - return (element: HTMLDivElement | null) => { - elementRef.current = element; - return elementRef.current; - }; -} From a59d5078fb46ab441b759ef9d4239a785078cab4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20J=C3=B3=C5=BAwik?= Date: Mon, 12 Dec 2022 12:49:12 +0100 Subject: [PATCH 137/329] feat: update headings (#14258) * feat: update headings * update headings * update left sidebar heading --- src/script/components/HistoryImport/index.tsx | 2 +- .../Message/ContentMessage/index.tsx | 14 +- .../components/MessagesList/Message/index.tsx | 19 +- .../memberMessage/ConnectedMessage.tsx | 8 +- src/script/components/TitleBar/TitleBar.tsx | 4 +- src/script/components/UserList.tsx | 21 +- src/script/components/UserSearchableList.tsx | 2 +- src/script/components/calling/CallingCell.tsx | 20 +- .../calling/FullscreenVideoCall.tsx | 6 +- .../ConversationProtocolDetails.tsx | 41 ++-- src/script/components/panel/UserDetails.tsx | 1 + src/script/page/LeftSidebar/LeftSidebar.tsx | 10 +- .../page/LeftSidebar/panels/Archive.tsx | 2 + .../panels/Conversations/Conversations.tsx | 197 +++++++++--------- .../Conversations/ConversationsList.tsx | 21 +- .../GroupedConversationHeader.tsx | 4 + .../page/LeftSidebar/panels/ListWrapper.tsx | 40 ++-- .../LeftSidebar/panels/StartUI/StartUI.tsx | 46 ++-- src/script/page/MainContent/MainContent.tsx | 4 +- .../ConversationDetails.tsx | 4 +- .../ConversationDetailsBottomActions.tsx | 6 + .../ConversationDetailsHeader.tsx | 2 +- .../ConversationDetailsOptions.tsx | 2 +- .../RightSidebar/PanelHeader/PanelHeader.tsx | 8 +- .../ParticipantDevices/ParticipantDevices.tsx | 2 + src/script/page/RightSidebar/RightSidebar.tsx | 1 + src/style/foundation/video-calling.less | 8 +- src/style/list/conversations.less | 24 ++- src/style/list/list.less | 1 + src/style/panel/conversation-details.less | 1 + 30 files changed, 295 insertions(+), 226 deletions(-) diff --git a/src/script/components/HistoryImport/index.tsx b/src/script/components/HistoryImport/index.tsx index 5f8c8f11d3e..33860342b42 100644 --- a/src/script/components/HistoryImport/index.tsx +++ b/src/script/components/HistoryImport/index.tsx @@ -154,7 +154,7 @@ const HistoryImport: FC = ({backupRepository, file, switchCo return (
    -

    {t('accessibility.headings.historyImport')}

    +

    {t('accessibility.headings.historyImport')}

    {isPreparing && } diff --git a/src/script/components/MessagesList/Message/ContentMessage/index.tsx b/src/script/components/MessagesList/Message/ContentMessage/index.tsx index 05964b6295d..a6a1967ced9 100644 --- a/src/script/components/MessagesList/Message/ContentMessage/index.tsx +++ b/src/script/components/MessagesList/Message/ContentMessage/index.tsx @@ -120,15 +120,18 @@ const ContentMessageComponent: React.FC = ({ avatarSize={AVATAR_SIZE.X_SMALL} />
    +
    - +

    {headerSenderName} - +

    + {message.user().isService && ( )} + {message.user().isExternal() && ( = ({ )} + {message.user().isFederated && ( = ({ )} + {message.user().isDirectGuest() && ( = ({ )} + {was_edited && ( )} @@ -233,6 +239,7 @@ const ContentMessageComponent: React.FC = ({ onClick={event => showContextMenu(event, menuEntries, 'message-options-menu')} > )} + {ephemeral_status === EphemeralStatusType.ACTIVE && ( )} + {ephemeral_status !== EphemeralStatusType.ACTIVE && ( {message.displayTimestampShort()} )} + = ({ />
    + {other_likes.length > 0 && (
    { @@ -183,6 +183,7 @@ const Message: React.FC< isMsgElementsFocusable={isMsgElementsFocusable} /> ); + const wrappedContent = onVisible ? ( {content} @@ -190,6 +191,7 @@ const Message: React.FC< ) : ( content ); + return (
    - +
    -
    + +

    - {timeago} + {timeAgo} + - {timeagoDay} + {timeAgoDay} -

    +
    + {/*eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions*/}
    = ({ 'providerName', 'isOutgoingRequest', ]); - const handle = user.handle; - const isService = user.isService; + const {handle, isService} = user; return (

    {name}

    + {isService ? (

    {providerName}

    ) : (

    {handle}

    )} + {isOutgoingRequest && classifiedDomains && } + + {isOutgoingRequest && ( )} + {showServicesWarning && (
    {t('conversationServicesWarning')} diff --git a/src/script/components/TitleBar/TitleBar.tsx b/src/script/components/TitleBar/TitleBar.tsx index 4875be43265..0807882df5a 100644 --- a/src/script/components/TitleBar/TitleBar.tsx +++ b/src/script/components/TitleBar/TitleBar.tsx @@ -251,9 +251,9 @@ export const TitleBar: React.FC = ({ /> )} -

    + {displayName} -

    +
    {conversationSubtitle &&
    {conversationSubtitle}
    } diff --git a/src/script/components/UserList.tsx b/src/script/components/UserList.tsx index de7d29771ee..a3c6bb8af9a 100644 --- a/src/script/components/UserList.tsx +++ b/src/script/components/UserList.tsx @@ -17,7 +17,7 @@ * */ -import React, {ChangeEvent, Fragment, useState} from 'react'; +import React, {ChangeEvent, useState} from 'react'; import cx from 'classnames'; import {container} from 'tsyringe'; @@ -147,10 +147,11 @@ const UserList: React.FC = ({ content = ( <> {(admins.length > 0 || showEmptyAdmin) && ( - -
    + <> +

    {t('searchListAdmins', adminCount)} -

    + + {admins.length > 0 && (
      {admins.slice(0, maxShownUsers).map(user => ( @@ -180,13 +181,15 @@ const UserList: React.FC = ({ {t('searchListNoAdmins')}
    )} - + )} + {members.length > 0 && maxShownUsers > admins.length && ( - -
    + <> +

    {t('searchListMembers', memberCount)} -

    + +
      {members.slice(0, maxShownUsers - admins.length).map(user => (
    • @@ -209,7 +212,7 @@ const UserList: React.FC = ({
    • ))}
    -
    + )} ); diff --git a/src/script/components/UserSearchableList.tsx b/src/script/components/UserSearchableList.tsx index 359256e83a0..907798cfb06 100644 --- a/src/script/components/UserSearchableList.tsx +++ b/src/script/components/UserSearchableList.tsx @@ -157,7 +157,7 @@ const UserSearchableList: React.FC = ({ const noResultsTranslationText = hasUsers ? 'searchListEveryoneParticipates' : 'searchListNoMatches'; return ( -
    +
    {isEmptyUserList ? (
    {t(noResultsTranslationText)} diff --git a/src/script/components/calling/CallingCell.tsx b/src/script/components/calling/CallingCell.tsx index 7cfd3da154c..e7e97064d2a 100644 --- a/src/script/components/calling/CallingCell.tsx +++ b/src/script/components/calling/CallingCell.tsx @@ -262,36 +262,38 @@ const CallingCell: React.FC = ({ )}
    )} -
    -

    {conversationName}

    + {conversationName} {currentCallStatus && ( -

    + {currentCallStatus.text} -

    + )} {isOngoing && startedAt && (
    -

    -

    + + {isCbrEnabled && ( -

    + {t('callStateCbr')} -

    + )}
    )} -
    +
    diff --git a/src/script/components/calling/FullscreenVideoCall.tsx b/src/script/components/calling/FullscreenVideoCall.tsx index 799612609db..38f2e00e06e 100644 --- a/src/script/components/calling/FullscreenVideoCall.tsx +++ b/src/script/components/calling/FullscreenVideoCall.tsx @@ -193,6 +193,7 @@ const FullscreenVideoCall: React.FC = ({ onClick={minimize} /> )} + {classifiedDomains && ( = ({ }} /> )} +
    - {conversationName} +

    {conversationName}

    +
    + {muteState === MuteState.REMOTE_MUTED && (
    = ({protocol, cipherSuite}) => { - return ( -
    -
    {t('conversationDetailsProtocolDetails')}
    -
    -
    Protocol
    -

    - {protocol.toUpperCase()} -

    - {protocol === ConversationProtocol.MLS && cipherSuite && ( - <> -
    Cipher Suite
    -

    - {Ciphersuite[cipherSuite]} -

    - - )} -
    +const ConversationProtocolDetails: React.FC = ({protocol, cipherSuite}) => ( +
    +

    {t('conversationDetailsProtocolDetails')}

    + +
    +
    Protocol
    + +

    + {protocol.toUpperCase()} +

    + + {protocol === ConversationProtocol.MLS && cipherSuite && ( + <> +
    Cipher Suite
    +

    + {Ciphersuite[cipherSuite]} +

    + + )}
    - ); -}; +
    +); export {ConversationProtocolDetails}; diff --git a/src/script/components/panel/UserDetails.tsx b/src/script/components/panel/UserDetails.tsx index 23300cc3b55..b45fa132179 100644 --- a/src/script/components/panel/UserDetails.tsx +++ b/src/script/components/panel/UserDetails.tsx @@ -80,6 +80,7 @@ const UserDetails: React.FC = ({ {user.name} )} + {isSelfVerified && user.is_verified && ( = ({listViewModel, selfUser, isAct }, []); return ( -
    -
    -

    {t('accessibility.headings.sidebar')}

    -
    - +
    + ); }; diff --git a/src/script/page/LeftSidebar/panels/Archive.tsx b/src/script/page/LeftSidebar/panels/Archive.tsx index 289932d2906..73665eb04c2 100644 --- a/src/script/page/LeftSidebar/panels/Archive.tsx +++ b/src/script/page/LeftSidebar/panels/Archive.tsx @@ -70,6 +70,8 @@ const Archive: React.FC = ({ return ( +

    {t('archiveHeader')}

    +
    ); }; diff --git a/src/script/page/RightSidebar/ConversationDetails/ConversationDetails.tsx b/src/script/page/RightSidebar/ConversationDetails/ConversationDetails.tsx index 6928288cd87..64df0cd7512 100644 --- a/src/script/page/RightSidebar/ConversationDetails/ConversationDetails.tsx +++ b/src/script/page/RightSidebar/ConversationDetails/ConversationDetails.tsx @@ -24,8 +24,10 @@ import {RECEIPT_MODE} from '@wireapp/api-client/lib/conversation/data/'; import {FadingScrollbar} from 'Components/FadingScrollbar'; import {Icon} from 'Components/Icon'; import {ConversationProtocolDetails} from 'Components/panel/ConversationProtocolDetails/ConversationProtocolDetails'; +import {EnrichedFields} from 'Components/panel/EnrichedFields'; import {PanelActions} from 'Components/panel/PanelActions'; import {ServiceDetails} from 'Components/panel/ServiceDetails'; +import {UserDetails} from 'Components/panel/UserDetails'; import {ServiceList} from 'Components/ServiceList'; import {UserSearchableList} from 'Components/UserSearchableList'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; @@ -36,7 +38,6 @@ import {formatDuration} from 'Util/TimeUtil'; import {ConversationDetailsBottomActions} from './components/ConversationDetailsBottomActions'; import {ConversationDetailsHeader} from './components/ConversationDetailsHeader'; import {ConversationDetailsOptions} from './components/ConversationDetailsOptions'; -import {UserConversationDetails} from './components/UserConversationDetails'; import {getConversationActions} from './utils/getConversationActions'; import {ConversationRepository} from '../../../conversation/ConversationRepository'; @@ -276,15 +277,17 @@ const ConversationDetails: FC = ({ {isSingleUserMode && isServiceMode && selectedService && } {isSingleUserMode && !isServiceMode && firstParticipant && ( - + <> + + + + )} {!isSingleUserMode && ( @@ -398,13 +401,31 @@ const ConversationDetails: FC = ({ {isActivatedAccount && ( <> + {isSingleUserMode && ( +
    + + {hasReceiptsEnabled + ? t('conversationDetails1to1ReceiptsHeadEnabled') + : t('conversationDetails1to1ReceiptsHeadDisabled')} + + +

    + {t('conversationDetails1to1ReceiptsFirst')} +

    + +

    + {t('conversationDetails1to1ReceiptsSecond')} +

    +
    + )} + )} diff --git a/src/script/page/RightSidebar/ConversationDetails/components/ConversationDetailsBottomActions/ConversationDetailsBottomActions.tsx b/src/script/page/RightSidebar/ConversationDetails/components/ConversationDetailsBottomActions/ConversationDetailsBottomActions.tsx index f680ca713ac..b0f4bc2c798 100644 --- a/src/script/page/RightSidebar/ConversationDetails/components/ConversationDetailsBottomActions/ConversationDetailsBottomActions.tsx +++ b/src/script/page/RightSidebar/ConversationDetails/components/ConversationDetailsBottomActions/ConversationDetailsBottomActions.tsx @@ -23,21 +23,21 @@ import {Icon} from 'Components/Icon'; import {t} from 'Util/LocalizerUtil'; interface ConversationDetailsBottomActionsProps { + isDeviceActionEnabled: boolean; + showDevices: () => void; showNotifications: () => void; showOptionNotifications1To1?: boolean; - isSingleUserMode?: boolean; - hasReceiptsEnabled?: boolean; notificationStatusText?: string; } const ConversationDetailsBottomActions: FC = ({ + isDeviceActionEnabled = false, + showDevices, showNotifications, showOptionNotifications1To1 = false, - isSingleUserMode = false, - hasReceiptsEnabled = false, notificationStatusText = '', }) => { - const renderConversationDetailsActions = showOptionNotifications1To1 || isSingleUserMode; + const renderConversationDetailsActions = showOptionNotifications1To1 || isDeviceActionEnabled; if (!renderConversationDetailsActions) { return null; @@ -45,6 +45,20 @@ const ConversationDetailsBottomActions: FC + {isDeviceActionEnabled && ( +
  • + +
  • + )} + {showOptionNotifications1To1 && (
  • )} - - {isSingleUserMode && ( -
  • -

    - {hasReceiptsEnabled - ? t('conversationDetails1to1ReceiptsHeadEnabled') - : t('conversationDetails1to1ReceiptsHeadDisabled')} -

    - -

    - {t('conversationDetails1to1ReceiptsFirst')} -

    - -

    {t('conversationDetails1to1ReceiptsSecond')}

    -
  • - )} ); }; diff --git a/src/script/page/RightSidebar/ConversationDetails/components/UserConversationDetails/UserConversationDetails.tsx b/src/script/page/RightSidebar/ConversationDetails/components/UserConversationDetails/UserConversationDetails.tsx deleted file mode 100644 index 0b2f0b9cc3f..00000000000 --- a/src/script/page/RightSidebar/ConversationDetails/components/UserConversationDetails/UserConversationDetails.tsx +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Wire - * Copyright (C) 2022 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 {FC} from 'react'; - -import {Icon} from 'Components/Icon'; -import {EnrichedFields} from 'Components/panel/EnrichedFields'; -import {UserDetails} from 'Components/panel/UserDetails'; -import {t} from 'Util/LocalizerUtil'; - -import {User} from '../../../../../entity/User'; - -interface UserConversationDetailsProps { - firstParticipant: User; - onDevicesClick: () => void; - badge?: string; - classifiedDomains?: string[]; - isVerified?: boolean; - isSelfVerified?: boolean; - isFederated?: boolean; -} - -const UserConversationDetails: FC = ({ - firstParticipant, - onDevicesClick, - isVerified = false, - isSelfVerified = false, - isFederated = false, - badge = '', - classifiedDomains, -}) => { - return ( - <> - - - - - {(firstParticipant.isConnected || firstParticipant.inTeam) && ( -
    - -
    - )} - - ); -}; - -export {UserConversationDetails}; diff --git a/src/script/page/RightSidebar/ConversationDetails/components/UserConversationDetails/index.ts b/src/script/page/RightSidebar/ConversationDetails/components/UserConversationDetails/index.ts deleted file mode 100644 index 0f0dcd4f0ef..00000000000 --- a/src/script/page/RightSidebar/ConversationDetails/components/UserConversationDetails/index.ts +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Wire - * Copyright (C) 2022 Wire Swiss GmbH - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see http://www.gnu.org/licenses/. - * - */ - -export * from './UserConversationDetails'; diff --git a/src/style/panel/panel.less b/src/style/panel/panel.less index 6a4e30efae4..3dd65cf61c8 100644 --- a/src/style/panel/panel.less +++ b/src/style/panel/panel.less @@ -158,6 +158,7 @@ } &--head { + display: block; font-weight: @font-weight-bold; text-transform: uppercase; } From 5b963e5b2b419dbce1b7f01ba4e1c8fbe85d0aec Mon Sep 17 00:00:00 2001 From: Thomas Belin Date: Mon, 12 Dec 2022 15:11:22 +0100 Subject: [PATCH 141/329] refactor: Use delegate event handlers for message clicks (#14306) --- .../components/Conversation/Conversation.tsx | 2 - .../asset/TextMessageRenderer.test.tsx | 6 +- .../asset/TextMessageRenderer.tsx | 135 +++++++----------- .../components/MessagesList/Message/index.tsx | 8 +- src/script/guards/Event.ts | 1 + 5 files changed, 59 insertions(+), 93 deletions(-) diff --git a/src/script/components/Conversation/Conversation.tsx b/src/script/components/Conversation/Conversation.tsx index 21d0eccb5f0..d4fb6b86c71 100644 --- a/src/script/components/Conversation/Conversation.tsx +++ b/src/script/components/Conversation/Conversation.tsx @@ -52,7 +52,6 @@ import {ContentMessage} from '../../entity/message/ContentMessage'; import {DecryptErrorMessage} from '../../entity/message/DecryptErrorMessage'; import {MemberMessage} from '../../entity/message/MemberMessage'; import {Message} from '../../entity/message/Message'; -import {Text} from '../../entity/message/Text'; import {User} from '../../entity/User'; import {UserError} from '../../error/UserError'; import {isMouseRightClickEvent, isAuxRightClickEvent} from '../../guards/Mouse'; @@ -330,7 +329,6 @@ export const Conversation: FC = ({ }; const handleClickOnMessage = ( - messageEntity: ContentMessage | Text, event: MouseEvent | KeyboardEvent, elementType: ElementType, messageDetails: MessageDetails = { diff --git a/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer.test.tsx b/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer.test.tsx index d0f8c53b6fc..807277c9986 100644 --- a/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer.test.tsx +++ b/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer.test.tsx @@ -103,10 +103,10 @@ describe('TextMessageRenderer', () => { expect(linkElem).not.toBe(null); fireEvent.click(linkElem); - expect(onClickElement).toHaveBeenCalled(); + expect(onClickElement).toHaveBeenCalledTimes(1); - fireEvent.keyDown(linkElem); - expect(onClickElement).toHaveBeenCalled(); + fireEvent.keyDown(linkElem, {key: 'Enter'}); + expect(onClickElement).toHaveBeenCalledTimes(2); }); it('should not trigger a key event if the message is not focused', () => { diff --git a/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer.tsx b/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer.tsx index 1fb91e7aae7..1d8e6f75f74 100644 --- a/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer.tsx +++ b/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer.tsx @@ -20,18 +20,15 @@ import {useEffect, FC, useState} from 'react'; import {Text} from 'src/script/entity/message/Text'; +import {isKeyDownEvent} from 'src/script/guards/Event'; +import {isMouseEvent} from 'src/script/guards/Mouse'; import {getAllFocusableElements, setElementsTabIndex} from 'Util/focusUtil'; import {handleKeyDown} from 'Util/KeyboardUtil'; export type ElementType = 'markdownLink' | 'email' | 'mention'; interface TextMessageRendererProps { - onMessageClick: ( - asset: Text, - event: MouseEvent | KeyboardEvent, - elementType: ElementType, - messageDetails: MessageDetails, - ) => void; + onMessageClick: (event: MouseEvent | KeyboardEvent, elementType: ElementType, messageDetails: MessageDetails) => void; text: string; isCurrentConversationFocused: boolean; msgClass: string; @@ -40,7 +37,6 @@ interface TextMessageRendererProps { editedTimestamp?: number; setCanShowMore?: (showMore: boolean) => void; } -const events = ['click', 'keydown', 'auxclick']; export interface MessageDetails { href?: string; userId?: string; @@ -74,92 +70,69 @@ export const TextMessageRenderer: FC = ({ }, [isQuoteMsg, setCanShowMore, containerRef]); useEffect(() => { - const element = containerRef; - if (!element) { - return undefined; + if (!containerRef) { + return; } - const interactiveMsgElements = getAllFocusableElements(element); + const interactiveMsgElements = getAllFocusableElements(containerRef); setElementsTabIndex(interactiveMsgElements, isCurrentConversationFocused); + }, [isCurrentConversationFocused, containerRef]); - const emailLinks = [...element.querySelectorAll('[data-email-link]')]; - const markdownLinkTargets = [...element.querySelectorAll('[data-md-link]')]; - const hasMentions = asset && asset.mentions().length; - const msgMentions = hasMentions ? [...element.querySelectorAll('.message-mention')] : []; - - const handleKeyEvent = (event: KeyboardEvent, elementType: ElementType, messageDetails: MessageDetails) => { - if (isCurrentConversationFocused) { - handleKeyDown(event, () => onMessageClick(asset, event, elementType, messageDetails)); - } - }; - - const handleMsgEvent = (event: Event) => { - const currentTarget = event.currentTarget as HTMLElement; - const markdownLinkTarget = currentTarget?.dataset.mdLink; - const emailLink = currentTarget?.dataset.emailLink; - const msgMention = currentTarget?.dataset.userId; - - if (emailLink) { - const href = (event.target as HTMLAnchorElement).href; - const emailDetails = { - href: href, - }; - - return event.type === 'keydown' - ? handleKeyEvent(event as KeyboardEvent, 'email', emailDetails) - : onMessageClick(asset, event as MouseEvent, 'email', emailDetails); - } else if (markdownLinkTarget) { - const href = (event.target as HTMLAnchorElement).href; - const markdownLinkDetails = { - href: href, - }; - - return event.type === 'keydown' - ? handleKeyEvent(event as KeyboardEvent, 'markdownLink', markdownLinkDetails) - : onMessageClick(asset, event as MouseEvent, 'markdownLink', markdownLinkDetails); - } else if (msgMention) { - const mentionMsgDetails = { - userId: currentTarget?.dataset.userId, - userDomain: currentTarget?.dataset.userDomain, - }; - - return event.type === 'keydown' - ? handleKeyEvent(event as KeyboardEvent, 'mention', mentionMsgDetails) - : onMessageClick(asset, event as MouseEvent, 'mention', mentionMsgDetails); - } - }; - - function addEventListener(elements: Element[]) { - elements?.forEach(element => { - events.forEach(eventName => { - element.addEventListener(eventName, handleMsgEvent); - }); + const forwardEvent = ( + event: KeyboardEvent | MouseEvent, + elementType: ElementType, + messageDetails: MessageDetails, + ) => { + if (isKeyDownEvent(event) && isCurrentConversationFocused) { + handleKeyDown(event, () => { + event.preventDefault(); + onMessageClick(event, elementType, messageDetails); }); + } else if (isMouseEvent(event)) { + event.preventDefault(); + onMessageClick(event, elementType, messageDetails); } - - function removeEventListener(elements: Element[]) { - elements?.forEach(element => { - events.forEach(eventName => { - element.removeEventListener(eventName, handleMsgEvent); - }); - }); + }; + + /** + * Will handle interaction with the message. + * Depending on the child element clicked, it will forward the event to the parent component. + */ + const handleInteraction = (event: React.MouseEvent | React.KeyboardEvent) => { + const target = event.target as HTMLElement; + if (!target) { + return; } - - addEventListener(emailLinks); - addEventListener(markdownLinkTargets); - addEventListener(msgMentions); - - return () => { - removeEventListener(emailLinks); - removeEventListener(markdownLinkTargets); - removeEventListener(msgMentions); - }; - }, [onMessageClick, asset, isCurrentConversationFocused, containerRef]); + const isEmail = target.closest('[data-email-link]'); + const isMarkdownLink = target.closest('[data-md-link]'); + const isMention = target.closest('.message-mention'); + + if (isEmail || isMarkdownLink) { + const href = (event.target as HTMLAnchorElement).href; + const markdownLinkDetails = { + href: href, + }; + forwardEvent(event.nativeEvent, isEmail ? 'email' : 'markdownLink', markdownLinkDetails); + } else if (isMention) { + const mentionMsgDetails = { + userId: target.dataset.userId, + userDomain: target.dataset.userDomain, + }; + forwardEvent(event.nativeEvent, 'mention', mentionMsgDetails); + } + }; return ( + // We will register the click event on the paragraph element and determine the type of the element clicked. + // This is because the paragraph element is fed with raw HTML and we cannot register the click event on the clickabled elements directly. + // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions

    void; onClickInvitePeople: () => void; onClickLikes: (message: BaseMessage) => void; - onClickMessage: ( - asset: Text, - event: MouseEvent | KeyboardEvent, - elementType: ElementType, - messageDetails: MessageDetails, - ) => void; + onClickMessage: (event: MouseEvent | KeyboardEvent, elementType: ElementType, messageDetails: MessageDetails) => void; onClickParticipants: (participants: User[]) => void; onClickReceipts: (message: BaseMessage) => void; onClickResetSession: (messageError: DecryptErrorMessage) => void; diff --git a/src/script/guards/Event.ts b/src/script/guards/Event.ts index fe4f97a5519..ba2690a69f3 100644 --- a/src/script/guards/Event.ts +++ b/src/script/guards/Event.ts @@ -18,3 +18,4 @@ */ export const isDragEvent = (event: Event): event is DragEvent => 'dataTransfer' in event; +export const isKeyDownEvent = (event: Event): event is KeyboardEvent => event.type === 'keydown'; From d160c69dc32b7b8ac816dce93b6244cba33fbff0 Mon Sep 17 00:00:00 2001 From: Thomas Belin Date: Mon, 12 Dec 2022 18:18:30 +0100 Subject: [PATCH 142/329] refactor: Improve quote long text detection (#14307) --- .../Message/ContentMessage/MessageQuote.tsx | 50 +++--------- .../ShowMoreButton.test.tsx} | 8 +- .../ShowMoreButton.tsx} | 43 +++++----- .../TextMessageRenderer.test.tsx | 72 ++++++----------- .../TextMessageRenderer.tsx | 78 ++++++++++++------- .../asset/TextMessageRenderer/index.ts | 20 +++++ .../Message/ContentMessage/asset/index.tsx | 3 +- 7 files changed, 127 insertions(+), 147 deletions(-) rename src/script/components/MessagesList/Message/ContentMessage/asset/{RenderShowMsgBtn.test.tsx => TextMessageRenderer/ShowMoreButton.test.tsx} (81%) rename src/script/components/MessagesList/Message/ContentMessage/asset/{RenderShowMsgBtn.tsx => TextMessageRenderer/ShowMoreButton.tsx} (55%) rename src/script/components/MessagesList/Message/ContentMessage/asset/{ => TextMessageRenderer}/TextMessageRenderer.test.tsx (68%) rename src/script/components/MessagesList/Message/ContentMessage/asset/{ => TextMessageRenderer}/TextMessageRenderer.tsx (63%) create mode 100644 src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer/index.ts diff --git a/src/script/components/MessagesList/Message/ContentMessage/MessageQuote.tsx b/src/script/components/MessagesList/Message/ContentMessage/MessageQuote.tsx index 45678920168..0dfb2ad6d5d 100644 --- a/src/script/components/MessagesList/Message/ContentMessage/MessageQuote.tsx +++ b/src/script/components/MessagesList/Message/ContentMessage/MessageQuote.tsx @@ -35,7 +35,6 @@ import {formatDateNumeral, formatTimeShort, isBeforeToday} from 'Util/TimeUtil'; import {AudioAsset} from './asset/AudioAsset'; import {FileAsset} from './asset/FileAssetComponent'; import {LocationAsset} from './asset/LocationAsset'; -import {RenderShowMsgBtn} from './asset/RenderShowMsgBtn'; import {TextMessageRenderer} from './asset/TextMessageRenderer'; import {VideoAsset} from './asset/VideoAsset'; @@ -160,21 +159,7 @@ const QuotedMessage: FC = ({ headerSenderName, was_edited, timestamp, - edited_timestamp: editedTimestamp, - } = useKoSubscribableChildren(quotedMessage, [ - 'user', - 'assets', - 'headerSenderName', - 'was_edited', - 'timestamp', - 'edited_timestamp', - ]); - const [showFullText, setShowFullText] = useState(false); - const [canShowMore, setCanShowMore] = useState(false); - - useEffect(() => { - setShowFullText(false); - }, [quotedMessage]); + } = useKoSubscribableChildren(quotedMessage, ['user', 'assets', 'headerSenderName', 'was_edited', 'timestamp']); return ( <> @@ -208,29 +193,16 @@ const QuotedMessage: FC = ({ )} {asset.isText() && ( - <> - - {canShowMore && ( - - )} - + )} {asset.isVideo() && ( diff --git a/src/script/components/MessagesList/Message/ContentMessage/asset/RenderShowMsgBtn.test.tsx b/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer/ShowMoreButton.test.tsx similarity index 81% rename from src/script/components/MessagesList/Message/ContentMessage/asset/RenderShowMsgBtn.test.tsx rename to src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer/ShowMoreButton.test.tsx index 745c7ddd169..839d5cd7196 100644 --- a/src/script/components/MessagesList/Message/ContentMessage/asset/RenderShowMsgBtn.test.tsx +++ b/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer/ShowMoreButton.test.tsx @@ -21,14 +21,14 @@ import {fireEvent, render} from '@testing-library/react'; import {t} from 'Util/LocalizerUtil'; -import {RenderShowMsgBtn} from './RenderShowMsgBtn'; +import {ShowMoreButton} from './ShowMoreButton'; -describe('ToggleMsgFullTxt', () => { +describe('ShowMoreButton', () => { it('toggles button show more/show less for a quoted message', () => { let show = true; const setShowFullText = jest.fn(show => !show); const {getByTestId, getByText, rerender} = render( - , + , ); expect(getByText(t('replyQuoteShowLess'))).not.toBeNull(); @@ -40,7 +40,7 @@ describe('ToggleMsgFullTxt', () => { show = false; // re-render the same component with different props - rerender(); + rerender(); fireEvent.click(toggleShowBtn); expect(setShowFullText).toHaveBeenCalled(); diff --git a/src/script/components/MessagesList/Message/ContentMessage/asset/RenderShowMsgBtn.tsx b/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer/ShowMoreButton.tsx similarity index 55% rename from src/script/components/MessagesList/Message/ContentMessage/asset/RenderShowMsgBtn.tsx rename to src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer/ShowMoreButton.tsx index 2c645ab87c6..b095d6ff5d1 100644 --- a/src/script/components/MessagesList/Message/ContentMessage/asset/RenderShowMsgBtn.tsx +++ b/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer/ShowMoreButton.tsx @@ -17,40 +17,37 @@ * */ -import {FC} from 'react'; +import {FC, HTMLProps} from 'react'; import cx from 'classnames'; import {Icon} from 'Components/Icon'; import {t} from 'Util/LocalizerUtil'; -interface ShowMsgBtnProps { - showFullText: boolean; +interface ShowMoreButtonProps { + active: boolean; isCurrentConversationFocused: boolean; - setShowFullText: (showMore: boolean) => void; } -export const RenderShowMsgBtn: FC = ({ - showFullText, +export const ShowMoreButton: FC> = ({ + active, isCurrentConversationFocused, - setShowFullText, + ...props }) => { return ( - <> - - + ); }; diff --git a/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer.test.tsx b/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer/TextMessageRenderer.test.tsx similarity index 68% rename from src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer.test.tsx rename to src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer/TextMessageRenderer.test.tsx index 807277c9986..b2a399a2c28 100644 --- a/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer.test.tsx +++ b/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer/TextMessageRenderer.test.tsx @@ -19,39 +19,14 @@ import {fireEvent, render} from '@testing-library/react'; -import {PROTO_MESSAGE_TYPE} from 'src/script/cryptography/ProtoMessageType'; -import {LinkPreview} from 'src/script/entity/message/LinkPreview'; -import {Text} from 'src/script/entity/message/Text'; -import {createRandomUuid} from 'Util/util'; - import {TextMessageRenderer} from './TextMessageRenderer'; -import {MentionEntity} from '../../../../../message/MentionEntity'; - -const mention = { - domain: '', - length: 0, - startIndex: 1, - type: PROTO_MESSAGE_TYPE.MENTION_TYPE_USER_ID, - userId: '1', -}; - -const textAsset = new Text(createRandomUuid()); -textAsset.mentions([new MentionEntity(mention.startIndex, mention.length, mention.userId, mention.domain)]); -textAsset.previews([new LinkPreview()]); - describe('TextMessageRenderer', () => { it('renders a text message', () => { const onClickElement = jest.fn(); const txtMsg = 'simple message'; const {getByText} = render( - , + , ); const txtMsgElement = getByText(txtMsg); expect(txtMsgElement).not.toBe(null); @@ -67,13 +42,7 @@ describe('TextMessageRenderer', () => { const onClickElement = jest.fn(); const text = `

    @jj
    yes it is`; const {getByTestId} = render( - , + , ); const mention = getByTestId('label-other-mention'); fireEvent.click(mention); @@ -88,16 +57,9 @@ describe('TextMessageRenderer', () => { const linkTxt = 'this is a link'; const text = `
    ${linkTxt}`; - textAsset.text = linkTxt; const {getByText} = render( - , + , ); const linkElem = getByText(linkTxt); expect(linkElem).not.toBe(null); @@ -114,16 +76,9 @@ describe('TextMessageRenderer', () => { const linkTxt = 'this is a link'; const text = `${linkTxt}`; - textAsset.text = linkTxt; const {getByText} = render( - , + , ); const linkElem = getByText(linkTxt); expect(linkElem).not.toBe(null); @@ -131,4 +86,23 @@ describe('TextMessageRenderer', () => { fireEvent.keyDown(linkElem); expect(onClickElement).not.toHaveBeenCalled(); }); + + it('collapses long text when asked to', () => { + const onClickElement = jest.fn(); + + const text = 'this is a link
    multiline text'; + + Object.defineProperty(HTMLParagraphElement.prototype, 'clientHeight', {get: () => 100}); + Object.defineProperty(HTMLParagraphElement.prototype, 'scrollHeight', {get: () => 200}); + + const {getByText} = render( + , + ); + const showMoreButton = getByText('replyQuoteShowMore'); + expect(showMoreButton).not.toBe(null); + + fireEvent.click(showMoreButton); + const showLessButton = getByText('replyQuoteShowLess'); + expect(showLessButton).not.toBe(null); + }); }); diff --git a/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer.tsx b/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer/TextMessageRenderer.tsx similarity index 63% rename from src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer.tsx rename to src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer/TextMessageRenderer.tsx index 1d8e6f75f74..8257b2af959 100644 --- a/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer.tsx +++ b/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer/TextMessageRenderer.tsx @@ -17,24 +17,23 @@ * */ -import {useEffect, FC, useState} from 'react'; +import {useEffect, FC, useState, HTMLProps, useRef} from 'react'; -import {Text} from 'src/script/entity/message/Text'; import {isKeyDownEvent} from 'src/script/guards/Event'; import {isMouseEvent} from 'src/script/guards/Mouse'; import {getAllFocusableElements, setElementsTabIndex} from 'Util/focusUtil'; import {handleKeyDown} from 'Util/KeyboardUtil'; +import {ShowMoreButton} from './ShowMoreButton'; + export type ElementType = 'markdownLink' | 'email' | 'mention'; interface TextMessageRendererProps { onMessageClick: (event: MouseEvent | KeyboardEvent, elementType: ElementType, messageDetails: MessageDetails) => void; text: string; isCurrentConversationFocused: boolean; - msgClass: string; - asset: Text; - isQuoteMsg?: boolean; - editedTimestamp?: number; + /** will collapse the text to a single line when set (and add a `showMore` button if there is more content to show) */ + collapse?: boolean; setCanShowMore?: (showMore: boolean) => void; } export interface MessageDetails { @@ -43,31 +42,34 @@ export interface MessageDetails { userDomain?: string; } -export const TextMessageRenderer: FC = ({ +export const TextMessageRenderer: FC> = ({ text, onMessageClick, - msgClass, isCurrentConversationFocused, - asset, - isQuoteMsg = false, - editedTimestamp, - setCanShowMore, + className, + collapse = false, ...props }) => { const [containerRef, setContainerRef] = useState(null); + const [canShowMore, setCanShowMore] = useState(false); + const [showFullText, setShowFullText] = useState(!collapse); + + const collapsedHeightRef = useRef(0); useEffect(() => { const element = containerRef; - if (element && isQuoteMsg) { + if (element && collapse) { const preNode = element.querySelector('pre'); + const collapsedHeight = collapsedHeightRef.current || element.clientHeight; const width = Math.max(element.scrollWidth, preNode ? preNode.scrollWidth : 0); const height = Math.max(element.scrollHeight, preNode ? preNode.scrollHeight : 0); const isWider = width > element.clientWidth; - const isHigher = height > element.clientHeight; + const isHigher = height > collapsedHeight; + collapsedHeightRef.current = collapsedHeight; setCanShowMore?.(isWider || isHigher); } - }, [isQuoteMsg, setCanShowMore, containerRef]); + }, [collapse, setCanShowMore, containerRef]); useEffect(() => { if (!containerRef) { @@ -121,22 +123,38 @@ export const TextMessageRenderer: FC = ({ forwardEvent(event.nativeEvent, 'mention', mentionMsgDetails); } }; + const extraClasses = showFullText ? 'message-quote__text--full' : ''; + + const toggleShowMore = () => setShowFullText(prev => !prev); return ( - // We will register the click event on the paragraph element and determine the type of the element clicked. - // This is because the paragraph element is fed with raw HTML and we cannot register the click event on the clickabled elements directly. - // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions -

    + <> + { + // We will register the click event on the paragraph element and determine the type of the element clicked. // + //This is because the paragraph element is fed with raw HTML and we cannot register the click event on the + //clickabled elements directly. + } + {/* eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions */} +

    + {canShowMore && ( + + )} + ); }; diff --git a/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer/index.ts b/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer/index.ts new file mode 100644 index 00000000000..a4cc76686da --- /dev/null +++ b/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer/index.ts @@ -0,0 +1,20 @@ +/* + * Wire + * Copyright (C) 2022 Wire Swiss GmbH + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see http://www.gnu.org/licenses/. + * + */ + +export * from './TextMessageRenderer'; diff --git a/src/script/components/MessagesList/Message/ContentMessage/asset/index.tsx b/src/script/components/MessagesList/Message/ContentMessage/asset/index.tsx index 8d8d63ac3e3..426ee1d827b 100644 --- a/src/script/components/MessagesList/Message/ContentMessage/asset/index.tsx +++ b/src/script/components/MessagesList/Message/ContentMessage/asset/index.tsx @@ -71,13 +71,12 @@ const ContentAsset = ({ )} {(asset as Text).previews().map(preview => ( From 4fc2aeee8ae1bf03a527d8b01b782b0a5f2096c2 Mon Sep 17 00:00:00 2001 From: Thomas Belin Date: Tue, 13 Dec 2022 09:50:41 +0100 Subject: [PATCH 143/329] runfix: Address displaying conversation details when there a no participants (#14309) --- .../RightSidebar/ConversationDetails/ConversationDetails.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/script/page/RightSidebar/ConversationDetails/ConversationDetails.tsx b/src/script/page/RightSidebar/ConversationDetails/ConversationDetails.tsx index 64df0cd7512..24a64cc3b3d 100644 --- a/src/script/page/RightSidebar/ConversationDetails/ConversationDetails.tsx +++ b/src/script/page/RightSidebar/ConversationDetails/ConversationDetails.tsx @@ -401,7 +401,7 @@ const ConversationDetails: FC = ({ {isActivatedAccount && ( <> Date: Tue, 13 Dec 2022 10:51:14 +0100 Subject: [PATCH 144/329] runfix: Handle middle click for markdown links (#14311) --- .../asset/TextMessageRenderer/TextMessageRenderer.tsx | 4 ++-- src/script/guards/Mouse.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer/TextMessageRenderer.tsx b/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer/TextMessageRenderer.tsx index 8257b2af959..6c8ad38ecf9 100644 --- a/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer/TextMessageRenderer.tsx +++ b/src/script/components/MessagesList/Message/ContentMessage/asset/TextMessageRenderer/TextMessageRenderer.tsx @@ -20,7 +20,7 @@ import {useEffect, FC, useState, HTMLProps, useRef} from 'react'; import {isKeyDownEvent} from 'src/script/guards/Event'; -import {isMouseEvent} from 'src/script/guards/Mouse'; +import {isAuxClickEvent, isClickEvent} from 'src/script/guards/Mouse'; import {getAllFocusableElements, setElementsTabIndex} from 'Util/focusUtil'; import {handleKeyDown} from 'Util/KeyboardUtil'; @@ -90,7 +90,7 @@ export const TextMessageRenderer: FC event.type === 'click'; +export const isClickEvent = (event: MouseEvent | KeyboardEvent): event is MouseEvent => event.type === 'click'; export const isAuxClickEvent = (event: MouseEvent | KeyboardEvent): event is MouseEvent => event.type === 'auxclick'; export const isMouseRightClickEvent = (event: MouseEvent | KeyboardEvent): event is MouseEvent => - isMouseEvent(event) && event.button === secondaryBtnRightClick; + isClickEvent(event) && event.button === secondaryBtnRightClick; export const isAuxRightClickEvent = (event: MouseEvent | KeyboardEvent): event is MouseEvent => isAuxClickEvent(event) && event.button === secondaryBtnRightClick; From c55005e4564a3410e2362f022c1a95214c96b07e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20J=C3=B3=C5=BAwik?= Date: Tue, 13 Dec 2022 13:12:01 +0100 Subject: [PATCH 145/329] feat: Forms accessibility (#14310) * feat: Forms accessibility * fix typo --- .../Modals/PrimaryModal/PrimaryModal.tsx | 16 ++++++ .../panels/Collection/FullSearch.tsx | 18 ++++-- .../panels/preferences/OptionPreferences.tsx | 2 + .../components/PreferencesRadio.tsx | 56 ++++++++++++------- .../Notifications/Notifications.tsx | 1 + src/style/content/preferences/options.less | 13 +++-- 6 files changed, 74 insertions(+), 32 deletions(-) diff --git a/src/script/components/Modals/PrimaryModal/PrimaryModal.tsx b/src/script/components/Modals/PrimaryModal/PrimaryModal.tsx index 67e3198af52..e3459ce1666 100644 --- a/src/script/components/Modals/PrimaryModal/PrimaryModal.tsx +++ b/src/script/components/Modals/PrimaryModal/PrimaryModal.tsx @@ -133,6 +133,7 @@ export const PrimaryModalComponent: FC = () => {

    + {(messageHtml || messageText) && (
    @@ -140,9 +141,15 @@ export const PrimaryModalComponent: FC = () => { {messageText && }
    )} + {hasPassword && ( + + { /> )} + {hasInput && (
    + + updateInputValue(event.target.value)} />
    )} + {errorMessage &&
    {errorMessage}
    } + {hasOption && (
    @@ -180,6 +195,7 @@ export const PrimaryModalComponent: FC = () => {
    )} +
    {secondaryActions .filter((action): action is Action => action !== null && !!action.text) diff --git a/src/script/page/MainContent/panels/Collection/FullSearch.tsx b/src/script/page/MainContent/panels/Collection/FullSearch.tsx index 9224e349e39..e81b4dfefe6 100644 --- a/src/script/page/MainContent/panels/Collection/FullSearch.tsx +++ b/src/script/page/MainContent/panels/Collection/FullSearch.tsx @@ -33,6 +33,12 @@ import type {Message} from '../../../../entity/message/Message'; import {useDebounce} from '../../../../hooks/useDebounce'; import {getSearchRegex} from '../../../../search/FullTextSearch'; +const MAX_VISIBLE_MESSAGES = 30; +const PRE_MARKED_OFFSET = 20; +const MAX_TEXT_LENGTH = 60; +const MAX_OFFSET_INDEX = 30; +const DEBOUNCE_TIME = 100; + export interface FullSearchProps { change?: (query: string) => void; click?: (messageEntity: Message) => void; @@ -40,11 +46,6 @@ export interface FullSearchProps { } const FullSearch: React.FC = ({searchProvider, click = noop, change = noop}) => { - const MAX_VISIBLE_MESSAGES = 30; - const PRE_MARKED_OFFSET = 20; - const MAX_TEXT_LENGTH = 60; - const MAX_OFFSET_INDEX = 30; - const [searchValue, setSearchValue] = useState(''); const inputRef = useRef(null); const [messages, setMessages] = useState([]); @@ -69,7 +70,7 @@ const FullSearch: React.FC = ({searchProvider, click = noop, ch setMessageCount(MAX_VISIBLE_MESSAGES); } }, - 100, + DEBOUNCE_TIME, [searchValue], ); @@ -124,15 +125,18 @@ const FullSearch: React.FC = ({searchProvider, click = noop, ch
    + div': {width: '100%'}}} type="text" value={searchValue} ref={inputRef} + aria-label={t('tooltipConversationSearch')} placeholder={t('fullsearchPlaceholder')} onChange={event => setSearchValue(event.currentTarget.value)} data-uie-name="full-search-header-input" /> + {searchValue && ( = ({searchProvider, click = noop, ch )}
    + {hasNoResults && (

    {t('fullsearchNoResults')}

    )} +
    {messages.slice(0, messageCount).map(message => ( = ({ = ({ { name: string; @@ -29,6 +29,7 @@ interface PreferencesRadioProps { }[]; selectedValue: T; uieName?: string; + ariaLabelledBy: string; } const PreferencesRadio = ({ @@ -37,32 +38,45 @@ const PreferencesRadio = ({ options, onChange, uieName = name, + ariaLabelledBy, }: PreferencesRadioProps) => { const {current: id} = useRef(Math.random().toString(36).slice(2)); return (
    - {options.map(({value, label, detailLabel}) => ( - - onChange(value)} - checked={selectedValue === value} - data-uie-name={`${uieName}-${value}`} - /> - - - ))} + {options.map(({value, label, detailLabel}) => { + const currentId = id + value; + + return ( +
    + onChange(value)} + checked={selectedValue === value} + data-uie-name={`${uieName}-${value}`} + /> + + +
    + ); + })}
    ); diff --git a/src/script/page/RightSidebar/Notifications/Notifications.tsx b/src/script/page/RightSidebar/Notifications/Notifications.tsx index 6137f76727d..5918e9b4cbf 100644 --- a/src/script/page/RightSidebar/Notifications/Notifications.tsx +++ b/src/script/page/RightSidebar/Notifications/Notifications.tsx @@ -63,6 +63,7 @@ const Notifications: FC = ({activeConversation, onGoBack, on
    Date: Tue, 13 Dec 2022 13:48:14 +0100 Subject: [PATCH 146/329] feat: Update HTML tags in Modals, AppLock and DeviceID (#14313) * feat: Update HTML tags in Modals, AppLock and DeviceID * Cr fixes --- .../Modals/PrimaryModal/PrimaryModal.tsx | 2 +- src/script/page/AppLock/AppLock.tsx | 68 +++++++++++++------ .../devices/components/FormattedId.tsx | 28 ++++---- 3 files changed, 66 insertions(+), 32 deletions(-) diff --git a/src/script/components/Modals/PrimaryModal/PrimaryModal.tsx b/src/script/components/Modals/PrimaryModal/PrimaryModal.tsx index e3459ce1666..7879347db83 100644 --- a/src/script/components/Modals/PrimaryModal/PrimaryModal.tsx +++ b/src/script/components/Modals/PrimaryModal/PrimaryModal.tsx @@ -190,7 +190,7 @@ export const PrimaryModalComponent: FC = () => { onChange={onOptionChange} />
    diff --git a/src/script/page/AppLock/AppLock.tsx b/src/script/page/AppLock/AppLock.tsx index 9b9bcaaf764..c04a9898022 100644 --- a/src/script/page/AppLock/AppLock.tsx +++ b/src/script/page/AppLock/AppLock.tsx @@ -20,6 +20,7 @@ import React, {useCallback, useEffect, useRef, useState} from 'react'; import {amplify} from 'amplify'; +import cx from 'classnames'; import {StatusCodes as HTTP_STATUS} from 'http-status-codes'; import {container} from 'tsyringe'; @@ -285,10 +286,12 @@ const AppLock: React.FC = ({ )} +

    {headerText()}

    +
    {state === APPLOCK_STATE.SETUP && (
    @@ -297,6 +300,7 @@ const AppLock: React.FC = ({ dangerouslySetInnerHTML={{__html: t('modalAppLockSetupMessage', {}, {br: '

    '})}} data-uie-name="label-applock-set-text" /> + + {/* eslint jsx-a11y/no-autofocus : "off" */} = ({ autoComplete="new-password" id="input-applock-set-a" /> +

    @@ -326,34 +332,39 @@ const AppLock: React.FC = ({ minPasswordLength: Config.getConfig().NEW_PASSWORD_MINIMUM_LENGTH.toString(), })}

    +

    {t('modalAppLockSetupLower')}

    +

    {t('modalAppLockSetupUppercase')}

    +

    {t('modalAppLockSetupDigit')}

    +

    {t('modalAppLockSetupSpecial')}

    +
    {!isAppLockEnforced && ( )} +
    )} + {state === APPLOCK_STATE.SETUP_CHANGE && (
    = ({ }} data-uie-name="label-applock-set-text" /> +
    {t('modalAppLockPasscode')}
    + = ({ data-uie-name="input-applock-set-a" autoComplete="new-password" /> -
    + +

    {t('modalAppLockSetupLong', { minPasswordLength: Config.getConfig().NEW_PASSWORD_MINIMUM_LENGTH.toString(), })} -

    -
    +

    + +

    {t('modalAppLockSetupLower')} -

    -
    +

    + +

    {t('modalAppLockSetupUppercase')} -

    -
    +

    + +

    {t('modalAppLockSetupDigit')} -

    -
    +

    + +

    {t('modalAppLockSetupSpecial')} -

    +

    +
    +
    + + +
    + )} - if (serviceEntity) { - setSelectedService(serviceEntity); - await integrationRepository.addProviderNameToParticipant(serviceEntity); - } - } - }, [firstParticipant]); - - const conversationActions = getConversationActions( - activeConversation, - actionsViewModel, - conversationRepository, - teamRole, - isServiceMode, - isTeam, - ); - - useEffect(() => { - if (isTeam && isSingleUserMode) { - teamRepository.updateTeamMembersByIds(team, [firstParticipant.id], true); - } - }, [firstParticipant, isSingleUserMode, isTeam, team, teamRepository]); - - useEffect(() => { - getService(); - }, [getService]); - - return ( -
    -

    {t('tooltipConversationInfo')}

    - - - - - {isSingleUserMode && isServiceMode && selectedService && } - - {isSingleUserMode && !isServiceMode && firstParticipant && ( - <> - - - - - )} - - {!isSingleUserMode && ( - <> - - - {showTopActions && showActionAddParticipants && ( -
    - +
    + {isGroup && !!userParticipants.length && ( + <> + + + {allUsersCount > 0 && ( + + )} + + )}
    - )} - -
    - {isGroup && !!userParticipants.length && ( - <> - + )} + + {!!serviceParticipants.length && ( +
    +

    {t('conversationDetailsServices')}

    + + - - {allUsersCount > 0 && ( - - )} - +
    )} -
    - - {showTopActions && showSectionOptions && ( - + )} + + {isActivatedAccount && ( + <> + - )} - - {!!serviceParticipants.length && ( -
    -

    {t('conversationDetailsServices')}

    - - -
    - )} - - )} - - {isActivatedAccount && ( - <> - - - {isSingleUserMode && ( -
    - - {hasReceiptsEnabled - ? t('conversationDetails1to1ReceiptsHeadEnabled') - : t('conversationDetails1to1ReceiptsHeadDisabled')} - - -

    - {t('conversationDetails1to1ReceiptsFirst')} -

    - -

    - {t('conversationDetails1to1ReceiptsSecond')} -

    -
    - )} - - - )} + {isSingleUserMode && ( +
    + + {hasReceiptsEnabled + ? t('conversationDetails1to1ReceiptsHeadEnabled') + : t('conversationDetails1to1ReceiptsHeadDisabled')} + + +

    + {t('conversationDetails1to1ReceiptsFirst')} +

    + +

    + {t('conversationDetails1to1ReceiptsSecond')} +

    +
    + )} - - -
    - ); -}; + + + )} + + +
    +
    + ); + }, +); + +ConversationDetails.displayName = 'ConversationDetails'; export {ConversationDetails}; diff --git a/src/script/page/RightSidebar/RightSidebar.tsx b/src/script/page/RightSidebar/RightSidebar.tsx index 499841b7ea9..0a6d4bbd84c 100644 --- a/src/script/page/RightSidebar/RightSidebar.tsx +++ b/src/script/page/RightSidebar/RightSidebar.tsx @@ -26,7 +26,6 @@ import {container} from 'tsyringe'; import {WebAppEvents} from '@wireapp/webapp-events'; import {useKoSubscribableChildren} from 'Util/ComponentUtil'; -import {focusableElementsSelector} from 'Util/util'; import {AddParticipants} from './AddParticipants'; import {ConversationDetails} from './ConversationDetails'; @@ -168,15 +167,7 @@ const RightSidebar: FC = ({ }); }, []); - const containerRef = useCallback( - (element: HTMLDivElement | null) => { - const nextElementToFocus = element?.querySelectorAll(focusableElementsSelector)[0] as HTMLElement | null; - if (nextElementToFocus) { - nextElementToFocus.focus(); - } - }, - [currentState], - ); + const containerRef = useCallback((element: HTMLDivElement | null) => element?.focus(), [currentState]); if (!activeConversation) { return null; @@ -195,9 +186,10 @@ const RightSidebar: FC = ({ } > -
    + <> {currentState === PanelState.CONVERSATION_DETAILS && ( = ({ onClose={closePanel} /> )} -
    +
    ); From 6f4a4e0a523795eb1753745f0e40bec6e0f64bfd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrian=20Wei=C3=9F?= <77456193+aweiss-dev@users.noreply.github.com> Date: Wed, 14 Dec 2022 13:37:24 +0100 Subject: [PATCH 153/329] fix: click on emoji closes edit or reply (#14265) --- src/script/components/Emoji/useEmoji.tsx | 37 ++++--- src/script/components/InputBar/InputBar.tsx | 35 +++--- .../MentionSuggestions/MentionSuggestions.tsx | 44 ++++---- .../InputBar/util/clickHandlers.tsx | 43 ++++++++ src/script/ui/ContextMenu.tsx | 104 +++++++++++------- 5 files changed, 167 insertions(+), 96 deletions(-) create mode 100644 src/script/components/InputBar/util/clickHandlers.tsx diff --git a/src/script/components/Emoji/useEmoji.tsx b/src/script/components/Emoji/useEmoji.tsx index 25de42d1770..da0d51acf58 100644 --- a/src/script/components/Emoji/useEmoji.tsx +++ b/src/script/components/Emoji/useEmoji.tsx @@ -24,6 +24,7 @@ import {amplify} from 'amplify'; import {WebAppEvents} from '@wireapp/webapp-events'; +import {IgnoreOutsideClickWrapper} from 'Components/InputBar/util/clickHandlers'; import {isEnterKey, isKey, KEY} from 'Util/KeyboardUtil'; import {updateMentionRanges} from 'Util/MentionUtil'; import {getCursorPixelPosition} from 'Util/PopupUtil'; @@ -398,23 +399,25 @@ const useEmoji = ( const renderEmojiComponent = () => isVisible ? ( -
    - {mappedEmojiList.map((emoji, index) => { - return ( - setSelectedEmojiIndex(index)} - onClick={() => { - if (textareaElement) { - enterEmojiPopupLine(textareaElement, emoji); - } - }} - /> - ); - })} -
    + +
    + {mappedEmojiList.map((emoji, index) => { + return ( + setSelectedEmojiIndex(index)} + onClick={() => { + if (textareaElement) { + enterEmojiPopupLine(textareaElement, emoji); + } + }} + /> + ); + })} +
    +
    ) : null; useEffect(() => { diff --git a/src/script/components/InputBar/InputBar.tsx b/src/script/components/InputBar/InputBar.tsx index d99318db727..185e7a13bac 100644 --- a/src/script/components/InputBar/InputBar.tsx +++ b/src/script/components/InputBar/InputBar.tsx @@ -61,6 +61,7 @@ import {useFilePaste} from './hooks/useFilePaste'; import {useResizeTarget} from './hooks/useResizeTarget'; import {useScrollSync} from './hooks/useScrollSync'; import {useTextAreaFocus} from './hooks/useTextAreaFocus'; +import {handleClickOutsideOfInputBar, IgnoreOutsideClickWrapper} from './util/clickHandlers'; import {Config} from '../../Config'; import {MessageRepository, OutgoingQuote} from '../../conversation/MessageRepository'; @@ -101,6 +102,8 @@ interface InputBarProps { uploadFiles: (files: File[]) => void; } +const conversationInputBarClassName = 'conversation-input-bar'; + const InputBar = ({ conversationEntity, conversationRepository, @@ -633,16 +636,11 @@ const InputBar = ({ }); }; - const onWindowClick = (event: Event): void => { - const ignoredParent = (event.target as HTMLElement).closest( - '.conversation-input-bar, .conversation-input-bar-mention-suggestion, .ctx-menu', - ); - - if (!ignoredParent) { + const onWindowClick = (event: Event): void => + handleClickOutsideOfInputBar(event, () => { cancelMessageEditing(true, true); cancelMessageReply(); - } - }; + }); useEffect(() => { amplify.subscribe(WebAppEvents.CONVERSATION.IMAGE.SEND, uploadImages); @@ -775,10 +773,9 @@ const InputBar = ({ }; return ( -
    {!!isTypingIndicatorEnabled && } @@ -788,7 +785,11 @@ const InputBar = ({ {isReplying && !isEditing && } -
    +
    {!isOutgoingRequest && ( <>
    @@ -804,9 +805,9 @@ const InputBar = ({