From 45fa5d6850d94f32dec42e204cbbdf75b1d87b1b Mon Sep 17 00:00:00 2001 From: Rahul Halder Date: Mon, 2 Aug 2021 19:56:34 +0530 Subject: [PATCH 01/76] [FIX] typeError on callout type prop (#22790) Co-authored-by: Douglas Fabris From 0a62282084846521fe19635808a95db94166176b Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Mon, 2 Aug 2021 11:50:04 -0300 Subject: [PATCH 02/76] Bump version to 3.18.0-develop --- .docker/Dockerfile.rhel | 2 +- .snapcraft/resources/prepareRocketChat | 2 +- .snapcraft/snap/snapcraft.yaml | 2 +- app/utils/rocketchat.info | 2 +- package-lock.json | 2 +- package.json | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.docker/Dockerfile.rhel b/.docker/Dockerfile.rhel index 45789b3ec57a..eeefddcdaefb 100644 --- a/.docker/Dockerfile.rhel +++ b/.docker/Dockerfile.rhel @@ -1,6 +1,6 @@ FROM registry.access.redhat.com/ubi8/nodejs-12 -ENV RC_VERSION 3.17.0 +ENV RC_VERSION 3.18.0-develop MAINTAINER buildmaster@rocket.chat diff --git a/.snapcraft/resources/prepareRocketChat b/.snapcraft/resources/prepareRocketChat index 07c8b52c203f..c9506e3bb270 100755 --- a/.snapcraft/resources/prepareRocketChat +++ b/.snapcraft/resources/prepareRocketChat @@ -1,6 +1,6 @@ #!/bin/bash -curl -SLf "https://releases.rocket.chat/3.17.0/download/" -o rocket.chat.tgz +curl -SLf "https://releases.rocket.chat/3.18.0-develop/download/" -o rocket.chat.tgz tar xf rocket.chat.tgz --strip 1 diff --git a/.snapcraft/snap/snapcraft.yaml b/.snapcraft/snap/snapcraft.yaml index 4a24597f5f4d..af9b9c717c9f 100644 --- a/.snapcraft/snap/snapcraft.yaml +++ b/.snapcraft/snap/snapcraft.yaml @@ -7,7 +7,7 @@ # 5. `snapcraft snap` name: rocketchat-server -version: 3.17.0 +version: 3.18.0-develop summary: Rocket.Chat server description: Have your own Slack like online chat, built with Meteor. https://rocket.chat/ confinement: strict diff --git a/app/utils/rocketchat.info b/app/utils/rocketchat.info index 07463b24bd15..1fe476531701 100644 --- a/app/utils/rocketchat.info +++ b/app/utils/rocketchat.info @@ -1,3 +1,3 @@ { - "version": "3.17.0" + "version": "3.18.0-develop" } diff --git a/package-lock.json b/package-lock.json index 0599c4e4d5f8..7298ef94bea8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "Rocket.Chat", - "version": "3.17.0", + "version": "3.18.0-develop", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index cf409a3b9bad..6f497037d5f7 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "Rocket.Chat", "description": "The Ultimate Open Source WebChat Platform", - "version": "3.17.0", + "version": "3.18.0-develop", "author": { "name": "Rocket.Chat", "url": "https://rocket.chat/" From 6592d40d1d0399ac0a8f879de54baf63dca90550 Mon Sep 17 00:00:00 2001 From: Douglas Fabris Date: Tue, 3 Aug 2021 22:36:40 -0300 Subject: [PATCH 03/76] [FIX] Tab margin style (#22851) --- .../components/FederationModal/FederationModal.tsx | 3 +-- .../FederationCard/components/FederationModal/styles.css | 8 -------- 2 files changed, 1 insertion(+), 10 deletions(-) delete mode 100644 client/views/admin/info/FederationCard/components/FederationModal/styles.css diff --git a/client/views/admin/info/FederationCard/components/FederationModal/FederationModal.tsx b/client/views/admin/info/FederationCard/components/FederationModal/FederationModal.tsx index 60499af4fa0f..68546b4e3f54 100644 --- a/client/views/admin/info/FederationCard/components/FederationModal/FederationModal.tsx +++ b/client/views/admin/info/FederationCard/components/FederationModal/FederationModal.tsx @@ -20,7 +20,6 @@ import { useForm } from '../../../../../../hooks/useForm'; import { DNSRecords } from './DNSRecords'; import InviteUsers from './InviteUsers'; import { DNSRecordName, ResolvedDNS, TXTRecordValue } from './Types'; -import './styles.css'; export const FederationModal: FC<{ onClose: () => void }> = ({ onClose, @@ -161,7 +160,7 @@ export const FederationModal: FC<{ onClose: () => void }> = ({ - + setCurrentTab(1)}> {t('Federation_Configure_DNS')} diff --git a/client/views/admin/info/FederationCard/components/FederationModal/styles.css b/client/views/admin/info/FederationCard/components/FederationModal/styles.css deleted file mode 100644 index 6b794e0bc4bb..000000000000 --- a/client/views/admin/info/FederationCard/components/FederationModal/styles.css +++ /dev/null @@ -1,8 +0,0 @@ -.rcx-tabs, -.rcx-tabs__wrapper { - margin: 0 !important; -} - -.rcx-tabs__item:first-child { - margin-left: 0 !important; -} From f860c8dc4e92bb6a9b463d750f5e5da688f53774 Mon Sep 17 00:00:00 2001 From: gabriellsh <40830821+gabriellsh@users.noreply.github.com> Date: Wed, 4 Aug 2021 13:32:42 -0300 Subject: [PATCH 04/76] [FIX] Thread and Discussion lists scroll #22844 * Fix scroll on discussion and thread lists * chore: update fuselage Co-authored-by: dougfabris --- .../views/room/contextualBar/Discussions/DiscussionList.js | 2 +- client/views/room/contextualBar/Threads/ThreadList.js | 2 +- package-lock.json | 6 +++--- package.json | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/client/views/room/contextualBar/Discussions/DiscussionList.js b/client/views/room/contextualBar/Discussions/DiscussionList.js index 3e6ded70e6c6..cdc5a3151089 100644 --- a/client/views/room/contextualBar/Discussions/DiscussionList.js +++ b/client/views/room/contextualBar/Discussions/DiscussionList.js @@ -84,7 +84,7 @@ function DiscussionList({ {!error && total > 0 && discussions.length > 0 && ( 0 && threads.length > 0 && ( Date: Thu, 5 Aug 2021 10:57:26 -0300 Subject: [PATCH 05/76] [IMPROVE] Rewrite clear all unread modal #22764 Co-authored-by: gabriellsh <40830821+gabriellsh@users.noreply.github.com> --- app/ui-master/client/body.js | 30 ++++++++++++++-------- app/ui-utils/client/lib/readMessages.js | 6 +++++ packages/rocketchat-i18n/i18n/en.i18n.json | 1 + 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/app/ui-master/client/body.js b/app/ui-master/client/body.js index bbc29c31fb80..649e3cadab59 100644 --- a/app/ui-master/client/body.js +++ b/app/ui-master/client/body.js @@ -7,11 +7,12 @@ import { Template } from 'meteor/templating'; import { t } from '../../utils/client'; import { chatMessages } from '../../ui'; -import { Layout, modal, popover, fireGlobalEvent, RoomManager } from '../../ui-utils'; +import { Layout, popover, fireGlobalEvent, RoomManager } from '../../ui-utils'; import { settings } from '../../settings'; import { ChatSubscription } from '../../models'; - import './body.html'; +import { imperativeModal } from '../../../client/lib/imperativeModal'; +import GenericModal from '../../../client/components/GenericModal'; Template.body.onRendered(function() { new Clipboard('.clipboard'); @@ -21,14 +22,8 @@ Template.body.onRendered(function() { if (e.keyCode === 27 && (e.shiftKey === true || e.ctrlKey === true) && (unread != null) && unread !== '') { e.preventDefault(); e.stopPropagation(); - modal.open({ - title: t('Clear_all_unreads_question'), - type: 'warning', - confirmButtonText: t('Yes_clear_all'), - showCancelButton: true, - cancelButtonText: t('Cancel'), - confirmButtonColor: '#DD6B55', - }, function() { + + const handleClearUnreadAllMessages = () => { const subscriptions = ChatSubscription.find({ open: true, }, { @@ -47,6 +42,21 @@ Template.body.onRendered(function() { Meteor.call('readMessages', subscription.rid); } }); + + imperativeModal.close(); + }; + + imperativeModal.open({ + component: GenericModal, + props: { + children: t('Are_you_sure_you_want_to_clear_all_unread_messages'), + variant: 'warning', + title: t('Clear_all_unreads_question'), + confirmText: t('Yes_clear_all'), + onClose: imperativeModal.close, + onCancel: imperativeModal.close, + onConfirm: handleClearUnreadAllMessages, + }, }); } }); diff --git a/app/ui-utils/client/lib/readMessages.js b/app/ui-utils/client/lib/readMessages.js index 8797ad6c6023..ee3ce0f63e7c 100644 --- a/app/ui-utils/client/lib/readMessages.js +++ b/app/ui-utils/client/lib/readMessages.js @@ -66,6 +66,8 @@ export const readMessage = new class extends Emitter { } readNow(rid = Session.get('openedRoom')) { + const unread = Session.get('unread'); + if (rid == null) { this.log('readMessage -> readNow canceled, no rid informed'); return; @@ -77,6 +79,10 @@ export const readMessage = new class extends Emitter { return; } + if ((unread != null) && unread !== '') { + return; + } + return Meteor.call('readMessages', rid, () => { RoomHistoryManager.getRoom(rid).unreadNotLoaded.set(0); return this.emit(rid); diff --git a/packages/rocketchat-i18n/i18n/en.i18n.json b/packages/rocketchat-i18n/i18n/en.i18n.json index 41d34111e046..35b5d9a9e681 100644 --- a/packages/rocketchat-i18n/i18n/en.i18n.json +++ b/packages/rocketchat-i18n/i18n/en.i18n.json @@ -530,6 +530,7 @@ "are_also_typing": "are also typing", "are_typing": "are typing", "Are_you_sure": "Are you sure?", + "Are_you_sure_you_want_to_clear_all_unread_messages": "Are you sure you want to clear all unread messages?", "Are_you_sure_you_want_to_close_this_chat": "Are you sure you want to close this chat?", "Are_you_sure_you_want_to_delete_this_record": "Are you sure you want to delete this record?", "Are_you_sure_you_want_to_delete_your_account": "Are you sure you want to delete your account?", From 09c91e3ab21cb2cf62a44abc2623a085d468787d Mon Sep 17 00:00:00 2001 From: Tasso Evangelista Date: Thu, 5 Aug 2021 16:05:17 -0300 Subject: [PATCH 06/76] [FIX] Production-environment dependencies (#22868) * Move deps from devDeps * Upgrade Storybook * Sort dependencies * Rollback @rocket.chat/livechat as dev dependency Co-authored-by: dougfabris --- package-lock.json | 1660 ++++++++++++++++++++++++++------------------- package.json | 8 +- 2 files changed, 967 insertions(+), 701 deletions(-) diff --git a/package-lock.json b/package-lock.json index 61aad16388d7..1c6943115822 100644 --- a/package-lock.json +++ b/package-lock.json @@ -223,12 +223,12 @@ } }, "@babel/generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", - "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.0.tgz", + "integrity": "sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ==", "dev": true, "requires": { - "@babel/types": "^7.14.5", + "@babel/types": "^7.15.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" } @@ -1761,9 +1761,9 @@ } }, "@babel/parser": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.0.tgz", + "integrity": "sha512-0v7oNOjr6YT9Z2RAOTv4T9aP+ubfx4Q/OhVtAet7PFDt0t9Oy6Jn+/rfC6b8HJ5zEqrQCiMxJfgtHpmIminmJQ==", "dev": true }, "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { @@ -2880,29 +2880,50 @@ } }, "@babel/plugin-transform-typescript": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.14.6.tgz", - "integrity": "sha512-XlTdBq7Awr4FYIzqhmYY80WN0V0azF74DMPyFqVHBvf81ZUgc4X7ZOpx6O8eLDK6iM5cCQzeyJw0ynTaefixRA==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.15.0.tgz", + "integrity": "sha512-WIIEazmngMEEHDaPTx0IZY48SaAmjVWe3TRSX7cmJXn0bEv9midFzAjxiruOWYIVf5iQ10vFx7ASDpgEO08L5w==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.14.6", + "@babel/helper-create-class-features-plugin": "^7.15.0", "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-typescript": "^7.14.5" }, "dependencies": { "@babel/helper-create-class-features-plugin": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz", - "integrity": "sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.0.tgz", + "integrity": "sha512-MdmDXgvTIi4heDVX/e9EFfeGpugqm9fobBVg/iioE8kueXrOHdRDe36FAY7SnE9xXLVeYCoJR/gdrBEIHRC83Q==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.14.5", "@babel/helper-function-name": "^7.14.5", - "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-member-expression-to-functions": "^7.15.0", "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-replace-supers": "^7.15.0", "@babel/helper-split-export-declaration": "^7.14.5" } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.0.tgz", + "integrity": "sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg==", + "dev": true, + "requires": { + "@babel/types": "^7.15.0" + } + }, + "@babel/helper-replace-supers": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.0.tgz", + "integrity": "sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.15.0", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.15.0", + "@babel/types": "^7.15.0" + } } } }, @@ -3121,14 +3142,14 @@ } }, "@babel/preset-typescript": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.14.5.tgz", - "integrity": "sha512-u4zO6CdbRKbS9TypMqrlGH7sd2TAJppZwn3c/ZRLeO/wGsbddxgbPDUZVNrie3JWYLQ9vpineKlsrWFvO6Pwkw==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.15.0.tgz", + "integrity": "sha512-lt0Y/8V3y06Wq/8H/u0WakrqciZ7Fz7mwPDHWUJAXlABL5hiUG42BNlRXiELNjeWjO5rWmnNKlx+yzJvxezHow==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5", "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-transform-typescript": "^7.14.5" + "@babel/plugin-transform-typescript": "^7.15.0" } }, "@babel/register": { @@ -3249,18 +3270,18 @@ } }, "@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.0.tgz", + "integrity": "sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw==", "dev": true, "requires": { "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", + "@babel/generator": "^7.15.0", "@babel/helper-function-name": "^7.14.5", "@babel/helper-hoist-variables": "^7.14.5", "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", + "@babel/parser": "^7.15.0", + "@babel/types": "^7.15.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -3306,9 +3327,9 @@ } }, "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "requires": { "ms": "2.1.2" @@ -3332,13 +3353,21 @@ } }, "@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz", + "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.9", "to-fast-properties": "^2.0.0" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", + "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", + "dev": true + } } }, "@base2/pretty-print-object": { @@ -3966,9 +3995,9 @@ } }, "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -4094,9 +4123,9 @@ } }, "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -4416,9 +4445,9 @@ } }, "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "requires": { "ms": "2.1.2" @@ -4433,12 +4462,6 @@ "minimist": "^1.2.5" } }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, "minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", @@ -4945,9 +4968,9 @@ } }, "@popperjs/core": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.9.2.tgz", - "integrity": "sha512-VZMYa7+fXHdwIq1TDhSXoVmSPEGM/aa+6Aiq3nVVJ9bXr24zScr+NlKFKC3iPljA7ho/GAZr+d2jOf5GIRC30Q==", + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.9.3.tgz", + "integrity": "sha512-xDu17cEfh7Kid/d95kB6tZsLOmSWKCZKtprnhVepjsSaCij+lM3mItSJDuuHDMbCWTh8Ejmebwb+KONcCJ0eXQ==", "dev": true }, "@protobufjs/aspromise": { @@ -5145,8 +5168,7 @@ "@rocket.chat/icons": { "version": "0.28.0", "resolved": "https://registry.npmjs.org/@rocket.chat/icons/-/icons-0.28.0.tgz", - "integrity": "sha512-14+TDiQAi2Sx5DU+GO4RfgkEXQ6AvARCwXemcCS4+ObmqN0wuNhwszK6+l5UkE2Ui21EvcO0E+1aA96BzS1nkA==", - "dev": true + "integrity": "sha512-14+TDiQAi2Sx5DU+GO4RfgkEXQ6AvARCwXemcCS4+ObmqN0wuNhwszK6+l5UkE2Ui21EvcO0E+1aA96BzS1nkA==" }, "@rocket.chat/livechat": { "version": "1.9.3", @@ -5180,22 +5202,6 @@ "integrity": "sha512-gugjURxPPXurLKh9tNMvr7EgWciMDNjwXehqLnlNZj2Efg1PcuSQnG3/xD92YJzOuzKnKhZ8948v/KfVxcY87Q==", "dev": true }, - "mem": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/mem/-/mem-6.1.1.tgz", - "integrity": "sha512-Ci6bIfq/UgcxPTYa8dQQ5FY3BzKkT894bwXWXxC/zqs0XgMO2cT20CGkOqda7gZNkmK5VP4x89IGZ6K7hfbn3Q==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.3", - "mimic-fn": "^3.0.0" - } - }, - "mimic-fn": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", - "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", - "dev": true - }, "query-string": { "version": "6.14.1", "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz", @@ -5386,17 +5392,17 @@ } }, "@storybook/addon-actions": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-6.3.2.tgz", - "integrity": "sha512-kGengy5+RrBFjRaBmtlblltLaS4GtQEDnXV3g3Geeg9+PYSVKOvh2AgdPdQrjHSJFzpOBwUr3zMhXhdWrizyiQ==", + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-6.3.6.tgz", + "integrity": "sha512-1MBqCbFiupGEDyIXqFkzF4iR8AduuB7qSNduqtsFauvIkrG5bnlbg5JC7WjnixkCaaWlufgbpasEHioXO9EXGw==", "dev": true, "requires": { - "@storybook/addons": "6.3.2", - "@storybook/api": "6.3.2", - "@storybook/client-api": "6.3.2", - "@storybook/components": "6.3.2", - "@storybook/core-events": "6.3.2", - "@storybook/theming": "6.3.2", + "@storybook/addons": "6.3.6", + "@storybook/api": "6.3.6", + "@storybook/client-api": "6.3.6", + "@storybook/components": "6.3.6", + "@storybook/core-events": "6.3.6", + "@storybook/theming": "6.3.6", "core-js": "^3.8.2", "fast-deep-equal": "^3.1.3", "global": "^4.4.0", @@ -5416,32 +5422,26 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", "dev": true } } }, "@storybook/addon-backgrounds": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-6.3.2.tgz", - "integrity": "sha512-phn9kx/rmw6fD3Xqew31YPrAEQqUernQthKghSMgqNTR13ZMQ3NPzmcWOsnRq+ngqxB4XTSFya/BtgV7Od0XQQ==", + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-6.3.6.tgz", + "integrity": "sha512-1lBVAem2M+ggb1UNVgB7/56LaQAor9lI8q0xtQdAzAkt9K4RbbOsLGRhyUm3QH5OiB3qHHG5WQBujWUD6Qfy4g==", "dev": true, "requires": { - "@storybook/addons": "6.3.2", - "@storybook/api": "6.3.2", - "@storybook/client-logger": "6.3.2", - "@storybook/components": "6.3.2", - "@storybook/core-events": "6.3.2", - "@storybook/theming": "6.3.2", + "@storybook/addons": "6.3.6", + "@storybook/api": "6.3.6", + "@storybook/client-logger": "6.3.6", + "@storybook/components": "6.3.6", + "@storybook/core-events": "6.3.6", + "@storybook/theming": "6.3.6", "core-js": "^3.8.2", "global": "^4.4.0", "memoizerific": "^1.11.3", @@ -5451,33 +5451,91 @@ }, "dependencies": { "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", "dev": true } } }, "@storybook/addon-controls": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-6.3.2.tgz", - "integrity": "sha512-GJzggGZVKNr1p3s/1u83JgstHEQg5+H/1LoJELiYSIrhcs+mfsRr2ULpfHRTrpUSaC3qTL7HzYkPy+FoAd+6qQ==", + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-6.3.6.tgz", + "integrity": "sha512-wTWmnZl2qEAUqgLh8a7TL5f6w37Q51lAoJNlwxFFBSKtGS7xFUnou4qTUArNy5iKu1cWoVvofJ9RnP1maGByYA==", "dev": true, "requires": { - "@storybook/addons": "6.3.2", - "@storybook/api": "6.3.2", - "@storybook/client-api": "6.3.2", - "@storybook/components": "6.3.2", - "@storybook/node-logger": "6.3.2", - "@storybook/theming": "6.3.2", + "@storybook/addons": "6.3.6", + "@storybook/api": "6.3.6", + "@storybook/client-api": "6.3.6", + "@storybook/components": "6.3.6", + "@storybook/node-logger": "6.3.6", + "@storybook/theming": "6.3.6", "core-js": "^3.8.2", "ts-dedent": "^2.0.0" + }, + "dependencies": { + "@storybook/node-logger": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-6.3.6.tgz", + "integrity": "sha512-XMDkMN7nVRojjiezrURlkI57+nz3OoH4UBV6qJZICKclxtdKAy0wwOlUSYEUq+axcJ4nvdfzPPoDfGoj37SW7A==", + "dev": true, + "requires": { + "@types/npmlog": "^4.1.2", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "npmlog": "^4.1.2", + "pretty-hrtime": "^1.0.3" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "@storybook/addon-docs": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-6.3.2.tgz", - "integrity": "sha512-y9+umLi22ow3qAivxqkDeCtqzkIhlDIFOA7HH3Wd2yDo96UAzUiGozelCycijtfcyFuzwL8cvoKB6nIiVyuWsw==", + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-6.3.6.tgz", + "integrity": "sha512-/ZPB9u3lfc6ZUrgt9HENU1BxAHNfTbh9r2LictQ8o9gYE/BqvZutl2zqilTpVuutQtTgQ6JycVhxtpk9+TDcuA==", "dev": true, "requires": { "@babel/core": "^7.12.10", @@ -5489,20 +5547,20 @@ "@mdx-js/loader": "^1.6.22", "@mdx-js/mdx": "^1.6.22", "@mdx-js/react": "^1.6.22", - "@storybook/addons": "6.3.2", - "@storybook/api": "6.3.2", - "@storybook/builder-webpack4": "6.3.2", - "@storybook/client-api": "6.3.2", - "@storybook/client-logger": "6.3.2", - "@storybook/components": "6.3.2", - "@storybook/core": "6.3.2", - "@storybook/core-events": "6.3.2", + "@storybook/addons": "6.3.6", + "@storybook/api": "6.3.6", + "@storybook/builder-webpack4": "6.3.6", + "@storybook/client-api": "6.3.6", + "@storybook/client-logger": "6.3.6", + "@storybook/components": "6.3.6", + "@storybook/core": "6.3.6", + "@storybook/core-events": "6.3.6", "@storybook/csf": "0.0.1", - "@storybook/csf-tools": "6.3.2", - "@storybook/node-logger": "6.3.2", - "@storybook/postinstall": "6.3.2", - "@storybook/source-loader": "6.3.2", - "@storybook/theming": "6.3.2", + "@storybook/csf-tools": "6.3.6", + "@storybook/node-logger": "6.3.6", + "@storybook/postinstall": "6.3.6", + "@storybook/source-loader": "6.3.6", + "@storybook/theming": "6.3.6", "acorn": "^7.4.1", "acorn-jsx": "^5.3.1", "acorn-walk": "^7.2.0", @@ -5526,6 +5584,19 @@ "util-deprecate": "^1.0.2" }, "dependencies": { + "@storybook/node-logger": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-6.3.6.tgz", + "integrity": "sha512-XMDkMN7nVRojjiezrURlkI57+nz3OoH4UBV6qJZICKclxtdKAy0wwOlUSYEUq+axcJ4nvdfzPPoDfGoj37SW7A==", + "dev": true, + "requires": { + "@types/npmlog": "^4.1.2", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "npmlog": "^4.1.2", + "pretty-hrtime": "^1.0.3" + } + }, "acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", @@ -5533,17 +5604,45 @@ "dev": true }, "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, "big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -5584,6 +5683,12 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "json5": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", @@ -5604,12 +5709,6 @@ "json5": "^2.1.2" } }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, "minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", @@ -5632,9 +5731,9 @@ "dev": true }, "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", "dev": true }, "source-map": { @@ -5643,36 +5742,101 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "optional": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } } } }, "@storybook/addon-essentials": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-6.3.2.tgz", - "integrity": "sha512-upOMqx/66aAhr262L4oe5JS1wG2W7ZHIKQBgxMDfzrY26KcRRZVCm+omOlLJ2l4b0Gc7iZmUHkfmOhI9SPMNbw==", + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-6.3.6.tgz", + "integrity": "sha512-FUrpCeINaN4L9L81FswtQFEq2xLwj3W7EyhmqsZcYSr64nscpQyjlPVjs5zhrEanOGIf+4E+mBmWafxbYufXwQ==", "dev": true, "requires": { - "@storybook/addon-actions": "6.3.2", - "@storybook/addon-backgrounds": "6.3.2", - "@storybook/addon-controls": "6.3.2", - "@storybook/addon-docs": "6.3.2", + "@storybook/addon-actions": "6.3.6", + "@storybook/addon-backgrounds": "6.3.6", + "@storybook/addon-controls": "6.3.6", + "@storybook/addon-docs": "6.3.6", "@storybook/addon-measure": "^2.0.0", - "@storybook/addon-toolbars": "6.3.2", - "@storybook/addon-viewport": "6.3.2", - "@storybook/addons": "6.3.2", - "@storybook/api": "6.3.2", - "@storybook/node-logger": "6.3.2", + "@storybook/addon-toolbars": "6.3.6", + "@storybook/addon-viewport": "6.3.6", + "@storybook/addons": "6.3.6", + "@storybook/api": "6.3.6", + "@storybook/node-logger": "6.3.6", "core-js": "^3.8.2", "regenerator-runtime": "^0.13.7", "storybook-addon-outline": "^1.4.1", "ts-dedent": "^2.0.0" }, "dependencies": { + "@storybook/node-logger": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-6.3.6.tgz", + "integrity": "sha512-XMDkMN7nVRojjiezrURlkI57+nz3OoH4UBV6qJZICKclxtdKAy0wwOlUSYEUq+axcJ4nvdfzPPoDfGoj37SW7A==", + "dev": true, + "requires": { + "@types/npmlog": "^4.1.2", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "npmlog": "^4.1.2", + "pretty-hrtime": "^1.0.3" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } } } }, @@ -5755,40 +5919,40 @@ } }, "@storybook/addon-toolbars": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-6.3.2.tgz", - "integrity": "sha512-Gc2nak1MaCbC5h67TSXIvg65llidHngGHQCE2Ru6cPnTFqAtLs2QdsA72ScAOSLmwSeliVxkcoOXL9wN1vlXsg==", + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-6.3.6.tgz", + "integrity": "sha512-VpwkMtvT/4KNjqdO2SCkFw4koMgYN2k8hckbTGRzuUYYTHBvl9yK4q0A7RELEnkm/tsmDI1TjenV/MBifp2Aiw==", "dev": true, "requires": { - "@storybook/addons": "6.3.2", - "@storybook/api": "6.3.2", - "@storybook/client-api": "6.3.2", - "@storybook/components": "6.3.2", - "@storybook/theming": "6.3.2", + "@storybook/addons": "6.3.6", + "@storybook/api": "6.3.6", + "@storybook/client-api": "6.3.6", + "@storybook/components": "6.3.6", + "@storybook/theming": "6.3.6", "core-js": "^3.8.2", "regenerator-runtime": "^0.13.7" }, "dependencies": { "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", "dev": true } } }, "@storybook/addon-viewport": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-6.3.2.tgz", - "integrity": "sha512-npmD2kpXyc7zPFgxOu2JBg8U702P4c2B+OvFa53jQJIKyUdjXNzGatG2FSshQmY+UpiDJyKScPJ7W/9oU7HAfw==", + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-6.3.6.tgz", + "integrity": "sha512-Z5eztFFGd6vd+38sDurfTkIr9lY6EYWtMJzr5efedRZGg2IZLXZxQCoyjKEB29VB/IIjHEYHhHSh4SFsHT/m6g==", "dev": true, "requires": { - "@storybook/addons": "6.3.2", - "@storybook/api": "6.3.2", - "@storybook/client-logger": "6.3.2", - "@storybook/components": "6.3.2", - "@storybook/core-events": "6.3.2", - "@storybook/theming": "6.3.2", + "@storybook/addons": "6.3.6", + "@storybook/api": "6.3.6", + "@storybook/client-logger": "6.3.6", + "@storybook/components": "6.3.6", + "@storybook/core-events": "6.3.6", + "@storybook/theming": "6.3.6", "core-js": "^3.8.2", "global": "^4.4.0", "memoizerific": "^1.11.3", @@ -5797,52 +5961,52 @@ }, "dependencies": { "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", "dev": true } } }, "@storybook/addons": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.3.2.tgz", - "integrity": "sha512-fzpTLKyweD0yPXnfjaOrLpKRm4AVHdGRmfJb1p6KyUTXoNRWGYHsXN3EvAdsWjTamhbL2JoQy38kvu7SmkTEug==", + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.3.6.tgz", + "integrity": "sha512-tVV0vqaEEN9Md4bgScwfrnZYkN8iKZarpkIOFheLev+PHjSp8lgWMK5SNWDlbBYqfQfzrz9xbs+F07bMjfx9jQ==", "dev": true, "requires": { - "@storybook/api": "6.3.2", - "@storybook/channels": "6.3.2", - "@storybook/client-logger": "6.3.2", - "@storybook/core-events": "6.3.2", - "@storybook/router": "6.3.2", - "@storybook/theming": "6.3.2", + "@storybook/api": "6.3.6", + "@storybook/channels": "6.3.6", + "@storybook/client-logger": "6.3.6", + "@storybook/core-events": "6.3.6", + "@storybook/router": "6.3.6", + "@storybook/theming": "6.3.6", "core-js": "^3.8.2", "global": "^4.4.0", "regenerator-runtime": "^0.13.7" }, "dependencies": { "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", "dev": true } } }, "@storybook/api": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.3.2.tgz", - "integrity": "sha512-rXe7l8mwNEvk3cqHYJ4H2XQWWY8oeezJezgt1ZBq4GvNVzVUPjASi1meXQwAYm39SdCL5+lP/hLpAZvobB1Tag==", + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.3.6.tgz", + "integrity": "sha512-F5VuR1FrEwD51OO/EDDAZXNfF5XmJedYHJLwwCB4az2ZMrzG45TxGRmiEohrSTO6wAHGkAvjlEoX5jWOCqQ4pw==", "dev": true, "requires": { "@reach/router": "^1.3.4", - "@storybook/channels": "6.3.2", - "@storybook/client-logger": "6.3.2", - "@storybook/core-events": "6.3.2", + "@storybook/channels": "6.3.6", + "@storybook/client-logger": "6.3.6", + "@storybook/core-events": "6.3.6", "@storybook/csf": "0.0.1", - "@storybook/router": "6.3.2", + "@storybook/router": "6.3.6", "@storybook/semver": "^7.3.2", - "@storybook/theming": "6.3.2", + "@storybook/theming": "6.3.6", "@types/reach__router": "^1.3.7", "core-js": "^3.8.2", "fast-deep-equal": "^3.1.3", @@ -5892,12 +6056,6 @@ "p-locate": "^4.1.0" } }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -5932,17 +6090,17 @@ } }, "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", "dev": true } } }, "@storybook/builder-webpack4": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/builder-webpack4/-/builder-webpack4-6.3.2.tgz", - "integrity": "sha512-0xKMy/9Zp+Z1EK9R2Oq4kmd2Za9OlzXoLNBHdGuwe3lqoCsXvEQHsrGdc7V5uT4HwP1KBEhn9Yl+Y7yuMDZJ0Q==", + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/builder-webpack4/-/builder-webpack4-6.3.6.tgz", + "integrity": "sha512-LhTPQQowS2t6BRnyfusWZLbhjjf54/HiQyovJTTDnqrCiO6QoCMbVnp79LeO1aSkpQCKoeqOZ7TzH87fCytnZA==", "dev": true, "requires": { "@babel/core": "^7.12.10", @@ -5966,20 +6124,20 @@ "@babel/preset-env": "^7.12.11", "@babel/preset-react": "^7.12.10", "@babel/preset-typescript": "^7.12.7", - "@storybook/addons": "6.3.2", - "@storybook/api": "6.3.2", - "@storybook/channel-postmessage": "6.3.2", - "@storybook/channels": "6.3.2", - "@storybook/client-api": "6.3.2", - "@storybook/client-logger": "6.3.2", - "@storybook/components": "6.3.2", - "@storybook/core-common": "6.3.2", - "@storybook/core-events": "6.3.2", - "@storybook/node-logger": "6.3.2", - "@storybook/router": "6.3.2", + "@storybook/addons": "6.3.6", + "@storybook/api": "6.3.6", + "@storybook/channel-postmessage": "6.3.6", + "@storybook/channels": "6.3.6", + "@storybook/client-api": "6.3.6", + "@storybook/client-logger": "6.3.6", + "@storybook/components": "6.3.6", + "@storybook/core-common": "6.3.6", + "@storybook/core-events": "6.3.6", + "@storybook/node-logger": "6.3.6", + "@storybook/router": "6.3.6", "@storybook/semver": "^7.3.2", - "@storybook/theming": "6.3.2", - "@storybook/ui": "6.3.2", + "@storybook/theming": "6.3.6", + "@storybook/ui": "6.3.6", "@types/node": "^14.0.10", "@types/webpack": "^4.41.26", "autoprefixer": "^9.8.6", @@ -6041,6 +6199,19 @@ } } }, + "@storybook/node-logger": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-6.3.6.tgz", + "integrity": "sha512-XMDkMN7nVRojjiezrURlkI57+nz3OoH4UBV6qJZICKclxtdKAy0wwOlUSYEUq+axcJ4nvdfzPPoDfGoj37SW7A==", + "dev": true, + "requires": { + "@types/npmlog": "^4.1.2", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "npmlog": "^4.1.2", + "pretty-hrtime": "^1.0.3" + } + }, "@storybook/semver": { "version": "7.3.2", "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz", @@ -6064,15 +6235,15 @@ } }, "@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, "@types/node": { - "version": "14.17.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.4.tgz", - "integrity": "sha512-8kQ3+wKGRNN0ghtEn7EGps/B8CzuBz1nXZEIGGLP2GnwbqYn4dbTs7k+VKLTq1HvZLRCIDtN3Snx1Ege8B7L5A==", + "version": "14.17.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.9.tgz", + "integrity": "sha512-CMjgRNsks27IDwI785YMY0KLt3co/c0cQ5foxHYv/shC2w8oOnVwz5Ubq1QG5KzrcW+AXk6gzdnxIkDnTvzu3g==", "dev": true }, "ajv": { @@ -6088,12 +6259,12 @@ } }, "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" } }, "babel-plugin-polyfill-corejs3": { @@ -6132,25 +6303,13 @@ } }, "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, "chownr": { @@ -6159,6 +6318,15 @@ "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -6166,9 +6334,9 @@ "dev": true }, "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "requires": { "ms": "2.1.2" @@ -6271,6 +6439,12 @@ "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", "dev": true }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -6410,6 +6584,69 @@ "chalk": "^2.4.2", "source-map": "^0.6.1", "supports-color": "^6.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "randombytes": { @@ -6432,12 +6669,12 @@ } }, "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } @@ -6477,18 +6714,18 @@ } }, "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" } }, "tar": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", - "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.6.tgz", + "integrity": "sha512-oaWyu5dQbHaYcyZCTfyPpC+VmI62/OM2RTUYavTk1MDr1cwW5Boi3baeYQKiZbY2uSQJGr+iMOzb/JFxLrft+g==", "dev": true, "requires": { "chownr": "^2.0.0", @@ -6561,14 +6798,14 @@ } }, "@storybook/channel-postmessage": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-6.3.2.tgz", - "integrity": "sha512-6ne51RmZ7Ye9TDhPy/y5NuyQGNJ6VJcEch5E8D0nrFfNwJ5djKzkg1xatADjdhlCfQ9zPfseQVPM5IovEzEb/A==", + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-6.3.6.tgz", + "integrity": "sha512-GK7hXnaa+1pxEeMpREDzAZ3+2+k1KN1lbrZf+V7Kc1JZv1/Ji/vxk8AgxwiuzPAMx5J0yh/FduPscIPZ87Pibw==", "dev": true, "requires": { - "@storybook/channels": "6.3.2", - "@storybook/client-logger": "6.3.2", - "@storybook/core-events": "6.3.2", + "@storybook/channels": "6.3.6", + "@storybook/client-logger": "6.3.6", + "@storybook/core-events": "6.3.6", "core-js": "^3.8.2", "global": "^4.4.0", "qs": "^6.10.0", @@ -6587,9 +6824,9 @@ } }, "@storybook/channels": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.3.2.tgz", - "integrity": "sha512-fkyX0vn7KkN7p515Knm4Cfo8Z2xyO9hMPK4IReZiGz8o9vOziXHeYvdFZ07aTfcUb9ZG3ur3C7rmaEDMNfwCWA==", + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.3.6.tgz", + "integrity": "sha512-gCIQVr+dS/tg3AyCxIvkOXMVAs08BCIHXsaa2+XzmacnJBSP+CEHtI6IZ8WEv7tzZuXOiKLVg+wugeIh4j2I4g==", "dev": true, "requires": { "core-js": "^3.8.2", @@ -6598,16 +6835,16 @@ } }, "@storybook/client-api": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-6.3.2.tgz", - "integrity": "sha512-vYPTaROdmBtzKckGAbZAi8gpD2OgDB0FlsjTTe7rz8jcN1ecGRBBXlb/CJndLlAKgZqF+sramtIY3GZp0wdpPA==", + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-6.3.6.tgz", + "integrity": "sha512-Q/bWuH691L6k7xkiKtBmZo8C+ijgmQ+vc2Fz8pzIRZuMV8ROL74qhrS4BMKV4LhiYm4f8todtWfaQPBjawZMIA==", "dev": true, "requires": { - "@storybook/addons": "6.3.2", - "@storybook/channel-postmessage": "6.3.2", - "@storybook/channels": "6.3.2", - "@storybook/client-logger": "6.3.2", - "@storybook/core-events": "6.3.2", + "@storybook/addons": "6.3.6", + "@storybook/channel-postmessage": "6.3.6", + "@storybook/channels": "6.3.6", + "@storybook/client-logger": "6.3.6", + "@storybook/core-events": "6.3.6", "@storybook/csf": "0.0.1", "@types/qs": "^6.9.5", "@types/webpack-env": "^1.16.0", @@ -6623,12 +6860,6 @@ "util-deprecate": "^1.0.2" }, "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, "qs": { "version": "6.10.1", "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", @@ -6639,17 +6870,17 @@ } }, "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", "dev": true } } }, "@storybook/client-logger": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.3.2.tgz", - "integrity": "sha512-1V70P4ARRHSvkAUZP/mgU3hUl7BN9kpNujbBNRcVCCv+DgsnryF+CH9xJ8nxrpOZxlj4sIG68OcMqRaV1HL/3w==", + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.3.6.tgz", + "integrity": "sha512-qpXQ52ylxPm7l3+WAteV42NmqWA+L1FaJhMOvm2gwl3PxRd2cNXn2BwEhw++eA6qmJH/7mfOKXG+K+QQwOTpRA==", "dev": true, "requires": { "core-js": "^3.8.2", @@ -6657,15 +6888,15 @@ } }, "@storybook/components": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-6.3.2.tgz", - "integrity": "sha512-lwzqY7CLbo+4PxBiN9DMwtMRPG1jN9Ih6SAdB4fJdCj3bZQ7ef9peme70RvpDEIOD3MX6vu/9AKQj2wxAaHrDA==", + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-6.3.6.tgz", + "integrity": "sha512-aZkmtAY8b+LFXG6dVp6cTS6zGJuxkHRHcesRSWRQPxtgitaz1G58clRHxbKPRokfjPHNgYA3snogyeqxSA7YNQ==", "dev": true, "requires": { "@popperjs/core": "^2.6.0", - "@storybook/client-logger": "6.3.2", + "@storybook/client-logger": "6.3.6", "@storybook/csf": "0.0.1", - "@storybook/theming": "6.3.2", + "@storybook/theming": "6.3.6", "@types/color-convert": "^2.0.0", "@types/overlayscrollbars": "^1.12.0", "@types/react-syntax-highlighter": "11.0.5", @@ -6703,43 +6934,37 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", "dev": true } } }, "@storybook/core": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/core/-/core-6.3.2.tgz", - "integrity": "sha512-EPyGqTu2f2184FfZ7o1IMWbVKWkdhbIeLSnNfl5CA5ZVMFQwV8XhEJXpzWI0VopZK0hE0+ooU4M+if8JeSWulQ==", + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/core/-/core-6.3.6.tgz", + "integrity": "sha512-y71VvVEbqCpG28fDBnfNg3RnUPnicwFYq9yuoFVRF0LYcJCy5cYhkIfW3JG8mN2m0P+LzH80mt2Rj6xlSXrkdQ==", "dev": true, "requires": { - "@storybook/core-client": "6.3.2", - "@storybook/core-server": "6.3.2" + "@storybook/core-client": "6.3.6", + "@storybook/core-server": "6.3.6" } }, "@storybook/core-client": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-6.3.2.tgz", - "integrity": "sha512-A354DrsBQgtfKRSNVM0WpepNZwZfb8QxBKB86LR5crfbLIAs9fxJnYmAVBF1ju1EasrIxX6kGDryH4pQYaJPXw==", + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-6.3.6.tgz", + "integrity": "sha512-Bq86flEdXdMNbdHrGMNQ6OT1tcBQU8ym56d+nG46Ctjf5GN+Dl+rPtRWuu7cIZs10KgqJH+86DXp+tvpQIDidg==", "dev": true, "requires": { - "@storybook/addons": "6.3.2", - "@storybook/channel-postmessage": "6.3.2", - "@storybook/client-api": "6.3.2", - "@storybook/client-logger": "6.3.2", - "@storybook/core-events": "6.3.2", + "@storybook/addons": "6.3.6", + "@storybook/channel-postmessage": "6.3.6", + "@storybook/client-api": "6.3.6", + "@storybook/client-logger": "6.3.6", + "@storybook/core-events": "6.3.6", "@storybook/csf": "0.0.1", - "@storybook/ui": "6.3.2", + "@storybook/ui": "6.3.6", "airbnb-js-shims": "^2.2.1", "ansi-to-html": "^0.6.11", "core-js": "^3.8.2", @@ -6752,12 +6977,6 @@ "util-deprecate": "^1.0.2" }, "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, "qs": { "version": "6.10.1", "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", @@ -6768,17 +6987,17 @@ } }, "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", "dev": true } } }, "@storybook/core-common": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-6.3.2.tgz", - "integrity": "sha512-draeHXXWTn1u3YzLMZdtCOy1UOXsPBQz6q5f64o8Qjkr8Htqf2IiFYPmswOq7eo9yPQZu7+nsfRcx7M1GNAQlg==", + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-6.3.6.tgz", + "integrity": "sha512-nHolFOmTPymI50j180bCtcf1UJZ2eOnYaECRtHvVrCUod5KFF7wh2EHrgWoKqrKrsn84UOY/LkX2C2WkbYtWRg==", "dev": true, "requires": { "@babel/core": "^7.12.10", @@ -6802,7 +7021,7 @@ "@babel/preset-react": "^7.12.10", "@babel/preset-typescript": "^7.12.7", "@babel/register": "^7.12.1", - "@storybook/node-logger": "6.3.2", + "@storybook/node-logger": "6.3.6", "@storybook/semver": "^7.3.2", "@types/glob-base": "^0.3.0", "@types/micromatch": "^4.0.1", @@ -6918,6 +7137,19 @@ } } }, + "@storybook/node-logger": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-6.3.6.tgz", + "integrity": "sha512-XMDkMN7nVRojjiezrURlkI57+nz3OoH4UBV6qJZICKclxtdKAy0wwOlUSYEUq+axcJ4nvdfzPPoDfGoj37SW7A==", + "dev": true, + "requires": { + "@types/npmlog": "^4.1.2", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "npmlog": "^4.1.2", + "pretty-hrtime": "^1.0.3" + } + }, "@storybook/semver": { "version": "7.3.2", "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz", @@ -6941,9 +7173,9 @@ } }, "@types/node": { - "version": "14.17.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.4.tgz", - "integrity": "sha512-8kQ3+wKGRNN0ghtEn7EGps/B8CzuBz1nXZEIGGLP2GnwbqYn4dbTs7k+VKLTq1HvZLRCIDtN3Snx1Ege8B7L5A==", + "version": "14.17.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.9.tgz", + "integrity": "sha512-CMjgRNsks27IDwI785YMY0KLt3co/c0cQ5foxHYv/shC2w8oOnVwz5Ubq1QG5KzrcW+AXk6gzdnxIkDnTvzu3g==", "dev": true }, "ansi-styles": { @@ -6986,9 +7218,9 @@ } }, "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -7018,9 +7250,9 @@ } }, "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "requires": { "ms": "2.1.2" @@ -7075,9 +7307,9 @@ } }, "fork-ts-checker-webpack-plugin": { - "version": "6.2.12", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.2.12.tgz", - "integrity": "sha512-BzXGIfM47q1WFwXsNLl22dQVMFwSBgldL07lvqRJFxgrhT76QQ3nri5PX01Rxfa2RYvv/hqACULO8K5gT8fFuA==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.3.1.tgz", + "integrity": "sha512-uxqlKTEeSJ5/JRr0zaCiw2U+kOV8F4/MhCnnRf6vbxj4ZU3Or0DLl/0CNtXro7uLWDssnuR7wUN7fU9w1I0REA==", "dev": true, "requires": { "@babel/code-frame": "^7.8.3", @@ -7325,26 +7557,26 @@ } }, "@storybook/core-events": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.3.2.tgz", - "integrity": "sha512-Mqxp2au4djPC9j8Wc97oM1iJQLAS8ZsW8CqcPxDmhl38cMfcMQiQXTk+2GDQbMxD2An2b73EU5hMMBAvNzYjog==", + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.3.6.tgz", + "integrity": "sha512-Ut1dz96bJ939oSn5t1ckPXd3WcFejK96Sb3+R/z23vEHUWGBFtygGyw8r/SX/WNDVzGmQU8c+mzJJTZwCBJz8A==", "dev": true, "requires": { "core-js": "^3.8.2" } }, "@storybook/core-server": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-6.3.2.tgz", - "integrity": "sha512-ceBKdLYlhKygBOJyIWR+9i4bLVOOadsLxM9ITAIzaSqSfZiuFxoP+irnEZrZUfFA0zcLYFEW5MH2vtCCPH+fhg==", + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-6.3.6.tgz", + "integrity": "sha512-47ZcfxYn7t891oAMG98iH1BQIgQT9Yk/2BBNVCWY43Ong+ME1xJ6j4C/jkRUOseP7URlfLUQsUYKAYJNVijDvg==", "dev": true, "requires": { - "@storybook/builder-webpack4": "6.3.2", - "@storybook/core-client": "6.3.2", - "@storybook/core-common": "6.3.2", - "@storybook/csf-tools": "6.3.2", - "@storybook/manager-webpack4": "6.3.2", - "@storybook/node-logger": "6.3.2", + "@storybook/builder-webpack4": "6.3.6", + "@storybook/core-client": "6.3.6", + "@storybook/core-common": "6.3.6", + "@storybook/csf-tools": "6.3.6", + "@storybook/manager-webpack4": "6.3.6", + "@storybook/node-logger": "6.3.6", "@storybook/semver": "^7.3.2", "@types/node": "^14.0.10", "@types/node-fetch": "^2.5.7", @@ -7374,6 +7606,19 @@ "webpack": "4" }, "dependencies": { + "@storybook/node-logger": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-6.3.6.tgz", + "integrity": "sha512-XMDkMN7nVRojjiezrURlkI57+nz3OoH4UBV6qJZICKclxtdKAy0wwOlUSYEUq+axcJ4nvdfzPPoDfGoj37SW7A==", + "dev": true, + "requires": { + "@types/npmlog": "^4.1.2", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "npmlog": "^4.1.2", + "pretty-hrtime": "^1.0.3" + } + }, "@storybook/semver": { "version": "7.3.2", "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz", @@ -7385,9 +7630,9 @@ } }, "@types/node": { - "version": "14.17.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.4.tgz", - "integrity": "sha512-8kQ3+wKGRNN0ghtEn7EGps/B8CzuBz1nXZEIGGLP2GnwbqYn4dbTs7k+VKLTq1HvZLRCIDtN3Snx1Ege8B7L5A==", + "version": "14.17.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.9.tgz", + "integrity": "sha512-CMjgRNsks27IDwI785YMY0KLt3co/c0cQ5foxHYv/shC2w8oOnVwz5Ubq1QG5KzrcW+AXk6gzdnxIkDnTvzu3g==", "dev": true }, "ansi-regex": { @@ -7412,9 +7657,9 @@ "dev": true }, "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -7536,12 +7781,6 @@ "p-locate": "^4.1.0" } }, - "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", - "dev": true - }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -7567,9 +7806,9 @@ "dev": true }, "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", "dev": true }, "slash": { @@ -7622,20 +7861,12 @@ "dev": true, "requires": { "lodash": "^4.17.15" - }, - "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - } } }, "@storybook/csf-tools": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-6.3.2.tgz", - "integrity": "sha512-CGj4HsKwYBwp2zWmrG1RJedwrnakfxkptp/4HQ0mE9ajw28GndNZus2+IgnBsxdbzv8LYwz/rHpXRbvfDbgPFg==", + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-6.3.6.tgz", + "integrity": "sha512-MQevelkEUVNCSjKMXLNc/G8q/BB5babPnSeI0IcJq4k+kLUSHtviimLNpPowMgGJBPx/y9VihH8N7vdJUWVj9w==", "dev": true, "requires": { "@babel/generator": "^7.12.11", @@ -7682,12 +7913,6 @@ "universalify": "^2.0.0" } }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, "prettier": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz", @@ -7695,9 +7920,9 @@ "dev": true }, "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", "dev": true }, "universalify": { @@ -7709,20 +7934,20 @@ } }, "@storybook/manager-webpack4": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/manager-webpack4/-/manager-webpack4-6.3.2.tgz", - "integrity": "sha512-MeYXK2H65y08meKM477PT0ygMMiHYGo9e8vl8oIXY3pp/24iiE5W+yCHH3HP5PEsKCXMml6gWM7ba44lpkuutQ==", + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/manager-webpack4/-/manager-webpack4-6.3.6.tgz", + "integrity": "sha512-qh/jV4b6mFRpRFfhk1JSyO2gKRz8PLPvDt2AD52/bTAtNRzypKoiWqyZNR2CJ9hgNQtDrk2CO3eKPrcdKYGizQ==", "dev": true, "requires": { "@babel/core": "^7.12.10", "@babel/plugin-transform-template-literals": "^7.12.1", "@babel/preset-react": "^7.12.10", - "@storybook/addons": "6.3.2", - "@storybook/core-client": "6.3.2", - "@storybook/core-common": "6.3.2", - "@storybook/node-logger": "6.3.2", - "@storybook/theming": "6.3.2", - "@storybook/ui": "6.3.2", + "@storybook/addons": "6.3.6", + "@storybook/core-client": "6.3.6", + "@storybook/core-common": "6.3.6", + "@storybook/node-logger": "6.3.6", + "@storybook/theming": "6.3.6", + "@storybook/ui": "6.3.6", "@types/node": "^14.0.10", "@types/webpack": "^4.41.26", "babel-loader": "^8.2.2", @@ -7753,16 +7978,29 @@ "webpack-virtual-modules": "^0.2.2" }, "dependencies": { + "@storybook/node-logger": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-6.3.6.tgz", + "integrity": "sha512-XMDkMN7nVRojjiezrURlkI57+nz3OoH4UBV6qJZICKclxtdKAy0wwOlUSYEUq+axcJ4nvdfzPPoDfGoj37SW7A==", + "dev": true, + "requires": { + "@types/npmlog": "^4.1.2", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "npmlog": "^4.1.2", + "pretty-hrtime": "^1.0.3" + } + }, "@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, "@types/node": { - "version": "14.17.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.4.tgz", - "integrity": "sha512-8kQ3+wKGRNN0ghtEn7EGps/B8CzuBz1nXZEIGGLP2GnwbqYn4dbTs7k+VKLTq1HvZLRCIDtN3Snx1Ege8B7L5A==", + "version": "14.17.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.9.tgz", + "integrity": "sha512-CMjgRNsks27IDwI785YMY0KLt3co/c0cQ5foxHYv/shC2w8oOnVwz5Ubq1QG5KzrcW+AXk6gzdnxIkDnTvzu3g==", "dev": true }, "ajv": { @@ -7812,9 +8050,9 @@ } }, "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -7978,12 +8216,6 @@ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true }, - "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", - "dev": true - }, "p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -8157,18 +8389,18 @@ } }, "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", "dev": true }, "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } @@ -8223,9 +8455,9 @@ } }, "tar": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", - "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.6.tgz", + "integrity": "sha512-oaWyu5dQbHaYcyZCTfyPpC+VmI62/OM2RTUYavTk1MDr1cwW5Boi3baeYQKiZbY2uSQJGr+iMOzb/JFxLrft+g==", "dev": true, "requires": { "chownr": "^2.0.0", @@ -8345,27 +8577,27 @@ } }, "@storybook/postinstall": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-6.3.2.tgz", - "integrity": "sha512-RkzrEr5GyBKFEPwOJw6JFRqkCtexvqZbyQeDuQ8K5AxRoJOcdXfxtb2Qkq06wfUnexxhZ9R0ktzepdtzk89ALw==", + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-6.3.6.tgz", + "integrity": "sha512-90Izr8/GwLiXvdF2A3v1PCpWoxUBgqA0TrWGuiWXfJnfFRVlVrX9A/ClGUPSh80L3oE01E6raaOG4wW4JTRKfw==", "dev": true, "requires": { "core-js": "^3.8.2" } }, "@storybook/react": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/react/-/react-6.3.2.tgz", - "integrity": "sha512-AwuXzvu6zKSZnWFgYWxvP1QumnJ/8VChZJ1/pCEW3IGqxtSBd7KAF7EjlmS6CqAnWP+zp9jUr7It1P9631CwNQ==", + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/react/-/react-6.3.6.tgz", + "integrity": "sha512-2c30XTe7WzKnvgHBGOp1dzBVlhcbc3oEX0SIeVE9ZYkLvRPF+J1jG948a26iqOCOgRAW13Bele37mG1gbl4tiw==", "dev": true, "requires": { "@babel/preset-flow": "^7.12.1", "@babel/preset-react": "^7.12.10", "@pmmmwh/react-refresh-webpack-plugin": "^0.4.3", - "@storybook/addons": "6.3.2", - "@storybook/core": "6.3.2", - "@storybook/core-common": "6.3.2", - "@storybook/node-logger": "6.3.2", + "@storybook/addons": "6.3.6", + "@storybook/core": "6.3.6", + "@storybook/core-common": "6.3.6", + "@storybook/node-logger": "6.3.6", "@storybook/react-docgen-typescript-plugin": "1.0.2-canary.253f8c1.0", "@storybook/semver": "^7.3.2", "@types/webpack-env": "^1.16.0", @@ -8384,6 +8616,19 @@ "webpack": "4" }, "dependencies": { + "@storybook/node-logger": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-6.3.6.tgz", + "integrity": "sha512-XMDkMN7nVRojjiezrURlkI57+nz3OoH4UBV6qJZICKclxtdKAy0wwOlUSYEUq+axcJ4nvdfzPPoDfGoj37SW7A==", + "dev": true, + "requires": { + "@types/npmlog": "^4.1.2", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "npmlog": "^4.1.2", + "pretty-hrtime": "^1.0.3" + } + }, "@storybook/semver": { "version": "7.3.2", "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz", @@ -8394,6 +8639,34 @@ "find-up": "^4.1.0" } }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -8404,6 +8677,12 @@ "path-exists": "^4.0.0" } }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -8413,12 +8692,6 @@ "p-locate": "^4.1.0" } }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -8487,10 +8760,19 @@ } }, "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } } } }, @@ -8519,9 +8801,9 @@ } }, "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "requires": { "ms": "2.1.2" @@ -8660,13 +8942,13 @@ } }, "@storybook/router": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.3.2.tgz", - "integrity": "sha512-2oe2w1h4ucKhVub2NjKqwvJ6E6b57rA0fr8EOElPXdQXDi2fD3hFjUIXL4OdWG+GMVEqfkoje0eRCDRdjbu+yg==", + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.3.6.tgz", + "integrity": "sha512-fQ1n7cm7lPFav7I+fStQciSVMlNdU+yLY6Fue252rpV5Q68bMTjwKpjO9P2/Y3CCj4QD3dPqwEkn4s0qUn5tNA==", "dev": true, "requires": { "@reach/router": "^1.3.4", - "@storybook/client-logger": "6.3.2", + "@storybook/client-logger": "6.3.6", "@types/reach__router": "^1.3.7", "core-js": "^3.8.2", "fast-deep-equal": "^3.1.3", @@ -8683,12 +8965,6 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, "qs": { "version": "6.10.1", "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", @@ -8701,13 +8977,13 @@ } }, "@storybook/source-loader": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/source-loader/-/source-loader-6.3.2.tgz", - "integrity": "sha512-tg8VDBoVRrazDdvFJBtAp0ChztaF3cxmXsbWCOxYkP8u4sYDXBikJCllSGzkuSx6GUuU0kyQ0JV94Bd2ECTdOw==", + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/source-loader/-/source-loader-6.3.6.tgz", + "integrity": "sha512-om3iS3a+D287FzBrbXB/IXB6Z5Ql2yc4dFKTy6FPe5v4N3U0p5puWOKUYWWbTX1JbcpRj0IXXo7952G68tcC1g==", "dev": true, "requires": { - "@storybook/addons": "6.3.2", - "@storybook/client-logger": "6.3.2", + "@storybook/addons": "6.3.6", + "@storybook/client-logger": "6.3.6", "@storybook/csf": "0.0.1", "core-js": "^3.8.2", "estraverse": "^5.2.0", @@ -8756,12 +9032,6 @@ "json5": "^2.1.2" } }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, "minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", @@ -8775,23 +9045,23 @@ "dev": true }, "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", "dev": true } } }, "@storybook/theming": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.3.2.tgz", - "integrity": "sha512-XICs67cuEGQxnzJ2SYPRZiIELaUCFQsYhtBTXycJIpBUbcbysdBE7GH+3aG8PpDMaSgHWJ7qaiYEoPlhFbAv1w==", + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.3.6.tgz", + "integrity": "sha512-mPrQrMUREajNEWxzgR8t0YIZsI9avPv25VNA08fANnwVsc887p4OL5eCTL2dFIlD34YDzAwiyRKYoLj2vDW4nw==", "dev": true, "requires": { "@emotion/core": "^10.1.1", "@emotion/is-prop-valid": "^0.8.6", "@emotion/styled": "^10.0.27", - "@storybook/client-logger": "6.3.2", + "@storybook/client-logger": "6.3.6", "core-js": "^3.8.2", "deep-object-diff": "^1.1.0", "emotion-theming": "^10.0.27", @@ -8803,21 +9073,21 @@ } }, "@storybook/ui": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@storybook/ui/-/ui-6.3.2.tgz", - "integrity": "sha512-Aqzr5vQsr67iDwg41CmHr/NlcNayld8PPGWqtxJ/+/fSScnKZ8KdwGoqpj64dizowoggpCCeYVZCanHhxS47Vg==", + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/@storybook/ui/-/ui-6.3.6.tgz", + "integrity": "sha512-S9FjISUiAmbBR7d6ubUEcELQdffDfRxerloxkXs5Ou7n8fEPqpgQB01Hw5MLRUwTEpxPzHn+xtIGYritAGxt/Q==", "dev": true, "requires": { "@emotion/core": "^10.1.1", - "@storybook/addons": "6.3.2", - "@storybook/api": "6.3.2", - "@storybook/channels": "6.3.2", - "@storybook/client-logger": "6.3.2", - "@storybook/components": "6.3.2", - "@storybook/core-events": "6.3.2", - "@storybook/router": "6.3.2", + "@storybook/addons": "6.3.6", + "@storybook/api": "6.3.6", + "@storybook/channels": "6.3.6", + "@storybook/client-logger": "6.3.6", + "@storybook/components": "6.3.6", + "@storybook/core-events": "6.3.6", + "@storybook/router": "6.3.6", "@storybook/semver": "^7.3.2", - "@storybook/theming": "6.3.2", + "@storybook/theming": "6.3.6", "@types/markdown-to-jsx": "^6.11.3", "copy-to-clipboard": "^3.3.1", "core-js": "^3.8.2", @@ -8868,12 +9138,6 @@ "p-locate": "^4.1.0" } }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, "markdown-to-jsx": { "version": "6.11.4", "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-6.11.4.tgz", @@ -8918,9 +9182,9 @@ } }, "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", "dev": true } } @@ -9011,9 +9275,9 @@ } }, "@types/braces": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/braces/-/braces-3.0.0.tgz", - "integrity": "sha512-TbH79tcyi9FHwbyboOKeRachRq63mSuWYXOflsNO9ZyE5ClQ/JaozNKl+aWUq87qPNsXasXxi2AbgfwIJ+8GQw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/braces/-/braces-3.0.1.tgz", + "integrity": "sha512-+euflG6ygo4bn0JHtn4pYqcXwRtLvElQ7/nnjDu7iYG56H0+OhCd7d6Ug0IE3WcFpZozBKW2+80FUbv5QGk5AQ==", "dev": true }, "@types/bson": { @@ -9190,9 +9454,9 @@ } }, "@types/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==", "dev": true, "requires": { "@types/minimatch": "*", @@ -9215,18 +9479,18 @@ } }, "@types/hast": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.1.tgz", - "integrity": "sha512-viwwrB+6xGzw+G1eWpF9geV3fnsDgXqHG+cqgiHrvQfDUW5hzhCyV7Sy3UJxhfRFBsgky2SSW33qi/YrIkjX5Q==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.2.tgz", + "integrity": "sha512-Op5W7jYgZI7AWKY5wQ0/QNMzQM7dGQPyW1rXKNiymVCy5iTfdPuGu4HhYNOM2sIv8gUfIuIdcYlXmAepwaowow==", "dev": true, "requires": { "@types/unist": "*" } }, "@types/html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", + "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", "dev": true }, "@types/imap": { @@ -9390,9 +9654,9 @@ } }, "@types/micromatch": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-4.0.1.tgz", - "integrity": "sha512-my6fLBvpY70KattTNzYOK6KU1oR1+UCz9ug/JbcF5UrEmeCt9P7DV2t7L8+t18mMPINqGQCE4O8PLOPbI84gxw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-oqXqVb0ci19GtH0vOA/U2TmHTcRY9kuZl4mqUxe0QmJAlIW13kzhuK5pi1i9+ngav8FjpSb9FVS/GE00GLX1VA==", "dev": true, "requires": { "@types/braces": "*" @@ -9405,9 +9669,9 @@ "dev": true }, "@types/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", "dev": true }, "@types/minimist": { @@ -9464,9 +9728,9 @@ "integrity": "sha512-TxCmnSSppKBBOzYzPR2BR25YlX5Oay8z2XGwFBInuA/Co0V9xJhLlW4kjbxKtgeNo3NOMbQP1A5Rc03y+XecPw==" }, "@types/node-fetch": { - "version": "2.5.10", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.10.tgz", - "integrity": "sha512-IpkX0AasN44hgEad0gEF/V6EgR5n69VEqPEgnmoM8GsIGro3PowbWs4tR6IhxUTyPLpOn+fiGG6nrQhcmoCuIQ==", + "version": "2.5.12", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.12.tgz", + "integrity": "sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==", "dev": true, "requires": { "@types/node": "*", @@ -9517,9 +9781,9 @@ "dev": true }, "@types/overlayscrollbars": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@types/overlayscrollbars/-/overlayscrollbars-1.12.0.tgz", - "integrity": "sha512-h/pScHNKi4mb+TrJGDon8Yb06ujFG0mSg12wIO0sWMUF3dQIe2ExRRdNRviaNt9IjxIiOfnRr7FsQAdHwK4sMg==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@types/overlayscrollbars/-/overlayscrollbars-1.12.1.tgz", + "integrity": "sha512-V25YHbSoKQN35UasHf0EKD9U2vcmexRSp78qa8UglxFH8H3D+adEa9zGZwrqpH4TdvqeMrgMqVqsLB4woAryrQ==", "dev": true }, "@types/p-cancelable": { @@ -9565,9 +9829,9 @@ } }, "@types/pretty-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/pretty-hrtime/-/pretty-hrtime-1.0.0.tgz", - "integrity": "sha512-xl+5r2rcrxdLViAYkkiLMYsoUs3qEyrAnHFyEzYysgRxdVp3WbhysxIvJIxZp9FvZ2CYezh0TaHZorivH+voOQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/pretty-hrtime/-/pretty-hrtime-1.0.1.tgz", + "integrity": "sha512-VjID5MJb1eGKthz2qUerWT8+R4b9N+CHvGCzg9fn4kWZgaF9AhdYikQio3R7wV8YY1NsQKPaCwKz1Yff+aHNUQ==", "dev": true }, "@types/prop-types": { @@ -9595,9 +9859,9 @@ "dev": true }, "@types/reach__router": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/@types/reach__router/-/reach__router-1.3.8.tgz", - "integrity": "sha512-cjjT0FPdwuvhLWpCDt2WCh4sdBqNzJe3XhxXmRQGsY3IvT58M8sE4E7A0QaFYuJs3ar+McSJTiJxdYKWAXbBhw==", + "version": "1.3.9", + "resolved": "https://registry.npmjs.org/@types/reach__router/-/reach__router-1.3.9.tgz", + "integrity": "sha512-N6rqQqTTAV/zKLfK3iq9Ww3wqCEhTZvsilhl0zI09zETdVq1QGmJH6+/xnj8AFUWIrle2Cqo+PGM/Ltr1vBb9w==", "dev": true, "requires": { "@types/react": "*" @@ -9757,9 +10021,9 @@ "dev": true }, "@types/tapable": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.7.tgz", - "integrity": "sha512-0VBprVqfgFD7Ehb2vd8Lh9TG3jP98gvr8rgehQqzztZNI7o8zS8Ad4jyZneKELphpuE212D8J70LnSNQSyO6bQ==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.8.tgz", + "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==", "dev": true }, "@types/tmp": { @@ -9789,9 +10053,9 @@ "dev": true }, "@types/uglify-js": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.13.0.tgz", - "integrity": "sha512-EGkrJD5Uy+Pg0NUR8uA4bJ5WMfljyad0G+784vLCNUkD+QwOJXUbBYExXfVGf7YtyzdQp3L/XMYcliB987kL5Q==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.13.1.tgz", + "integrity": "sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ==", "dev": true, "requires": { "source-map": "^0.6.1" @@ -9839,9 +10103,9 @@ "dev": true }, "@types/webpack": { - "version": "4.41.29", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.29.tgz", - "integrity": "sha512-6pLaORaVNZxiB3FSHbyBiWM7QdazAWda1zvAq4SbZObZqHSDbWLi62iFdblVea6SK9eyBIVp5yHhKt/yNQdR7Q==", + "version": "4.41.30", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.30.tgz", + "integrity": "sha512-GUHyY+pfuQ6haAfzu4S14F+R5iGRwN6b2FRNJY7U0NilmFAqbsOfK6j1HwuLBAqwRIT+pVdNDJGJ6e8rpp0KHA==", "dev": true, "requires": { "@types/node": "*", @@ -9861,15 +10125,15 @@ } }, "@types/webpack-env": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.16.0.tgz", - "integrity": "sha512-Fx+NpfOO0CpeYX2g9bkvX8O5qh9wrU1sOF4g8sft4Mu7z+qfe387YlyY8w8daDyDsKY5vUxM0yxkAYnbkRbZEw==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.16.2.tgz", + "integrity": "sha512-vKx7WNQNZDyJveYcHAm9ZxhqSGLYwoyLhrHjLBOkw3a7cT76sTdjgtwyijhk1MaHyRIuSztcVwrUOO/NEu68Dw==", "dev": true }, "@types/webpack-sources": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-2.1.0.tgz", - "integrity": "sha512-LXn/oYIpBeucgP1EIJbKQ2/4ZmpvRl+dlrFdX7+94SKRUV3Evy3FsfMZY318vGhkWUS5MPhtOM3w1/hCOAOXcg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-2.1.1.tgz", + "integrity": "sha512-MjM1R6iuw8XaVbtkCBz0N349cyqBjJHCbQiOeppe3VBeFvxqs74RKHAVt9LkxTnUWc7YLZOEsUfPUnmK6SBPKQ==", "dev": true, "requires": { "@types/node": "*", @@ -9911,18 +10175,18 @@ "dev": true }, "@types/yargs": { - "version": "15.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", - "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "version": "15.0.14", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", + "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", "dev": true, "requires": { "@types/yargs-parser": "*" } }, "@types/yargs-parser": { - "version": "20.2.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz", - "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==", + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", "dev": true }, "@typescript-eslint/eslint-plugin": { @@ -11445,9 +11709,9 @@ }, "dependencies": { "es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "version": "1.18.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.5.tgz", + "integrity": "sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -11456,11 +11720,12 @@ "get-intrinsic": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", "is-callable": "^1.2.3", "is-negative-zero": "^2.0.1", "is-regex": "^1.1.3", "is-string": "^1.0.6", - "object-inspect": "^1.10.3", + "object-inspect": "^1.11.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "string.prototype.trimend": "^1.0.4", @@ -11502,9 +11767,9 @@ } }, "object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", "dev": true }, "object-keys": { @@ -12663,12 +12928,6 @@ "tslib": "^2.0.1" } }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, "tslib": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", @@ -14193,9 +14452,9 @@ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" }, "c8": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/c8/-/c8-7.7.3.tgz", - "integrity": "sha512-ZyA7n3w8i4ETV25tVYMHwJxCSnaOf/LfA8vOcuZOPbonuQfD7tBT/gMWZy7eczRpCDuHcvMXwoqAemg6R0p3+A==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/c8/-/c8-7.8.0.tgz", + "integrity": "sha512-x2Bx+IIEd608B1LmjiNQ/kizRPkCWo5XzuV57J9afPjAHSnYXALwbCSOkQ7cSaNXBNblfqcvdycj+klmL+j6yA==", "dev": true, "requires": { "@bcoe/v8-coverage": "^0.2.3", @@ -15449,9 +15708,9 @@ } }, "core-js-pure": { - "version": "3.15.2", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.15.2.tgz", - "integrity": "sha512-D42L7RYh1J2grW8ttxoY1+17Y4wXZeKe7uyplAI3FkNQyI5OgBIAjUfFiTPfL1rs0qLpxaabITNbjKl1Sp82tA==", + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.16.0.tgz", + "integrity": "sha512-wzlhZNepF/QA9yvx3ePDgNGudU5KDB8lu/TRPKelYA/QtSnkS/cLl2W+TIdEX1FAFcBr0YpY7tPDlcmXJ7AyiQ==", "dev": true }, "core-util-is": { @@ -16023,10 +16282,22 @@ } }, "css-vars-ponyfill": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/css-vars-ponyfill/-/css-vars-ponyfill-2.4.3.tgz", - "integrity": "sha512-PBfIwjSu27s8kebu8taEYFM8ehVr8o2Qw4H4nSlJzHAJgcduAqxz4oPmYTJuzgauOKaWII9SHWStQ965fxsdZA==", - "dev": true + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/css-vars-ponyfill/-/css-vars-ponyfill-2.4.6.tgz", + "integrity": "sha512-FqUFzMlI5jpPl73R9FrUuittWM/t7RDEnyp0603MCNEy6PI/1PALIX1d15cui6UAN/V8tnIWZDMz6WoZD87eGQ==", + "dev": true, + "requires": { + "balanced-match": "^1.0.2", + "get-css-data": "^2.0.2" + }, + "dependencies": { + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + } + } }, "css-what": { "version": "2.1.2", @@ -16407,9 +16678,9 @@ "integrity": "sha512-lcWy3AXDRJOD7MplwZMmNSRM//kZtJaLz4n6D1P5z9wEmZGBKhJRBIr1Xs9KNQJmdXPblvgffynYji4iylUTcA==" }, "date-fns": { - "version": "2.21.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.21.1.tgz", - "integrity": "sha512-m1WR0xGiC6j6jNFAyW4Nvh4WxAi4JF4w9jRJwSI8nBmNcyZXPcP9VUQG+6gHQXAmqaGEKDKhOqAtENDC941UkA==", + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.23.0.tgz", + "integrity": "sha512-5ycpauovVyAk0kXNZz6ZoB9AYMZB4DObse7P3BPWmyEjXNORTI8EJ6X0uaSAq4sCHzM1uajzrkr6HnsLQpxGXA==", "dev": true }, "date.js": { @@ -16862,17 +17133,26 @@ } }, "downshift": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/downshift/-/downshift-6.1.3.tgz", - "integrity": "sha512-RA1MuaNcTbt0j+sVLhSs8R2oZbBXYAtdQP/V+uHhT3DoDteZzJPjlC+LQVm9T07Wpvo84QXaZtUCePLDTDwGXg==", + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/downshift/-/downshift-6.1.5.tgz", + "integrity": "sha512-9hpSCQLQ0KzlnI9ebpdbLuw5ogm7MXXI1D5N1zGWYSjHph+Xe02enXKyfDDE14akGr0jppAg0S1t/cjXp677ew==", "dev": true, "requires": { - "@babel/runtime": "^7.13.10", + "@babel/runtime": "^7.14.8", "compute-scroll-into-view": "^1.0.17", "prop-types": "^15.7.2", "react-is": "^17.0.2" }, "dependencies": { + "@babel/runtime": { + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.8.tgz", + "integrity": "sha512-twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+eg==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, "react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", @@ -18769,9 +19049,9 @@ }, "dependencies": { "@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, "ajv": { @@ -18831,12 +19111,12 @@ "dev": true }, "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } @@ -19867,9 +20147,9 @@ }, "dependencies": { "es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "version": "1.18.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.5.tgz", + "integrity": "sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -19878,11 +20158,12 @@ "get-intrinsic": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", "is-callable": "^1.2.3", "is-negative-zero": "^2.0.1", "is-regex": "^1.1.3", "is-string": "^1.0.6", - "object-inspect": "^1.10.3", + "object-inspect": "^1.11.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "string.prototype.trimend": "^1.0.4", @@ -19924,9 +20205,9 @@ } }, "object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", "dev": true }, "object-keys": { @@ -20645,6 +20926,12 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, + "get-css-data": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-css-data/-/get-css-data-2.0.2.tgz", + "integrity": "sha512-pYqg80/7u/MdBrrAQj2OIoZ08TxEnvCHyU5WFnPxxS/D0S8OpUTkqGFRzn8bO38DmtCuYBpR9VMCen78BL4jiQ==", + "dev": true + }, "get-func-name": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", @@ -21711,12 +21998,6 @@ "json5": "^1.0.1" } }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, "minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", @@ -23070,9 +23351,9 @@ } }, "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -29775,9 +30056,9 @@ "integrity": "sha1-3F4yN2WYXd/cv9r8MUGpVprvdak=" }, "preact": { - "version": "10.5.13", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.5.13.tgz", - "integrity": "sha512-q/vlKIGNwzTLu+jCcvywgGrt+H/1P/oIRSD6mV4ln3hmlC+Aa34C7yfPI4+5bzW8pONyVXYS7SvXosy2dKKtWQ==", + "version": "10.5.14", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.5.14.tgz", + "integrity": "sha512-KojoltCrshZ099ksUZ2OQKfbH66uquFoxHSbnwKbTJHeQNvx42EmC7wQVWNuDt6vC5s3nudRHFtKbpY4ijKlaQ==", "dev": true }, "preact-i18nline": { @@ -29972,14 +30253,6 @@ "requires": { "lodash": "^4.17.20", "renderkid": "^2.0.4" - }, - "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - } } }, "pretty-hrtime": { @@ -29989,9 +30262,9 @@ "dev": true }, "prismjs": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.24.0.tgz", - "integrity": "sha512-SqV5GRsNqnzCL8k5dfAjCNhUrF3pR0A9lTDSCUZeh/LIshheXJEaP0hwLz2t4XHivd2J/v2HR+gRnigzeKe3cQ==", + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.24.1.tgz", + "integrity": "sha512-mNPsedLuk90RVJioIky8ANZEwYm5w9LcvCXrxHlwf4fNVSn8jEipMybMkWUyyF0JhnC+C4VcOVSBuHRKs1L5Ow==", "dev": true }, "private": { @@ -30063,9 +30336,9 @@ }, "dependencies": { "es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "version": "1.18.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.5.tgz", + "integrity": "sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -30074,11 +30347,12 @@ "get-intrinsic": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", "is-callable": "^1.2.3", "is-negative-zero": "^2.0.1", "is-regex": "^1.1.3", "is-string": "^1.0.6", - "object-inspect": "^1.10.3", + "object-inspect": "^1.11.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "string.prototype.trimend": "^1.0.4", @@ -30120,9 +30394,9 @@ } }, "object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", "dev": true }, "object-keys": { @@ -30177,9 +30451,9 @@ }, "dependencies": { "es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "version": "1.18.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.5.tgz", + "integrity": "sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -30188,11 +30462,12 @@ "get-intrinsic": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", "is-callable": "^1.2.3", "is-negative-zero": "^2.0.1", "is-regex": "^1.1.3", "is-string": "^1.0.6", - "object-inspect": "^1.10.3", + "object-inspect": "^1.11.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "string.prototype.trimend": "^1.0.4", @@ -30234,9 +30509,9 @@ } }, "object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", "dev": true }, "object-keys": { @@ -30602,9 +30877,9 @@ }, "dependencies": { "@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, "ajv": { @@ -30664,12 +30939,12 @@ "dev": true }, "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } @@ -30746,9 +31021,9 @@ } }, "react-colorful": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.2.2.tgz", - "integrity": "sha512-Xdb1Rl6lZ5SMdNBH59eE0lGqR1g2LVD8IgPlw0WeMDrOC65lYI8fgMEwj/0dDpVRVMh5qp73ciISDst/t2O2iQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.3.0.tgz", + "integrity": "sha512-zWE5E88zmjPXFhv6mGnRZqKin9s5vip1O3IIGynY9EhZxN8MATUxZkT3e/9OwTEm4DjQBXc6PFWP6AetY+Px+A==", "dev": true }, "react-dev-utils": { @@ -31054,9 +31329,9 @@ } }, "react-docgen-typescript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/react-docgen-typescript/-/react-docgen-typescript-2.0.0.tgz", - "integrity": "sha512-lPf+KJKAo6a9klKyK4y8WwgaX+6t5/HkVjHOpJDMbmaXfXcV7zP0QgWtnEOc3ccEUXKvlHMGUMIS9f6Zgo1BSw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/react-docgen-typescript/-/react-docgen-typescript-2.1.0.tgz", + "integrity": "sha512-7kpzLsYzVxff//HUVz1sPWLCdoSNvHD3M8b/iQLdF8fgf7zp26eVysRrAUSxiAT4yQv2zl09zHjJEYSYNxQ8Jw==", "dev": true }, "react-dom": { @@ -31702,9 +31977,9 @@ } }, "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "requires": { "ms": "2.1.2" @@ -31719,12 +31994,6 @@ "minimist": "^1.2.5" } }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, "minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", @@ -31773,9 +32042,9 @@ } }, "remark-slug": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/remark-slug/-/remark-slug-6.0.0.tgz", - "integrity": "sha512-ln67v5BrGKHpETnm6z6adlJPhESFJwfuZZ3jrmi+lKTzeZxh2tzFzUfDD4Pm2hRGOarHLuGToO86MNMZ/hA67Q==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/remark-slug/-/remark-slug-6.1.0.tgz", + "integrity": "sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==", "dev": true, "requires": { "github-slugger": "^1.0.0", @@ -31894,12 +32163,6 @@ "entities": "^2.0.0" } }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, "nth-check": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", @@ -33309,9 +33572,9 @@ }, "dependencies": { "es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "version": "1.18.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.5.tgz", + "integrity": "sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -33320,11 +33583,12 @@ "get-intrinsic": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", "is-callable": "^1.2.3", "is-negative-zero": "^2.0.1", "is-regex": "^1.1.3", "is-string": "^1.0.6", - "object-inspect": "^1.10.3", + "object-inspect": "^1.11.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "string.prototype.trimend": "^1.0.4", @@ -33366,9 +33630,9 @@ } }, "object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", "dev": true }, "object-keys": { @@ -33423,9 +33687,9 @@ }, "dependencies": { "es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "version": "1.18.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.5.tgz", + "integrity": "sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -33434,11 +33698,12 @@ "get-intrinsic": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", "is-callable": "^1.2.3", "is-negative-zero": "^2.0.1", "is-regex": "^1.1.3", "is-string": "^1.0.6", - "object-inspect": "^1.10.3", + "object-inspect": "^1.11.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "string.prototype.trimend": "^1.0.4", @@ -33480,9 +33745,9 @@ } }, "object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", "dev": true }, "object-keys": { @@ -34476,9 +34741,9 @@ }, "dependencies": { "es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "version": "1.18.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.5.tgz", + "integrity": "sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -34487,11 +34752,12 @@ "get-intrinsic": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", "is-callable": "^1.2.3", "is-negative-zero": "^2.0.1", "is-regex": "^1.1.3", "is-string": "^1.0.6", - "object-inspect": "^1.10.3", + "object-inspect": "^1.11.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "string.prototype.trimend": "^1.0.4", @@ -34533,9 +34799,9 @@ } }, "object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", "dev": true }, "object-keys": { @@ -34848,12 +35114,6 @@ "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz", "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==", "dev": true - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true } } }, @@ -35251,9 +35511,9 @@ "dev": true }, "ts-dedent": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.1.1.tgz", - "integrity": "sha512-riHuwnzAUCfdIeTBNUq7+Yj+ANnrMXo/7+Z74dIdudS7ys2k8aSGMzpJRMFDF7CLwUTbtvi1ZZff/Wl+XxmqIA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", + "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", "dev": true }, "ts-essentials": { @@ -36270,9 +36530,9 @@ }, "dependencies": { "@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, "ajv": { @@ -36325,13 +36585,19 @@ "json5": "^2.1.2" } }, + "mime-db": { + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", + "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==", + "dev": true + }, "mime-types": { - "version": "2.1.31", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", - "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", + "version": "2.1.32", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", + "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", "dev": true, "requires": { - "mime-db": "1.48.0" + "mime-db": "1.49.0" } }, "minimist": { @@ -36341,12 +36607,12 @@ "dev": true }, "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } diff --git a/package.json b/package.json index 743a6f85bf62..6a3c703543ea 100644 --- a/package.json +++ b/package.json @@ -53,13 +53,12 @@ "@babel/preset-react": "^7.14.5", "@babel/register": "^7.14.5", "@rocket.chat/eslint-config": "^0.4.0", - "@rocket.chat/icons": "^0.28.0", "@rocket.chat/livechat": "^1.9.3", "@settlin/spacebars-loader": "^1.0.9", - "@storybook/addon-essentials": "^6.3.2", + "@storybook/addon-essentials": "^6.3.6", "@storybook/addon-postcss": "^2.0.0", - "@storybook/addons": "^6.3.2", - "@storybook/react": "^6.3.2", + "@storybook/addons": "^6.3.6", + "@storybook/react": "^6.3.6", "@types/agenda": "^2.0.9", "@types/bcrypt": "^5.0.0", "@types/body-parser": "^1.19.0", @@ -164,6 +163,7 @@ "@rocket.chat/fuselage-polyfills": "^0.28.0", "@rocket.chat/fuselage-tokens": "^0.28.0", "@rocket.chat/fuselage-ui-kit": "^0.28.0", + "@rocket.chat/icons": "^0.28.0", "@rocket.chat/memo": "^0.28.0", "@rocket.chat/message-parser": "^0.28.0", "@rocket.chat/mp3-encoder": "^0.24.0", From 1f185f6b85af6f7e5c5de0dc0401b06274b7b8da Mon Sep 17 00:00:00 2001 From: Matheus Barbosa Silva <36537004+matheusbsilva137@users.noreply.github.com> Date: Thu, 5 Aug 2021 17:11:47 -0300 Subject: [PATCH 07/76] Fix Local time conversion in the Users By Time of the Day chart (#22836) Co-authored-by: Tasso Evangelista --- .../UsersTab/UsersByTimeOfTheDaySection.js | 43 +++++++++++-------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/ee/app/engagement-dashboard/client/components/UsersTab/UsersByTimeOfTheDaySection.js b/ee/app/engagement-dashboard/client/components/UsersTab/UsersByTimeOfTheDaySection.js index 048573f593f6..91ad6a30a48a 100644 --- a/ee/app/engagement-dashboard/client/components/UsersTab/UsersByTimeOfTheDaySection.js +++ b/ee/app/engagement-dashboard/client/components/UsersTab/UsersByTimeOfTheDaySection.js @@ -25,31 +25,31 @@ const UsersByTimeOfTheDaySection = ({ timezone }) => { case 'last 7 days': return { start: utc - ? moment.utc().set({ hour: 0, minute: 0, second: 0, millisecond: 0 }).subtract(7, 'days') - : moment().set({ hour: 0, minute: 0, second: 0, millisecond: 0 }).subtract(7, 'days'), + ? moment.utc().startOf('day').subtract(7, 'days') + : moment().startOf('day').subtract(8, 'days'), end: utc - ? moment.utc().set({ hour: 0, minute: 0, second: 0, millisecond: 0 }).subtract(1) - : moment().set({ hour: 0, minute: 0, second: 0, millisecond: 0 }).subtract(1), + ? moment.utc().endOf('day').subtract(1, 'days') + : moment().endOf('day'), }; case 'last 30 days': return { start: utc - ? moment.utc().set({ hour: 0, minute: 0, second: 0, millisecond: 0 }).subtract(30, 'days') - : moment().set({ hour: 0, minute: 0, second: 0, millisecond: 0 }).subtract(30, 'days'), + ? moment.utc().startOf('day').subtract(30, 'days') + : moment().startOf('day').subtract(31, 'days'), end: utc - ? moment.utc().set({ hour: 0, minute: 0, second: 0, millisecond: 0 }).subtract(1) - : moment().set({ hour: 0, minute: 0, second: 0, millisecond: 0 }).subtract(1), + ? moment.utc().endOf('day').subtract(1, 'days') + : moment().endOf('day'), }; case 'last 90 days': return { start: utc - ? moment.utc().set({ hour: 0, minute: 0, second: 0, millisecond: 0 }).subtract(90, 'days') - : moment().set({ hour: 0, minute: 0, second: 0, millisecond: 0 }).subtract(90, 'days'), + ? moment.utc().startOf('day').subtract(90, 'days') + : moment().startOf('day').subtract(91, 'days'), end: utc - ? moment.utc().set({ hour: 0, minute: 0, second: 0, millisecond: 0 }).subtract(1) - : moment().set({ hour: 0, minute: 0, second: 0, millisecond: 0 }).subtract(1), + ? moment.utc().endOf('day').subtract(1, 'days') + : moment().endOf('day'), }; } }, [periodId, utc]); @@ -61,7 +61,7 @@ const UsersByTimeOfTheDaySection = ({ timezone }) => { end: period.end.toISOString(), }), [period]); - const { value: data } = useEndpointData('engagement-dashboard/users/users-by-time-of-the-day-in-a-week', params); + const { value: data } = useEndpointData('engagement-dashboard/users/users-by-time-of-the-day-in-a-week', useMemo(() => params, [params])); const [ dates, @@ -71,8 +71,10 @@ const UsersByTimeOfTheDaySection = ({ timezone }) => { return []; } - const dates = Array.from({ length: moment(period.end).diff(period.start, 'days') + 1 }, - (_, i) => moment(period.start).add(i, 'days')); + const dates = Array.from({ length: utc + ? moment(period.end).diff(period.start, 'days') + 1 + : moment(period.end).diff(period.start, 'days') - 1 }, + (_, i) => moment(period.start).endOf('day').add(utc ? i : i + 1, 'days')); const values = Array.from({ length: 24 }, (_, hour) => ({ hour: String(hour), @@ -80,11 +82,16 @@ const UsersByTimeOfTheDaySection = ({ timezone }) => { .reduce((obj, elem) => ({ ...obj, ...elem }), {}), })); + const timezoneOffset = moment().utcOffset() / 60; + for (const { users, hour, day, month, year } of data.week) { const date = utc - ? moment.utc([year, month - 1, day, 0, 0, 0, 0]).toISOString() - : moment([year, month - 1, day, 0, 0, 0, 0]).toISOString(); - values[hour][date] += users; + ? moment.utc([year, month - 1, day, hour]) + : moment([year, month - 1, day, hour]).add(timezoneOffset, 'hours'); + + if (utc || (!date.isSame(period.end) && !date.clone().startOf('day').isSame(period.start))) { + values[date.hour()][date.endOf('day').toISOString()] += users; + } } return [ From 4b23ca5c10ac7ba7159626a259e3d4b8b409580f Mon Sep 17 00:00:00 2001 From: Matheus Barbosa Silva <36537004+matheusbsilva137@users.noreply.github.com> Date: Thu, 5 Aug 2021 18:40:01 -0300 Subject: [PATCH 08/76] [BREAK][ENTERPRISE] CSV file downloaded in the Engagement Dashboard's New Users section contains undefined data (#22862) * Fix download content and add headers to download files * Update date format Co-authored-by: gabriellsh <40830821+gabriellsh@users.noreply.github.com> --- .../client/components/UsersTab/NewUsersSection.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/ee/app/engagement-dashboard/client/components/UsersTab/NewUsersSection.js b/ee/app/engagement-dashboard/client/components/UsersTab/NewUsersSection.js index a9866a64e18f..76c76390fecb 100644 --- a/ee/app/engagement-dashboard/client/components/UsersTab/NewUsersSection.js +++ b/ee/app/engagement-dashboard/client/components/UsersTab/NewUsersSection.js @@ -80,7 +80,7 @@ const NewUsersSection = ({ timezone }) => { return null; } - const values = Array.from({ length: arrayLength }, (_, i) => moment(period.start).add(i, 'days').toISOString()); + const values = Array.from({ length: arrayLength }, (_, i) => moment(period.start).add(i, 'days').format('YYYY-MM-DD')); const relation = Math.ceil(values.length / maxTicks); @@ -102,7 +102,7 @@ const NewUsersSection = ({ timezone }) => { } const values = Array.from({ length: moment(period.end).diff(period.start, 'days') + 1 }, (_, i) => ({ - date: moment(period.start).add(i, 'days').toISOString(), + date: moment(period.start).add(i, 'days').format('YYYY-MM-DD'), newUsers: 0, })); for (const { day, users } of data.days) { @@ -124,7 +124,10 @@ const NewUsersSection = ({ timezone }) => { }, [data, period, utc]); const downloadData = () => { - const data = values.map(({ data, newUsers }) => [data, newUsers]); + const data = [ + ['Date', 'New Users'], + ...values.map(({ date, newUsers }) => [date, newUsers]), + ]; downloadCsvAs(data, `NewUsersSection_start_${ params.start }_end_${ params.end }`); }; From 14f8379844dcd391c07b08e2157c368382000564 Mon Sep 17 00:00:00 2001 From: Matheus Barbosa Silva <36537004+matheusbsilva137@users.noreply.github.com> Date: Fri, 6 Aug 2021 09:19:05 -0300 Subject: [PATCH 09/76] [FIX] "Click to Join" button is not working if there are no muted users in the room (#22871) * Fix room.muted undefined error * Remove unnecessary includes function calls Co-authored-by: Tasso Evangelista --- app/authorization/server/functions/canSendMessage.js | 2 +- app/lib/server/lib/processDirectEmail.js | 2 +- app/videobridge/client/actionLink.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/authorization/server/functions/canSendMessage.js b/app/authorization/server/functions/canSendMessage.js index 9c1d48248f9c..31d337c09b55 100644 --- a/app/authorization/server/functions/canSendMessage.js +++ b/app/authorization/server/functions/canSendMessage.js @@ -33,7 +33,7 @@ export const validateRoomMessagePermissionsAsync = async (room, { uid, username, } } - if ((room.muted || []).includes(username)) { + if (room?.muted?.includes(username)) { throw new Error('You_have_been_muted'); } }; diff --git a/app/lib/server/lib/processDirectEmail.js b/app/lib/server/lib/processDirectEmail.js index deab36914c60..b00a042d476d 100644 --- a/app/lib/server/lib/processDirectEmail.js +++ b/app/lib/server/lib/processDirectEmail.js @@ -87,7 +87,7 @@ export const processDirectEmail = function(email) { return false; } - if ((room.muted || []).includes(user.username)) { + if (room?.muted?.includes(user.username)) { // user is muted return false; } diff --git a/app/videobridge/client/actionLink.js b/app/videobridge/client/actionLink.js index fec4addeb4a2..607468e421cb 100644 --- a/app/videobridge/client/actionLink.js +++ b/app/videobridge/client/actionLink.js @@ -15,7 +15,7 @@ actionLinks.register('joinJitsiCall', function(message, params, instance) { const currentTime = new Date().getTime(); const jitsiTimeout = new Date((room && room.jitsiTimeout) || currentTime).getTime(); - if (room && room.muted.includes(username)) { + if (room && room?.muted?.includes(username)) { toastr.error(TAPi18n.__('You_have_been_muted', '')); } else if (jitsiTimeout > currentTime) { instance.tabBar.open('video'); From e1f0e7961917046b0e9e6cdac07062e20623d7fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Thom=C3=A9?= <38537062+g-thome@users.noreply.github.com> Date: Fri, 6 Aug 2021 12:17:05 -0300 Subject: [PATCH 10/76] [FIX] users registered via third party apps bypass custom required fields (#22396) * copy custom field logic to username screen * remove login state from username screen * remove custom fields from initial registration form * add saveCustomFields method * skip custom fields in register user method * remove console logs * add method call in username form Co-authored-by: gabriellsh <40830821+gabriellsh@users.noreply.github.com> Co-authored-by: Tasso Evangelista --- app/lib/server/index.js | 1 + app/lib/server/methods/saveCustomFields.ts | 14 ++++ app/ui-login/client/login/form.html | 2 - app/ui-login/client/login/form.js | 43 +--------- app/ui-login/client/username/username.html | 1 + app/ui-login/client/username/username.js | 95 ++++++++++++++++++++-- server/methods/registerUser.js | 4 +- 7 files changed, 108 insertions(+), 52 deletions(-) create mode 100644 app/lib/server/methods/saveCustomFields.ts diff --git a/app/lib/server/index.js b/app/lib/server/index.js index aa0f7c468bfc..5a89c8e44a35 100644 --- a/app/lib/server/index.js +++ b/app/lib/server/index.js @@ -65,6 +65,7 @@ import './methods/setUsername'; import './methods/unarchiveRoom'; import './methods/unblockUser'; import './methods/updateMessage'; +import './methods/saveCustomFields'; export * from './lib'; export * from './functions'; diff --git a/app/lib/server/methods/saveCustomFields.ts b/app/lib/server/methods/saveCustomFields.ts new file mode 100644 index 000000000000..a5121bbde653 --- /dev/null +++ b/app/lib/server/methods/saveCustomFields.ts @@ -0,0 +1,14 @@ +import { Meteor } from 'meteor/meteor'; + +import { RateLimiter } from '../lib'; +import { saveCustomFields } from '../functions/saveCustomFields'; + +Meteor.methods({ + saveCustomFields(fields = {}) { + saveCustomFields(Meteor.userId(), fields); + }, +}); + +RateLimiter.limitMethod('saveCustomFields', 1, 1000, { + userId() { return true; }, +}); diff --git a/app/ui-login/client/login/form.html b/app/ui-login/client/login/form.html index 3a20bd66344f..ef639ddc1719 100644 --- a/app/ui-login/client/login/form.html +++ b/app/ui-login/client/login/form.html @@ -66,8 +66,6 @@

{{{_ "Registration_Succeeded"}}}

- {{> customFieldsForm hideFromForm=true}} -
+ {{>customFieldsForm}} {{#if username.ready}}
diff --git a/app/ui-login/client/username/username.js b/app/ui-login/client/username/username.js index 125f34ddc7fc..0bd06fe5dd80 100644 --- a/app/ui-login/client/username/username.js +++ b/app/ui-login/client/username/username.js @@ -1,16 +1,88 @@ import { Meteor } from 'meteor/meteor'; import { ReactiveVar } from 'meteor/reactive-var'; import { Template } from 'meteor/templating'; +import { Tracker } from 'meteor/tracker'; import _ from 'underscore'; +import toastr from 'toastr'; import { settings } from '../../../settings'; import { Button } from '../../../ui'; +import { t } from '../../../utils'; import { callbacks } from '../../../callbacks'; Template.username.onCreated(function() { const self = this; + self.customFields = new ReactiveVar(); self.username = new ReactiveVar(); + Tracker.autorun(() => { + const Accounts_CustomFields = settings.get('Accounts_CustomFields'); + if (typeof Accounts_CustomFields === 'string' && Accounts_CustomFields.trim() !== '') { + try { + return this.customFields.set(JSON.parse(settings.get('Accounts_CustomFields'))); + } catch (error1) { + return console.error('Invalid JSON for Accounts_CustomFields'); + } + } else { + return this.customFields.set(null); + } + }); + + const validateCustomFields = function(formObj, validationObj) { + const customFields = self.customFields.get(); + if (!customFields) { + return; + } + + for (const field in formObj) { + if (formObj.hasOwnProperty(field)) { + const value = formObj[field]; + if (customFields[field] == null) { + continue; + } + const customField = customFields[field]; + if (customField.required === true && !value) { + validationObj[field] = t('Field_required'); + return validationObj[field]; + } + if ((customField.maxLength != null) && value.length > customField.maxLength) { + validationObj[field] = t('Max_length_is', customField.maxLength); + return validationObj[field]; + } + if ((customField.minLength != null) && value.length < customField.minLength) { + validationObj[field] = t('Min_length_is', customField.minLength); + return validationObj[field]; + } + } + } + }; + + this.validate = function() { + const formData = $('#login-card').serializeArray(); + const formObj = {}; + const validationObj = {}; + formData.forEach((field) => { + formObj[field.name] = field.value; + }); + + $('#login-card h2').removeClass('error'); + $('#login-card input.error, #login-card select.error').removeClass('error'); + $('#login-card .input-error').text(''); + validateCustomFields(formObj, validationObj); + if (!_.isEmpty(validationObj)) { + $('#login-card h2').addClass('error'); + + Object.keys(validationObj).forEach((key) => { + const value = validationObj[key]; + $(`#login-card input[name=${ key }], #login-card select[name=${ key }]`).addClass('error'); + $(`#login-card input[name=${ key }]~.input-error, #login-card select[name=${ key }]~.input-error`).text(value); + }); + + return false; + } + return formObj; + }; + return Meteor.call('getUsernameSuggestion', function(error, username) { self.username.set({ ready: true, @@ -50,6 +122,8 @@ Template.username.events({ 'submit #login-card'(event, instance) { event.preventDefault(); + const formData = instance.validate(); + const username = instance.username.get(); username.empty = false; username.error = false; @@ -59,15 +133,26 @@ Template.username.events({ const button = $(event.target).find('button.login'); Button.loading(button); - const value = $('#username').val().trim(); - if (value === '') { + if (!formData) { + Button.reset(button); + return; + } + + const usernameValue = $('#username').val().trim(); + if (usernameValue === '') { username.empty = true; instance.username.set(username); Button.reset(button); return; } - return Meteor.call('setUsername', value, function(err) { + Meteor.call('saveCustomFields', formData, function(err) { + if (err != null) { + toastr.error(err.error); + } + }); + + Meteor.call('setUsername', usernameValue, function(err) { if (err != null) { if (err.error === 'username-invalid') { username.invalid = true; @@ -76,8 +161,8 @@ Template.username.events({ } else { username.unavailable = true; } - username.username = value; - username.escaped = _.escape(value); + username.username = usernameValue; + username.escaped = _.escape(usernameValue); } Button.reset(button); diff --git a/server/methods/registerUser.js b/server/methods/registerUser.js index 65d30d37c0b8..d5cde1d372a8 100644 --- a/server/methods/registerUser.js +++ b/server/methods/registerUser.js @@ -5,7 +5,7 @@ import s from 'underscore.string'; import { Users } from '../../app/models'; import { settings } from '../../app/settings'; -import { saveCustomFields, validateEmailDomain, passwordPolicy } from '../../app/lib'; +import { validateEmailDomain, passwordPolicy } from '../../app/lib'; import { validateInviteToken } from '../../app/invites/server/functions/validateInviteToken'; Meteor.methods({ @@ -79,8 +79,6 @@ Meteor.methods({ Users.setReason(userId, reason); } - saveCustomFields(userId, formData); - try { Accounts.sendVerificationEmail(userId, userData.email); } catch (error) { From 64c68deccc309eabb3c58048e2361bf5ba65e33a Mon Sep 17 00:00:00 2001 From: Leonardo Ostjen Couto Date: Fri, 6 Aug 2021 14:17:36 -0300 Subject: [PATCH 11/76] [FIX] Registration not possible with TOTP and email verification (#22778) Co-authored-by: Tasso Evangelista --- app/2fa/server/loginHandler.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/2fa/server/loginHandler.js b/app/2fa/server/loginHandler.js index ae85326bb196..4bc17e2876a6 100644 --- a/app/2fa/server/loginHandler.js +++ b/app/2fa/server/loginHandler.js @@ -15,7 +15,7 @@ Accounts.registerLoginHandler('totp', function(options) { }); callbacks.add('onValidateLogin', (login) => { - if (login.type === 'resume' || login.type === 'proxy') { + if (login.type === 'resume' || login.type === 'proxy' || login.methodName === 'verifyEmail') { return login; } From 89ee544824a16a3aa0e3a4e761e474bd7a22e4e8 Mon Sep 17 00:00:00 2001 From: pierre-lehnen-rc <55164754+pierre-lehnen-rc@users.noreply.github.com> Date: Fri, 6 Aug 2021 15:54:47 -0300 Subject: [PATCH 12/76] [FIX] User is still asked for 2FA confirmation even if 2FA is globally deactivated. (#22801) Co-authored-by: Leonardo Ostjen Couto --- app/2fa/server/code/index.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/2fa/server/code/index.ts b/app/2fa/server/code/index.ts index c708400c80d6..42e3d1f60682 100644 --- a/app/2fa/server/code/index.ts +++ b/app/2fa/server/code/index.ts @@ -160,6 +160,10 @@ export function checkCodeForUser({ user, code, method, options = {}, connection return true; } + if (!settings.get('Accounts_TwoFactorAuthentication_Enabled')) { + return true; + } + if (typeof user === 'string') { user = getUserForCheck(user); } From 5dc6eafeccd567557fd13baef8dc81fc2d3402fc Mon Sep 17 00:00:00 2001 From: Leonardo Ostjen Couto Date: Mon, 9 Aug 2021 08:30:36 -0300 Subject: [PATCH 13/76] [FIX] Broken download link on uploaded files (#22848) * switched from rtrim to replace * removed subdirectory start * added regex to string.replace * added regex to string.replace * proper user of scape regex * removed logging statement --- app/utils/lib/getURL.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/utils/lib/getURL.js b/app/utils/lib/getURL.js index 9e93b614abd2..662db6fcf7ea 100644 --- a/app/utils/lib/getURL.js +++ b/app/utils/lib/getURL.js @@ -1,4 +1,5 @@ import s from 'underscore.string'; +import { escapeRegExp } from '@rocket.chat/string-helpers'; import { isURL } from './isURL'; import { settings } from '../../settings'; @@ -54,7 +55,7 @@ export const _getURL = (path, { cdn, full, cloud, cloud_route, cloud_params, _cd } if (full) { - return s.rtrim(siteUrl, pathPrefix) + url; + return siteUrl.replace(new RegExp(`${ escapeRegExp(pathPrefix) }$`), '') + url; } return url; From bb4dbfc4b3bb3cb8a833fca5773c9939112169cc Mon Sep 17 00:00:00 2001 From: Murtaza Patrawala <34130764+murtaza98@users.noreply.github.com> Date: Mon, 9 Aug 2021 21:44:18 +0530 Subject: [PATCH 14/76] [FIX] Message update not working in some cases (#22856) * Fix message update not working * resolve room object only if required + only add canned-responses-replace-placeholders when the canned-response feature is on Co-authored-by: Kevin Aleman --- .../hooks/onMessageSentParsePlaceholder.ts | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/ee/app/canned-responses/server/hooks/onMessageSentParsePlaceholder.ts b/ee/app/canned-responses/server/hooks/onMessageSentParsePlaceholder.ts index de3760dc7ed6..f76f5a988d36 100644 --- a/ee/app/canned-responses/server/hooks/onMessageSentParsePlaceholder.ts +++ b/ee/app/canned-responses/server/hooks/onMessageSentParsePlaceholder.ts @@ -1,7 +1,8 @@ import get from 'lodash.get'; +import { settings } from '../../../../../app/settings/server'; import { callbacks } from '../../../../../app/callbacks/server'; -import { Users, LivechatVisitors } from '../../../../../app/models/server'; +import { Users, LivechatVisitors, Rooms } from '../../../../../app/models/server'; import { IMessage } from '../../../../../definition/IMessage'; import { IOmnichannelRoom, isOmnichannelRoom } from '../../../../../definition/IRoom'; @@ -28,7 +29,12 @@ const placeholderFields = { }, }; -callbacks.add('beforeSaveMessage', (message: IMessage, room: IOmnichannelRoom): any => { +const handleBeforeSaveMessage = (message: IMessage, room: IOmnichannelRoom): any => { + if (!message.msg || message.msg === '') { + return message; + } + + room = room?._id ? room : Rooms.findOneById(message.rid); if (!isOmnichannelRoom(room)) { return message; } @@ -51,4 +57,13 @@ callbacks.add('beforeSaveMessage', (message: IMessage, room: IOmnichannelRoom): message.msg = messageText; return message; -}, callbacks.priority.LOW, 'canned-responses-replace-placeholders'); +}; + +settings.get('Canned_Responses_Enable', function(_, value) { + if (!value) { + callbacks.remove('beforeSaveMessage', 'canned-responses-replace-placeholders'); + return; + } + + callbacks.add('beforeSaveMessage', handleBeforeSaveMessage, callbacks.priority.MEDIUM, 'canned-responses-replace-placeholders'); +}); From 8cee345a3cef679d2d393ef8f6b8a16be36546f8 Mon Sep 17 00:00:00 2001 From: Murtaza Patrawala <34130764+murtaza98@users.noreply.github.com> Date: Tue, 10 Aug 2021 18:01:06 +0530 Subject: [PATCH 15/76] [FIX] applyChatRestictions callback not working for community version (#22839) * Fix Chat Transfer Failure due to Unrecognized stage name departmentId * Fix applyChatRestictions callback not returing proper value for community version Co-authored-by: Shailesh Baldaniya --- app/livechat/server/lib/routing/AutoSelection.js | 2 +- app/models/server/models/Users.js | 2 +- .../server/hooks/applySimultaneousChatsRestrictions.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/livechat/server/lib/routing/AutoSelection.js b/app/livechat/server/lib/routing/AutoSelection.js index 7850dd36990b..3ec4090848a0 100644 --- a/app/livechat/server/lib/routing/AutoSelection.js +++ b/app/livechat/server/lib/routing/AutoSelection.js @@ -21,7 +21,7 @@ class AutoSelection { } getNextAgent(department, ignoreAgentId) { - const extraQuery = callbacks.run('livechat.applySimultaneousChatRestrictions', { ...department ? { departmentId: department } : {} }); + const extraQuery = callbacks.run('livechat.applySimultaneousChatRestrictions', undefined, { ...department ? { departmentId: department } : {} }); if (department) { return LivechatDepartmentAgents.getNextAgentForDepartment(department, ignoreAgentId, extraQuery); } diff --git a/app/models/server/models/Users.js b/app/models/server/models/Users.js index fbe0bcfc0b3b..1d06be0ad64d 100644 --- a/app/models/server/models/Users.js +++ b/app/models/server/models/Users.js @@ -219,7 +219,7 @@ export class Users extends Base { // if department is provided, remove the agents that are not from the selected department const departmentFilter = departmentId ? [{ $lookup: { - from: 'rocketchat_livechat_department_agent', + from: 'rocketchat_livechat_department_agents', let: { departmentId: '$departmentId', agentId: '$agentId' }, pipeline: [{ $match: { $expr: { $eq: ['$$agentId', '$_id'] } }, diff --git a/ee/app/livechat-enterprise/server/hooks/applySimultaneousChatsRestrictions.ts b/ee/app/livechat-enterprise/server/hooks/applySimultaneousChatsRestrictions.ts index cd6fa913ce30..41a5ed963b6e 100644 --- a/ee/app/livechat-enterprise/server/hooks/applySimultaneousChatsRestrictions.ts +++ b/ee/app/livechat-enterprise/server/hooks/applySimultaneousChatsRestrictions.ts @@ -2,7 +2,7 @@ import { callbacks } from '../../../../../app/callbacks/server'; import { LivechatDepartment } from '../../../../../app/models/server'; import { settings } from '../../../../../app/settings/server'; -callbacks.add('livechat.applySimultaneousChatRestrictions', ({ departmentId }: { departmentId?: string }) => { +callbacks.add('livechat.applySimultaneousChatRestrictions', (_: any, { departmentId }: { departmentId?: string }) => { if (departmentId) { const departmentLimit = LivechatDepartment.findOneById(departmentId)?.maxNumberSimultaneousChat || 0; if (departmentLimit > 0) { From cd7071285a957aadd2a039c374c9c3124f73b578 Mon Sep 17 00:00:00 2001 From: Leonardo Ostjen Couto Date: Tue, 10 Aug 2021 10:55:15 -0300 Subject: [PATCH 16/76] [FIX] Manually approve new users is not applied to SAML users (#22823) * fixed SAML login with manually activate user flag * small fix --- app/meteor-accounts-saml/server/lib/SAML.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/meteor-accounts-saml/server/lib/SAML.ts b/app/meteor-accounts-saml/server/lib/SAML.ts index 65cf1c04e5ca..ca876193ac37 100644 --- a/app/meteor-accounts-saml/server/lib/SAML.ts +++ b/app/meteor-accounts-saml/server/lib/SAML.ts @@ -106,10 +106,12 @@ export class SAML { let { username } = userObject; + const active = !settings.get('Accounts_ManuallyApproveNewUsers'); + if (!user) { const newUser: Record = { name: userObject.fullName, - active: true, + active, globalRoles, emails, services: { From c19ef88313c29e807fb973900792bd628a1b538d Mon Sep 17 00:00:00 2001 From: "lingohub[bot]" <69908207+lingohub[bot]@users.noreply.github.com> Date: Wed, 11 Aug 2021 10:43:41 -0300 Subject: [PATCH 17/76] =?UTF-8?q?i18n:=20Language=20update=20from=20LingoH?= =?UTF-8?q?ub=20=F0=9F=A4=96=20on=202021-08-09Z=20(#22888)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Language update from LingoHub 🤖 Project Name: Rocket.Chat Project Link: https://translate.lingohub.com/rocketchat/dashboard/rocket-dot-chat User: Robot LingoHub Easy language translations with LingoHub 🚀 * Update vars * Update bn-IN.i18n.json Co-authored-by: Robot LingoHub Co-authored-by: Diego Sampaio --- packages/rocketchat-i18n/i18n/af.i18n.json | 1 + packages/rocketchat-i18n/i18n/ar.i18n.json | 1 + packages/rocketchat-i18n/i18n/az.i18n.json | 1 + packages/rocketchat-i18n/i18n/be-BY.i18n.json | 1 + packages/rocketchat-i18n/i18n/bg.i18n.json | 1 + packages/rocketchat-i18n/i18n/bn-IN.i18n.json | 6 +- packages/rocketchat-i18n/i18n/bs.i18n.json | 1 + packages/rocketchat-i18n/i18n/ca.i18n.json | 89 ++++++++++++++++-- packages/rocketchat-i18n/i18n/cs.i18n.json | 11 ++- packages/rocketchat-i18n/i18n/cy.i18n.json | 1 + packages/rocketchat-i18n/i18n/da.i18n.json | 11 ++- packages/rocketchat-i18n/i18n/de-AT.i18n.json | 1 + packages/rocketchat-i18n/i18n/de.i18n.json | 29 +++++- packages/rocketchat-i18n/i18n/el.i18n.json | 1 + packages/rocketchat-i18n/i18n/en.i18n.json | 2 +- packages/rocketchat-i18n/i18n/eo.i18n.json | 1 + packages/rocketchat-i18n/i18n/es.i18n.json | 91 +++++++++++++++++-- packages/rocketchat-i18n/i18n/fa.i18n.json | 4 +- packages/rocketchat-i18n/i18n/fi.i18n.json | 1 + packages/rocketchat-i18n/i18n/fr.i18n.json | 83 +++++++++++++++-- packages/rocketchat-i18n/i18n/he.i18n.json | 1 + packages/rocketchat-i18n/i18n/hr.i18n.json | 1 + packages/rocketchat-i18n/i18n/hu.i18n.json | 10 +- packages/rocketchat-i18n/i18n/id.i18n.json | 1 + packages/rocketchat-i18n/i18n/it.i18n.json | 1 + packages/rocketchat-i18n/i18n/ja.i18n.json | 11 ++- packages/rocketchat-i18n/i18n/ka-GE.i18n.json | 11 ++- packages/rocketchat-i18n/i18n/km.i18n.json | 9 +- packages/rocketchat-i18n/i18n/ko.i18n.json | 11 ++- packages/rocketchat-i18n/i18n/ku.i18n.json | 1 + packages/rocketchat-i18n/i18n/lo.i18n.json | 3 +- packages/rocketchat-i18n/i18n/lt.i18n.json | 1 + packages/rocketchat-i18n/i18n/lv.i18n.json | 3 +- packages/rocketchat-i18n/i18n/mn.i18n.json | 1 + packages/rocketchat-i18n/i18n/ms-MY.i18n.json | 1 + packages/rocketchat-i18n/i18n/nl.i18n.json | 83 +++++++++++++++-- packages/rocketchat-i18n/i18n/no.i18n.json | 1 + packages/rocketchat-i18n/i18n/pl.i18n.json | 13 +-- packages/rocketchat-i18n/i18n/pt-BR.i18n.json | 11 ++- packages/rocketchat-i18n/i18n/pt.i18n.json | 10 +- packages/rocketchat-i18n/i18n/ro.i18n.json | 1 + packages/rocketchat-i18n/i18n/ru.i18n.json | 79 ++++++++++++++-- packages/rocketchat-i18n/i18n/sk-SK.i18n.json | 3 +- packages/rocketchat-i18n/i18n/sl-SI.i18n.json | 1 + packages/rocketchat-i18n/i18n/sq.i18n.json | 1 + packages/rocketchat-i18n/i18n/sr.i18n.json | 2 + packages/rocketchat-i18n/i18n/sv.i18n.json | 4 +- packages/rocketchat-i18n/i18n/ta-IN.i18n.json | 1 + packages/rocketchat-i18n/i18n/th-TH.i18n.json | 1 + packages/rocketchat-i18n/i18n/tr.i18n.json | 8 +- packages/rocketchat-i18n/i18n/ug.i18n.json | 1 + packages/rocketchat-i18n/i18n/uk.i18n.json | 9 +- packages/rocketchat-i18n/i18n/vi-VN.i18n.json | 1 + packages/rocketchat-i18n/i18n/zh-HK.i18n.json | 1 + packages/rocketchat-i18n/i18n/zh-TW.i18n.json | 11 ++- packages/rocketchat-i18n/i18n/zh.i18n.json | 13 +-- 56 files changed, 541 insertions(+), 117 deletions(-) diff --git a/packages/rocketchat-i18n/i18n/af.i18n.json b/packages/rocketchat-i18n/i18n/af.i18n.json index 803b6adb83d7..54baa05c14f2 100644 --- a/packages/rocketchat-i18n/i18n/af.i18n.json +++ b/packages/rocketchat-i18n/i18n/af.i18n.json @@ -1134,6 +1134,7 @@ "Favorites": "Gunstelinge", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "Hierdie kenmerk hang af van \"Stuur besoekersnavigasiegeskiedenis as 'n boodskap\" om geaktiveer te word.", "Features_Enabled": "Funksies aangeskakel", + "Federation_Domain": "domein", "FEDERATION_Domain": "domein", "FEDERATION_Status": "status", "Field": "veld", diff --git a/packages/rocketchat-i18n/i18n/ar.i18n.json b/packages/rocketchat-i18n/i18n/ar.i18n.json index 817b45277ce6..1e25405df181 100644 --- a/packages/rocketchat-i18n/i18n/ar.i18n.json +++ b/packages/rocketchat-i18n/i18n/ar.i18n.json @@ -1147,6 +1147,7 @@ "Favorites": "المفضلة", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "تعتمد هذه الميزة على \"إرسال محفوظات تنقل الزائر كرسالة\" ليتم تمكينها.", "Features_Enabled": "الميزات الممكنة", + "Federation_Domain": "نطاق", "FEDERATION_Domain": "نطاق", "FEDERATION_Status": "الحالة", "Field": "حقل", diff --git a/packages/rocketchat-i18n/i18n/az.i18n.json b/packages/rocketchat-i18n/i18n/az.i18n.json index d740ddbf9942..8dca9b1e7ce4 100644 --- a/packages/rocketchat-i18n/i18n/az.i18n.json +++ b/packages/rocketchat-i18n/i18n/az.i18n.json @@ -1134,6 +1134,7 @@ "Favorites": "Sevimlilər", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "Bu xüsusiyyət effektiv olmaq üçün \"Göndərmə Gezgisi Tarixini Göndərmə Mesajını Göndər\" e bağlıdır.", "Features_Enabled": "Xüsusiyyətləri Aktivləşdi", + "Federation_Domain": "Domain", "FEDERATION_Domain": "Domain", "FEDERATION_Status": "Status", "Field": "Alan", diff --git a/packages/rocketchat-i18n/i18n/be-BY.i18n.json b/packages/rocketchat-i18n/i18n/be-BY.i18n.json index 9bdd69584703..17c9b56921f8 100644 --- a/packages/rocketchat-i18n/i18n/be-BY.i18n.json +++ b/packages/rocketchat-i18n/i18n/be-BY.i18n.json @@ -1147,6 +1147,7 @@ "Favorites": "выбраныя", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "Гэтая функцыя залежыць ад «Адправіць Visitor навігацыі Гісторыя як паведамленне», каб быць уключаным.", "Features_Enabled": "Доступныя функцыі", + "Federation_Domain": "дамен", "FEDERATION_Domain": "дамен", "FEDERATION_Status": "статус", "Field": "поле", diff --git a/packages/rocketchat-i18n/i18n/bg.i18n.json b/packages/rocketchat-i18n/i18n/bg.i18n.json index b34a9faa8d76..586671fab8c7 100644 --- a/packages/rocketchat-i18n/i18n/bg.i18n.json +++ b/packages/rocketchat-i18n/i18n/bg.i18n.json @@ -1134,6 +1134,7 @@ "Favorites": "Любими", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "Тази функция зависи от \"Изпращане на историята на навигацията на посетителите като съобщение\", която да бъде активирана.", "Features_Enabled": "Функциите са активирани", + "Federation_Domain": "Домейн", "FEDERATION_Domain": "Домейн", "FEDERATION_Status": "Статус", "Field": "Поле", diff --git a/packages/rocketchat-i18n/i18n/bn-IN.i18n.json b/packages/rocketchat-i18n/i18n/bn-IN.i18n.json index 981a52bead28..539c1bb35134 100644 --- a/packages/rocketchat-i18n/i18n/bn-IN.i18n.json +++ b/packages/rocketchat-i18n/i18n/bn-IN.i18n.json @@ -1,9 +1,9 @@ { "403": "নিষিদ্ধ", "500": "অভ্যন্তরীণ সার্ভার ত্রুটি", - "__count__empty_rooms_will_be_removed_automatically": null, - "__count__empty_rooms_will_be_removed_automatically__rooms__": null, - "This_room_encryption_has_been_disabled_by__username_": null, + "__count__empty_rooms_will_be_removed_automatically": "__count__ খালি ঘরগুলি স্বয়ংক্রিয়ভাবে সরানো হবে।", + "__count__empty_rooms_will_be_removed_automatically__rooms__": "__count__ খালি ঘরগুলি স্বয়ংক্রিয়ভাবে সরানো হবে:
__rooms__।", + "This_room_encryption_has_been_disabled_by__username_": "এই ঘরের এনক্রিপশনটি __username__ দ্বারা বন্ধ করা হয়েছে", "@username": "@ব্যবহারকারীর নাম", "@username_message": "@ ব্যবহারকারী নাম ", "#channel": "# চ্যানেল", diff --git a/packages/rocketchat-i18n/i18n/bs.i18n.json b/packages/rocketchat-i18n/i18n/bs.i18n.json index bc8e236af615..799adbef213b 100644 --- a/packages/rocketchat-i18n/i18n/bs.i18n.json +++ b/packages/rocketchat-i18n/i18n/bs.i18n.json @@ -1131,6 +1131,7 @@ "Favorites": "Omiljeni", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "Ova značajka ovisi o \"Ukloni povijest kretanja posjetitelja kao poruku\" da bude omogućena.", "Features_Enabled": "Omogućene značajke", + "Federation_Domain": "Domena", "FEDERATION_Domain": "Domena", "FEDERATION_Status": "Status", "Field": "Polje", diff --git a/packages/rocketchat-i18n/i18n/ca.i18n.json b/packages/rocketchat-i18n/i18n/ca.i18n.json index c8dafc261934..46db9fd75a40 100644 --- a/packages/rocketchat-i18n/i18n/ca.i18n.json +++ b/packages/rocketchat-i18n/i18n/ca.i18n.json @@ -463,6 +463,11 @@ "Apps_License_Message_publicKey": "Hi ha hagut un error a l'intentar desxifrar la llicència. Sincronitzeu el seu espai de treball en els Serveis de connectivitat i torneu a intentar", "Apps_License_Message_renewal": "La llicència ha caducat i s'ha de renovar", "Apps_License_Message_seats": "La llicència no té suficients llocs per acomodar la quantitat actual d'usuaris actius. Augmenti el nombre de places", + "Apps_Logs_TTL": "Nombre de dies per mantenir emmagatzemats els registres de les aplicacions", + "Apps_Logs_TTL_7days": "7 dies", + "Apps_Logs_TTL_14days": "14 dies", + "Apps_Logs_TTL_30days": "30 dies", + "Apps_Logs_TTL_Alert": "Depenent de la mida de la col·lecció de registres, canviar aquesta configuració pot causar lentitud per alguns moments", "Apps_Marketplace_Deactivate_App_Prompt": "Vol realment desactivar aquesta aplicació?", "Apps_Marketplace_Login_Required_Description": "Comprar aplicacions de l'Marketplace Rocket.Chat requereix registrar el teu entorn de treball i iniciar sessió.", "Apps_Marketplace_Login_Required_Title": "Identificació requerida al Marketplace", @@ -695,9 +700,15 @@ "Cancel": "Cancel·la", "Cancel_message_input": "Cancel·la", "Canceled": "Cancel·lat", + "Canned Responses": "Resposta predefinida", + "Canned_Response_Created": "Resposta predefinida creada", + "Canned_Response_Updated": "Resposta predefinida actualitzada", "Canned_Response_Delete_Warning": "L'eliminació d'una resposta predefinida no es pot desfer.", "Canned_Response_Removed": "Resposta predefinida eliminada", - "Canned Responses": "Resposta predefinida", + "Canned_Response_Sharing_Department_Description": "Qualsevol persona del departament seleccionat pot accedir a aquesta resposta predefinida", + "Canned_Response_Sharing_Private_Description": "Només vostè i els administradors de livechat poden accedir a aquesta resposta predefinida", + "Canned_Response_Sharing_Public_Description": "Qualsevol pot accedir a aquesta resposta predefinida", + "Create_your_First_Canned_Response": "Crea primera resposta predefinida", "Canned_Responses_Enable": "Activa resposta predefinida", "Cannot_invite_users_to_direct_rooms": "No es pot convidar els usuaris a les sales directes", "Cannot_open_conversation_with_yourself": "No es pot obrir una conversa amb un mateix", @@ -921,6 +932,8 @@ "Compact": "Compacte", "Condensed": "Condensat", "Condition": "Condició", + "Convert_to_channel": "Convertir a Channel", + "Converting_team_to_channel": "Conversió d'equip en Channel", "Commit_details": "Detalls de la transacció", "Completed": "Completat", "Computer": "Ordinador", @@ -1216,6 +1229,7 @@ "Country_Zimbabwe": "Zimbabwe", "Cozy": "Acollidor", "Create": "Crea", + "Create_Canned_Response": "Crear resposta predefinida", "Create_channel": "Crear Channel", "Create_A_New_Channel": "Crea un nou canal", "Create_new": "Crea nou", @@ -1427,6 +1441,7 @@ "Display_setting_permissions": "Mostra permisos per canviar la configuració", "Display_unread_counter": "Mostra el nombre de missatges no llegits", "Displays_action_text": "Mostra text de l'acció", + "Do_It_Later": "Fes-ho després", "Do_not_display_unread_counter": "No mostreu cap comptador d'aquest canal", "Do_not_provide_this_code_to_anyone": "No comparteixi aquest codi amb ningú.", "Do_Nothing": "No fer res", @@ -1473,8 +1488,10 @@ "E2E_Reset_Email_Content": "S'ha desconnectat automàticament. Quan torni a iniciar sessió, Rocket.Chat generarà una nova clau i restaurarà el seu accés a qualsevol sala xifrada que tingui un o més membres en línia. A causa de la naturalesa de l'xifrat E2E, Rocket.Chat no podrà restaurar l'accés a cap sala xifrada que no tingui membres en línia.", "E2E_Reset_Key_Explanation": "Aquesta opció eliminarà la seva clau I2I actual i tancarà la sessió.
Quan torni a iniciar sessió, Rocket.Chat li generarà una nova clau i restablirà el seu accés a qualsevol sala xifrada que tingui un o més membres en línia.
A causa de la naturalesa de l'xifrat E2E, Rocket.Chat no podrà restaurar l'accés a cap sala xifrada que no tingui membres en línia.", "E2E_Reset_Other_Key_Warning": "Restablir la clau E2E actual tancarà la sessió de l'usuari. Quan l'usuari torna a iniciar sessió, Rocket.Chat generarà una nova clau i restaurarà l'accés de l'usuari a qualsevol sala xifrada que tingui un o més membres en línia. A causa de la naturalesa de l'xifrat E2E, Rocket.Chat no podrà restaurar l'accés a cap sala xifrada que no tingui membres en línia.", + "ECDH_Enabled": "Habiliteu el xifrat de segona capa per al transport de dades", "Edit": "Edita", "Edit_Business_Hour": "Edita l'horari comercial", + "Edit_Canned_Response": "Edita resposta predefinida", "Edit_Canned_Responses": "Edita respostes emmagatzemades", "Edit_Custom_Field": "Edita camp personalitzat", "Edit_Department": "Edita departament", @@ -1516,6 +1533,7 @@ "edited": "editat", "Editing_room": "Edició de sala", "Editing_user": "Edició d'usuari", + "Editor": "Editor", "Education": "Educació", "Email": "Correu electrònic", "Email_address_to_send_offline_messages": "Adreça de correu electrònic per enviar missatges fora de línia", @@ -1587,7 +1605,7 @@ "Enter_authentication_code": "Entra el codi d'autenticació", "Enter_Behaviour": "Comportament de la tecla Enter", "Enter_Behaviour_Description": "Canvia si la tecla Enter envia el missatge o fa un salt de línia", - "Enter_E2E_password_to_decode_your_key": "Introduïu la contrasenya E2E per descodificar la vostra clau", + "Enter_E2E_password": "Introduïu la contrasenya E2E", "Enter_name_here": "Introdueix el nom aquí", "Enter_Normal": "Mode normal (envia amb Enter)", "Enter_to": "Entra a", @@ -1615,6 +1633,7 @@ "error-avatar-invalid-url": "URL de l'avatar no vàlid: __url__", "error-avatar-url-handling": "Error durant la configuració d'avatar d'usuari des de l'adreça URL (__url__) per a l'usuari __username__", "error-business-hours-are-closed": "L'horari comercial està tancat", + "error-blocked-username": "__field__ està bloquejat i no es pot utilitzar.", "error-canned-response-not-found": "Resposta predefinida no trobada", "error-cannot-delete-app-user": "No es permet esborrar l'usuari de l'aplicació, desinstal l'aplicació corresponent per eliminar-la.", "error-cant-invite-for-direct-room": "No es pot convidar a l'usuari a sales directes", @@ -1801,7 +1820,43 @@ "Features": "Característiques", "Features_Enabled": "Funcionalitats habilitades", "Feature_Disabled": "Característica deshabilitada", + "Federation": "Federació", + "Federation_Adding_to_your_server": "Afegir federació al seu servidor", + "Federation_Inviting_users_from_another_server": "Convidar usuaris d'un servidor diferent", + "Federation_Search_users_you_want_to_connect": "Cerqui l'usuari a què voleu connectar utilitzant una combinació d'un nom d'usuari i un domini o una adreça de correu electrònic, com:", + "Federation_Username": "Nom d'usuari: myfriendsusername@anotherdomain.com", + "Federation_Email": "Adreça de correu electrònic: joseph@remotedomain.com", + "Federation_You_will_invite_users_without_login_access": "Els convidarà al seu servidor sense accés d'inici de sessió. A més, vostè i tots els altres en el seu servidor podran xatejar amb ells.", + "Federation_Invite_User": "Convidar usuari", + "Federation_Invite_Users_To_Private_Rooms": "A partir d'ara, pot convidar a usuaris federats només a sales privades o debats.", + "Federation_Channels_Will_Be_Replicated": "Aquests canals es replicaran al servidor remot, sense l'historial de missatges.", + "Federation_Adding_users_from_another_server": "Afegir usuaris d'un altre servidor", + "Federation_Changes_needed": "Canvis necessaris en el seu servidor, el nom de domini, la destinació i el port.", + "Federation_Configure_DNS": "Configurar DNS", + "Federation_Domain": "Domini", + "Federation_Domain_details": "Afegiu el nom de domini a què s'ha de vincular aquest servidor.", + "Federation_Enable": "Habilitar Federació", + "Federation_Fix_now": "Repara ara!", + "Federation_SRV_no_support": "Si el proveïdor de DNS no admet registres SRV amb _http o _https", + "Federation_SRV_no_support_details": "Alguns proveïdors de DNS no permetran configurar _https o _http en registres SRV, de manera que tenim suport per a aquests casos, utilitzant el nostre antic mètode de resolució de registres DNS.", + "Federation_Must_add_records": "Ha de afegir els següents registres DNS en el seu servidor:", + "Federation_SRV_records_200": "Registre SRV (2.0.0 o més recent)", + "Federation_Public_key_TXT_record": "Registre TXT de clau pública", + "Federation_Protocol_TXT_record": "Protocol de registre TXT", + "Federation_Legacy_support": "Suport heretat", + "Federation_HTTP_instead_HTTPS": "Si fa servir el protocol HTTP en lloc de HTTPS", + "Federation_HTTP_instead_HTTPS_details": "Recomanem utilitzar HTTPS per a tot tipus de comunicacions, però de vegades això no és possible. Si ho necessita, a l'entrada SRV DNS reemplaci: el protocol: _http el port: 80", + "Federation_DNS_info_update": "Aquesta informació s'actualitza cada 1 minut", + "Federation_Adding_Federated_Users": "Afegir usuaris federats", + "Federation_Guide_adding_users": "Li guiem sobre com afegir el seu primer usuari federat.", + "Federation_Is_working_correctly": "La integració de la federació funciona correctament.", + "Federation_Public_key": "Clau pública", + "Federation_Public_key_details": "Aquesta és la clau que necessita compartir amb els seus companys. Per a què serveix?", + "Federation_Discovery_method": "Mètode de descobriment", + "Federation_Discovery_method_details": "Podeu utilitzar el concentrador o un registre DNS (SRV i una entrada TXT). Saber-ne més", "Federation_Dashboard": "Panell de Federació", + "Federation_Protocol": "Protocol", + "Federation_Protocol_details": "Només recomanem utilitzar HTTP en casos interns molt específics.", "FEDERATION_Discovery_Method": "Mètode de descobriment", "FEDERATION_Discovery_Method_Description": "Pot utilitzar el hub o un SRV i una entrada TXT en els seus registres DNS.", "FEDERATION_Domain": "Domini", @@ -1906,6 +1961,7 @@ "Filters": "Filtres", "Filters_applied": "Filtres aplicats", "Financial_Services": "Serveis financers", + "Finish": "Acabar", "Finish_Registration": "Finalitzar el registre", "First_Channel_After_Login": "Primer canal després del login", "First_response_time": "Temps de resposta inicial", @@ -2003,6 +2059,7 @@ "Group_mentions_disabled_x_members": "Les mencions de grup `@ all` i` @ here` han estat deshabilitades per a sales amb més de __total__ membres.", "Group_mentions_only": "Només mencions de grup", "Grouping": "Agrupació", + "Guest": "Convidat", "Hash": "Hash", "Header": "Encapçalament", "Header_and_Footer": "Encapçalament i peu ", @@ -2043,8 +2100,7 @@ "How_responsive_was_the_chat_agent": "Heu rebut respostes ràpides?", "How_satisfied_were_you_with_this_chat": "Ha quedat satisfet amb aquesta conversa?", "How_to_handle_open_sessions_when_agent_goes_offline": "Com gestionar sessions obertes quan l'agent es desconnecta", - "I_ll_do_it_later": "Ho faré més endavant", - "I_saved_my_password_close_this_message": "He desat la contrasenya, tanca aquest missatge", + "I_Saved_My_Password": "He desat la meva contrasenya", "Idle_Time_Limit": "Límit de temps inactiu", "Idle_Time_Limit_Description": "Període de temps fins que l'estat canvia a absent. El valor ha d'estar en segons.", "if_they_are_from": "(si són de %s)", @@ -2156,6 +2212,7 @@ "Instructions": "Instruccions", "Instructions_to_your_visitor_fill_the_form_to_send_a_message": "Instruccions als visitants, ompliu el formulari per enviar un missatge", "Insert_Contact_Name": "Inseriu el nom de l'contacte", + "Insert_Placeholder": "Inserir marcador de posició", "Insurance": "segur", "Integration_added": "La integració s'ha afegit", "Integration_Advanced_Settings": "Configuració avançada", @@ -2210,6 +2267,7 @@ "Invalid_Department": "Departament no vàlid", "Invalid_email": "L'adreça de correu-e és invàlida", "Invalid_Export_File": "L'arxiu pujat no és un fitxer d'exportació %s vàlid.", + "Invalid_field": "El camp no ha d'estar buit", "Invalid_Import_File_Type": "Tipus d'arxiu d'importació invàlid.", "Invalid_name": "El nom no ha d'estar buit", "Invalid_notification_setting_s": "Configuració de notificació invàlida: %s", @@ -2234,6 +2292,7 @@ "Invite_user_to_join_channel_all_from": "Invita a tots els usuaris del canal [#channel] a unir-se a aquest canal", "Invite_user_to_join_channel_all_to": "Invita a tots els usuaris d'aquest canal a unir-se a [#channel]", "Invite_Users": "Convidar usuaris", + "IP": "IP", "IRC_Channel_Join": "Resposta de la comanda JOIN.", "IRC_Channel_Leave": "Resposta de la comanda PART.", "IRC_Channel_Users": "Resposta de la comanda NAMES.", @@ -2595,6 +2654,7 @@ "Local_Domains": "Dominis locals", "Local_Password": "Contrasenya local", "Local_Time": "Hora local", + "Local_Timezone": "Zona horària local", "Local_Time_time": "Hora local: __time__", "Localization": "Localització", "Location": "Ubicació", @@ -2954,6 +3014,8 @@ "No": "No", "No_available_agents_to_transfer": "No hi ha agents disponibles per a transferir", "No_Canned_Responses": "Sense respostes preparades", + "No_Canned_Responses_Yet": "Encara no hi ha respostes predefinides", + "No_Canned_Responses_Yet-description": "Utilitzeu respostes predefinides per proporcionar respostes ràpides i coherents a les preguntes freqüents.", "No_channel_with_name_%s_was_found": "No s'ha trobat cap canal amb el nom \"%s\"!", "No_channels_in_team": "No hi ha canals en aquest equip", "No_channels_yet": "Encara no formes part de cap canal", @@ -3002,6 +3064,7 @@ "Not_verified": "No verificat", "Nothing": "Res", "Nothing_found": "No s'ha trobat res", + "Notice_that_public_channels_will_be_public_and_visible_to_everyone": "Recordeu que els Channels públics seran públics i visibles per a tothom.", "Notification_Desktop_Default_For": "Mostra notificacions d'escriptori per", "Notification_Desktop_Audio_Default_For": "Reproduir àudio de notificacions d'escriptori per", "Notification_Mobile_Default_For": "Notificacions push mòbil per", @@ -3208,6 +3271,7 @@ "Preparing_list_of_messages": "Preparant llista de missatges", "Preparing_list_of_users": "Preparant llista d'usuaris", "Presence": "Presència", + "Preview": "Vista prèvia", "preview-c-room": "Previsualitzar canal públic", "preview-c-room_description": "Permís per veure els continguts d'un canal públic abans d'unir-s'hi", "Previous_month": "Mes anterior", @@ -3343,8 +3407,10 @@ "Remove_from_team": "Elimina de l'equip", "Remove_last_admin": "Eliminant el darrer admin", "Remove_someone_from_room": "Treu algú de la sala", + "remove-closed-livechat-room": "Treure Tancat Livechat", "remove-closed-livechat-rooms": "Eliminar Rooms tancades de LiveChat", "remove-closed-livechat-rooms_description": "Permís per eliminar sales livechat tancades", + "remove-livechat-department": "Elimina els departaments Livechat", "remove-user": "Expulsar usuari", "remove-user_description": "Permís per expulsar un usuari d'una sala", "Removed": "Eliminat", @@ -3565,7 +3631,7 @@ "Save_Mobile_Bandwidth": "Estalvia ample de banda mòbil", "Save_to_enable_this_action": "Desa per activar els canvis", "Save_To_Webdav": "Desar a WebDAV", - "Save_your_encryption_password": "Deseu la contrasenya de xifrat", + "Save_Your_Encryption_Password": "Deseu la contrasenya de xifrat", "save-others-livechat-room-info": "Desar informació d'altres sales de LiveChat", "save-others-livechat-room-info_description": "Permís per guardar informació d'altres sales de LiveChat", "Saved": "Desat", @@ -3610,6 +3676,7 @@ "Select_service_to_login": "Selecciona un servei per iniciar sessió i carregar la teva imatge o puja una foto del teu ordinador", "Select_tag": "Seleccioneu una etiqueta", "Select_the_channels_you_want_the_user_to_be_removed_from": "Seleccioneu els canals dels que desitja eliminar a l'usuari", + "Select_the_teams_channels_you_would_like_to_delete": "Seleccioneu els Channels de l'equip que voleu eliminar, els que no seleccioneu es mouran a l'espai de treball.", "Select_user": "Selecciona usuari", "Select_users": "Selecciona els usuaris", "Selected_agents": "Agents seleccionats", @@ -3683,10 +3750,14 @@ "Setup_Wizard": "Ajudant de configuració", "Setup_Wizard_Info": "El guiarem per configurar el seu primer usuari administrador, configurar la seva organització i registrar el seu servidor per rebre notificacions push gratuïtes i més.", "Share_Location_Title": "Compartir localització?", - "Canned_responses": "Resposta predefinida", + "Canned_Responses": "Resposta predefinida", + "New_CannedResponse": "Nova resposta preparada", + "Edit_CannedResponse": "Edita la resposta predefinida", + "Sharing": "Intercanvi", "Shared_Location": "Localització compartida", "Shared_Secret": "Secret compartit", "Shortcut": "Drecera", + "shortcut_name": "nom de la drecera", "Should_be_a_URL_of_an_image": "Ha de ser l'adreça URL d'una imatge.", "Should_exists_a_user_with_this_username": "Aquest usuari ja deu existir.", "Show_agent_email": "Mostra el correu electrònic de l'agent", @@ -3866,6 +3937,7 @@ "Sync_Users": "Sincronitza usuaris", "System_messages": "Missatges del sistema", "Tag": "Etiqueta", + "Tags": "Etiquetes", "Tag_removed": "Etiqueta suprimida", "Tag_already_exists": "La etiqueta ya existe", "Take_it": "Agafa'l!", @@ -3887,6 +3959,7 @@ "Teams": "Equips", "Teams_about_the_channels": "I sobre el Channels?", "Teams_channels_didnt_leave": "No va seleccionar els següents Channel, per la qual cosa no els abandona:", + "Teams_channels_last_owner_delete_channel_warning": "Ets el darrer propietari d'aquest channel. Una vegada que converteixi l'equip en un canal, el channel es mourà a l'espai de treball.", "Teams_channels_last_owner_leave_channel_warning": "Ets el darrer propietari d'aquest channel. Una vegada que abandoni l'equip, el Chanell es mantindrà dins de l'equip, però vostè ho administrarà des de fora.", "Teams_leaving_team": "Vas a deixar aquest equip.", "Teams_channels": "Channels de l'equip", @@ -4032,6 +4105,7 @@ "This_cant_be_undone": "Això no es pot desfer.", "This_conversation_is_already_closed": "La conversa ja està tancada.", "This_email_has_already_been_used_and_has_not_been_verified__Please_change_your_password": "Aquesta adreça de correu-e ja s'ha utilitzat però no s'ha verificat. Si us plau, canviï la contrasenya.", + "This_feature_is_currently_in_alpha": "¡Esta función está actualmente en versión alfa!", "This_is_a_desktop_notification": "Això és una notificació d'escriptori", "This_is_a_push_test_messsage": "Això és un missatge push de prova", "This_message_was_rejected_by__peer__peer": "Aquest missatge ha estat rebutjat per __peer__ company.", @@ -4207,6 +4281,7 @@ "URL_room_hash_description": "Recomanat per habilitar si la instància de Jitsi no fa servir cap mecanisme d'autenticació.", "URL_room_prefix": "Prefix de sala URL", "URL_room_suffix": "Sufix de sala URL", + "Use": "Utilitzar", "Use_account_preference": "Utilitza la preferència del compte", "Use_Emojis": "Utilitza emojis", "Use_Global_Settings": "Usa la configuració global", @@ -4333,6 +4408,7 @@ "Users_TOTP_has_been_reset": "El TOTP de l'usuari s'ha restablert", "Uses": "Usos", "Uses_left": "Usos restants", + "UTC_Timezone": "UTC Zona horària", "Utilities": "Utilitats", "UTF8_Names_Slugify": "Slugify de noms UTF8", "UTF8_Names_Validation": "Validació de noms UTF8", @@ -4506,6 +4582,7 @@ "yesterday": "ahir", "Yesterday": "ahir", "You": "Vostè", + "You_are_converting_team_to_channel": "Ets convertint aquest equip en un canal.", "you_are_in_preview_mode_of": "Estàs en mode vista prèvia del canal #__room_name__", "you_are_in_preview_mode_of_incoming_livechat": "Esteu en mode de previsualització d'aquest xat", "You_are_logged_in_as": "Sessió iniciada com", diff --git a/packages/rocketchat-i18n/i18n/cs.i18n.json b/packages/rocketchat-i18n/i18n/cs.i18n.json index 5248487fd343..1ca4d9a997fa 100644 --- a/packages/rocketchat-i18n/i18n/cs.i18n.json +++ b/packages/rocketchat-i18n/i18n/cs.i18n.json @@ -613,8 +613,8 @@ "Cancel": "Zrušit", "Cancel_message_input": "Zrušit", "Canceled": "Zrušeno", - "Canned_Response_Removed": "Zakonzervované odpovědi odstraněny", "Canned Responses": "Zakonzervované odpovědi", + "Canned_Response_Removed": "Zakonzervované odpovědi odstraněny", "Canned_Responses_Enable": "Povolit zakonzervované odpovědi", "Cannot_invite_users_to_direct_rooms": "Do přímé konverzace nelze pozvat uživatele.", "Cannot_open_conversation_with_yourself": "Nelze psát sám sobě", @@ -1417,7 +1417,6 @@ "Enter_authentication_code": "Zadejte autentizační kód", "Enter_Behaviour": "Chování klávesy enter", "Enter_Behaviour_Description": "Mění zda se po stisknutí klávesy enter odesílá zpráva nebo přidává nový řádek", - "Enter_E2E_password_to_decode_your_key": "Zadejte heslo E2E pro dešifrování klíče", "Enter_name_here": "Zadejte jméno", "Enter_Normal": "Normální mód (odeslání po stisku klávesy enter)", "Enter_to": "Enter", @@ -1610,7 +1609,11 @@ "Favorites": "Oblíbené", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "Tato funkce závisí na povolení volby \"Odeslat historii navigace návštěv jako zprávu\".", "Features_Enabled": "Povolené funkce", + "Federation_Domain": "Doména", + "Federation_Public_key": "Veřejný klíč", + "Federation_Discovery_method": "Metoda zjišťování", "Federation_Dashboard": "Řídicí panel Federace", + "Federation_Protocol": "Protokol", "FEDERATION_Discovery_Method": "Metoda zjišťování", "FEDERATION_Discovery_Method_Description": "Ve svých záznamech DNS můžete použít rozbočovač nebo SRV a záznam TXT.", "FEDERATION_Domain": "Doména", @@ -1846,8 +1849,6 @@ "How_responsive_was_the_chat_agent": "Odpovídal operátor rychle?", "How_satisfied_were_you_with_this_chat": "Jak jste byli celkově spokojeni?", "How_to_handle_open_sessions_when_agent_goes_offline": "Co dělat s chaty když je operátor offline", - "I_ll_do_it_later": "Udělám to později", - "I_saved_my_password_close_this_message": "Uložil jsem své heslo, zavřít tuto zprávu", "Idle_Time_Limit": "Limit času nepřítomnosti", "Idle_Time_Limit_Description": "Doba po které se stav změní na nepřítomen. Hodnota musí být v sekundách.", "if_they_are_from": "(pokud jsou z %s)", @@ -3235,7 +3236,6 @@ "Save_Mobile_Bandwidth": "Šetřit mobilní data", "Save_to_enable_this_action": "Uložte pro povolení akce", "Save_To_Webdav": "Uložit do WebDAV", - "Save_your_encryption_password": "Uložit své šifrovací heslo", "save-others-livechat-room-info": "Upravit informace jiné místnosti Omnichannel", "save-others-livechat-room-info_description": "Právo uložit informace z jiných Omnichannel místností", "Saved": "Uloženo", @@ -3340,6 +3340,7 @@ "Setup_Wizard": "Průvodce instalací", "Setup_Wizard_Info": "Provedeme vás nastavením prvního administrátora, nastavením údajů o vaši organizaci, registrací serveru pro bezplatné push notifikace a podobně.", "Share_Location_Title": "Sdílet polohu", + "New_CannedResponse": "Nová zakonzervovaná odpověď", "Shared_Location": "Sdílená lokalita", "Shared_Secret": "Sdílený kód Secret", "Shortcut": "Zkratka", diff --git a/packages/rocketchat-i18n/i18n/cy.i18n.json b/packages/rocketchat-i18n/i18n/cy.i18n.json index 7e6da4924fc3..3e6b79b17e4e 100644 --- a/packages/rocketchat-i18n/i18n/cy.i18n.json +++ b/packages/rocketchat-i18n/i18n/cy.i18n.json @@ -1131,6 +1131,7 @@ "Favorites": "Ffefrynnau", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "Mae'r nodwedd hon yn dibynnu ar \"Anfon Hanes Llywio Ymwelwyr fel Neges\" i'w alluogi.", "Features_Enabled": "Nodweddion Galluogi", + "Federation_Domain": "Parth", "FEDERATION_Domain": "Parth", "FEDERATION_Status": "Statws", "Field": "Maes", diff --git a/packages/rocketchat-i18n/i18n/da.i18n.json b/packages/rocketchat-i18n/i18n/da.i18n.json index 758e322d68fe..39a976fb214d 100644 --- a/packages/rocketchat-i18n/i18n/da.i18n.json +++ b/packages/rocketchat-i18n/i18n/da.i18n.json @@ -615,8 +615,8 @@ "Cancel": "Annullér", "Cancel_message_input": "Annullér", "Canceled": "Annulleret", - "Canned_Response_Removed": "Opbevaret svar blev fjernet", "Canned Responses": "Opbevarede svar", + "Canned_Response_Removed": "Opbevaret svar blev fjernet", "Canned_Responses_Enable": "Aktivér opbevarede svar", "Cannot_invite_users_to_direct_rooms": "Kan ikke invitere brugere til at direkte rum", "Cannot_open_conversation_with_yourself": "Kan ikke oprette direkte besked med dig selv", @@ -1427,7 +1427,6 @@ "Enter_authentication_code": "Angiv godkendelseskode", "Enter_Behaviour": "Indtast nøgle-adfærd", "Enter_Behaviour_Description": "Dette ændres hvis Enter-tasten sender en besked eller foretager et linjeskift", - "Enter_E2E_password_to_decode_your_key": "Indtast E2E-adgangskode for at afkode din nøgle", "Enter_name_here": "Indtast navn her", "Enter_Normal": "Normal mode (send med Enter)", "Enter_to": "Indtast til", @@ -1622,7 +1621,11 @@ "Favorites": "Foretrukne", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "Denne funktion afhænger af \"Send besøgendes navigationshistorik som en besked\" er aktiveret.", "Features_Enabled": "Funktioner aktiveret", + "Federation_Domain": "Domæne", + "Federation_Public_key": "Offentlig nøgle", + "Federation_Discovery_method": "Opdagelsesmetode", "Federation_Dashboard": "Federation Dashboard", + "Federation_Protocol": "Protokol", "FEDERATION_Discovery_Method": "Opdagelsesmetode", "FEDERATION_Discovery_Method_Description": "Du kan bruge hub eller en SRV og en TXT-post på dine DNS-records.", "FEDERATION_Domain": "Domæne", @@ -1858,8 +1861,6 @@ "How_responsive_was_the_chat_agent": "Hvor lydhør var chat-agenten?", "How_satisfied_were_you_with_this_chat": "Hvor tilfreds var du med denne chat?", "How_to_handle_open_sessions_when_agent_goes_offline": "Sådan håndterer du åbne sessioner, når en agent bliver offline", - "I_ll_do_it_later": "Jeg gør det senere", - "I_saved_my_password_close_this_message": "Jeg har gemt min adgangskode. Luk denne besked", "Idle_Time_Limit": "Idle tidsbegrænsning", "Idle_Time_Limit_Description": "Periode indtil status ændres til \"Ikke til stede\". Værdien skal være i sekunder.", "if_they_are_from": "(hvis de er fra %s)", @@ -3254,7 +3255,6 @@ "Save_Mobile_Bandwidth": "Gem mobil båndbredde", "Save_to_enable_this_action": "Gem for at aktivere denne handling", "Save_To_Webdav": "Gem til WebDAV", - "Save_your_encryption_password": "Gem din krypteringsadgangskode", "save-others-livechat-room-info": "Gem andre Livechat Room Info", "save-others-livechat-room-info_description": "Tilladelse til at gemme information fra andre livechat kanaler", "Saved": "Gemt", @@ -3361,6 +3361,7 @@ "Setup_Wizard": "Opsætningsguide", "Setup_Wizard_Info": "Vi vil guide dig igennem opsætningen af ​​din første admin bruger, konfigurere din organisation og registrere din server for at modtage gratis push notifikationer og mere.", "Share_Location_Title": "Del placering?", + "New_CannedResponse": "Nyt opbevaret svar", "Shared_Location": "Fælles placering", "Shared_Secret": "Shared Secret", "Shortcut": "Genvejstast", diff --git a/packages/rocketchat-i18n/i18n/de-AT.i18n.json b/packages/rocketchat-i18n/i18n/de-AT.i18n.json index 1da9926ce4d4..70254be85e72 100644 --- a/packages/rocketchat-i18n/i18n/de-AT.i18n.json +++ b/packages/rocketchat-i18n/i18n/de-AT.i18n.json @@ -1136,6 +1136,7 @@ "Favorites": "Favoriten", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "Diese Funktion hängt davon ab, ob \"Besucher-Navigationsprotokoll als Nachricht senden\" aktiviert sein soll.", "Features_Enabled": "Funktionen aktiviert", + "Federation_Domain": "Domain", "FEDERATION_Domain": "Domain", "FEDERATION_Status": "Status", "Field": "Feld", diff --git a/packages/rocketchat-i18n/i18n/de.i18n.json b/packages/rocketchat-i18n/i18n/de.i18n.json index ab35e404c6cf..fc2cded31836 100644 --- a/packages/rocketchat-i18n/i18n/de.i18n.json +++ b/packages/rocketchat-i18n/i18n/de.i18n.json @@ -202,6 +202,9 @@ "Accounts_Registration_AuthenticationServices_Default_Roles": "Standardrolle bei Nutzung von Authentifizierungsdiensten", "Accounts_Registration_AuthenticationServices_Default_Roles_Description": "Standardrollen, die Benutzern zugewiesen werden, wenn diese sich über Authentifizierungsdienste registrieren", "Accounts_Registration_AuthenticationServices_Enabled": "Registrierung mit Authentifizierungsdiensten", + "Accounts_Registration_Users_Default_Roles": "Standard-Rollen für Nutzer", + "Accounts_Registration_Users_Default_Roles_Description": "Standard-Rollen (kommasepariert), die Nutzer bei manueller Registrierung erhalten (inklusive via API)", + "Accounts_Registration_Users_Default_Roles_Enabled": "Aktivieren von Standardrollen für die manuelle Registrierung", "Accounts_Registration_InviteUrlType": "Art des Einladungslinks", "Accounts_Registration_InviteUrlType_Direct": "Direkt", "Accounts_Registration_InviteUrlType_Proxy": "Proxy", @@ -457,18 +460,27 @@ "Apps_License_Message_publicKey": "Beim Versuch, die Lizenz zu entschlüsseln, ist ein Fehler aufgetreten. Bitte synchronisieren deinen Arbeitsbereich in den Connectivity Services und versuche es erneut", "Apps_License_Message_renewal": "Die Lizenz ist abgelaufen und muss erneuert werden", "Apps_License_Message_seats": "Die Lizenz verfügt nicht über genügend Plätze, um die aktuelle Anzahl aktiver Benutzer aufzunehmen. Bitte erhöhe die Anzahl der Plätze", + "Apps_Logs_TTL": "Anzahl der Tage, in denen Protokolle von Apps gespeichert werden", + "Apps_Logs_TTL_7days": "7 Tage", + "Apps_Logs_TTL_14days": "14 Tage", + "Apps_Logs_TTL_30days": "30 Tage", "Apps_Marketplace_Deactivate_App_Prompt": "Möchten Sie diese App wirklich deaktivieren?", "Apps_Marketplace_Login_Required_Description": "Beim Kauf von Apps über den Rocket.Chat Marketplace müssen Sie Ihren Arbeitsbereich registrieren und sich anmelden.", "Apps_Marketplace_Login_Required_Title": "Marketplace Login benötigt", "Apps_Marketplace_Modify_App_Subscription": "Abonnement ändern", "Apps_Marketplace_pricingPlan_monthly": "__price__ / Monat", "Apps_Marketplace_pricingPlan_monthly_perUser": "__price__ / Monat pro Benutzer", + "Apps_Marketplace_pricingPlan_startingAt_monthly": "ab __price__ / Monat", + "Apps_Marketplace_pricingPlan_startingAt_monthly_perUser": "ab __price__ / Monat pro Benutzer", + "Apps_Marketplace_pricingPlan_startingAt_yearly": "ab __price__ / Jahr", + "Apps_Marketplace_pricingPlan_startingAt_yearly_perUser": "ab __price__ / Jahr pro Benutzer", "Apps_Marketplace_pricingPlan_yearly": "__price__ / Jahr", "Apps_Marketplace_pricingPlan_yearly_perUser": "__price__ / Jahr pro Benutzer", "Apps_Marketplace_Uninstall_App_Prompt": "Möchten Sie diese App wirklich deinstallieren?", "Apps_Marketplace_Uninstall_Subscribed_App_Anyway": "Deinstalliere es trotzdem", "Apps_Marketplace_Uninstall_Subscribed_App_Prompt": "Diese App hat ein aktives Abonnement. Dies wird bei der Deinstallation nicht abgebrochen. Wenn Sie dies möchten, ändern Sie bitte Ihr Abonnement, bevor Sie deinstallieren.", "Apps_Permissions_Review_Modal_Title": "Erforderliche Berechtigungen", + "Apps_Permissions_Review_Modal_Subtitle": "Diese App möchte Zugriff auf die folgenden Berechtigungen. Bist du damit einverstanden?", "Apps_Permissions_No_Permissions_Required": "Die App benötigt keine zusätzlichen Berechtigungen", "Apps_Permissions_cloud_workspace-token": "Interaktion mit Cloud-Diensten im Namen dieses Servers", "Apps_Permissions_user_read": "Zugriff auf Benutzerinformationen", @@ -670,9 +682,9 @@ "Cancel": "Abbrechen", "Cancel_message_input": "Abbrechen", "Canceled": "Abgebrochen", + "Canned Responses": "Vorformulierte Antworten", "Canned_Response_Delete_Warning": "Das Löschen einer gespeicherten Antwort kann nicht rückgängig gemacht werden.", "Canned_Response_Removed": "Vorformulierte Antwort entfernt", - "Canned Responses": "Vorformulierte Antworten", "Canned_Responses_Enable": "Vorformulierte Antworten aktivieren", "Cannot_invite_users_to_direct_rooms": "Benutzer können nicht in Direktnachrichten eingeladen werden", "Cannot_open_conversation_with_yourself": "Ein Selbstgespräch kann nicht gestartet werden", @@ -787,10 +799,14 @@ "Chatpal_Welcome": "Viel Spaß bei der Suche!", "Chatpal_Window_Size": "Index Fenstergröße", "Chatpal_Window_Size_Description": "Größe der Indexfenster in h (beim Bootstrapping)", + "Chats_removed": "Chats entfernt", + "Check_All": "Alle prüfen", + "Check_Progress": "Fortschritt prüfen", "Choose_a_room": "Raum auswählen", "Choose_messages": "Nachrichten auswählen", "Choose_the_alias_that_will_appear_before_the_username_in_messages": "Wählen Sie einen Alias, der vor dem Benutzernamen in Nachrichten angezeigt wird.", "Choose_the_username_that_this_integration_will_post_as": "Wählen Sie den Benutzernamen, unter dem die Integration Nachrichten postet.", + "Choose_users": "Benutzer auswählen", "Clean_Usernames": "Benutzernamen löschen", "clean-channel-history": "Kanalhistorie löschen", "clean-channel-history_description": "Berechtigung, die Historie aus Kanälen zu löschen", @@ -874,11 +890,14 @@ "Colors": "Farben", "Commands": "Befehle", "Comment_to_leave_on_closing_session": "Kommentar, der beim Schließen einer Konversation hinterlassen wird", + "Comment": "Kommentar", "Common_Access": "Allgemeiner Zugriff", "Community": "Community", "Compact": "Kompakt", "Condensed": "Komprimiert", "Condition": "Bedingung", + "Convert_to_channel": "In Kanal umwandeln", + "Converting_team_to_channel": "Team in Kanal umwandeln", "Completed": "Abgeschlossen", "Computer": "Computer", "Configure_Incoming_Mail_IMAP": "Konfigurieren des Posteingangs (IMAP)", @@ -1529,7 +1548,6 @@ "Enter_authentication_code": "Dateisystem für eigene Emojis", "Enter_Behaviour": "Verhalten der Eingabetaste:", "Enter_Behaviour_Description": "Das verändert, ob die Eingabetaste eine Nachricht versendet oder einen Zeilenumbruch erzeugt", - "Enter_E2E_password_to_decode_your_key": "Geben Sie ihr Passwort für die Ende-Zu-Ende-Verschlüsselung ein, um Ihren Schlüssel zu entschlüsseln", "Enter_name_here": "Namen hier eingeben", "Enter_Normal": "Normaler Modus (mit Eingabetaste senden)", "Enter_to": "Eingabetaste: ", @@ -1734,7 +1752,11 @@ "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "Diese Funktion hängt davon ab, ob \"Besucher-Navigationsprotokoll als Nachricht senden\" aktiviert ist.", "Features_Enabled": "Aktivierte Funktionen", "Feature_Disabled": "Funktion deaktiviert", + "Federation_Domain": "Domain", + "Federation_Public_key": "Öffentlicher Schüssel", + "Federation_Discovery_method": "Erkennungsmethode", "Federation_Dashboard": "Federation Dashboard", + "Federation_Protocol": "Protokoll", "FEDERATION_Discovery_Method": "Erkennungsmethode", "FEDERATION_Discovery_Method_Description": "Sie können den Hub oder einen SRV- und einen TXT-Eintrag in Ihren DNS-Einträgen verwenden.", "FEDERATION_Domain": "Domain", @@ -1970,8 +1992,6 @@ "How_responsive_was_the_chat_agent": "Wie reaktionsschnell war der Chat-Agent?", "How_satisfied_were_you_with_this_chat": "Wie zufrieden waren Sie mit diesem Chat?", "How_to_handle_open_sessions_when_agent_goes_offline": "Behandlung von offenen Konversationen, wenn ein Agent Offline geht", - "I_ll_do_it_later": "Ich werde es später machen", - "I_saved_my_password_close_this_message": "Ich habe mein Passwort gespeichert. Diese Nachricht nicht mehr anzeigen", "Idle_Time_Limit": "Leerlaufzeitlimit", "Idle_Time_Limit_Description": "Zeitraum bis sich der Status zu away ändert. Der Wert muss in Sekunden angegeben werden.", "if_they_are_from": "(wenn sie von %s sind)", @@ -3342,7 +3362,6 @@ "Save_Mobile_Bandwidth": "Mobiles Datenvolumen sparen", "Save_to_enable_this_action": "Speichern Sie, um diese Aktion zu aktivieren", "Save_To_Webdav": "In WebDAV speichern", - "Save_your_encryption_password": "Speichern Sie Ihr Verschlüsselungs-Passwort", "save-others-livechat-room-info": "Livechat-Informationen anderer Chats speichern", "save-others-livechat-room-info_description": "Berechtigung, die Livechat-Informationen anderer Konversationen zu speichern", "Saved": "Gespeichert", diff --git a/packages/rocketchat-i18n/i18n/el.i18n.json b/packages/rocketchat-i18n/i18n/el.i18n.json index 6fdabf833d4a..df18ab8ae266 100644 --- a/packages/rocketchat-i18n/i18n/el.i18n.json +++ b/packages/rocketchat-i18n/i18n/el.i18n.json @@ -1140,6 +1140,7 @@ "Favorites": "Αγαπημενα", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "Αυτή η λειτουργία εξαρτάται από την επιλογή \"Αποστολή ιστορικού πλοήγησης επισκεπτών ως μήνυμα\" για ενεργοποίηση.", "Features_Enabled": "χαρακτηριστικά Enabled", + "Federation_Domain": "Τομέας", "FEDERATION_Domain": "Τομέας", "FEDERATION_Status": "Κατάσταση", "Field": "Πεδίο", diff --git a/packages/rocketchat-i18n/i18n/en.i18n.json b/packages/rocketchat-i18n/i18n/en.i18n.json index 35b5d9a9e681..6ab0e3ba7642 100644 --- a/packages/rocketchat-i18n/i18n/en.i18n.json +++ b/packages/rocketchat-i18n/i18n/en.i18n.json @@ -4640,4 +4640,4 @@ "Your_temporary_password_is_password": "Your temporary password is [password].", "Your_TOTP_has_been_reset": "Your Two Factor TOTP has been reset.", "Your_workspace_is_ready": "Your workspace is ready to use 🎉" -} +} \ No newline at end of file diff --git a/packages/rocketchat-i18n/i18n/eo.i18n.json b/packages/rocketchat-i18n/i18n/eo.i18n.json index 370ce9e6dcd0..34c2dede91f2 100644 --- a/packages/rocketchat-i18n/i18n/eo.i18n.json +++ b/packages/rocketchat-i18n/i18n/eo.i18n.json @@ -1134,6 +1134,7 @@ "Favorites": "Plej ŝatataj", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "Ĉi tiu funkcio dependas de \"Sendi Vizitantan Navigadon-Historion kiel Mesaĝon\" por esti ebligita.", "Features_Enabled": "Trajtoj Enabled", + "Federation_Domain": "Domajno", "FEDERATION_Domain": "Domajno", "FEDERATION_Status": "Statuso", "Field": "Kampo", diff --git a/packages/rocketchat-i18n/i18n/es.i18n.json b/packages/rocketchat-i18n/i18n/es.i18n.json index 6bdd1b7ab8ca..b4aedc633e85 100644 --- a/packages/rocketchat-i18n/i18n/es.i18n.json +++ b/packages/rocketchat-i18n/i18n/es.i18n.json @@ -463,6 +463,11 @@ "Apps_License_Message_publicKey": "Ha habido un error al intentar descifrar la licencia. Sincronice su espacio de trabajo en los Servicios de conectividad y vuelva a intentarlo", "Apps_License_Message_renewal": "La licencia ha caducado y debe renovarse", "Apps_License_Message_seats": "La licencia no tiene suficientes puestos para acomodar la cantidad actual de usuarios activos. Aumente el número de plazas", + "Apps_Logs_TTL": "Número de días para mantener almacenados los registros de las aplicaciones", + "Apps_Logs_TTL_7days": "7 días", + "Apps_Logs_TTL_14days": "14 días", + "Apps_Logs_TTL_30days": "30 díes", + "Apps_Logs_TTL_Alert": "Dependiendo del tamaño de la colección de registros, cambiar esta configuración puede causar lentitud por algunos momentos", "Apps_Marketplace_Deactivate_App_Prompt": "¿Realmente quieres deshabilitar esta aplicación?", "Apps_Marketplace_Login_Required_Description": "Comprar aplicaciones del Marketplace Rocket.Chat requiere registrar tu entorno de trabajo y logarse.", "Apps_Marketplace_Login_Required_Title": "Login requerido para Marketplace", @@ -695,9 +700,15 @@ "Cancel": "Cancelar", "Cancel_message_input": "Cancelar", "Canceled": "Cancelado", + "Canned Responses": "Respuesta predefinida", + "Canned_Response_Created": "Respuesta predefinida creada", + "Canned_Response_Updated": "Respuesta predefinida actualizada", "Canned_Response_Delete_Warning": "La eliminación de una respuesta automática no se puede deshacer.", "Canned_Response_Removed": "Respuesta predefinida eliminada", - "Canned Responses": "Respuesta predefinida", + "Canned_Response_Sharing_Department_Description": "Cualquier persona del departamento seleccionado puede acceder a esta respuesta predefinida", + "Canned_Response_Sharing_Private_Description": "Solo usted y los administradores de Livechat pueden acceder a esta respuesta predefinida", + "Canned_Response_Sharing_Public_Description": "Cualquiera puede acceder a esta respuesta predefinida", + "Create_your_First_Canned_Response": "Crea tu primera respuesta predefinida", "Canned_Responses_Enable": "Habilitar respuesta predefinida", "Cannot_invite_users_to_direct_rooms": "No es posible invitar a los usuarios a las salas directas", "Cannot_open_conversation_with_yourself": "No es posible dirigir el mensaje contigo mismo", @@ -921,6 +932,8 @@ "Compact": "Compacto", "Condensed": "Condensado", "Condition": "Condición", + "Convert_to_channel": "Convertir a ", + "Converting_team_to_channel": "Conversión de equipo en Channel", "Commit_details": "Detalles de la transacción", "Completed": "Completado", "Computer": "Ordenador", @@ -1216,6 +1229,7 @@ "Country_Zimbabwe": "Zimbabue", "Cozy": "Acogedor", "Create": "Crear", + "Create_Canned_Response": "Crear respuesta predefinida", "Create_channel": "Crear Channel", "Create_A_New_Channel": "Crear un nuevo canal", "Create_new": "Crear nuevo", @@ -1426,6 +1440,7 @@ "Display_setting_permissions": "Mostrar permisos para cambiar la configuración", "Display_unread_counter": "Mostrar el número de mensajes no leídos", "Displays_action_text": "Mostrar texto de la acción", + "Do_It_Later": "Hazlo después", "Do_not_display_unread_counter": "No mostrar ningún contador de este canal", "Do_not_provide_this_code_to_anyone": "No comparta este código con nadie.", "Do_Nothing": "No hacer nada", @@ -1472,8 +1487,10 @@ "E2E_Reset_Email_Content": "Se ha desconectado automáticamente. Cuando vuelva a iniciar sesión, Rocket.Chat generará una nueva clave y restaurará su acceso a cualquier sala cifrada que tenga uno o más miembros en línea. Debido a la naturaleza del cifrado E2E, Rocket.Chat no podrá restaurar el acceso a ninguna sala cifrada que no tenga miembros en línea.", "E2E_Reset_Key_Explanation": "Esta opción eliminará su clave E2E actual y cerrará la sesión.
Cuando vuelva a iniciar sesión, Rocket.Chat le generará una nueva clave y restablecerá su acceso a cualquier sala cifrada que tenga uno o más miembros en línea.
Debido a la naturaleza del cifrado E2E, Rocket.Chat no podrá restaurar el acceso a ninguna sala cifrada que no tenga miembros en línea", "E2E_Reset_Other_Key_Warning": "Restablecer la clave E2E actual cerrará la sesión del usuario. Cuando el usuario vuelve a iniciar sesión, Rocket.Chat generará una nueva clave y restaurará el acceso del usuario a cualquier sala cifrada que tenga uno o más miembros en línea. Debido a la naturaleza del cifrado E2E, Rocket.Chat no podrá restaurar el acceso a ninguna sala cifrada que no tenga miembros en línea.", + "ECDH_Enabled": "Habilite el cifrado de segunda capa para el transporte de datos", "Edit": "Editar", "Edit_Business_Hour": "Editar horario de oficina ", + "Edit_Canned_Response": "Editar respuesta predefinida", "Edit_Canned_Responses": "Editar modelo de respuestas", "Edit_Custom_Field": "Editar campo personalizado", "Edit_Department": "Editar Departamento", @@ -1515,6 +1532,7 @@ "edited": "Editado", "Editing_room": "Editando sala", "Editing_user": "Edición de usuario", + "Editor": "Editor", "Education": "Educación", "Email": "Email", "Email_address_to_send_offline_messages": "Dirección de correo electrónico para enviar mensajes fuera de línea", @@ -1586,7 +1604,7 @@ "Enter_authentication_code": "Ingrese el código de autenticación", "Enter_Behaviour": "Comportamiento de tecla Enter", "Enter_Behaviour_Description": "Esto cambia si la tecla Intro enviará un mensaje o hará un salto de línea", - "Enter_E2E_password_to_decode_your_key": "Introduzca la contraseña E2E para decodificar su clave", + "Enter_E2E_password": "Ingrese la contraseña E2E", "Enter_name_here": "Introduzca nombre aquí", "Enter_Normal": "Modo normal (enviar con Enter)", "Enter_to": "Entrar a", @@ -1614,6 +1632,7 @@ "error-avatar-invalid-url": "URL de avatar inválida: __url__", "error-avatar-url-handling": "Error durante la manipulación de ajuste de imagen de usuario desde una dirección URL (__url__) para __username__", "error-business-hours-are-closed": "El horario comercial está cerrado", + "error-blocked-username": " __field__ está bloqueado y no se puede usar.", "error-canned-response-not-found": "Respuesta predefinida no encontrada", "error-cannot-delete-app-user": "No se permite borrar el usuario de la aplicación, desinstale la aplicación correspondiente para eliminarla.", "error-cant-invite-for-direct-room": "No se puede invitar al usuario salas directos", @@ -1800,7 +1819,43 @@ "Features": "Características", "Features_Enabled": "Funcionalidades habilitadas", "Feature_Disabled": "Característica deshabilitada", + "Federation": "Federación", + "Federation_Adding_to_your_server": "Agregar federación a su servidor", + "Federation_Inviting_users_from_another_server": "Invitar a usuarios de un servidor diferente", + "Federation_Search_users_you_want_to_connect": "Busque el usuario al que desea conectarse utilizando una combinación de un nombre de usuario y un dominio o una dirección de correo electrónico, como:", + "Federation_Username": "Nombre de usuario: myfriendsusername@anotherdomain.com", + "Federation_Email": "Dirección de correo electrónico: joseph@remotedomain.com", + "Federation_You_will_invite_users_without_login_access": "Los invitará a su servidor sin acceso de inicio de sesión. Además, usted y todos los demás en su servidor podrán chatear con ellos.", + "Federation_Invite_User": "Invitar usuario", + "Federation_Invite_Users_To_Private_Rooms": "A partir de ahora, puede invitar a usuarios federados solo a salas privadas o debates.", + "Federation_Channels_Will_Be_Replicated": "Esos canales se replicarán en el servidor remoto, sin el historial de mensajes.", + "Federation_Adding_users_from_another_server": "Agregar usuarios de otro servidor", + "Federation_Changes_needed": "Cambios necesarios en su servidor, el nombre de dominio, el destino y el puerto.", + "Federation_Configure_DNS": "Configurar DNS", + "Federation_Domain": "Dominio", + "Federation_Domain_details": "Agregue el nombre de dominio al que se debe vincular este servidor.", + "Federation_Enable": "Habilitar Federación", + "Federation_Fix_now": "¡Repáralo ahora!", + "Federation_SRV_no_support": "Si su proveedor de DNS no admite registros SRV con _http o _https", + "Federation_SRV_no_support_details": "Algunos proveedores de DNS no permitirán configurar _https o _http en registros SRV, por lo que tenemos soporte para esos casos, utilizando nuestro antiguo método de resolución de registros DNS.", + "Federation_Must_add_records": "Debe agregar los siguientes registros DNS en su servidor:", + "Federation_SRV_records_200": "Registro SRV (2.0.0 o más reciente)", + "Federation_Public_key_TXT_record": "Registro TXT de clave pública", + "Federation_Protocol_TXT_record": "Protocolo de registro TXT", + "Federation_Legacy_support": "Soporte heredado", + "Federation_HTTP_instead_HTTPS": "Si usa el protocolo HTTP en lugar de HTTPS", + "Federation_HTTP_instead_HTTPS_details": "Recomendamos utilizar HTTPS para todo tipo de comunicaciones, pero a veces eso no es posible. Si lo necesita, en la entrada SRV DNS reemplace: el protocolo: _http el puerto: 80", + "Federation_DNS_info_update": "Esta información se actualiza cada 1 minuto", + "Federation_Adding_Federated_Users": "Agregar usuarios federados", + "Federation_Guide_adding_users": "Le guiamos sobre cómo agregar su primer usuario federado.", + "Federation_Is_working_correctly": "La integración de la federación funciona correctamente.", + "Federation_Public_key": "Clave pública", + "Federation_Public_key_details": "Esta es la clave que necesita compartir con sus compañeros. ¿Para qué sirve?", + "Federation_Discovery_method": "Método de descubrimiento", + "Federation_Discovery_method_details": "Puede utilizar el concentrador o un registro DNS (SRV y una entrada TXT). Aprende más", "Federation_Dashboard": "Panel de Federación", + "Federation_Protocol": "Protocolo", + "Federation_Protocol_details": "Solo recomendamos usar HTTP en casos internos muy específicos.", "FEDERATION_Discovery_Method": "Método de descubrimiento", "FEDERATION_Discovery_Method_Description": "Puede usar el hub o un SRV y una entrada TXT en sus registros DNS.", "FEDERATION_Domain": "Dominio", @@ -1905,6 +1960,7 @@ "Filters": "Filtros", "Filters_applied": "Filtros aplicados", "Financial_Services": "Servicios financieros", + "Finish": "Terminar", "Finish_Registration": "Finalizar registro", "First_Channel_After_Login": "Primer canal después de iniciar sesión", "First_response_time": "Tiempo de respuesta inicial", @@ -2002,6 +2058,7 @@ "Group_mentions_disabled_x_members": "Las menciones de grupo `@ all` y` @ here` han sido deshabilitadas para salas con más de __total__ miembros.", "Group_mentions_only": "El grupo solo menciona", "Grouping": "Agrupación", + "Guest": "Invitado", "Hash": "Hash", "Header": "Encabezado", "Header_and_Footer": "Encabezado y Pie de página", @@ -2042,8 +2099,7 @@ "How_responsive_was_the_chat_agent": "¿Cómo de rápido ha respondido nuestro agente de chat?", "How_satisfied_were_you_with_this_chat": "¿Cómo de satisfecho está con esta conversación?", "How_to_handle_open_sessions_when_agent_goes_offline": "Cómo manejar sesiones abiertas cuando el agente se desconecta", - "I_ll_do_it_later": "Lo haré más tarde", - "I_saved_my_password_close_this_message": "He guardado mi contraseña, cierra este mensaje", + "I_Saved_My_Password": "He guardado mi contraseña", "Idle_Time_Limit": "Tiempo límite de inactividad", "Idle_Time_Limit_Description": "Período de tiempo hasta que el estado cambia a ausente. El valor debe estar en segundos.", "if_they_are_from": "(si son de %s)", @@ -2155,6 +2211,7 @@ "Instructions": "Instrucciones", "Instructions_to_your_visitor_fill_the_form_to_send_a_message": "Instrucciones para sus visitantes completen el formulario para enviar un mensaje", "Insert_Contact_Name": "Inserte el nombre del contacto", + "Insert_Placeholder": "Insertar marcador de posición", "Insurance": "Seguro", "Integration_added": "La Integración ha sido añadida", "Integration_Advanced_Settings": "Ajustes Avanzados", @@ -2210,6 +2267,7 @@ "Invalid_Department": "Departamento incorrecto", "Invalid_email": "El e-mail ingresado es invalido", "Invalid_Export_File": "El archivo subido no es un fichero de exportación válida %s.", + "Invalid_field": "El campo no debe estar vacío", "Invalid_Import_File_Type": "Tipo de archivo de importación inválido", "Invalid_name": "El nombre no debe estar vacío", "Invalid_notification_setting_s": "Configuración de la notificación inválido: %s", @@ -2234,6 +2292,7 @@ "Invite_user_to_join_channel_all_from": "Invitar a todos los usuarios de [#channell] para unirse a este canal", "Invite_user_to_join_channel_all_to": "Invitar a todos los usuarios de este canal a unirse a [#channel]", "Invite_Users": "Invitar Usuarios", + "IP": "IP", "IRC_Channel_Join": "Salida del comando JOIN", "IRC_Channel_Leave": "Salida del comando PART", "IRC_Channel_Users": "Salida del comando NAMES.", @@ -2595,6 +2654,7 @@ "Local_Domains": "Dominios locales", "Local_Password": "Contraseña local", "Local_Time": "Hora local", + "Local_Timezone": "Zona horaria local", "Local_Time_time": "Hora local: __time__", "Localization": "Idioma", "Location": "Ubicación", @@ -2954,6 +3014,8 @@ "No": "No", "No_available_agents_to_transfer": "No hay agentes disponibles para transferir", "No_Canned_Responses": "Sin respuestas preparada", + "No_Canned_Responses_Yet": "Aún no hay respuestas predefinidas", + "No_Canned_Responses_Yet-description": "Utilice respuestas predefinidas para proporcionar respuestas rápidas y coherentes a las preguntas frecuentes.", "No_channel_with_name_%s_was_found": "¡Ningún canal con el nombre \"%s\" ha sido encontrado!", "No_channels_in_team": "No hay canales en este equipo", "No_channels_yet": "Aún no formas parte de ningún canal", @@ -3002,6 +3064,7 @@ "Not_verified": "No verificado", "Nothing": "Nada", "Nothing_found": "No se encontró nada", + "Notice_that_public_channels_will_be_public_and_visible_to_everyone": "Tenga en cuenta que los Channels públicos serán públicos y visibles para todos.", "Notification_Desktop_Default_For": "Mostrar notificaciones de escritorio para", "Notification_Desktop_Audio_Default_For": "Reproducir audio de notificaciones de escritorio para", "Notification_Mobile_Default_For": "Notificaciones móviles push para", @@ -3208,6 +3271,7 @@ "Preparing_list_of_messages": "Preparando lista de mensajes", "Preparing_list_of_users": "Preparando lista de usuarios", "Presence": "Presencia", + "Preview": "Vista previa", "preview-c-room": "Vista previa del canal público", "preview-c-room_description": "Permiso para ver los contenidos de un canal público antes de unirse", "Previous_month": "Mes anterior", @@ -3343,8 +3407,10 @@ "Remove_from_team": "Elimina del equipo", "Remove_last_admin": "Eliminando el último administrador", "Remove_someone_from_room": "Eliminar a alguien de la sala", - "remove-closed-livechat-rooms": "Eliminar salas cerradas de LiveChat", + "remove-closed-livechat-room": "Quitar Cerrado Livechat", + "remove-closed-livechat-rooms": "Eliminar Rooms cerradas de LiveChat", "remove-closed-livechat-rooms_description": "Permiso para eliminar salas Livechat cerradas", + "remove-livechat-department": "Elimina los departamentos Livechat", "remove-user": "Eliminar usuario", "remove-user_description": "Permiso para eliminar un usuario de una sala", "Removed": "Eliminado", @@ -3565,7 +3631,7 @@ "Save_Mobile_Bandwidth": "Ahorrar Ancho de Banda Móvil", "Save_to_enable_this_action": "Guarde para habilitar esta acción", "Save_To_Webdav": "Guardar en WebDAV", - "Save_your_encryption_password": "Guarde su contraseña de cifrado", + "Save_Your_Encryption_Password": "Guarde su contraseña de cifrado", "save-others-livechat-room-info": "Guardar información de otras salas de LiveChat", "save-others-livechat-room-info_description": "Permiso para guardar información de otras salas de LiveChat", "Saved": "Guardado", @@ -3610,6 +3676,7 @@ "Select_service_to_login": "Selecciona un servicio para iniciar sesión y cargar tu imagen o sube una foto de tu computadora", "Select_tag": "Seleccione una etiqueta", "Select_the_channels_you_want_the_user_to_be_removed_from": "Seleccione los canales de los que desea eliminar al usuario", + "Select_the_teams_channels_you_would_like_to_delete": "Seleccione los Channels del equipo que desea eliminar, los que no seleccione se moverán al espacio de trabajo.", "Select_user": "Seleccionar usuario", "Select_users": "Seleccione los usuarios", "Selected_agents": "Agentes seleccionados", @@ -3683,10 +3750,14 @@ "Setup_Wizard": "Asistente de configuración", "Setup_Wizard_Info": "Lo guiaremos para configurar su primer usuario administrador, configurar su organización y registrar su servidor para recibir notificaciones push gratuitas y más.", "Share_Location_Title": "¿Compartir ubicacion?", - "Canned_responses": "Respuesta predefinida", + "Canned_Responses": "Respuesta predefinida", + "New_CannedResponse": "Nueva respuesta preparada", + "Edit_CannedResponse": "Editar respuesta predefinida", + "Sharing": "Intercambio", "Shared_Location": "Ubicación Compartida", "Shared_Secret": "Secreto compartido", "Shortcut": "Atajo", + "shortcut_name": "nombre del atajo", "Should_be_a_URL_of_an_image": "Debe de ser un URL de una imagen. ", "Should_exists_a_user_with_this_username": "Ya debe existir el usuario.", "Show_agent_email": "Mostrar correo electrónico del agente", @@ -3866,6 +3937,7 @@ "Sync_Users": "Sincronizar Usuarios", "System_messages": "Mensajes del sistema", "Tag": "Etiqueta", + "Tags": "Etiquetas", "Tag_removed": "Etiqueta eliminada", "Tag_already_exists": "La etiqueta ya existe", "Take_it": "¡Tómalo!", @@ -3887,6 +3959,7 @@ "Teams": "Equipos", "Teams_about_the_channels": "¿Y sobre los Channels?", "Teams_channels_didnt_leave": "No seleccionó los siguientes Channel, por lo que no los abandona:", + "Teams_channels_last_owner_delete_channel_warning": "Eres el último propietario de este channel. Una vez que convierta el equipo en un canal, el channel se moverá al espacio de trabajo.", "Teams_channels_last_owner_leave_channel_warning": "Eres el último propietario de este channel. Una vez que abandone el equipo, el chanell se mantendrá dentro del equipo, pero usted lo administrará desde afuera.", "Teams_leaving_team": "Vas a dejar este equipo.", "Teams_channels": "Channels del equipo", @@ -4032,6 +4105,7 @@ "This_cant_be_undone": "Esto no se puede deshacer.", "This_conversation_is_already_closed": "La conversación ya está cerrada.", "This_email_has_already_been_used_and_has_not_been_verified__Please_change_your_password": "Este correo electrónico ya se ha utilizado y no se ha verificado. Por favor, cambie su contraseña.", + "This_feature_is_currently_in_alpha": "Aquesta funció està actualment en versió alfa!", "This_is_a_desktop_notification": "Ésto es una notificación de escritorio", "This_is_a_push_test_messsage": "Este es un mensaje de prueba push", "This_message_was_rejected_by__peer__peer": "Este mensaje fue rechazado por __peer__ compañero.", @@ -4207,6 +4281,7 @@ "URL_room_hash_description": "Recomendado para habilitar si la instancia de Jitsi no usa ningún mecanismo de autenticación", "URL_room_prefix": "Prefijo de sala de URL", "URL_room_suffix": "Sufijo de la URL de la sala", + "Use": "Utilizar", "Use_account_preference": "Usar la preferencia de cuenta", "Use_Emojis": "Usar Emojis", "Use_Global_Settings": "Usar la Configuración Global", @@ -4333,6 +4408,7 @@ "Users_TOTP_has_been_reset": "El TOTP del usuario ha sido restablecido", "Uses": "Usos", "Uses_left": "Usos que quedan", + "UTC_Timezone": "Zona horaria UTC", "Utilities": "Utilidades", "UTF8_Names_Slugify": "Slugify de nombres UTF8", "UTF8_Names_Validation": "Validación de Nombres UTF8", @@ -4506,6 +4582,7 @@ "yesterday": "ayer", "Yesterday": "Ayer", "You": "Tú", + "You_are_converting_team_to_channel": "Estás convirtiendo este equipo en un canal.", "you_are_in_preview_mode_of": "Estás en modo vista previa del canal #__room_name__", "you_are_in_preview_mode_of_incoming_livechat": "Estás en el modo de vista previa de este chat", "You_are_logged_in_as": "Ha iniciado sesión como", diff --git a/packages/rocketchat-i18n/i18n/fa.i18n.json b/packages/rocketchat-i18n/i18n/fa.i18n.json index ee1cc568b2b0..22ee8e853585 100644 --- a/packages/rocketchat-i18n/i18n/fa.i18n.json +++ b/packages/rocketchat-i18n/i18n/fa.i18n.json @@ -535,8 +535,8 @@ "Cancel": "لغو", "Cancel_message_input": "لغو", "Canceled": "لغو شد", - "Canned_Response_Removed": "پاسخ آماده پاک شد", "Canned Responses": "پاسخ های آماده", + "Canned_Response_Removed": "پاسخ آماده پاک شد", "Canned_Responses_Enable": "فعال کردن پاسخ های آماده", "Cannot_invite_users_to_direct_rooms": "امکان دعوت کاربران به تماس های مستقیم وجود ندارد", "Cannot_open_conversation_with_yourself": "پیام مستقیم با خودتان را نمیتوانید", @@ -1391,6 +1391,7 @@ "Favorites": "موارد مورد علاقه", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "این ویژگی به \"ارسال تاریخچه گردشگری بازدید کننده به عنوان پیام\" بستگی دارد تا فعال شود.", "Features_Enabled": "ویژگی ها فعال شد", + "Federation_Domain": "دامنه", "FEDERATION_Domain": "دامنه", "FEDERATION_Status": "وضعیت", "Field": "فیلد", @@ -2623,6 +2624,7 @@ "Setup_Wizard": "جادوگر راه اندازی", "Setup_Wizard_Info": "ما از طریق تنظیم اولین کاربر مدیر خود، تنظیم کردن سازمان شما و ثبت نام سرور خود برای دریافت اطلاعیه های فشار فوری و غیره راهنمایی می کنیم.", "Share_Location_Title": "اشتراک گذاری موقعیت مکانی؟", + "New_CannedResponse": "پاسخ آماده جدید", "Shared_Location": "مکان به اشتراک گذاشته شده", "Shortcut": "میانبر", "Should_be_a_URL_of_an_image": "باید یک URL از یک تصویر.", diff --git a/packages/rocketchat-i18n/i18n/fi.i18n.json b/packages/rocketchat-i18n/i18n/fi.i18n.json index bb411681f75c..0c228a4445e7 100644 --- a/packages/rocketchat-i18n/i18n/fi.i18n.json +++ b/packages/rocketchat-i18n/i18n/fi.i18n.json @@ -1134,6 +1134,7 @@ "Favorites": "Suosikit", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "Tämä ominaisuus riippuu \"Lähetä vierailijan navigoinnin historiasta viestinä\".", "Features_Enabled": "Ominaisuudet käytössä", + "Federation_Domain": "Verkkotunnus", "FEDERATION_Domain": "Verkkotunnus", "FEDERATION_Status": "Tila", "Field": "Kenttä", diff --git a/packages/rocketchat-i18n/i18n/fr.i18n.json b/packages/rocketchat-i18n/i18n/fr.i18n.json index 7e85aee87f28..7e6f86e14b6d 100644 --- a/packages/rocketchat-i18n/i18n/fr.i18n.json +++ b/packages/rocketchat-i18n/i18n/fr.i18n.json @@ -463,6 +463,11 @@ "Apps_License_Message_publicKey": "Une erreur s'est produite lors du décryptage de la licence. Veuillez synchroniser votre espace de travail dans les services de connectivité et réessayer", "Apps_License_Message_renewal": "La licence a expiré et doit être renouvelée", "Apps_License_Message_seats": "La licence n'a pas assez de sièges pour répondre à la quantité actuelle d'utilisateurs actifs. Veuillez augmenter le nombre de sièges", + "Apps_Logs_TTL": "Nombre de jours pour conserver les journaux des applications", + "Apps_Logs_TTL_7days": "7 jours", + "Apps_Logs_TTL_14days": "14 jours", + "Apps_Logs_TTL_30days": "30 jours", + "Apps_Logs_TTL_Alert": "Selon la taille de la collection de journaux, la modification de ce paramètre peut entraîner une lenteur pendant quelques instants", "Apps_Marketplace_Deactivate_App_Prompt": "Souhaitez-vous vraiment désactiver cette application ?", "Apps_Marketplace_Login_Required_Description": "Pour acheter des applications sur Rocket.Chat Marketplace, vous devez enregistrer votre espace de travail et vous connecter.", "Apps_Marketplace_Login_Required_Title": "Connexion au Marketplace requise", @@ -525,6 +530,7 @@ "are_also_typing": "sont également en train d'écrire", "are_typing": "sont en train d'écrire", "Are_you_sure": "Êtes-vous sûr(e) ?", + "Are_you_sure_you_want_to_clear_all_unread_messages": "Voulez-vous vraiment effacer tous les messages non lus ?", "Are_you_sure_you_want_to_close_this_chat": "Etes-vous sur de vouloir fermer ce chat ?", "Are_you_sure_you_want_to_delete_this_record": "Etes-vous sûr de vouloir supprimer cet enregistrement ?", "Are_you_sure_you_want_to_delete_your_account": "Êtes-vous sûr(e) de vouloir supprimer votre compte ?", @@ -695,9 +701,15 @@ "Cancel": "Annuler", "Cancel_message_input": "Annuler", "Canceled": "Annulé", + "Canned Responses": "Modèles de réponse", + "Canned_Response_Created": "Réponse standardisée créée", + "Canned_Response_Updated": "Réponse standardisée mise à jour", "Canned_Response_Delete_Warning": "La suppression d'une réponse automatique ne peut être annulée.", "Canned_Response_Removed": "Modèle de réponse supprimé", - "Canned Responses": "Modèles de réponse", + "Canned_Response_Sharing_Department_Description": "Toute personne du département sélectionné peut accéder à cette réponse standardisée", + "Canned_Response_Sharing_Private_Description": "Seuls vous et les responsables Omnicanaux peuvent accéder à cette réponse standardisée", + "Canned_Response_Sharing_Public_Description": "Tout le monde a accès à cette réponse standardisée", + "Create_your_First_Canned_Response": "Créez votre première réponse standardisée", "Canned_Responses_Enable": "Activer les modèles de réponse", "Cannot_invite_users_to_direct_rooms": "Impossible d'inviter des utilisateurs dans les discussions privées", "Cannot_open_conversation_with_yourself": "Impossible de diriger le message avec vous-même", @@ -921,6 +933,8 @@ "Compact": "Compact", "Condensed": "Condensé", "Condition": "Condition", + "Convert_to_channel": "Convertir en canal", + "Converting_team_to_channel": "Conversion de l’équipe en canal", "Commit_details": "Détails du commit", "Completed": "Terminé", "Computer": "Ordinateur", @@ -1216,6 +1230,7 @@ "Country_Zimbabwe": "Zimbabwe", "Cozy": "Confortable", "Create": "Créer", + "Create_Canned_Response": "Créer une réponse standardisée", "Create_channel": "Créer un canal", "Create_A_New_Channel": "Créer un nouveau canal", "Create_new": "Créer nouveau", @@ -1427,6 +1442,7 @@ "Display_setting_permissions": "Afficher les autorisations pour modifier les paramètres", "Display_unread_counter": "Afficher le nombre de messages non lus", "Displays_action_text": "Affiche le texte d'action", + "Do_It_Later": "Fais-le plus tard", "Do_not_display_unread_counter": "N'afficher aucun compteur de ce canal", "Do_not_provide_this_code_to_anyone": "Ne communiquez ce code à personne.", "Do_Nothing": "Ne rien faire", @@ -1476,6 +1492,7 @@ "ECDH_Enabled": "Activer le chiffrement de deuxième couche pour le transport de données", "Edit": "Modifier", "Edit_Business_Hour": "Modifier l'heure de travail", + "Edit_Canned_Response": "Modifier une réponse standardisée", "Edit_Canned_Responses": "Modifier les réponses standardisées", "Edit_Custom_Field": "Modifier le champ personnalisé", "Edit_Department": "Éditer le département", @@ -1517,6 +1534,7 @@ "edited": "modifié", "Editing_room": "Modification du salon", "Editing_user": "Modification des utilisateurs", + "Editor": "Editeur", "Education": "Éducation", "Email": "E-mail", "Email_address_to_send_offline_messages": "Adresse e-mail pour envoyer des messages hors ligne", @@ -1588,7 +1606,7 @@ "Enter_authentication_code": "Entrez le code d'authentification", "Enter_Behaviour": "Comportement de la touche Entrée", "Enter_Behaviour_Description": "Cela change si la touche Entrée envoie un message ou fait un saut de ligne", - "Enter_E2E_password_to_decode_your_key": "Entrez le mot de passe E2E pour décoder votre clé", + "Enter_E2E_password": "Entrez le mot de passe E2E", "Enter_name_here": "Saisissez le nom ici", "Enter_Normal": "Mode normal (envoyé avec Entrée)", "Enter_to": "Entrée pour", @@ -1803,7 +1821,43 @@ "Features": "Fonctionnalités", "Features_Enabled": "Fonctionnalités activées", "Feature_Disabled": "Fonction désactivée", + "Federation": "Fédération", + "Federation_Adding_to_your_server": "Ajout de la fédération à votre serveur", + "Federation_Inviting_users_from_another_server": "Inviter des utilisateurs d'un autre serveur", + "Federation_Search_users_you_want_to_connect": "Recherchez l'utilisateur que vous souhaitez connecter à l'aide d'une combinaison d'un nom d'utilisateur et d'un domaine ou d'une adresse e-mail, par exemple :", + "Federation_Username": "Nom d'utilisateur : nomdutilisateurdemonami@autredomaine.com", + "Federation_Email": "Adresse mail : joseph@remotedomain.com", + "Federation_You_will_invite_users_without_login_access": "Vous les inviterez sur votre serveur sans accès de connexion. De plus, vous et tous les autres utilisateurs de votre serveur pourrez discuter avec eux.", + "Federation_Invite_User": "Inviter un utilisateur", + "Federation_Invite_Users_To_Private_Rooms": "Désormais, vous pouvez inviter des utilisateurs fédérés uniquement dans des salons privés ou des discussions.", + "Federation_Channels_Will_Be_Replicated": "Ces canaux vont être répliqués sur le serveur distant, sans l'historique des messages.", + "Federation_Adding_users_from_another_server": "Ajout d'utilisateurs d'un autre serveur", + "Federation_Changes_needed": "Modifications nécessaires sur votre serveur : nom de domaine, cible et port.", + "Federation_Configure_DNS": "Configurer le DNS", + "Federation_Domain": "Domaine", + "Federation_Domain_details": "Ajoutez le nom de domaine auquel ce serveur doit être lié.", + "Federation_Enable": "Activer la fédération", + "Federation_Fix_now": "Réparez maintenant !", + "Federation_SRV_no_support": "Si votre fournisseur DNS ne prend pas en charge les enregistrements SRV avec _http ou _https", + "Federation_SRV_no_support_details": "Certains fournisseurs DNS n'autorisent pas la définition de _https ou _http sur les enregistrements SRV, nous prenons donc en charge ces cas, en utilisant notre ancienne méthode de résolution des enregistrements DNS.", + "Federation_Must_add_records": "Vous devez ajouter les enregistrements DNS suivants sur votre serveur :", + "Federation_SRV_records_200": "Enregistrement SRV (2.0.0 ou plus récent)", + "Federation_Public_key_TXT_record": "Enregistrement TXT de clé publique", + "Federation_Protocol_TXT_record": "Enregistrement TXT du protocole", + "Federation_Legacy_support": "Prise en charge de systèmes anciens", + "Federation_HTTP_instead_HTTPS": "Si vous utilisez le protocole HTTP à la place du HTTPS", + "Federation_HTTP_instead_HTTPS_details": "Nous vous recommandons d'utiliser HTTPS pour toutes sortes de communication, mais parfois ce n'est pas possible. Si vous en avez besoin, remplacez dans l'enregistrement SRV : le protocole : _http le port : 80", + "Federation_DNS_info_update": "Cette information est mise à jour toutes les 1 minute", + "Federation_Adding_Federated_Users": "Ajoutez des utilisateurs fédérés", + "Federation_Guide_adding_users": "Nous vous guidons sur la façon d'ajouter votre premier utilisateur fédéré.", + "Federation_Is_working_correctly": "L'intégration de la fédération fonctionne correctement.", + "Federation_Public_key": "Clé publique", + "Federation_Public_key_details": "C'est la clé que vous devez partager avec vos pairs. A quoi ça sert ?", + "Federation_Discovery_method": "Méthode de découverte", + "Federation_Discovery_method_details": "Vous pouvez utiliser le hub ou un enregistrement DNS (SRV et une entrée TXT). En savoir plus", "Federation_Dashboard": "Tableau de bord de la Fédération", + "Federation_Protocol": "Protocole", + "Federation_Protocol_details": "Nous vous recommandons d'utiliser HTTP uniquement sur des cas internes très spécifiques.", "FEDERATION_Discovery_Method": "Méthode de découverte", "FEDERATION_Discovery_Method_Description": "Vous pouvez utiliser le hub ou un SRV et une entrée TXT sur vos enregistrements DNS.", "FEDERATION_Domain": "Domaine", @@ -1908,6 +1962,7 @@ "Filters": "Filtres", "Filters_applied": "Filtres appliqués", "Financial_Services": "Services financiers", + "Finish": "Finir", "Finish_Registration": "Terminer l'inscription", "First_Channel_After_Login": "Premier canal après la connexion", "First_response_time": "Temps de première réponse", @@ -2046,8 +2101,7 @@ "How_responsive_was_the_chat_agent": "Quel a été la réactivité de l'agent de chat ?", "How_satisfied_were_you_with_this_chat": "Étiez-vous satisfait de ce chat?", "How_to_handle_open_sessions_when_agent_goes_offline": "Comment gérer les sessions ouvertes lorsque l'agent est déconnecté", - "I_ll_do_it_later": "Je le ferai plus tard", - "I_saved_my_password_close_this_message": "J'ai enregistré mon mot de passe, fermer ce message", + "I_Saved_My_Password": "J'ai enregistré mon mot de passe", "Idle_Time_Limit": "Limite de temps d'inactivité", "Idle_Time_Limit_Description": "Période de temps jusqu'à ce que le statut passe à absent. La valeur doit être en secondes.", "if_they_are_from": "(s'ils proviennent de %s)", @@ -2159,6 +2213,7 @@ "Instructions": "Instructions", "Instructions_to_your_visitor_fill_the_form_to_send_a_message": "Instructions à votre visiteur remplissez le formulaire pour envoyer un message", "Insert_Contact_Name": "Insérez le nom du contact", + "Insert_Placeholder": "Insérer un espace réservé", "Insurance": "Assurance", "Integration_added": "L'intégration a été ajoutée", "Integration_Advanced_Settings": "Paramètres avancés", @@ -2214,6 +2269,7 @@ "Invalid_Department": "Département non valide", "Invalid_email": "L'adresse e-mail saisie est invalide", "Invalid_Export_File": "Le fichier envoyé n'est pas un fichier d'exportation valide de %s", + "Invalid_field": "Le champ ne doit pas être vide", "Invalid_Import_File_Type": "Format du fichier d'importation invalide.", "Invalid_name": "Le nom doit être renseigné", "Invalid_notification_setting_s": "Paramètre de notification invalide : %s", @@ -2238,6 +2294,7 @@ "Invite_user_to_join_channel_all_from": "Inviter tous les utilisateurs de [#channel] à rejoindre ce canal", "Invite_user_to_join_channel_all_to": "Inviter tous les utilisateurs de ce canal à rejoindre [#channel]", "Invite_Users": "Inviter des utilisateurs", + "IP": "IP", "IRC_Channel_Join": "Sortie de la commande JOIN.", "IRC_Channel_Leave": "Sortie de la commande PART.", "IRC_Channel_Users": "Sortie de la commande NAMES.", @@ -2599,6 +2656,7 @@ "Local_Domains": "Domaines locaux", "Local_Password": "Mot de passe local", "Local_Time": "Heure locale", + "Local_Timezone": "Fuseau horaire local", "Local_Time_time": "Heure locale : __time__", "Localization": "Localisation", "Location": "Emplacement", @@ -2958,6 +3016,8 @@ "No": "Non", "No_available_agents_to_transfer": "Aucun agent disponible pour le transfert", "No_Canned_Responses": "Aucun modèle de réponse", + "No_Canned_Responses_Yet": "Aucune réponse standardisée pour le moment", + "No_Canned_Responses_Yet-description": "Utilisez des réponses standardisées pour fournir des réponses rapides et cohérentes aux questions fréquemment posées.", "No_channel_with_name_%s_was_found": "Aucun canal nommé \"%s\" n'a été trouvé !", "No_channels_in_team": "Aucun canal dans cette équipe", "No_channels_yet": "Vous ne faites encore parti d'aucun canal.", @@ -3006,6 +3066,7 @@ "Not_verified": "Non vérifié", "Nothing": "Rien", "Nothing_found": "Aucun résultat", + "Notice_that_public_channels_will_be_public_and_visible_to_everyone": "Notez que les canaux publics seront publics et visibles de tous.", "Notification_Desktop_Default_For": "Afficher les notifications de bureau pour", "Notification_Desktop_Audio_Default_For": "Lire les notifications audio de bureau pendant", "Notification_Mobile_Default_For": "Notifications mobiles push pour", @@ -3212,6 +3273,7 @@ "Preparing_list_of_messages": "Préparation de la liste des messages", "Preparing_list_of_users": "Préparation de la liste des utilisateurs", "Presence": "Présence", + "Preview": "Aperçu", "preview-c-room": "Aperçu d'un canal public", "preview-c-room_description": "Autorisation d'afficher le contenu d'un canal public avant de rejoindre", "Previous_month": "Le mois précédent", @@ -3571,7 +3633,7 @@ "Save_Mobile_Bandwidth": "Préserver la bande passante sur mobile", "Save_to_enable_this_action": "Sauvegarder pour activer cette action", "Save_To_Webdav": "Enregistrer sur WebDAV", - "Save_your_encryption_password": "Enregistrez votre mot de passe de cryptage", + "Save_Your_Encryption_Password": "Enregistrez votre mot de passe de chiffrement", "save-others-livechat-room-info": "Enregistrer d'autres informations sur le salon omnicanal", "save-others-livechat-room-info_description": "Permission d'enregistrer des informations provenant d'autres salons omnicanaux", "Saved": "Enregistré", @@ -3616,6 +3678,7 @@ "Select_service_to_login": "Sélectionnez un service pour vous connecter et importer votre image ou importez directement une image à partir de votre ordinateur.", "Select_tag": "Sélectionnez un tag", "Select_the_channels_you_want_the_user_to_be_removed_from": "Sélectionnez les canaux desquels l'utilisateur devrait être supprimé", + "Select_the_teams_channels_you_would_like_to_delete": "Sélectionnez les canaux de l'équipe que vous souhaitez supprimer, ceux que vous ne sélectionnez pas seront déplacés vers l'espace de travail.", "Select_user": "Sélectionner l'utilisateur", "Select_users": "Sélectionner des utilisateurs", "Selected_agents": "Agents sélectionnés", @@ -3689,10 +3752,14 @@ "Setup_Wizard": "Assistant de configuration", "Setup_Wizard_Info": "Nous allons vous guider pour configurer votre premier compte administrateur, votre organisation et enregistrer votre serveur pour recevoir des notifications push gratuitement, et plus encore.", "Share_Location_Title": "Partager votre position ?", - "Canned_responses": "Modèles de réponse", + "Canned_Responses": "Modèles de réponse", + "New_CannedResponse": "Nouveau modèle de réponse", + "Edit_CannedResponse": "Modifier une réponse standardisée", + "Sharing": "Partager", "Shared_Location": "Position partagée", "Shared_Secret": "Secret partagé", "Shortcut": "Raccourci", + "shortcut_name": "nom du raccourci", "Should_be_a_URL_of_an_image": "Doit être l'URL d'une image.", "Should_exists_a_user_with_this_username": "L'utilisateur doit déjà exister.", "Show_agent_email": "Afficher l'adresse e-mail de l'agent", @@ -3894,6 +3961,7 @@ "Teams": "Équipes", "Teams_about_the_channels": "Et à propos des canaux ?", "Teams_channels_didnt_leave": "Vous n'avez pas sélectionné les canaux suivants, vous ne les quittez donc pas :", + "Teams_channels_last_owner_delete_channel_warning": "Vous êtes le dernier propriétaire de ce canal. Une fois l'équipe convertie en canal, le canal sera déplacé vers l'espace de travail.", "Teams_channels_last_owner_leave_channel_warning": "Vous êtes le dernier propriétaire de canal. Une fois que vous quittez l'équipe, le canal sera conservé à l'intérieur de l'équipe mais vous le gérerez de l'extérieur.", "Teams_leaving_team": "Vous quittez cette équipe.", "Teams_channels": "Canaux de l'équipe", @@ -4215,6 +4283,7 @@ "URL_room_hash_description": "Recommandé d'activer si l'instance Jitsi n'utilise aucun mécanisme d'authentification.", "URL_room_prefix": "Préfixe d'URL de salon", "URL_room_suffix": "Suffixe de salon d'URL", + "Use": "Utiliser", "Use_account_preference": "Utiliser les préférences du compte", "Use_Emojis": "Utiliser les émoticônes", "Use_Global_Settings": "Utiliser les paramètres globaux", @@ -4341,6 +4410,7 @@ "Users_TOTP_has_been_reset": "Le TOTP de l'utilisateur a été réinitialisé", "Uses": "Utilisations", "Uses_left": "Utilisations restantes", + "UTC_Timezone": "Fuseau horaire UTC", "Utilities": "Services publics", "UTF8_Names_Slugify": "Utiliser un slug (texte court) pour les noms UTF-8", "UTF8_Names_Validation": "Validation des nomsm UTF8", @@ -4514,6 +4584,7 @@ "yesterday": "hier", "Yesterday": "Hier", "You": "Vous", + "You_are_converting_team_to_channel": "Vous convertissez cette équipe en canal.", "you_are_in_preview_mode_of": "Vous êtes en mode aperçu du canal #__room_name__", "you_are_in_preview_mode_of_incoming_livechat": "Vous êtes en mode aperçu de ce chat", "You_are_logged_in_as": "Vous êtes connecté en tant que", diff --git a/packages/rocketchat-i18n/i18n/he.i18n.json b/packages/rocketchat-i18n/i18n/he.i18n.json index f01f7025a774..6648a9445794 100644 --- a/packages/rocketchat-i18n/i18n/he.i18n.json +++ b/packages/rocketchat-i18n/i18n/he.i18n.json @@ -572,6 +572,7 @@ "Favorite_Rooms": "אפשר חדרים מועדפים", "Favorites": "מועדפים", "Features_Enabled": "תכונות מופעלות", + "Federation_Domain": "תחום", "FEDERATION_Domain": "תחום", "FEDERATION_Status": "סטטוס", "Field": "שדה", diff --git a/packages/rocketchat-i18n/i18n/hr.i18n.json b/packages/rocketchat-i18n/i18n/hr.i18n.json index 2a7fedca0f96..dd302e6dc6c4 100644 --- a/packages/rocketchat-i18n/i18n/hr.i18n.json +++ b/packages/rocketchat-i18n/i18n/hr.i18n.json @@ -1264,6 +1264,7 @@ "Favorites": "Omiljeni", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "Ova značajka ovisi o \"Ukloni povijest kretanja posjetitelja kao poruku\" da bude omogućena.", "Features_Enabled": "Omogućene značajke", + "Federation_Domain": "Domena", "FEDERATION_Domain": "Domena", "FEDERATION_Status": "Status", "Field": "Polje", diff --git a/packages/rocketchat-i18n/i18n/hu.i18n.json b/packages/rocketchat-i18n/i18n/hu.i18n.json index a41828b088ac..3e85dea544f9 100644 --- a/packages/rocketchat-i18n/i18n/hu.i18n.json +++ b/packages/rocketchat-i18n/i18n/hu.i18n.json @@ -555,8 +555,8 @@ "Cancel": "Mégse", "Cancel_message_input": "Mégse", "Canceled": "Megszakítva", - "Canned_Response_Removed": "Válasz sablon eltávolítva", "Canned Responses": "Válasz sablonok", + "Canned_Response_Removed": "Válasz sablon eltávolítva", "Canned_Responses_Enable": "Válasz sablonok engedélyezése", "Cannot_invite_users_to_direct_rooms": "Nem hívhat meg felhasználókat a közvetlen szobákba", "Cannot_open_conversation_with_yourself": "Nem küldhet közvetlen üzenetet önmagának", @@ -1252,7 +1252,6 @@ "Enter_authentication_code": "Írja be a hitelesítési kódot", "Enter_Behaviour": "Írja be a kulcsmódot", "Enter_Behaviour_Description": "Ez megváltozik, ha az Enter gomb elküldi az üzenetet vagy megszakítja a sort", - "Enter_E2E_password_to_decode_your_key": "Add meg az E2E jelszavad a kulcsod dekódolásához", "Enter_name_here": "Írd be a nevet", "Enter_Normal": "Normál mód (küldés az Enter billentyűvel)", "Enter_to": "Belépés a", @@ -1401,6 +1400,10 @@ "Favorites": "Kedvencek", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "Ez a funkció a \"Látogatók navigálási előzményeinek küldése üzenetként való elküldéséhez\" tartozik.", "Features_Enabled": "Jellemzők Enabled", + "Federation_Domain": "Domain", + "Federation_Public_key": "Publikus kulcs", + "Federation_Discovery_method": "Felfedezési mód", + "Federation_Protocol": "Protokoll", "FEDERATION_Discovery_Method": "Felfedezési mód", "FEDERATION_Domain": "Domain", "FEDERATION_Public_Key": "Publikus kulcs", @@ -1580,8 +1583,6 @@ "How_responsive_was_the_chat_agent": "Mennyire volt készséges az operátor?", "How_satisfied_were_you_with_this_chat": "Mennyire volt elégedett ezzel a beszélgetéssel?", "How_to_handle_open_sessions_when_agent_goes_offline": "Hogyan kell kezelni az Open Sessions-t, amikor az ügynök offline állapotban van", - "I_ll_do_it_later": "Később csinálom meg", - "I_saved_my_password_close_this_message": "Elmentettem a jelszavam, az üzenet bezárása", "Idle_Time_Limit": "Tétlenségi időkorlát", "Idle_Time_Limit_Description": "Időtartam, amíg a státusz nem változik el. Az értéknek másodpercben kell lennie.", "if_they_are_from": "(ha %s-ból származik)", @@ -2678,7 +2679,6 @@ "Save_Mobile_Bandwidth": "Sávszélesség kímélő mód", "Save_to_enable_this_action": "Mentse, hogy ezt a műveletet", "Save_To_Webdav": "Mentés a WebDAV-ba", - "Save_your_encryption_password": "Titkosítási jelszó mentése", "save-others-livechat-room-info": "Mások mentése a Livechat szobapiacon", "save-others-livechat-room-info_description": "Engedély az információk mentésére más élő csatornákról", "Saved": "Mentett", diff --git a/packages/rocketchat-i18n/i18n/id.i18n.json b/packages/rocketchat-i18n/i18n/id.i18n.json index a5cedfecdcf9..4cfef6f49337 100644 --- a/packages/rocketchat-i18n/i18n/id.i18n.json +++ b/packages/rocketchat-i18n/i18n/id.i18n.json @@ -1134,6 +1134,7 @@ "Favorites": "Favorit", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "Fitur ini tergantung pada \"Kirim Riwayat Navigasi Pengunjung sebagai Pesan\" untuk diaktifkan.", "Features_Enabled": "fitur Diaktifkan", + "Federation_Domain": "Domain", "FEDERATION_Domain": "Domain", "FEDERATION_Status": "Status", "Field": "Bidang", diff --git a/packages/rocketchat-i18n/i18n/it.i18n.json b/packages/rocketchat-i18n/i18n/it.i18n.json index 935f16c4ad89..d4082c7a0ce8 100644 --- a/packages/rocketchat-i18n/i18n/it.i18n.json +++ b/packages/rocketchat-i18n/i18n/it.i18n.json @@ -1166,6 +1166,7 @@ "Favorites": "Preferiti", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "Questa funzione dipende da \"Invia cronologia di navigazione dei visitatori come messaggio\" per abilitare.", "Features_Enabled": "Funzioni abilitate", + "Federation_Domain": "Dominio", "FEDERATION_Domain": "Dominio", "FEDERATION_Status": "Stato", "Field": "Campo", diff --git a/packages/rocketchat-i18n/i18n/ja.i18n.json b/packages/rocketchat-i18n/i18n/ja.i18n.json index 6c52d03891b3..a722fff0c7fe 100644 --- a/packages/rocketchat-i18n/i18n/ja.i18n.json +++ b/packages/rocketchat-i18n/i18n/ja.i18n.json @@ -666,8 +666,8 @@ "Cancel": "キャンセル", "Cancel_message_input": "キャンセル", "Canceled": "キャンセルしました", - "Canned_Response_Removed": "削除された定型文", "Canned Responses": "返信定型文", + "Canned_Response_Removed": "削除された定型文", "Canned_Responses_Enable": "返信定型文を有効にする", "Cannot_invite_users_to_direct_rooms": "ダイレクトメッセージにユーザーを招待できません", "Cannot_open_conversation_with_yourself": "あなた自身とダイレクトメッセージを送ることはできません", @@ -1503,7 +1503,6 @@ "Enter_authentication_code": "認証コードを入力", "Enter_Behaviour": "Enterキーの動作", "Enter_Behaviour_Description": "これにより、Enterキーでメッセージを送信するか改行するかが変更されます", - "Enter_E2E_password_to_decode_your_key": "あなたのキーでデコードするためのE2Eパスワードを入力してください", "Enter_name_here": "ここに名前を入力します。", "Enter_Normal": "通常モード (Enterで送信)", "Enter_to": "Enter キーで", @@ -1710,7 +1709,11 @@ "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "この機能は、「訪問者のナビゲーション履歴をメッセージとして送信」が有効になっているかどうかによって異なります。", "Features": "特徴", "Features_Enabled": "有効な機能", + "Federation_Domain": "ドメイン", + "Federation_Public_key": "公開鍵", + "Federation_Discovery_method": "発見方法", "Federation_Dashboard": "フェデレーションダッシュボード", + "Federation_Protocol": "プロトコル", "FEDERATION_Discovery_Method": "発見方法", "FEDERATION_Discovery_Method_Description": "ハブまたはあなたのDNSレコードのSRVとTXTエントリを使うことができます。", "FEDERATION_Domain": "ドメイン", @@ -1952,8 +1955,6 @@ "How_responsive_was_the_chat_agent": "チャット担当者の対応は、いかがでしたか?", "How_satisfied_were_you_with_this_chat": "このチャットのご満足度は、いかがでしたか?", "How_to_handle_open_sessions_when_agent_goes_offline": "エージェントがオフラインになったときに開いているセッションを処理する方法", - "I_ll_do_it_later": "あとで", - "I_saved_my_password_close_this_message": "パスワードを保存してこのメッセージを閉じる", "Idle_Time_Limit": "アイドルタイムリミット", "Idle_Time_Limit_Description": "離席中のステータスに変更するまでの時間。値は秒単位である必要があります。", "if_they_are_from": " (%sからのものである場合)", @@ -3361,7 +3362,6 @@ "Save_Mobile_Bandwidth": "モバイルデータ通信量の節約", "Save_to_enable_this_action": "この操作をする前に、保存してください", "Save_To_Webdav": "WebDAVに保存", - "Save_your_encryption_password": "暗号化パスワードを保存する", "save-others-livechat-room-info": "ライブチャットルーム情報", "save-others-livechat-room-info_description": "他のライブチャットチャンネルから情報を保存する権限", "Saved": "保存しました", @@ -3469,6 +3469,7 @@ "Setup_Wizard": "セットアップウィザード", "Setup_Wizard_Info": "最初の管理者の設定、組織の設定、無料のプッシュ通知などを受けるためのサーバーの登録について説明します。", "Share_Location_Title": "共有場所?", + "New_CannedResponse": "新しい返信定型文", "Shared_Location": "共有場所", "Shared_Secret": "共有パスワード", "Shortcut": "ショートカット", diff --git a/packages/rocketchat-i18n/i18n/ka-GE.i18n.json b/packages/rocketchat-i18n/i18n/ka-GE.i18n.json index ef573392230f..5463359b9374 100644 --- a/packages/rocketchat-i18n/i18n/ka-GE.i18n.json +++ b/packages/rocketchat-i18n/i18n/ka-GE.i18n.json @@ -568,8 +568,8 @@ "Cancel": "გაუქმება", "Cancel_message_input": "გაუქმება", "Canceled": "გაუქმდა", - "Canned_Response_Removed": "შენახული პასუხი ამოღებულია", "Canned Responses": "შენახული პასუხები", + "Canned_Response_Removed": "შენახული პასუხი ამოღებულია", "Canned_Responses_Enable": "შენახული პასუხების ჩართვა", "Cannot_invite_users_to_direct_rooms": "მომხმარებლების პირდაპირ ოთახში მოწვევა შეუძლებელია", "Cannot_open_conversation_with_yourself": "თქვენ ვერ შეძლებთ პირდაპირ მესიჯის გაგზავნას საკუთარ თავთან", @@ -1350,7 +1350,6 @@ "Enter_authentication_code": "შეიყვანეთ ავტორიზაციის კოდი", "Enter_Behaviour": "შეიყვანეთ ძირითადი ქცევა", "Enter_Behaviour_Description": "ეს იცვლება იმ შემთხვევაში, თუ Enter კლავიში გაგზავნის შეტყობინებას ან დაიწყებს ახალ ხაზს", - "Enter_E2E_password_to_decode_your_key": "შეიყვანეთ E2E პაროლი თქვენი გასაღების დეკოდირებისთვის", "Enter_name_here": "სახელი შეიყვანეთ აქ", "Enter_Normal": "ნორმალური რეჟიმი", "Enter_to": "შესვლა", @@ -1531,7 +1530,11 @@ "Favorites": "ფავორიტები", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "ეს ფუნქცია დამოკიდებულია \"ჩართეთ ვიზიტორის ნავიგაციის ისტორია, როგორც გზავნილი\"-ზე", "Features_Enabled": "ჩართული ფუნქციები", + "Federation_Domain": "დომენი", + "Federation_Public_key": "საჯარო გასაღები", + "Federation_Discovery_method": "აღმოჩენის მეთოდი", "Federation_Dashboard": "ფედერაციის დაფა", + "Federation_Protocol": "პროტოკოლი", "FEDERATION_Discovery_Method": "აღმოჩენის მეთოდი", "FEDERATION_Discovery_Method_Description": "თქვენ შეგიძლიათ გამოიყენოთ hub ან SRV და TXT ჩანაწერი თქვენს DNS ჩანაწერზე.", "FEDERATION_Domain": "დომენი", @@ -1749,8 +1752,6 @@ "How_responsive_was_the_chat_agent": "რამდენად ამომწურავი იყო ჩატის აგენტი?", "How_satisfied_were_you_with_this_chat": "რამდენად კმაყოფილი ხართ ამ ჩატით?", "How_to_handle_open_sessions_when_agent_goes_offline": "როგორ ვუყოთ ღია სესიებს როდესაც აგენდი გაიდ ოფლაინ?", - "I_ll_do_it_later": "მოგვიანებით გავაკეთებ", - "I_saved_my_password_close_this_message": "ჩემი პაროლი შევინახე, დახურეთ ეს მესიჯი", "Idle_Time_Limit": "უქმი დროის ლიმიტი", "Idle_Time_Limit_Description": "დროის ხანგრძლივობა რის შემდეგაც სტატუსი შეიცვლება \"გასულია\"-დ. მნიშვნელობა შეიყვანეთ წამებში", "if_they_are_from": "(თუ ისინი%s- დან არიან)", @@ -2996,7 +2997,6 @@ "Save_Mobile_Bandwidth": "შეინახეთ მობილური ბენდვიზი", "Save_to_enable_this_action": "შეინახეთ ამ ქმედების გასააქტიურებლად", "Save_To_Webdav": "შეინახეთ WebDAV-ში", - "Save_your_encryption_password": "შეინახეთ თქვენი დაშიფვრის პაროლი", "save-others-livechat-room-info": "შეინახეთ სხვა Omnichannel ოთახების ინფორმაცია", "save-others-livechat-room-info_description": "სხვა omnichannel ოთახებიდან ინფორმაციის შენახვის უფლება", "Saved": "შენახულია", @@ -3093,6 +3093,7 @@ "Settings_updated": "პარამეტრები განახლებულია", "Setup_Wizard_Info": "ჩვენ დაგეხმარებით პირველი ადმინ მომხმარებლის დაყენებაში, ორგანიზაციის დაკონფიგურირებაში და თქვენი სერვერის დარეგისტრირებაში უფასო push შეტყობინებების მისაღებად და ა.შ", "Share_Location_Title": "გსურთ ადგილმდებარეობის გაზიარება?", + "New_CannedResponse": "ახალი შენახული პასუხი", "Shared_Location": "გაზიარებული ადგილმდებარეობა", "Shared_Secret": "გაზიარებული საიდმლო", "Shortcut": "მალსახმობი", diff --git a/packages/rocketchat-i18n/i18n/km.i18n.json b/packages/rocketchat-i18n/i18n/km.i18n.json index fc87c19f1d5d..d9455d24f687 100644 --- a/packages/rocketchat-i18n/i18n/km.i18n.json +++ b/packages/rocketchat-i18n/i18n/km.i18n.json @@ -528,8 +528,8 @@ "Cancel": "បញ្ឈប់", "Cancel_message_input": "បញ្ឈប់", "Canceled": "បានបោះបង់", - "Canned_Response_Removed": "ការឆ្លើយតបដែលបានថតទុកមិនត្រូវបានរកឃើញទេ", "Canned Responses": "ការឆ្លើយតបដែលបានថតទុកមិនត្រូវបានរកឃើញទេ", + "Canned_Response_Removed": "ការឆ្លើយតបដែលបានថតទុកមិនត្រូវបានរកឃើញទេ", "Canned_Responses_Enable": "បើកការឆ្លើយតបដែលអាចប្រើបាន", "Cannot_invite_users_to_direct_rooms": "មិនអាចអញ្ជើញអ្នកប្រើប្រាស់ដើម្បីដឹកនាំបន្ទប់", "Cannot_open_conversation_with_yourself": "មិនអាចបញ្ជូនសារផ្ទាល់ជាមួយខ្លួនអ្នកបានទេ", @@ -1227,7 +1227,6 @@ "Enter_authentication_code": "បញ្ចូលលេខកូដផ្ទៀងផ្ទាត់", "Enter_Behaviour": "បញ្ចូលឥរិយាបទគ្រាប់ចុច", "Enter_Behaviour_Description": "ការផ្លាស់ប្តូរនេះប្រសិនបើគ្រាប់ចុចបញ្ចូល (Enter) នឹងផ្ញើរសារឬបំបែកបន្ទាត់", - "Enter_E2E_password_to_decode_your_key": "បញ្ចូលពាក្យសម្ងាត់ E2E ដើម្បីបំលែងលេខកូដដើមរបស់អ្នកមកវិញ", "Enter_name_here": "បញ្ចូលឈ្មោះនៅទីនេះ", "Enter_Normal": "របៀបធម្មតា (ផ្ញើជាមួយបញ្ចូល)", "Enter_to": "បញ្ចូល", @@ -1378,6 +1377,8 @@ "Favorites": "ពេញ​ចិត្ត", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "លក្ខណៈពិសេសនេះអាស្រ័យលើការបើកដំណើរការ \"ផ្ញើប្រវត្តិរុករកអ្នកទស្សនាជាសារ\" ។", "Features_Enabled": "លក្ខណៈពិសេសអនុញ្ញាត", + "Federation_Domain": "ដែន", + "Federation_Discovery_method": "វិធីសាស្រ្តរកឃើញ", "FEDERATION_Discovery_Method": "វិធីសាស្រ្តរកឃើញ", "FEDERATION_Domain": "ដែន", "FEDERATION_Status": "ស្ថានភាព", @@ -1551,8 +1552,6 @@ "How_responsive_was_the_chat_agent": "តើធ្វើដូចម្តេចឆ្លើយតបភ្នាក់ងារជជែកកំសាន្តនោះ?", "How_satisfied_were_you_with_this_chat": "តើអ្នកពេញចិត្តនាក់អ្នកជាមួយនឹងការជជែកនេះ?", "How_to_handle_open_sessions_when_agent_goes_offline": "វិធីដោះស្រាយពេលបើកចំហនៅពេលដែលភ្នាក់ងារដើរក្រៅប្រព័ន្ធ", - "I_ll_do_it_later": "ខ្ញុំនឹងធ្វើវានៅពេលក្រោយ", - "I_saved_my_password_close_this_message": "ខ្ញុំបានរក្សាទុកពាក្យសម្ងាត់របស់ខ្ញុំ, បិទសារនេះ", "Idle_Time_Limit": "ដែនកំណត់ពេលវេលាទំនេរ", "Idle_Time_Limit_Description": "រយៈពេលនៃពេលវេលារហូតដល់ស្ថានភាពផ្លាស់ប្តូរទៅឆ្ងាយ។ តម្លៃត្រូវការជាវិនាទី។", "if_they_are_from": "(ប្រសិនបើពួកគេមកពី %s)", @@ -2564,7 +2563,6 @@ "Save_Mobile_Bandwidth": "រក្សាទុកកម្រិតបញ្ជូនតាមទូរស័ព្ទដៃ", "Save_to_enable_this_action": "រក្សាទុកដើម្បីបើកសកម្មភាពនេះ", "Save_To_Webdav": "រក្សាទុកទៅ WebDAV", - "Save_your_encryption_password": "រក្សាទុកពាក្យសម្ងាត់សំរាប់បំលែងកូដថ្មីរបស់អ្នក", "save-others-livechat-room-info": "រក្សាទុកព័ត៌មានផ្សេងទៀតរបស់ Livechat បន្ទប់", "save-others-livechat-room-info_description": "សិទ្ធិរក្សាទុកព័ត៌មានពីឆានែល livechat ផ្សេងទៀត", "Saved": "ដែលបានរក្សាទុក", @@ -2643,6 +2641,7 @@ "Setup_Wizard": "អ្នកជំនួយការរៀបចំ", "Setup_Wizard_Info": "យើងនឹងណែនាំអ្នកតាមរយៈការបង្កើតអ្នកប្រើគ្រប់គ្រងដំបូងអ្នកកំណត់រចនាសម្ព័ន្ធអង្គភាពរបស់អ្នកនិងចុះឈ្មោះម៉ាស៊ីនមេរបស់អ្នកដើម្បីទទួលការជូនដំណឹងពីការជំរុញដោយឥតគិតថ្លៃនិងច្រើនទៀត។", "Share_Location_Title": "ចែករំលែកទីតាំង?", + "New_CannedResponse": "ការឆ្លើយតបថ្មី", "Shared_Location": "ទីតាំងដែលបានចែករំលែក", "Should_be_a_URL_of_an_image": "គួរជា URL របស់រូបភាពមួយ។", "Should_exists_a_user_with_this_username": "អ្នកប្រើត្រូវតែមានរួចទៅហើយ។", diff --git a/packages/rocketchat-i18n/i18n/ko.i18n.json b/packages/rocketchat-i18n/i18n/ko.i18n.json index dc91a72fec8c..3bdc6c729c49 100644 --- a/packages/rocketchat-i18n/i18n/ko.i18n.json +++ b/packages/rocketchat-i18n/i18n/ko.i18n.json @@ -656,8 +656,8 @@ "Cancel": "취소", "Cancel_message_input": "취소", "Canceled": "취소됨", - "Canned_Response_Removed": "예상 답변 제거", "Canned Responses": "예상 답변", + "Canned_Response_Removed": "예상 답변 제거", "Canned_Responses_Enable": " 답변 사용", "Cannot_invite_users_to_direct_rooms": "direct room 으로 사용자를 초대할 수 없습니다.", "Cannot_open_conversation_with_yourself": "나와 1:1 대화를 할 수 없습니다.", @@ -1476,7 +1476,6 @@ "Enter_authentication_code": "인증 코드 입력", "Enter_Behaviour": "Enter 키 동작", "Enter_Behaviour_Description": "Enter 키가 메시지를 보내거나 줄 바꿈을하면 변경됩니다.", - "Enter_E2E_password_to_decode_your_key": "키를 복호화할 E2E 비밀번호를 입력하세요.", "Enter_name_here": "여기에 이름을 입력하세요.", "Enter_Normal": "일반 모드 (Enter 키와 함께 전송)", "Enter_to": "입력:", @@ -1671,7 +1670,11 @@ "Favorites": "즐겨찾기", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "이 기능은 '방문자 동선 내역을 메시지로 전송'을 사용하도록 설정되어 있습니다.", "Features_Enabled": "기능 활성화", + "Federation_Domain": "도메인", + "Federation_Public_key": "공개 키", + "Federation_Discovery_method": "Method 발견", "Federation_Dashboard": "Federation 대시 보드", + "Federation_Protocol": "프로토콜", "FEDERATION_Discovery_Method": "Method 발견", "FEDERATION_Discovery_Method_Description": "DNS 레코드에서 허브 또는 SRV 및 TXT 항목을 사용할 수 있습니다.", "FEDERATION_Domain": "도메인", @@ -1905,8 +1908,6 @@ "How_responsive_was_the_chat_agent": "상담사의 대응은 어땠습니까?", "How_satisfied_were_you_with_this_chat": "상담에 만족하셨나요?", "How_to_handle_open_sessions_when_agent_goes_offline": "상담사가 오프라인 상태 일 때 열린 세션을 처리하는 방법", - "I_ll_do_it_later": "나중에 할거야.", - "I_saved_my_password_close_this_message": "비밀번호를 저장했습니다. 이 메시지를 닫습니다.", "Idle_Time_Limit": "유휴 시간 제한", "Idle_Time_Limit_Description": "상태가 사라질 때까지의 시간. 값은 초 단위 여야합니다.", "if_they_are_from": "(그들이 %s 출신 인 경우)", @@ -3296,7 +3297,6 @@ "Save_Mobile_Bandwidth": "모바일 대역폭 저장", "Save_to_enable_this_action": "이 작업을 활성화 합니다.", "Save_To_Webdav": "WebDAV에 저장", - "Save_your_encryption_password": "암호화 비밀번호 저장", "save-others-livechat-room-info": "다른 사용자의 실시간상담 대화방 정보 저장", "save-others-livechat-room-info_description": "다른 실시간상담 대화방의 정보를 저장할 수있는 권한", "Saved": "저장됨", @@ -3401,6 +3401,7 @@ "Setup_Wizard": "설치 마법사", "Setup_Wizard_Info": "첫번째 관리자를 설정하고, 조직을 구성하고, 무료 푸시 알림 등을 받기 위해 서버를 등록하는 과정을 안내해드립니다.", "Share_Location_Title": "위치 공유", + "New_CannedResponse": "예상 답변", "Shared_Location": "공유된 위치", "Shared_Secret": " Secret 공유", "Shortcut": "바로가기", diff --git a/packages/rocketchat-i18n/i18n/ku.i18n.json b/packages/rocketchat-i18n/i18n/ku.i18n.json index 324243bc5232..37f84c028ea7 100644 --- a/packages/rocketchat-i18n/i18n/ku.i18n.json +++ b/packages/rocketchat-i18n/i18n/ku.i18n.json @@ -1129,6 +1129,7 @@ "Favorites": "دڵخوازەکان", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "Ev taybetmendî girêdayî \"Peyama Navnîşa Navnîşa Navnîşa Peyama Navnîşa Peyamê bişîne\" li ser vekirî ye.", "Features_Enabled": "Dengûbas çalake", + "Federation_Domain": "Domain", "FEDERATION_Domain": "Domain", "FEDERATION_Status": "Cî", "Field": "Erd", diff --git a/packages/rocketchat-i18n/i18n/lo.i18n.json b/packages/rocketchat-i18n/i18n/lo.i18n.json index 89f89e3dfe32..753ef0a4524b 100644 --- a/packages/rocketchat-i18n/i18n/lo.i18n.json +++ b/packages/rocketchat-i18n/i18n/lo.i18n.json @@ -426,8 +426,8 @@ "cache_cleared": "Cache cleared", "Cancel": "ຍົກເລີກການ", "Cancel_message_input": "ຍົກເລີກການ", - "Canned_Response_Removed": "ຮູບມີການຕອບສະໜອງຖືກລືບອອກ", "Canned Responses": "ຮູບມີການຕອບສະໜອງ", + "Canned_Response_Removed": "ຮູບມີການຕອບສະໜອງຖືກລືບອອກ", "Canned_Responses_Enable": "ເປີດໃຊ້ງານຮູບມີການຕອບສະໜອງ", "Cannot_invite_users_to_direct_rooms": "ບໍ່ສາມາດເຊີນຜູ້ໃຊ້ຫ້ອງພັກ", "Cannot_open_conversation_with_yourself": "ບໍ່ສາມາດສົ່ງຂໍ້ຄວາມໂດຍກົງກັບຕົວທ່ານເອງ", @@ -1165,6 +1165,7 @@ "Favorites": "Favorites", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "ຄຸນນະສົມບັດນີ້ແມ່ນຂື້ນກັບ \"ສົ່ງປະຫວັດຂອງການສົນທະນາຜູ້ເຂົ້າຊົມເປັນຂໍ້ຄວາມ\" ທີ່ຕ້ອງການ.", "Features_Enabled": "ຄຸນນະສົມບັດເປີດໃຊ້ວຽກ", + "Federation_Domain": "ໂດເມນ", "FEDERATION_Domain": "ໂດເມນ", "FEDERATION_Status": "ສະຖານະພາບ", "Field": "ພາກສະຫນາມ", diff --git a/packages/rocketchat-i18n/i18n/lt.i18n.json b/packages/rocketchat-i18n/i18n/lt.i18n.json index 061638e240e7..aa598566a719 100644 --- a/packages/rocketchat-i18n/i18n/lt.i18n.json +++ b/packages/rocketchat-i18n/i18n/lt.i18n.json @@ -1134,6 +1134,7 @@ "Favorites": "Pasirinkimai", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "Ši funkcija priklauso nuo \"Siųskite lankytojo naršymo istoriją kaip pranešimą\", kad būtų įjungta.", "Features_Enabled": "Įranga įjungta", + "Federation_Domain": "Domenas", "FEDERATION_Domain": "Domenas", "FEDERATION_Status": "Statusas", "Field": "Laukas", diff --git a/packages/rocketchat-i18n/i18n/lv.i18n.json b/packages/rocketchat-i18n/i18n/lv.i18n.json index c9ea86324a7e..9ad4234a4d5e 100644 --- a/packages/rocketchat-i18n/i18n/lv.i18n.json +++ b/packages/rocketchat-i18n/i18n/lv.i18n.json @@ -418,8 +418,8 @@ "cache_cleared": "Kešatmiņa iztīrīta", "Cancel": "Atcelt", "Cancel_message_input": "Atcelt", - "Canned_Response_Removed": "Konteinerotās atbildes noņemtas", "Canned Responses": "Konteinerotās atbildes", + "Canned_Response_Removed": "Konteinerotās atbildes noņemtas", "Canned_Responses_Enable": "Iespējot konteinerotās atbildes", "Cannot_invite_users_to_direct_rooms": "Nevar uzaicināt lietotājus uz tiešajām istabām", "Cannot_open_conversation_with_yourself": "Nevar nosūtīt ziņojumu sev", @@ -1144,6 +1144,7 @@ "Favorites": "Izlase", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "Šī funkcija ir atkarīga no tā, vai ir jāiespējota \"Nosūtīt apmeklētāju navigācijas vēsturi kā ziņojumu\".", "Features_Enabled": "Iespējas ir aktivizētas", + "Federation_Domain": "Domēns", "FEDERATION_Domain": "Domēns", "FEDERATION_Status": "Stāvoklis", "Field": "Lauks", diff --git a/packages/rocketchat-i18n/i18n/mn.i18n.json b/packages/rocketchat-i18n/i18n/mn.i18n.json index afada8f5300c..013da4054a95 100644 --- a/packages/rocketchat-i18n/i18n/mn.i18n.json +++ b/packages/rocketchat-i18n/i18n/mn.i18n.json @@ -1129,6 +1129,7 @@ "Favorites": "Дуртай", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "Энэ боломж нь идэвхжүүлсэн \"Visitor Navigation History зурвас байдлаар илгээх\" хамаарна.", "Features_Enabled": "Идэвхжүүлсэн онцлогууд", + "Federation_Domain": "Домэйн", "FEDERATION_Domain": "Домэйн", "FEDERATION_Status": "Статус", "Field": "Талбар", diff --git a/packages/rocketchat-i18n/i18n/ms-MY.i18n.json b/packages/rocketchat-i18n/i18n/ms-MY.i18n.json index 59457bcc8b97..53d783e6352b 100644 --- a/packages/rocketchat-i18n/i18n/ms-MY.i18n.json +++ b/packages/rocketchat-i18n/i18n/ms-MY.i18n.json @@ -1129,6 +1129,7 @@ "Favorites": "Kegemaran", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "Ciri ini bergantung kepada \"Menghantar Sejarah Navigasi Pelawat sebagai Mesej\" untuk didayakan.", "Features_Enabled": "ciri-ciri Didayakan", + "Federation_Domain": "domain", "FEDERATION_Domain": "domain", "FEDERATION_Status": "Status", "Field": "Field", diff --git a/packages/rocketchat-i18n/i18n/nl.i18n.json b/packages/rocketchat-i18n/i18n/nl.i18n.json index 87bb75f8e751..8c1902a9bd78 100644 --- a/packages/rocketchat-i18n/i18n/nl.i18n.json +++ b/packages/rocketchat-i18n/i18n/nl.i18n.json @@ -463,6 +463,11 @@ "Apps_License_Message_publicKey": "Er is een fout opgetreden bij het decoderen van de licentie. Synchroniseer uw werkruimte in de connectiviteitsdiensten en probeer het opnieuw", "Apps_License_Message_renewal": "Licentie is verlopen en moet worden vernieuwd", "Apps_License_Message_seats": "Licentie heeft niet genoeg zitplaatsen om tegemoet te komen aan het huidige aantal actieve gebruikers. Gelieve het aantal zitplaatsen te verhogen", + "Apps_Logs_TTL": "Aantal dagen dat logs van apps worden opgeslagen", + "Apps_Logs_TTL_7days": "7 dagen", + "Apps_Logs_TTL_14days": "14 dagen", + "Apps_Logs_TTL_30days": "30 dagen", + "Apps_Logs_TTL_Alert": "Afhankelijk van de grootte van de verzameling van logboeken, kan het wijzigen van deze instelling enige traagheid veroorzaken", "Apps_Marketplace_Deactivate_App_Prompt": "Wil je deze app echt uitschakelen?", "Apps_Marketplace_Login_Required_Description": "Als u apps van de Rocket.Chat Marketplace wilt aankopen, moet u uw werkruimte registreren en inloggen.", "Apps_Marketplace_Login_Required_Title": "Marketplace-aanmelding vereist", @@ -525,6 +530,7 @@ "are_also_typing": "zijn ook aan het typen", "are_typing": "zijn aan het typen", "Are_you_sure": "Weet je het zeker?", + "Are_you_sure_you_want_to_clear_all_unread_messages": "Weet je zeker dat je alle ongelezen berichten wilt wissen?", "Are_you_sure_you_want_to_close_this_chat": "Weet je zeker dat je deze chat wilt sluiten?", "Are_you_sure_you_want_to_delete_this_record": "Weet u zeker dat u dit record wilt verwijderen?", "Are_you_sure_you_want_to_delete_your_account": "Weet je zeker dat je je account wilt verwijderen?", @@ -695,9 +701,15 @@ "Cancel": "Annuleren", "Cancel_message_input": "Annuleren", "Canceled": "Geannuleerd", + "Canned Responses": "Standaardantwoorden", + "Canned_Response_Created": "Standaardantwoord gemaakt", + "Canned_Response_Updated": "Standaardantwoord bijgewerkt", "Canned_Response_Delete_Warning": "Het verwijderen van een standaardantwoord kan niet ongedaan worden gemaakt.", "Canned_Response_Removed": "Standaardantwoord verwijderd", - "Canned Responses": "Standaardantwoorden", + "Canned_Response_Sharing_Department_Description": "Iedereen in de geselecteerde afdeling heeft toegang tot dit standaardantwoord", + "Canned_Response_Sharing_Private_Description": "Alleen jij en Omnichannel-managers hebben toegang tot dit standaardantwoord", + "Canned_Response_Sharing_Public_Description": "Iedereen heeft toegang tot dit standaardantwoord", + "Create_your_First_Canned_Response": "Creëer uw eerste standaardantwoord", "Canned_Responses_Enable": "Schakel standaardantwoorden in", "Cannot_invite_users_to_direct_rooms": "Kan geen gebruikers in directe kamers uitnodigen", "Cannot_open_conversation_with_yourself": "U kunt geen directe berichten naar uzelf sturen", @@ -921,6 +933,8 @@ "Compact": "Compact", "Condensed": "Gecondenseerd", "Condition": "Voorwaarde", + "Convert_to_channel": "Converteren naar kanaal", + "Converting_team_to_channel": "Team converteren naar kanaal", "Commit_details": "Commit details", "Completed": "Voltooid", "Computer": "Computer", @@ -1216,6 +1230,7 @@ "Country_Zimbabwe": "Zimbabwe", "Cozy": "Knus", "Create": "Aanmaken", + "Create_Canned_Response": "Standaardantwoord maken", "Create_channel": "Maak een kanaal", "Create_A_New_Channel": "Maak een nieuw kanaal", "Create_new": "Maak nieuw", @@ -1427,6 +1442,7 @@ "Display_setting_permissions": "Toestemmingen weergeven om instellingen te wijzigen", "Display_unread_counter": "Aantal ongelezen berichten weergeven", "Displays_action_text": "Geeft actietekst weer", + "Do_It_Later": "Doe het later", "Do_not_display_unread_counter": "Toon geen teller van dit kanaal", "Do_not_provide_this_code_to_anyone": "Geef deze code aan niemand.", "Do_Nothing": "Niets doen", @@ -1476,6 +1492,7 @@ "ECDH_Enabled": "Versleuteling van de tweede laag inschakelen voor gegevenstransport", "Edit": "Wijzig", "Edit_Business_Hour": "Bewerk kantooruur", + "Edit_Canned_Response": "Standaardantwoord wijzigen", "Edit_Canned_Responses": "Bewerk standaardantwoorden", "Edit_Custom_Field": "Aangepast veld bewerken", "Edit_Department": "Afdeling bewerken", @@ -1517,6 +1534,7 @@ "edited": "bewerkt", "Editing_room": "Kamer bewerken", "Editing_user": "Gebruiker bewerken", + "Editor": "Editor", "Education": "Onderwijs", "Email": "E-mail", "Email_address_to_send_offline_messages": "E-mailadres om offline berichten te verzenden", @@ -1588,7 +1606,7 @@ "Enter_authentication_code": "Voer de authenticatiecode in", "Enter_Behaviour": "Enter-toets gedrag", "Enter_Behaviour_Description": "Dit verandert of de Enter-toets een bericht verzendt of de cursor naar de volgende regel verplaatst", - "Enter_E2E_password_to_decode_your_key": "Voer het E2E-wachtwoord in om uw sleutel te decoderen", + "Enter_E2E_password": "Voer het E2E-wachtwoord in", "Enter_name_here": "Vul hier de naam in", "Enter_Normal": "Normale modus (verzenden met Enter)", "Enter_to": "Enter om", @@ -1803,7 +1821,43 @@ "Features": "Functies", "Features_Enabled": "Ingeschakelde functies", "Feature_Disabled": "Functie uitgeschakeld", + "Federation": "Federatie", + "Federation_Adding_to_your_server": "Federatie toevoegen aan uw server", + "Federation_Inviting_users_from_another_server": "Gebruikers van een andere server uitnodigen", + "Federation_Search_users_you_want_to_connect": "Zoek de gebruiker die u wilt verbinden met een combinatie van een gebruikersnaam en een domein of een e-mailadres, zoals:", + "Federation_Username": "Gebruikersnaam: vriendsgebruikersnaam@anderdomein.com", + "Federation_Email": "E-mailadres: joseph@remotedomein.com", + "Federation_You_will_invite_users_without_login_access": "Je nodig ze uit op jouw server zonder inlogtoegang. Jij en alle anderen op jouw server kunnen ook met hen chatten.", + "Federation_Invite_User": "Gebruiker uitnodigen", + "Federation_Invite_Users_To_Private_Rooms": "Vanaf nu kunt u federatieve gebruikers alleen uitnodigen voor privéruimten of discussies.", + "Federation_Channels_Will_Be_Replicated": "Die kanalen worden gerepliceerd naar de externe server, zonder de berichtgeschiedenis.", + "Federation_Adding_users_from_another_server": "Gebruiker toevoegen vanaf een andere server", + "Federation_Changes_needed": "Wijzigingen die nodig zijn op uw server zijn de domeinnaam, target en poort.", + "Federation_Configure_DNS": "DNS configureren", + "Federation_Domain": "Domein", + "Federation_Domain_details": "Voeg de domeinnaam toe waaraan deze server moet worden gekoppeld.", + "Federation_Enable": "Federatie inschakelen", + "Federation_Fix_now": "Nu repareren!", + "Federation_SRV_no_support": "Als uw DNS-provider geen SRV-records met _http of _https ondersteunt", + "Federation_SRV_no_support_details": "Sommige DNS-providers staan het instellen van _https of _http op SRV-records niet toe, voor deze gevallen hebben we ondersteuning met behulp van onze oude methode voor DNS-records resolutie.", + "Federation_Must_add_records": "Je moet de volgende DNS-records op jouw server toevoegen:", + "Federation_SRV_records_200": "SRV-record (2.0.0 of nieuwer)", + "Federation_Public_key_TXT_record": "Public Key TXT-record", + "Federation_Protocol_TXT_record": "Protocol TXT-record", + "Federation_Legacy_support": "Oudere ondersteuning", + "Federation_HTTP_instead_HTTPS": "Als je het HTTP-protocol gebruikt in plaats van HTTPS", + "Federation_HTTP_instead_HTTPS_details": "We raden aan om HTTPS te gebruiken voor alle soorten communicatie, maar soms is dat niet mogelijk. Vervang indien nodig in het SRV DNS-record: het protocol: _http de poort: 80", + "Federation_DNS_info_update": "Deze informatie wordt elke minuut bijgewerkt", + "Federation_Adding_Federated_Users": "Federatieve gebruikers toevoegen", + "Federation_Guide_adding_users": "We begeleiden u bij het toevoegen van jouw eerste federatieve gebruiker.", + "Federation_Is_working_correctly": "Federatie-integratie werkt goed.", + "Federation_Public_key": "Publieke sleutel", + "Federation_Public_key_details": "Dit is de sleutel die je moet delen met jouw collega's. Waar is het voor?", + "Federation_Discovery_method": "Ontdekkingsmethode", + "Federation_Discovery_method_details": "Je kunt de hub of een DNS-record (SRV en een TXT-invoer) gebruiken. Lees meer", "Federation_Dashboard": "Federatiedashboard", + "Federation_Protocol": "Protocol", + "Federation_Protocol_details": "We raden het gebruik van HTTP alleen aan voor interne, zeer specifieke gevallen.", "FEDERATION_Discovery_Method": "Ontdekkingsmethode", "FEDERATION_Discovery_Method_Description": "U kunt de hub of een SRV en een TXT-vermelding op uw DNS-records gebruiken.", "FEDERATION_Domain": "Domein", @@ -1908,6 +1962,7 @@ "Filters": "Filters", "Filters_applied": "Filters toegepast", "Financial_Services": "Financiële diensten", + "Finish": "Afwerken", "Finish_Registration": "Voltooi de registratie", "First_Channel_After_Login": "Eerste kanaal na inloggen", "First_response_time": "Eerste reactietijd", @@ -2046,8 +2101,7 @@ "How_responsive_was_the_chat_agent": "Hoe responsief was de chatagent?", "How_satisfied_were_you_with_this_chat": "Hoe tevreden was je met deze chat?", "How_to_handle_open_sessions_when_agent_goes_offline": "Hoe u open sessies moet afhandelen wanneer agent offline gaat", - "I_ll_do_it_later": "Ik doe het later", - "I_saved_my_password_close_this_message": "Ik heb mijn wachtwoord opgeslagen, sluit dit bericht", + "I_Saved_My_Password": "Ik heb mijn wachtwoord opgeslagen", "Idle_Time_Limit": "Tijdslimiet voor inactiviteit", "Idle_Time_Limit_Description": "Tijdsduur totdat status verandert in afwezig. Waarde moet in seconden zijn.", "if_they_are_from": "(als ze van %s zijn)", @@ -2159,6 +2213,7 @@ "Instructions": "Instructies", "Instructions_to_your_visitor_fill_the_form_to_send_a_message": "Instructies voor uw bezoeker vul het formulier in om een bericht te verzenden", "Insert_Contact_Name": "Voer de naam van het contact in", + "Insert_Placeholder": "Placeholder invoeren", "Insurance": "Verzekering", "Integration_added": "Integratie is toegevoegd", "Integration_Advanced_Settings": "Geavanceerde instellingen", @@ -2214,6 +2269,7 @@ "Invalid_Department": "Ongeldige afdeling", "Invalid_email": "Het ingevoerde e-mailadres is ongeldig", "Invalid_Export_File": "Het geüploade bestand is geen geldig %s exportbestand.", + "Invalid_field": "Het veld mag niet leeg zijn", "Invalid_Import_File_Type": "Ongeldige importbestandstype.", "Invalid_name": "De naam mag niet leeg zijn", "Invalid_notification_setting_s": "Ongeldige meldingsinstelling: %s", @@ -2238,6 +2294,7 @@ "Invite_user_to_join_channel_all_from": "Nodig alle gebruikers van [#kanaal] uit om lid te worden van dit kanaal", "Invite_user_to_join_channel_all_to": "Alle gebruikers van dit kanaal uitnodigen om lid te worden van [#channel]", "Invite_Users": "Gebruikers uitnodigen", + "IP": "IP", "IRC_Channel_Join": "Uitvoer van het JOIN-commando.", "IRC_Channel_Leave": "Uitvoer van het PART-commando.", "IRC_Channel_Users": "Uitvoer van het NAMES-commando.", @@ -2599,6 +2656,7 @@ "Local_Domains": "Lokale domeinen", "Local_Password": "Lokaal wachtwoord", "Local_Time": "Lokale tijd", + "Local_Timezone": "Lokale tijdzone", "Local_Time_time": "Lokale tijd: __time__", "Localization": "Lokalisatie", "Location": "Locatie", @@ -2958,6 +3016,8 @@ "No": "Nee", "No_available_agents_to_transfer": "Geen beschikbare agenten om door te sturen", "No_Canned_Responses": "Geen standaardreacties", + "No_Canned_Responses_Yet": "Nog geen standaardantwoorden", + "No_Canned_Responses_Yet-description": "Gebruik standaardantwoorden om snel en consistente antwoorden te geven op veelgestelde vragen.", "No_channel_with_name_%s_was_found": "Geen kanaal met de naam \"%s\" gevonden!", "No_channels_in_team": "Geen kanalen in dit team", "No_channels_yet": "U maakt nog geen deel uit van een kanaal.", @@ -3006,6 +3066,7 @@ "Not_verified": "Niet geverifieerd", "Nothing": "Niets", "Nothing_found": "Niets gevonden", + "Notice_that_public_channels_will_be_public_and_visible_to_everyone": "Merk op dat openbare kanalen openbaar zijn en voor iedereen zichtbaar zijn.", "Notification_Desktop_Default_For": "Bureaubladmeldingen weergeven voor", "Notification_Desktop_Audio_Default_For": "Speel desktop audiomeldingen voor", "Notification_Mobile_Default_For": "Mobiele pushmeldingen voor", @@ -3212,6 +3273,7 @@ "Preparing_list_of_messages": "Lijst met berichten voorbereiden", "Preparing_list_of_users": "Lijst met gebruikers voorbereiden", "Presence": "Aanwezigheid", + "Preview": "Voorbeeld", "preview-c-room": "Voorbeeld van openbaar kanaal", "preview-c-room_description": "Toestemming om de inhoud van een openbaar kanaal te bekijken voordat je lid wordt", "Previous_month": "Vorige maand", @@ -3571,7 +3633,7 @@ "Save_Mobile_Bandwidth": "Bespaar mobiele bandbreedte", "Save_to_enable_this_action": "Opslaan om deze actie mogelijk te maken", "Save_To_Webdav": "Opslaan in WebDAV", - "Save_your_encryption_password": "Bewaar uw versleutelingswachtwoord", + "Save_Your_Encryption_Password": "Bewaar uw versleutelingswachtwoord", "save-others-livechat-room-info": "Bewaar andere omnichannel kamerinformatie", "save-others-livechat-room-info_description": "Toestemming om informatie uit andere omnichannel-kamers op te slaan", "Saved": "Opgeslagen", @@ -3616,6 +3678,7 @@ "Select_service_to_login": "Selecteer een dienst in te loggen om uw foto op te laden of upload er een rechtstreeks vanaf uw computer", "Select_tag": "Selecteer een tag", "Select_the_channels_you_want_the_user_to_be_removed_from": "Selecteer de kanalen waaruit u de gebruiker wilt verwijderen", + "Select_the_teams_channels_you_would_like_to_delete": "Selecteer de teamkanalen die je wilt verwijderen, de kanalen die u niet selecteert, zullen naar jouw werkruimte worden verplaatst.", "Select_user": "Selecteer gebruiker", "Select_users": "Selecteer gebruikers", "Selected_agents": "Geselecteerde agenten", @@ -3689,10 +3752,14 @@ "Setup_Wizard": "Installatiewizard", "Setup_Wizard_Info": "We zullen u helpen bij het instellen van uw eerste admin-gebruiker, het configureren van uw organisatie en het registreren van uw server om gratis pushmeldingen en meer te ontvangen.", "Share_Location_Title": "Deel locatie?", - "Canned_responses": "Standaardantwoorden", + "Canned_Responses": "Standaardantwoorden", + "New_CannedResponse": "Nieuwe standaardreactie", + "Edit_CannedResponse": "Standaardantwoord wijzigen", + "Sharing": "Delen", "Shared_Location": "Gedeelde locatie", "Shared_Secret": "Gedeeld geheim", "Shortcut": "Snelkoppeling", + "shortcut_name": "naam snelkoppeling", "Should_be_a_URL_of_an_image": "Moet een URL van een afbeelding zijn.", "Should_exists_a_user_with_this_username": "De gebruiker moet al bestaan.", "Show_agent_email": "E-mailadres van agent tonen", @@ -3894,6 +3961,7 @@ "Teams": "Teams", "Teams_about_the_channels": "En over de kanalen?", "Teams_channels_didnt_leave": "Je hebt de volgende kanalen niet geselecteerd, je verlaat ze dus niet:", + "Teams_channels_last_owner_delete_channel_warning": "Je bent de laatste eigenaar van dit kanaal. Zodra je een team in een kanaal hebt omgezet, wordt het kanaal naar de werkruimte verplaatst.", "Teams_channels_last_owner_leave_channel_warning": "Je bent de laatste eigenaar van dit kanaal. Zodra je het team verlaat, blijft het kanaal binnen het team, maar beheer je het van buitenaf.", "Teams_leaving_team": "Je verlaat dit team.", "Teams_channels": "De kanalen van het team", @@ -4215,6 +4283,7 @@ "URL_room_hash_description": "Aanbevolen om in te schakelen als de Jitsi-instantie geen verificatiemechanisme gebruikt.", "URL_room_prefix": "Voorvoegsel URL-kamer", "URL_room_suffix": "URL kamer achtervoegsel", + "Use": "Gebruiken", "Use_account_preference": "Gebruik accountvoorkeuren", "Use_Emojis": "Emojis gebruiken", "Use_Global_Settings": "Algemene instellingen gebruiken", @@ -4341,6 +4410,7 @@ "Users_TOTP_has_been_reset": "Het TOTP van de gebruiker is gereset", "Uses": "Toepassingen", "Uses_left": "Overblijvende toepassingen", + "UTC_Timezone": "UTC-tijdzone", "Utilities": "Nutsbedrijven", "UTF8_Names_Slugify": "UTF8-namen Slugify", "UTF8_Names_Validation": "UTF8-naamvalidatie", @@ -4514,6 +4584,7 @@ "yesterday": "gisteren", "Yesterday": "Gisteren", "You": "U", + "You_are_converting_team_to_channel": "Je converteert dit team naar een kanaal.", "you_are_in_preview_mode_of": "U bevindt zich in de previewmomdus van het kanaal #__room_name__", "you_are_in_preview_mode_of_incoming_livechat": "U bevindt zich in de preview-modus van deze chat", "You_are_logged_in_as": "Je bent ingelogd als", diff --git a/packages/rocketchat-i18n/i18n/no.i18n.json b/packages/rocketchat-i18n/i18n/no.i18n.json index 9d6a7a82cc75..c1355a55d3b6 100644 --- a/packages/rocketchat-i18n/i18n/no.i18n.json +++ b/packages/rocketchat-i18n/i18n/no.i18n.json @@ -1204,6 +1204,7 @@ "Favorites": "Favoritter", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "Denne funksjonen avhenger av \"Send besøkende navigasjonshistorikk som en melding\" for å være aktivert.", "Features_Enabled": "Funksjoner aktivert", + "Federation_Domain": "Domene", "FEDERATION_Domain": "Domene", "FEDERATION_Status": "Status", "Field": "Felt", diff --git a/packages/rocketchat-i18n/i18n/pl.i18n.json b/packages/rocketchat-i18n/i18n/pl.i18n.json index b434f52f2b7f..c3fb9cd9193d 100644 --- a/packages/rocketchat-i18n/i18n/pl.i18n.json +++ b/packages/rocketchat-i18n/i18n/pl.i18n.json @@ -694,9 +694,9 @@ "Cancel": "Anuluj", "Cancel_message_input": "Anuluj", "Canceled": "Anulowane", + "Canned Responses": "Predefiniowane odpowiedzi", "Canned_Response_Delete_Warning": "Usunięcie predefiniowanych odpowiedzi nie może być cofnięte.", "Canned_Response_Removed": "Predefiniowana odpowiedź usunięta", - "Canned Responses": "Predefiniowane odpowiedzi", "Canned_Responses_Enable": "Włącz predefiniowane odpowiedzi", "Cannot_invite_users_to_direct_rooms": "Nie możnesz zaprosić użytkowników do bezpośrednich pokoi", "Cannot_open_conversation_with_yourself": "Nie mogę skierować bezpośredniej wiadomości do siebie", @@ -1586,7 +1586,6 @@ "Enter_authentication_code": "Wprowadź kod uwierzytelnienia", "Enter_Behaviour": "Zachowanie po naciśnięciu Enter", "Enter_Behaviour_Description": "To się zmienia, jeśli klawisz Enter wyśle ​​wiadomość lub zrobi podział wiersza", - "Enter_E2E_password_to_decode_your_key": "Wprowadź hasło E2E, aby odszyfrować klucz", "Enter_name_here": "Wpisz nazwę tutaj", "Enter_Normal": "Tryb normalny (wysyłaj klawiszem Enter)", "Enter_to": "Naciśnij Enter: ", @@ -1800,7 +1799,11 @@ "Features": "Ficzery", "Features_Enabled": "Opis Włączone", "Feature_Disabled": "Ficzery wyłączone", + "Federation_Domain": "Domena", + "Federation_Public_key": "Klucz publiczny", + "Federation_Discovery_method": "Discovery Method", "Federation_Dashboard": "Federation Dashboard", + "Federation_Protocol": "Protokół", "FEDERATION_Discovery_Method": "Discovery Method", "FEDERATION_Discovery_Method_Description": "Możesz użyć hub lub SRV i TXT dla Twoich rekordów DNS", "FEDERATION_Domain": "Domena", @@ -2042,8 +2045,6 @@ "How_responsive_was_the_chat_agent": "Jak reaguje był agentem czat?", "How_satisfied_were_you_with_this_chat": "Jesteś zadowolony/a z naszej rozmowy?", "How_to_handle_open_sessions_when_agent_goes_offline": "Co robić z otwartymi sesjami gdy agent offline", - "I_ll_do_it_later": "Zrobię to później", - "I_saved_my_password_close_this_message": "Zapisałem moje hasło, zamknij tę wiadomość", "Idle_Time_Limit": "Limit czasu bezczynności", "Idle_Time_Limit_Description": "Okres czasu do zmiany statusu na niedostępny. Wartość musi być w sekundach.", "if_they_are_from": "(jeśli są z %s)", @@ -3564,7 +3565,6 @@ "Save_Mobile_Bandwidth": "Oszczędzaj przepustowość", "Save_to_enable_this_action": "Zapisz, aby włączyć tą akcję", "Save_To_Webdav": "Zapisz w WebDAV", - "Save_your_encryption_password": "Zapisz swoje hasło szyfrowania", "save-others-livechat-room-info": "Zapisz inne informacje o pokoju Livechat", "save-others-livechat-room-info_description": "Zezwolenie na zapisywanie informacji z innych kanałów na żywo", "Saved": "Zapisano", @@ -3682,7 +3682,8 @@ "Setup_Wizard": "Kreator konfiguracji", "Setup_Wizard_Info": "Poprowadzimy Cię przez konfigurowanie pierwszego administratora, konfigurowanie organizacji i rejestrowanie serwera, aby otrzymywać bezpłatne powiadomienia push i wiele więcej.", "Share_Location_Title": "Udostępnić lokalizację?", - "Canned_responses": "Canned responses", + "Canned_Responses": "Canned responses", + "New_CannedResponse": "Nowa predefiniowana odpowiedź", "Shared_Location": "Lokalizacja udostępniona", "Shared_Secret": "Wspóldzielony sekret", "Shortcut": "Skrót", diff --git a/packages/rocketchat-i18n/i18n/pt-BR.i18n.json b/packages/rocketchat-i18n/i18n/pt-BR.i18n.json index 2ad01cad4bfe..b388bd6eec74 100644 --- a/packages/rocketchat-i18n/i18n/pt-BR.i18n.json +++ b/packages/rocketchat-i18n/i18n/pt-BR.i18n.json @@ -780,6 +780,7 @@ "Community": "Comunidade", "Compact": "Compacto", "Condensed": "Condensado", + "Convert_to_channel": "Converter para um Canal", "Completed": "Completo", "Computer": "Computador", "Configure_Incoming_Mail_IMAP": "Configurar protocolo de entrada (IMAP)", @@ -1354,7 +1355,6 @@ "Enter_authentication_code": "Digite o código de autenticação", "Enter_Behaviour": "Comportamento da tecla Enter", "Enter_Behaviour_Description": "Isso muda se a tecla enter enviar uma mensagem ou fazer uma quebra de linha", - "Enter_E2E_password_to_decode_your_key": "Digite a senha E2E para decodificar sua chave", "Enter_name_here": "Insira o nome aqui", "Enter_Normal": "Modo normal (enviar com Enter)", "Enter_to": "Enter para", @@ -1529,6 +1529,10 @@ "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "Esse recurso depende de \"Enviar histórico de navegação do visitante como uma mensagem\" para ser ativado.", "Features_Enabled": "Funcionalidades habilitadas", "Feature_Disabled": "Funcionalidade desabilitada", + "Federation_Domain": "Domínio", + "Federation_Public_key": "Chave Publica", + "Federation_Discovery_method": "Método de Descoberta", + "Federation_Protocol": "Protocolo", "FEDERATION_Discovery_Method": "Método de Descoberta", "FEDERATION_Discovery_Method_Description": "Você pode usar o hub ou uma entrada SRV e TXT em seus registros DNS.", "FEDERATION_Domain": "Domínio", @@ -1731,8 +1735,6 @@ "How_responsive_was_the_chat_agent": "Quão responsivo foi o agente de bate-papo?", "How_satisfied_were_you_with_this_chat": "Ficou satisfeito com este bate-papo?", "How_to_handle_open_sessions_when_agent_goes_offline": "O que fazer com sessões abertas quando agente ficar offline", - "I_ll_do_it_later": "Eu vou fazer isso mais tarde", - "I_saved_my_password_close_this_message": "Eu salvei minha senha, feche esta mensagem", "Idle_Time_Limit": "Limite de tempo de inatividade", "Idle_Time_Limit_Description": "Período de tempo até que o status mude para longe. O valor precisa estar em segundos.", "if_they_are_from": "(se eles são de %s)", @@ -2927,7 +2929,6 @@ "Save_Mobile_Bandwidth": "Economizar Banda Móvel", "Save_to_enable_this_action": "Salvar para habilitar esta ação", "Save_To_Webdav": "Salvar para WebDAV", - "Save_your_encryption_password": "Salve sua senha de criptografia", "save-others-livechat-room-info": "Salve outras informações de sala de Omnichannel", "save-others-livechat-room-info_description": "Permissão para salvar informações de outros salas de Omnichannel", "Saved": "Salvo", @@ -3707,4 +3708,4 @@ "Your_question": "A sua pergunta", "Your_server_link": "O link do seu servidor", "Your_workspace_is_ready": "O seu espaço de trabalho está pronto a usar 🎉" -} +} \ No newline at end of file diff --git a/packages/rocketchat-i18n/i18n/pt.i18n.json b/packages/rocketchat-i18n/i18n/pt.i18n.json index d33b9aa6fd15..efffaf4132de 100644 --- a/packages/rocketchat-i18n/i18n/pt.i18n.json +++ b/packages/rocketchat-i18n/i18n/pt.i18n.json @@ -1205,7 +1205,6 @@ "Enter_authentication_code": "Introduzir código de autenticação", "Enter_Behaviour": "Comportamento da tecla Enter", "Enter_Behaviour_Description": "Isto muda se a tecla enter enviar uma mensagem ou fizer uma quebra de linha", - "Enter_E2E_password_to_decode_your_key": "Digite a senha E2E para decodificar sua chave", "Enter_name_here": "Insira o nome aqui", "Enter_Normal": "Modo normal (enviar com Enter)", "Enter_to": "Clique ( Enter )para", @@ -1351,7 +1350,11 @@ "Favorites": "Favoritos", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "Esse recurso depende de \"Enviar histórico de navegação do visitante como uma mensagem\" para ser activado.", "Features_Enabled": "Funcionalidades habilitadas", + "Federation_Domain": "Domínio", + "Federation_Public_key": "Chave Pública", + "Federation_Discovery_method": "Método de Descoberta", "Federation_Dashboard": "Painel de Federação", + "Federation_Protocol": "Protocolo", "FEDERATION_Discovery_Method": "Método de Descoberta", "FEDERATION_Discovery_Method_Description": "Pode usar o hub ou um SRV e uma entrada TXT nos seus registros DNS.", "FEDERATION_Domain": "Domínio", @@ -1540,8 +1543,6 @@ "How_responsive_was_the_chat_agent": "Quão responsivo foi o agente de chat?", "How_satisfied_were_you_with_this_chat": "Ficou satisfeito com este chat?", "How_to_handle_open_sessions_when_agent_goes_offline": "O que fazer com sessões abertas quando o utilizador ficar off-line", - "I_ll_do_it_later": "Eu vou fazer isso mais tarde", - "I_saved_my_password_close_this_message": "Eu salvei minha senha, feche esta mensagem", "Idle_Time_Limit": "Tempo limite de ausência", "Idle_Time_Limit_Description": "Período de tempo até que o status mude para longe. O valor precisa estar em segundos.", "if_they_are_from": "(se eles são de %s)", @@ -1610,7 +1611,6 @@ "Info": "Informações", "initials_avatar": "Avatar Inicial", "inline_code": "código em linha", - "Insert_Placeholder": "Inserir Substituto", "Install": "Instalar", "Install_Extension": "Instalar Extensão", "Install_FxOs": "Instale o Rocket.Chat no seu Firefox", @@ -1624,6 +1624,7 @@ "Instance_Record": "Registo de instância", "Instructions": "Instruções", "Instructions_to_your_visitor_fill_the_form_to_send_a_message": "Instruções para o visitante preencher o formulário e enviar uma mensagem", + "Insert_Placeholder": "Inserir Substituto", "Insurance": "Seguro", "Integration_added": "A integração foi adicionada", "Integration_Advanced_Settings": "Configurações avançadas", @@ -2580,7 +2581,6 @@ "Save_Mobile_Bandwidth": "Economizar Rede móvel", "Save_to_enable_this_action": "Salvar para habilitar esta acção", "Save_To_Webdav": "Salvar para WebDAV", - "Save_your_encryption_password": "Salve sua senha de criptografia", "save-others-livechat-room-info": "Salve outros serviços Livechat Room", "save-others-livechat-room-info_description": "Permissão para salvar informações de outros canais de Livechat", "Saved": "Guardado", diff --git a/packages/rocketchat-i18n/i18n/ro.i18n.json b/packages/rocketchat-i18n/i18n/ro.i18n.json index 72a5fe4c4b15..4a68c7e890da 100644 --- a/packages/rocketchat-i18n/i18n/ro.i18n.json +++ b/packages/rocketchat-i18n/i18n/ro.i18n.json @@ -1132,6 +1132,7 @@ "Favorites": "Favorite", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "Această funcție depinde de \"Trimiterea istoricului de navigare a vizitatorului ca mesaj\" pentru a fi activată.", "Features_Enabled": "caracteristici activat", + "Federation_Domain": "Domeniu", "FEDERATION_Domain": "Domeniu", "FEDERATION_Status": "Stare", "Field": "Camp", diff --git a/packages/rocketchat-i18n/i18n/ru.i18n.json b/packages/rocketchat-i18n/i18n/ru.i18n.json index 2dc30e72f3f2..fecf86733d2e 100644 --- a/packages/rocketchat-i18n/i18n/ru.i18n.json +++ b/packages/rocketchat-i18n/i18n/ru.i18n.json @@ -463,6 +463,11 @@ "Apps_License_Message_publicKey": "Произошла ошибка при попытке расшифровать лицензию. Пожалуйста, синхронизируйте рабочее пространство в службах подключения и повторите попытку", "Apps_License_Message_renewal": "Срок действия лицензии истек и ее необходимо продлить", "Apps_License_Message_seats": "Лицензия не имеет достаточного количества мест для размещения текущего количества активных пользователей. Пожалуйста, увеличьте количество мест", + "Apps_Logs_TTL": "Количество дней, в течение которых хранятся журналы приложений", + "Apps_Logs_TTL_7days": "7 дней", + "Apps_Logs_TTL_14days": "14 дней", + "Apps_Logs_TTL_30days": "30 дней", + "Apps_Logs_TTL_Alert": "В зависимости от размера коллекции журналов, изменение этого параметра может привести к замедлению работы в некоторые моменты времени", "Apps_Marketplace_Deactivate_App_Prompt": "Вы действительно хотите деактивировать это приложение?", "Apps_Marketplace_Login_Required_Description": "Покупка приложений на Rocket.Chat Marketplace требует регистрации вашего рабочего пространства и входа в систему.", "Apps_Marketplace_Login_Required_Title": "Требуется вход в Marketplace", @@ -694,9 +699,15 @@ "Cancel": "Отмена", "Cancel_message_input": "Отменить", "Canceled": "Отменен", + "Canned Responses": "Заготовленные ответы", + "Canned_Response_Created": "Заготовленный ответ создан", + "Canned_Response_Updated": "Заготовленный ответ обновлен", "Canned_Response_Delete_Warning": "Удаление заготовленного ответа нельзя отменить.", "Canned_Response_Removed": "Заготовленный ответ удален", - "Canned Responses": "Заготовленные ответы", + "Canned_Response_Sharing_Department_Description": "Любой сотрудник выбранного отдела может получить доступ к этому заготовленному ответу", + "Canned_Response_Sharing_Private_Description": "Только вы и менеджеры Omnichannel могут получить доступ к этому заготовленному ответу", + "Canned_Response_Sharing_Public_Description": "Любой может получить доступ к этому заготовленному ответу", + "Create_your_First_Canned_Response": "Создайте свой первый заготовленный ответ", "Canned_Responses_Enable": "Включить заготовленные ответы", "Cannot_invite_users_to_direct_rooms": "Нельзя приглашать пользователей в личную переписку", "Cannot_open_conversation_with_yourself": "Нельзя создавать чат с самим собой", @@ -920,6 +931,8 @@ "Compact": "Компактный", "Condensed": "Компактный", "Condition": "Состояние", + "Convert_to_channel": "Конвертировать в чат", + "Converting_team_to_channel": "Преобразование Команды в чат", "Commit_details": "Подробности", "Completed": "Завершен", "Computer": "Компьютер", @@ -1215,6 +1228,7 @@ "Country_Zimbabwe": "Зимбабве", "Cozy": "Удобный", "Create": "Создать", + "Create_Canned_Response": "Создать заготовленный ответ", "Create_channel": "Создать Channel", "Create_A_New_Channel": "Создать новый канал ", "Create_new": "Создать", @@ -1426,6 +1440,7 @@ "Display_setting_permissions": "Отображать права на изменение настроек", "Display_unread_counter": "Показывать количество непрочитанных сообщений", "Displays_action_text": "Показать текст действия", + "Do_It_Later": "Сделать это позже", "Do_not_display_unread_counter": "Скрыть показ непрочитанных сообщений", "Do_not_provide_this_code_to_anyone": "Не сообщайте этот код никому.", "Do_Nothing": "Ничего не делать", @@ -1475,6 +1490,7 @@ "ECDH_Enabled": "Включить шифрование второго уровня для передачи данных", "Edit": "Редактировать", "Edit_Business_Hour": "Редактировать рабочие часы", + "Edit_Canned_Response": "Редактировать заготовленный ответ", "Edit_Canned_Responses": "Править заготовленные ответы", "Edit_Custom_Field": "Редактировать поле", "Edit_Department": "Редактировать отдел", @@ -1516,6 +1532,7 @@ "edited": "отредактировано", "Editing_room": "Редактирование комнаты", "Editing_user": "Редактирование пользователя", + "Editor": "Редактор", "Education": "Образование", "Email": "Электронная почта", "Email_address_to_send_offline_messages": "Адрес Email для отправки сообщения в режиме офлайн", @@ -1555,6 +1572,7 @@ "Enable": "Включить", "Enable_Auto_Away": "Установка статуса \"Нет на месте\"", "Enable_CSP": "Включить политику безопасности содержимого (Content-Security-Policy)", + "Enable_CSP_Description": "Не отключайте эту опцию, если только у вас не кастомная сборка и нет проблем из-за inline-скриптов", "Enable_Desktop_Notifications": "Включить уведомления на компьютере", "Enable_inquiry_fetch_by_stream": "Включить сбор данных по запросу с сервера с помощью потока", "Enable_omnichannel_auto_close_abandoned_rooms": "Включить автоматическое закрытие чатов, покинутых посетителями", @@ -1586,7 +1604,7 @@ "Enter_authentication_code": "Введите код аутентификации", "Enter_Behaviour": "Поведение клавиши Enter", "Enter_Behaviour_Description": "Эта настройка определяет, будет Enter отправлять сообщение или добавлять новую строку", - "Enter_E2E_password_to_decode_your_key": "Введите пароль E2E для декодирования вашего ключа", + "Enter_E2E_password": "Введите пароль E2E", "Enter_name_here": "Введите название", "Enter_Normal": "Обычный режим (отправка по Enter)", "Enter_to": "Войти в", @@ -1614,6 +1632,7 @@ "error-avatar-invalid-url": "Неверный URL аватара: __url__", "error-avatar-url-handling": "Ошибка установки аватара из URL (__url__) для __username__", "error-business-hours-are-closed": "Рабочие часы окончены", + "error-blocked-username": "__field__ запрещен к использованию!", "error-canned-response-not-found": "Заготовленный ответ не найден", "error-cannot-delete-app-user": "Удаление пользователя приложения не разрешено, удалите соответствующее приложение, чтобы удалить его.", "error-cant-invite-for-direct-room": "Нельзя приглашать пользователей в личные сообщения", @@ -1800,7 +1819,37 @@ "Features": "Доступные функции", "Features_Enabled": "Доступные функции", "Feature_Disabled": "Функция отключена", + "Federation": "Федерация", + "Federation_Adding_to_your_server": "Добавление федерации на ваш сервер", + "Federation_Inviting_users_from_another_server": "Приглашение пользователей с другого сервера", + "Federation_Search_users_you_want_to_connect": "Найдите пользователя, к которому вы хотите подключиться, используя комбинацию имени пользователя и домена или адреса электронной почты, например:", + "Federation_Username": "Имя пользователя: myfriendsusername@anotherdomain.com", + "Federation_Email": "Адрес электронной почты: joseph@remotedomain.com", + "Federation_You_will_invite_users_without_login_access": "Вы будете приглашать их на свой сервер без доступа к логину. Кроме того, вы и все остальные на вашем сервере смогут общаться с ними в чате.", + "Federation_Invite_User": "Пригласить пользователя", + "Federation_Invite_Users_To_Private_Rooms": "С этого момента вы можете приглашать федеративных пользователей только в приватные чаты или обсуждения.", + "Federation_Channels_Will_Be_Replicated": "Эти каналы будут реплицированы на удаленный сервер без истории сообщений.", + "Federation_Adding_users_from_another_server": "Добавление пользователей с другого сервера", + "Federation_Changes_needed": "На вашем сервере необходимо изменить доменное имя, цель и порт.", + "Federation_Configure_DNS": "Настройка DNS", + "Federation_Domain": "Домен", + "Federation_Domain_details": "Добавьте имя домена, с которым должен быть связан этот сервер.", + "Federation_Enable": "Включить федерацию", + "Federation_Fix_now": "Исправить сейчас!", + "Federation_SRV_no_support": "Если ваш DNS-провайдер не поддерживает SRV-записи с _http или _https", + "Federation_SRV_no_support_details": "Некоторые DNS-провайдеры не разрешают устанавливать _https или _http в SRV-записях, поэтому мы поддерживаем эти случаи, используя наш старый метод разрешения DNS-записей.", + "Federation_Must_add_records": "Вы должны добавить следующие DNS записи на вашем сервере:", + "Federation_SRV_records_200": "SRV-запись (2.0.0 или новее)", + "Federation_Adding_Federated_Users": "Добавление федеративных пользователей", + "Federation_Guide_adding_users": "Мы расскажем вам, как добавить первого федеративного пользователя.", + "Federation_Is_working_correctly": "Интеграция федерации работает правильно.", + "Federation_Public_key": "Открытый ключ", + "Federation_Public_key_details": "Это ключ, которым вы должны поделиться со своими пирами. Для чего он нужен?", + "Federation_Discovery_method": "Метод открытия", + "Federation_Discovery_method_details": "Вы можете использовать хаб или запись DNS (SRV и запись TXT). Подробнее", "Federation_Dashboard": "Панель инструментов Федерации", + "Federation_Protocol": "Протокол", + "Federation_Protocol_details": "Мы рекомендуем использовать HTTP только во внутренних, очень специфических случаях.", "FEDERATION_Discovery_Method": "Метод открытия", "FEDERATION_Discovery_Method_Description": "Вы можете использовать хаб или SRV и TXT в записях DNS.", "FEDERATION_Domain": "Домен", @@ -1905,6 +1954,7 @@ "Filters": "Фильтры", "Filters_applied": "Примененные фильтры", "Financial_Services": "Финансовые услуги", + "Finish": "Завершить", "Finish_Registration": "Завершение регистрации", "First_Channel_After_Login": "Открыть канал после авторизации", "First_response_time": "Время первого ответа", @@ -2043,8 +2093,7 @@ "How_responsive_was_the_chat_agent": "Насколько отзывчив был представитель ?", "How_satisfied_were_you_with_this_chat": "Насколько вы удовлетворены использованием этого чата?", "How_to_handle_open_sessions_when_agent_goes_offline": "Как долго держать сессию открытой после того как представитель отключился ", - "I_ll_do_it_later": "I'll do it later", - "I_saved_my_password_close_this_message": "Я сохранил пароль, закройте это сообщение", + "I_Saved_My_Password": "Я сохранил свой пароль", "Idle_Time_Limit": "Предел времени ожидания", "Idle_Time_Limit_Description": "Период времени, пока статус не изменится. Значение должно быть в секундах.", "if_they_are_from": "(если они из %s)", @@ -2156,6 +2205,7 @@ "Instructions": "Инструкции", "Instructions_to_your_visitor_fill_the_form_to_send_a_message": "Инструкции для вашего посетителя заполнить форму, чтобы отправить сообщение", "Insert_Contact_Name": "Введите имя контакта", + "Insert_Placeholder": "Вставить заполнитель", "Insurance": "Страхование", "Integration_added": "Интеграция была добавлена", "Integration_Advanced_Settings": "Дополнительные настройки", @@ -2211,6 +2261,7 @@ "Invalid_Department": "Некорректный отдел", "Invalid_email": "Введен некорректный адрес электронной почты", "Invalid_Export_File": "Загруженный файл не является верным экспортным файлом %s.", + "Invalid_field": "Поле не должно быть пустым", "Invalid_Import_File_Type": "Недействительный тип импортируемого файла.", "Invalid_name": "Имя не может быть пустым", "Invalid_notification_setting_s": "Неверная настройка уведомлений: %s", @@ -2235,6 +2286,7 @@ "Invite_user_to_join_channel_all_from": "Пригласить всех пользователей из [#channel] присоединиться к этому каналу", "Invite_user_to_join_channel_all_to": "Пригласить всех пользователей этого канала присоединиться к [#channel]", "Invite_Users": "Пригласить пользователей", + "IP": "IP адрес", "IRC_Channel_Join": "Вывод команды JOIN", "IRC_Channel_Leave": "Вывод команды PART", "IRC_Channel_Users": "Вывод команды NAMES", @@ -2595,6 +2647,7 @@ "Local_Domains": "Локальные домены", "Local_Password": "Локальный пароль", "Local_Time": "Местное время", + "Local_Timezone": "Местный часовой пояс", "Local_Time_time": "Местное время: __time__", "Localization": "Язык", "Location": "Местоположение", @@ -2954,6 +3007,8 @@ "No": "Нет", "No_available_agents_to_transfer": "Нет доступных сотрудников для передачи", "No_Canned_Responses": "Нет заготовленных ответов", + "No_Canned_Responses_Yet": "Пока нет заготовленных ответов", + "No_Canned_Responses_Yet-description": "Используйте заготовленные ответы для предоставления быстрых и последовательных ответов на часто задаваемые вопросы.", "No_channel_with_name_%s_was_found": "Канал с названием \"%s\" не найден!", "No_channels_in_team": "У этой Команды нет чатов", "No_channels_yet": "Вы пока не участвуете ни в одном канале.", @@ -3002,6 +3057,7 @@ "Not_verified": "Не подтверждён", "Nothing": "Ничего", "Nothing_found": "Ничего не найдено", + "Notice_that_public_channels_will_be_public_and_visible_to_everyone": "Обратите внимание, что публичные чаты будут публичными и видимыми для всех.", "Notification_Desktop_Default_For": "Отображать уведомления для", "Notification_Desktop_Audio_Default_For": "Воспроизведение аудио уведомлений на рабочем столе для", "Notification_Mobile_Default_For": "Включить push уведомления для", @@ -3208,6 +3264,7 @@ "Preparing_list_of_messages": "Подготовка списка сообщений", "Preparing_list_of_users": "Подготовка списка пользователей", "Presence": "Присутствие", + "Preview": "Предварительный просмотр", "preview-c-room": "Предварительный просмотр публичного канала", "preview-c-room_description": "Разрешение на просмотр содержимого публичного канала перед присоединением", "Previous_month": "Предыдущий месяц", @@ -3346,6 +3403,7 @@ "remove-closed-livechat-room": "Удалить закрытый Omnichannel чат", "remove-closed-livechat-rooms": "Удалить закрытый Livechat Rooms", "remove-closed-livechat-rooms_description": "Разрешение на удаление закрытых чатов omnichannel", + "remove-livechat-department": "Удалить отделы Omnichannel", "remove-user": "Удалить пользователя", "remove-user_description": "Разрешение на удаление пользователя из чата", "Removed": "Удаленные", @@ -3557,7 +3615,7 @@ "Save_Mobile_Bandwidth": "Включить режим экономии трафика для мобильных устройств", "Save_to_enable_this_action": "Сохраните, чтобы активировать это действие", "Save_To_Webdav": "Сохранить в WebDAV", - "Save_your_encryption_password": "Сохраните пароль для шифрования", + "Save_Your_Encryption_Password": "Сохраните Ваш пароль шифрования", "save-others-livechat-room-info": "Сохранить информацию о других комнатах Livechat", "save-others-livechat-room-info_description": "Разрешение сохранять информацию из других чатов livechat", "Saved": "Сохранено", @@ -3602,6 +3660,7 @@ "Select_service_to_login": "Выберите сервис для загрузки вашего изображения или загрузите изображение с компьютера напрямую", "Select_tag": "Выберите метку", "Select_the_channels_you_want_the_user_to_be_removed_from": "Выберите каналы, из которых вы хотите удалить пользователя", + "Select_the_teams_channels_you_would_like_to_delete": "Выберите чаты Команды, которые вы хотите удалить, те, которые вы не выбрали, будут перемещены в рабочую область.", "Select_user": "Выберите пользователя", "Select_users": "Выберите пользователей", "Selected_agents": "Выбранные представители", @@ -3675,10 +3734,14 @@ "Setup_Wizard": "Мастер установки", "Setup_Wizard_Info": "Мы поможем Вам настроить первого администратора, настроить организацию и зарегистрировать ваш сервер, чтобы получать бесплатные push-уведомления и многое другое.", "Share_Location_Title": "Поделиться местоположением?", - "Canned_responses": "Заготовленные ответы", + "Canned_Responses": "Заготовленные ответы", + "New_CannedResponse": "Новый заготовленный ответ", + "Edit_CannedResponse": "Редактировать заготовленный ответ", + "Sharing": "Совместный доступ", "Shared_Location": "Предоставленное местоположение", "Shared_Secret": "\"Общий секрет\"", "Shortcut": "Ярлык", + "shortcut_name": "имя ярлыка", "Should_be_a_URL_of_an_image": "Должен быть URL-адрес изображения.", "Should_exists_a_user_with_this_username": "Пользователь уже должен существовать.", "Show_agent_email": "Показать электронный адрес агента", @@ -3880,6 +3943,7 @@ "Teams": "Команды", "Teams_about_the_channels": "А как насчет чатов?", "Teams_channels_didnt_leave": "Вы не выбрали следующие чаты, поэтому вы их не покидаете:", + "Teams_channels_last_owner_delete_channel_warning": "Вы являетесь последним владельцем этого чата. Как только вы преобразуете Команду в чат, он будет перемещен в рабочую область.", "Teams_channels_last_owner_leave_channel_warning": "Вы последний владелец этого чата. Как только вы покинете Команду, чат будет храниться внутри нее, но вы будете управлять ею снаружи.", "Teams_leaving_team": "Вы покидаете эту Команду.", "Teams_channels": "Чаты команды", @@ -4201,6 +4265,7 @@ "URL_room_hash_description": "Рекомендуется включить, если экземпляр Jitsi не использует механизм аутентификации.", "URL_room_prefix": "Префикс URL комнаты", "URL_room_suffix": "URL суффикс чата", + "Use": "Использовать", "Use_account_preference": "Использовать настройки профиля", "Use_Emojis": "Использовать эмодзи ", "Use_Global_Settings": "Использовать глобальные настройки", @@ -4327,6 +4392,7 @@ "Users_TOTP_has_been_reset": "Пользовательский TOTP был сброшен", "Uses": "Использует", "Uses_left": "Использований осталось", + "UTC_Timezone": "Часовой пояс UTC", "Utilities": "Утилиты", "UTF8_Names_Slugify": "UTF8 Names Slugify", "UTF8_Names_Validation": "Проверка имён UTF8", @@ -4500,6 +4566,7 @@ "yesterday": "вчера", "Yesterday": "Вчера", "You": "Вы", + "You_are_converting_team_to_channel": "Вы преобразуете эту Команду в чат.", "you_are_in_preview_mode_of": "Вы находитесь в режиме предварительного просмотра канала #__room_name__", "you_are_in_preview_mode_of_incoming_livechat": "Вы находитесь в режиме предварительного просмотра этого живого чата", "You_are_logged_in_as": "Вы вошли как", diff --git a/packages/rocketchat-i18n/i18n/sk-SK.i18n.json b/packages/rocketchat-i18n/i18n/sk-SK.i18n.json index 97a56d79de0b..3d3609fb3dd2 100644 --- a/packages/rocketchat-i18n/i18n/sk-SK.i18n.json +++ b/packages/rocketchat-i18n/i18n/sk-SK.i18n.json @@ -416,8 +416,8 @@ "cache_cleared": "Vyrovnávacia pamäť vymazaná", "Cancel": "Zrušiť", "Cancel_message_input": "Zrušiť", - "Canned_Response_Removed": "Zakonzervované odpovede odstránené", "Canned Responses": "Zakonzervované odpovede", + "Canned_Response_Removed": "Zakonzervované odpovede odstránené", "Canned_Responses_Enable": "Povoliť zakonzervované odpovede", "Cannot_invite_users_to_direct_rooms": "Nemožno pozvať používateľov do priamych miestností", "Cannot_open_conversation_with_yourself": "Nemôžete napísať priamu správu sami sebe", @@ -1144,6 +1144,7 @@ "Favorites": "Obľúbené", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "Táto funkcia závisí od toho, že má byť povolená možnosť \"Posielať históriu navigácie návštevníka ako správu\".", "Features_Enabled": "Funkcie povolené", + "Federation_Domain": "Doména", "FEDERATION_Domain": "Doména", "FEDERATION_Status": "Postavenie", "Field": "Lúka", diff --git a/packages/rocketchat-i18n/i18n/sl-SI.i18n.json b/packages/rocketchat-i18n/i18n/sl-SI.i18n.json index ca70f92d48ff..d0e1a2e1da71 100644 --- a/packages/rocketchat-i18n/i18n/sl-SI.i18n.json +++ b/packages/rocketchat-i18n/i18n/sl-SI.i18n.json @@ -1125,6 +1125,7 @@ "Favorites": "Priljubljeno", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "Ta funkcija je odvisna od \"Pošlji zgodovino navigacije obiskovalcev kot sporočila\", ki jo želite omogočiti.", "Features_Enabled": "Funkcije so omogočene", + "Federation_Domain": "Domena", "FEDERATION_Domain": "Domena", "FEDERATION_Status": "Stanje", "Field": "Polje", diff --git a/packages/rocketchat-i18n/i18n/sq.i18n.json b/packages/rocketchat-i18n/i18n/sq.i18n.json index 0661e957f343..8f632800e6c7 100644 --- a/packages/rocketchat-i18n/i18n/sq.i18n.json +++ b/packages/rocketchat-i18n/i18n/sq.i18n.json @@ -1133,6 +1133,7 @@ "Favorites": "Të preferuarat", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "Ky funksion varet nga \"Dërgo historinë e lundrimit të vizitorit si mesazh\" për t'u aktivizuar.", "Features_Enabled": "Features Enabled", + "Federation_Domain": "fushë", "FEDERATION_Domain": "fushë", "FEDERATION_Status": "status", "Field": "fushë", diff --git a/packages/rocketchat-i18n/i18n/sr.i18n.json b/packages/rocketchat-i18n/i18n/sr.i18n.json index 7b04c14c349d..9565a3438faa 100644 --- a/packages/rocketchat-i18n/i18n/sr.i18n.json +++ b/packages/rocketchat-i18n/i18n/sr.i18n.json @@ -947,6 +947,8 @@ "Favorite": "Омиљено", "Favorite_Rooms": "Омогући омиљене собе", "Favorites": "Омиљене", + "Federation_Domain": "Домен", + "Federation_Discovery_method": "Начин откривања", "FEDERATION_Discovery_Method": "Начин откривања", "FEDERATION_Domain": "Домен", "FEDERATION_Status": "Стање", diff --git a/packages/rocketchat-i18n/i18n/sv.i18n.json b/packages/rocketchat-i18n/i18n/sv.i18n.json index bfa6e4956a96..1a542e40d862 100644 --- a/packages/rocketchat-i18n/i18n/sv.i18n.json +++ b/packages/rocketchat-i18n/i18n/sv.i18n.json @@ -1073,7 +1073,6 @@ "Enter_authentication_code": "Ange autentiseringskod", "Enter_Behaviour": "Ange nyckelbeteende", "Enter_Behaviour_Description": "Detta ändras om inmatningsnyckeln skickar ett meddelande eller gör en radbrytning", - "Enter_E2E_password_to_decode_your_key": "Ange E2E-lösenord för att avkoda din nyckel", "Enter_name_here": "Ange namn här", "Enter_Normal": "Normalt läge (skicka med Enter)", "Enter_to": "Enter för att", @@ -1203,6 +1202,7 @@ "Favorites": "Favoriter", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "Den här funktionen beror på \"Skicka besökarnavigationshistorik som ett meddelande\" för att aktiveras.", "Features_Enabled": "Funktioner aktiverade", + "Federation_Domain": "Domän", "FEDERATION_Domain": "Domän", "FEDERATION_Status": "Status", "Field": "Fält", @@ -1367,8 +1367,6 @@ "How_responsive_was_the_chat_agent": "Hur snabbt svarade chattagenten?", "How_satisfied_were_you_with_this_chat": "Hur nöjd var du med chatten?", "How_to_handle_open_sessions_when_agent_goes_offline": "Hur hanteras öppna sessioner när agent går offline", - "I_ll_do_it_later": "Jag gör det senare", - "I_saved_my_password_close_this_message": "Jag har sparat mitt lösenord. Stäng detta meddelande.", "Idle_Time_Limit": "Idle Time Limit", "Idle_Time_Limit_Description": "Perioden tills status ändras till bort. Värdet måste vara i sekunder.", "if_they_are_from": "(om de är från %s)", diff --git a/packages/rocketchat-i18n/i18n/ta-IN.i18n.json b/packages/rocketchat-i18n/i18n/ta-IN.i18n.json index 319d0f1c1217..8aed29ec05a5 100644 --- a/packages/rocketchat-i18n/i18n/ta-IN.i18n.json +++ b/packages/rocketchat-i18n/i18n/ta-IN.i18n.json @@ -1132,6 +1132,7 @@ "Favorites": "பிடித்தவை", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "இந்த அம்சம் செயல்படுத்தப்படுவதற்கு \"அனுப்புநர் ஊடுருவல் வரலாற்றை ஒரு செய்தியாக அனுப்பு\" என்பதை சார்ந்துள்ளது.", "Features_Enabled": "அம்சங்கள் இயக்கப்பட்டன", + "Federation_Domain": "டொமைன்", "FEDERATION_Domain": "டொமைன்", "FEDERATION_Status": "நிலைமை", "Field": "களம்", diff --git a/packages/rocketchat-i18n/i18n/th-TH.i18n.json b/packages/rocketchat-i18n/i18n/th-TH.i18n.json index 196a706c1435..efa19e590fa3 100644 --- a/packages/rocketchat-i18n/i18n/th-TH.i18n.json +++ b/packages/rocketchat-i18n/i18n/th-TH.i18n.json @@ -1130,6 +1130,7 @@ "Favorites": "รายการโปรด", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "คุณลักษณะนี้จะขึ้นอยู่กับ \"ส่งประวัติการเข้าชมผู้เยี่ยมชมเป็นข้อความ\" เพื่อเปิดใช้งาน", "Features_Enabled": "คุณลักษณะที่เปิดใช้งาน", + "Federation_Domain": "โดเมน", "FEDERATION_Domain": "โดเมน", "FEDERATION_Status": "สถานะ", "Field": "สนาม", diff --git a/packages/rocketchat-i18n/i18n/tr.i18n.json b/packages/rocketchat-i18n/i18n/tr.i18n.json index 29efc16f3db4..60e0aad8bb6a 100644 --- a/packages/rocketchat-i18n/i18n/tr.i18n.json +++ b/packages/rocketchat-i18n/i18n/tr.i18n.json @@ -1217,7 +1217,6 @@ "Enter_authentication_code": "Kimlik doğrulama kodu girin", "Enter_Behaviour": "Enter tuşu davranışı", "Enter_Behaviour_Description": "Bu, Enter tuşunun işlevinin ileti göndermek mi yoksa alt satıra geçmek mi olacağını ayarlar.", - "Enter_E2E_password_to_decode_your_key": "Anahtarınızı çözmek için Uçtan Uca şifrenizi girin", "Enter_name_here": "Buraya adı girin", "Enter_Normal": "Normal mod (Enter ile gönder)", "Enter_to": "İçin girin", @@ -1369,7 +1368,11 @@ "Favorites": "Favoriler", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "Bu özellik, \"Ziyaretçi Gezinme Geçmişini İleti Olarak Gönder\" seçeneğinin etkinleştirilmesine bağlıdır.", "Features_Enabled": "Özellikler Etkin", + "Federation_Domain": "Alan Adı", + "Federation_Public_key": "Herkese Açık Anahtar", + "Federation_Discovery_method": "Keşif Yöntemi", "Federation_Dashboard": "Federasyon Panosu", + "Federation_Protocol": "İletişim Kuralları", "FEDERATION_Discovery_Method": "Keşif Yöntemi", "FEDERATION_Discovery_Method_Description": "DNS kayıtlarınızda hub'ı veya bir SRV'yi ve bir TXT girişini kullanabilirsiniz.", "FEDERATION_Domain": "Alan Adı", @@ -1561,8 +1564,6 @@ "How_responsive_was_the_chat_agent": "Görüşme temsilcisi ne kadar duyarlıydı?", "How_satisfied_were_you_with_this_chat": "Bu görüşmeden ne kadar memnun kaldınız?", "How_to_handle_open_sessions_when_agent_goes_offline": "Temsilci Çevrimdışı Olduğunda Açık Oturumlar Nasıl Kullanılmalı", - "I_ll_do_it_later": "Daha sonra yapacağım", - "I_saved_my_password_close_this_message": "Şifremi kaydettim, bu iletiyi kapat", "Idle_Time_Limit": "Boşta Kalma Süresi Sınırı", "Idle_Time_Limit_Description": "Durum değişene kadar geçen süre. Değerin saniye cinsinden olması gerekiyor.", "if_they_are_from": "(%s'den geliyorsa)", @@ -2645,7 +2646,6 @@ "Save_Mobile_Bandwidth": "Mobil Kota Koruma Etkin", "Save_to_enable_this_action": "Bu eylemi etkinleştirmek için kaydet", "Save_To_Webdav": "WebDAV'a kaydet", - "Save_your_encryption_password": "Şifreleme parolanızı kaydedin", "save-others-livechat-room-info": "Diğerlerini Kaydedin Livechat Oda Bilgileri", "save-others-livechat-room-info_description": "Diğer livechat kanallarından bilgi kaydetme izni", "Saved": "Kaydedildi", diff --git a/packages/rocketchat-i18n/i18n/ug.i18n.json b/packages/rocketchat-i18n/i18n/ug.i18n.json index c34a724f60ed..103c830236b5 100644 --- a/packages/rocketchat-i18n/i18n/ug.i18n.json +++ b/packages/rocketchat-i18n/i18n/ug.i18n.json @@ -432,6 +432,7 @@ "Favorite_Rooms": "ياخشى كۆرگەن ئۆينى ئىشلىتىش", "Favorites": "ساقلاش", "Features_Enabled": "ئىقتىدارى ئىشلىتىلدى", + "Federation_Domain": "دائىرە نامى", "FEDERATION_Domain": "دائىرە نامى", "Field": "خەت بۆلىكى", "Field_removed": "خەت بۆلىكى يۇيۇۋېتىلىدۇى", diff --git a/packages/rocketchat-i18n/i18n/uk.i18n.json b/packages/rocketchat-i18n/i18n/uk.i18n.json index d07622675372..8075ad571903 100644 --- a/packages/rocketchat-i18n/i18n/uk.i18n.json +++ b/packages/rocketchat-i18n/i18n/uk.i18n.json @@ -565,8 +565,8 @@ "Cancel": "Відміна", "Cancel_message_input": "Відміна", "Canceled": "Скасовано", - "Canned_Response_Removed": "Зафіксована відповідь вилучена", "Canned Responses": "Зафіксовані відповіді", + "Canned_Response_Removed": "Зафіксована відповідь вилучена", "Canned_Responses_Enable": "Увімкнути зафіксовані відповіді", "Cannot_invite_users_to_direct_rooms": "неможливо запросити користувачів на прямі виклики", "Cannot_open_conversation_with_yourself": "Неможливо відправити повідомлення самому собі", @@ -1324,7 +1324,6 @@ "Enter_authentication_code": "Введіть код автентифікації", "Enter_Behaviour": "Поведінка натискання клавіші \"Enter\"", "Enter_Behaviour_Description": "Клавіша \"Enter\" надішле повідомлення або створить новий абзац", - "Enter_E2E_password_to_decode_your_key": "Введіть пароль E2E для декодування вашого ключа", "Enter_name_here": "Введіть ім'я тут", "Enter_Normal": "Нормальний режим (відправляти клавішою \"Enter\")", "Enter_to": "Ввійти в", @@ -1496,7 +1495,11 @@ "Favorites": "Обрані", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "Ця функція залежить від увімкненої функції \"Відправляти історію навігації відвідувачів як повідомлення\"", "Features_Enabled": "Особливості Включено", + "Federation_Domain": "Домен", + "Federation_Public_key": "Відкритий ключ", + "Federation_Discovery_method": "Метод відкриття", "Federation_Dashboard": "Інформаційна панель Федерації", + "Federation_Protocol": "Протокол", "FEDERATION_Discovery_Method": "Метод відкриття", "FEDERATION_Discovery_Method_Description": "Ви можете використовувати концентратор або SRV та TXT ключі своїх DNS записів.", "FEDERATION_Domain": "Домен", @@ -1707,8 +1710,6 @@ "How_responsive_was_the_chat_agent": "Наскільки чуйним був предствник?", "How_satisfied_were_you_with_this_chat": "Наскільки ви були задоволені цим чатом?", "How_to_handle_open_sessions_when_agent_goes_offline": "Як керувати відкритими сеансами, коли агент переходить у режимі офлайн", - "I_ll_do_it_later": "Я зроблю це пізніше", - "I_saved_my_password_close_this_message": "Я зберіг свій пароль, закрити це повідомлення", "Idle_Time_Limit": "Час бездіяльності", "Idle_Time_Limit_Description": "Період часу до зміни статусу. Значення має бути в секундах.", "if_they_are_from": "(якщо вони від %s)", diff --git a/packages/rocketchat-i18n/i18n/vi-VN.i18n.json b/packages/rocketchat-i18n/i18n/vi-VN.i18n.json index c63281b840fc..8017ae4e48c8 100644 --- a/packages/rocketchat-i18n/i18n/vi-VN.i18n.json +++ b/packages/rocketchat-i18n/i18n/vi-VN.i18n.json @@ -1124,6 +1124,7 @@ "Favorites": "Yêu thích", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "Tính năng này phụ thuộc vào \"Gửi Lịch sử điều hướng khách truy cập dưới dạng tin nhắn\" được bật.", "Features_Enabled": "Tính năng Bật", + "Federation_Domain": "Tên miền", "FEDERATION_Domain": "Tên miền", "FEDERATION_Status": "Trạng thái", "Field": "Cánh đồng", diff --git a/packages/rocketchat-i18n/i18n/zh-HK.i18n.json b/packages/rocketchat-i18n/i18n/zh-HK.i18n.json index 057327be312c..92e7ff8acf9f 100644 --- a/packages/rocketchat-i18n/i18n/zh-HK.i18n.json +++ b/packages/rocketchat-i18n/i18n/zh-HK.i18n.json @@ -1152,6 +1152,7 @@ "Favorites": "收藏", "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "此功能取决于“发送访客导航历史记录为消息”以启用。", "Features_Enabled": "功能已启用", + "Federation_Domain": "域", "FEDERATION_Domain": "域", "FEDERATION_Status": "状态", "Field": "领域", diff --git a/packages/rocketchat-i18n/i18n/zh-TW.i18n.json b/packages/rocketchat-i18n/i18n/zh-TW.i18n.json index 4cc2162ac337..746f6ccfe841 100644 --- a/packages/rocketchat-i18n/i18n/zh-TW.i18n.json +++ b/packages/rocketchat-i18n/i18n/zh-TW.i18n.json @@ -695,9 +695,9 @@ "Cancel": "取消", "Cancel_message_input": "取消", "Canceled": "已取消", + "Canned Responses": "罐頭訊息", "Canned_Response_Delete_Warning": "刪除預設回覆無法取消。", "Canned_Response_Removed": "罐頭訊息已刪除", - "Canned Responses": "罐頭訊息", "Canned_Responses_Enable": "啟用罐頭訊息", "Cannot_invite_users_to_direct_rooms": "無法邀請使用者至私訊", "Cannot_open_conversation_with_yourself": "無法與自己私訊", @@ -1587,7 +1587,6 @@ "Enter_authentication_code": "輸入驗證碼", "Enter_Behaviour": "輸入關鍵行為", "Enter_Behaviour_Description": "這個變更會影響你按 Enter 時會傳送訊息或是換行", - "Enter_E2E_password_to_decode_your_key": "輸入 E2E 密碼來解密您的金鑰", "Enter_name_here": "在這裡輸入姓名", "Enter_Normal": "普通模式(使用 Enter 發送)", "Enter_to": "進入", @@ -1801,7 +1800,11 @@ "Features": "功能", "Features_Enabled": "功能啟用", "Feature_Disabled": "功能已停用", + "Federation_Domain": "網域", + "Federation_Public_key": "公鑰", + "Federation_Discovery_method": "探索方式", "Federation_Dashboard": "綜合儀表板", + "Federation_Protocol": "協定", "FEDERATION_Discovery_Method": "探索方式", "FEDERATION_Discovery_Method_Description": "您可以使用 hub 或是 SRV 和 TXT 在您的 DNS 上增加紀錄", "FEDERATION_Domain": "網域", @@ -2043,8 +2046,6 @@ "How_responsive_was_the_chat_agent": "線上客服的回應速度如何?", "How_satisfied_were_you_with_this_chat": "您是否滿意這次的聊天?", "How_to_handle_open_sessions_when_agent_goes_offline": "代理程式離線時如何處理打開的會話", - "I_ll_do_it_later": "我晚點處理", - "I_saved_my_password_close_this_message": "我儲存了我的密碼,關閉這個訊息", "Idle_Time_Limit": "空閒時間限制", "Idle_Time_Limit_Description": "直到狀態改變為止的時間區段。值需要在幾秒鐘內。", "if_they_are_from": "(如果他們來自%s)", @@ -3504,7 +3505,6 @@ "Save_Mobile_Bandwidth": "節省手機流量", "Save_to_enable_this_action": "保存啟用此動作", "Save_To_Webdav": "儲存到 WebDAV", - "Save_your_encryption_password": "儲存您的加密密碼", "save-others-livechat-room-info": "保存其他即時聊天 Room 資訊", "save-others-livechat-room-info_description": "允許保存來自其他即時聊天頻道的訊息", "Saved": "保存", @@ -3614,6 +3614,7 @@ "Setup_Wizard": "安裝精靈", "Setup_Wizard_Info": "我們將指導您設置第一位管理員使用者,配置您的組織並註冊您的伺服器以接收免費推送通知等。", "Share_Location_Title": "共享位置?", + "New_CannedResponse": "新的罐頭訊息", "Shared_Location": "已共享位置", "Shared_Secret": "共享加密", "Shortcut": "捷徑", diff --git a/packages/rocketchat-i18n/i18n/zh.i18n.json b/packages/rocketchat-i18n/i18n/zh.i18n.json index 21568657a1bb..3556289224c5 100644 --- a/packages/rocketchat-i18n/i18n/zh.i18n.json +++ b/packages/rocketchat-i18n/i18n/zh.i18n.json @@ -652,8 +652,8 @@ "Cancel": "取消", "Cancel_message_input": "取消", "Canceled": "已取消", - "Canned_Response_Removed": "已移除自动回复", "Canned Responses": "自动回复", + "Canned_Response_Removed": "已移除自动回复", "Canned_Responses_Enable": "启用自动回复", "Cannot_invite_users_to_direct_rooms": "不能邀请用户加入私聊", "Cannot_open_conversation_with_yourself": "不能和你自己私聊", @@ -1500,7 +1500,6 @@ "Enter_authentication_code": "输入验证码", "Enter_Behaviour": "回车键", "Enter_Behaviour_Description": "此项用来设置回车键发送消息还是换行", - "Enter_E2E_password_to_decode_your_key": "输入端到端密码以解码您的密钥", "Enter_name_here": "在此输入名称", "Enter_Normal": "常规模式(Enter 发送消息)", "Enter_to": "进入", @@ -1702,7 +1701,11 @@ "Feature_Depends_on_Livechat_Visitor_navigation_as_a_message_to_be_enabled": "此功能依赖于 “发送访客导航历史记录为消息” 启用。", "Features": "特性", "Features_Enabled": "功能已启用", + "Federation_Domain": "域名", + "Federation_Public_key": "公钥", + "Federation_Discovery_method": "发现方法", "Federation_Dashboard": "联盟仪表盘", + "Federation_Protocol": "协议", "FEDERATION_Discovery_Method": "发现方法", "FEDERATION_Discovery_Method_Description": "你可以用 hub 或者 SRV 和 TXT 条目的 DNS 记录。", "FEDERATION_Domain": "域名", @@ -1938,8 +1941,6 @@ "How_responsive_was_the_chat_agent": "在线客服的反应速度如何?", "How_satisfied_were_you_with_this_chat": "您是否满意这次聊天?", "How_to_handle_open_sessions_when_agent_goes_offline": "客服离线时如何处理正在进行的会话", - "I_ll_do_it_later": "我稍后再做", - "I_saved_my_password_close_this_message": "我已经保存了密码,关闭此消息", "Idle_Time_Limit": "空闲时间限制", "Idle_Time_Limit_Description": "自动将状态切换为离开的等待时间,计数单位为秒", "if_they_are_from": "(如果他们来自 %s)", @@ -3375,7 +3376,6 @@ "Save_Mobile_Bandwidth": "节约移动网络带宽", "Save_to_enable_this_action": "保存以启用该操作", "Save_To_Webdav": "保存到 WebDAV", - "Save_your_encryption_password": "保存您的加密密码", "save-others-livechat-room-info": "保存其他 Omnichannel 聊天室信息", "save-others-livechat-room-info_description": "保存其他 Omnichannel 聊天室信息的权限", "Saved": "已保存", @@ -3489,7 +3489,8 @@ "Setup_Wizard": "安装向导", "Setup_Wizard_Info": "我们将指导您设置第一位管理员用户,配置您的组织并注册您的服务器以接收免费推送通知等。", "Share_Location_Title": "分享位置信息?", - "Canned_responses": "自动回复", + "Canned_Responses": "自动回复", + "New_CannedResponse": "新的自动回复", "Shared_Location": "共享位置", "Shared_Secret": "共享的秘密", "Shortcut": "快捷方式", From b2024ddaa03c94f7b0573e5144bcbd91b568481a Mon Sep 17 00:00:00 2001 From: Matheus Barbosa Silva <36537004+matheusbsilva137@users.noreply.github.com> Date: Wed, 11 Aug 2021 19:05:23 -0300 Subject: [PATCH 18/76] [BREAK][ENTERPRISE] "Download CSV" button doesn't work in the Engagement Dashboard's Active Users section (#22849) * Fix download content and add headers to download files * Merge DAU, WAU and MAU data in a single file * Update date format Co-authored-by: dougfabris Co-authored-by: gabriellsh <40830821+gabriellsh@users.noreply.github.com> --- .../components/UsersTab/ActiveUsersSection.js | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/ee/app/engagement-dashboard/client/components/UsersTab/ActiveUsersSection.js b/ee/app/engagement-dashboard/client/components/UsersTab/ActiveUsersSection.js index 201bad0246bd..ac5f42c33e64 100644 --- a/ee/app/engagement-dashboard/client/components/UsersTab/ActiveUsersSection.js +++ b/ee/app/engagement-dashboard/client/components/UsersTab/ActiveUsersSection.js @@ -104,17 +104,16 @@ const ActiveUsersSection = ({ timezone }) => { }, [data, period.end, period.start, utc]); const downloadData = () => { - const data = [{ - countDailyActiveUsers, - diffDailyActiveUsers, - countWeeklyActiveUsers, - diffWeeklyActiveUsers, - countMonthlyActiveUsers, - diffMonthlyActiveUsers, - dauValues, - wauValues, - mauValues, - }]; + const values = []; + + for (let i = 0; i < 30; i++) { + values.push([moment(dauValues[i].x).format('YYYY-MM-DD'), dauValues[i].y, wauValues[i].y, mauValues[i].y]); + } + + const data = [ + ['Date', 'DAU', 'WAU', 'MAU'], + ...values, + ]; downloadCsvAs(data, `ActiveUsersSection_start_${ params.start }_end_${ params.end }`); }; From 353dcd612a672e5f9aaa685df481421d1da53254 Mon Sep 17 00:00:00 2001 From: Matheus Barbosa Silva <36537004+matheusbsilva137@users.noreply.github.com> Date: Thu, 12 Aug 2021 13:46:27 -0300 Subject: [PATCH 19/76] Cancel audio recording on room switch (#22880) * Cancel audio recordings on message bar destroy event. Co-authored-by: gabriellsh <40830821+gabriellsh@users.noreply.github.com> --- .../messageBox/messageBoxAudioMessage.js | 32 ++++++++++++------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/app/ui-message/client/messageBox/messageBoxAudioMessage.js b/app/ui-message/client/messageBox/messageBoxAudioMessage.js index 1b1854b5761b..66b3ceb34f6e 100644 --- a/app/ui-message/client/messageBox/messageBoxAudioMessage.js +++ b/app/ui-message/client/messageBox/messageBoxAudioMessage.js @@ -14,6 +14,20 @@ const stopRecording = () => new Promise((resolve) => AudioRecorder.stop(resolve) const recordingInterval = new ReactiveVar(null); const recordingRoomId = new ReactiveVar(null); +const cancelRecording = (instance) => new Promise(async () => { + if (recordingInterval.get()) { + clearInterval(recordingInterval.get()); + recordingInterval.set(null); + recordingRoomId.set(null); + } + + instance.time.set('00:00'); + + await stopRecording(); + + instance.state.set(null); +}); + Template.messageBoxAudioMessage.onCreated(async function() { this.state = new ReactiveVar(null); this.time = new ReactiveVar('00:00'); @@ -47,6 +61,12 @@ Template.messageBoxAudioMessage.onCreated(async function() { } }); +Template.messageBoxAudioMessage.onDestroyed(async function() { + if (this.state.get() === 'recording') { + await cancelRecording(this); + } +}); + Template.messageBoxAudioMessage.helpers({ isAllowed() { return AudioRecorder.isSupported() @@ -105,17 +125,7 @@ Template.messageBoxAudioMessage.events({ async 'click .js-audio-message-cancel'(event, instance) { event.preventDefault(); - if (recordingInterval.get()) { - clearInterval(recordingInterval.get()); - recordingInterval.set(null); - recordingRoomId.set(null); - } - - instance.time.set('00:00'); - - await stopRecording(); - - instance.state.set(null); + await cancelRecording(instance); }, async 'click .js-audio-message-done'(event, instance) { From 6ed2ab91786a773b49934c1050b67ffba02ecb8b Mon Sep 17 00:00:00 2001 From: Douglas Fabris Date: Thu, 12 Aug 2021 15:17:27 -0300 Subject: [PATCH 20/76] [FIX] Modal and sidebar footer styles on IE #22881 * fix: modal and sidebar footer styles on IE * chore: update fuselage * fix: review Co-authored-by: Tasso Evangelista --- .../CreateDiscussion/CreateDiscussion.tsx | 17 +- client/sidebar/footer/SidebarFooter.tsx | 12 +- client/sidebar/header/CreateChannel.js | 167 +++++++++--------- .../teams/CreateTeamModal/CreateTeamModal.tsx | 8 +- package-lock.json | 6 +- package.json | 2 +- 6 files changed, 112 insertions(+), 100 deletions(-) diff --git a/client/components/CreateDiscussion/CreateDiscussion.tsx b/client/components/CreateDiscussion/CreateDiscussion.tsx index 21d7841707f6..c936e0d3ba70 100644 --- a/client/components/CreateDiscussion/CreateDiscussion.tsx +++ b/client/components/CreateDiscussion/CreateDiscussion.tsx @@ -8,6 +8,7 @@ import { ButtonGroup, Button, Icon, + Box, } from '@rocket.chat/fuselage'; import { useMutableCallback } from '@rocket.chat/fuselage-hooks'; import React, { ReactElement } from 'react'; @@ -120,11 +121,17 @@ const CreateDiscussion = ({ )} - - {t('Encrypted')} - - - + + + {t('Encrypted')} + + {t('Discussion_name')} diff --git a/client/sidebar/footer/SidebarFooter.tsx b/client/sidebar/footer/SidebarFooter.tsx index 5eae9f6f3e8d..3f02e9340fd2 100644 --- a/client/sidebar/footer/SidebarFooter.tsx +++ b/client/sidebar/footer/SidebarFooter.tsx @@ -1,28 +1,30 @@ import { css } from '@rocket.chat/css-in-js'; import { Box } from '@rocket.chat/fuselage'; +import colors from '@rocket.chat/fuselage-tokens/colors.json'; import React, { ReactElement } from 'react'; import { settings } from '../../../app/settings/client'; const SidebarFooter = (): ReactElement => { const sidebarFooterStyle = css` - width: auto; - height: var(--sidebar-footer-height); - padding: var(--sidebar-extra-small-default-padding) var(--sidebar-default-padding); - & img { max-width: 100%; height: 100%; } & a:any-link { - color: var(--rc-color-primary-light); + color: ${colors.n600}; + color: var(--rc-color-primary-light, ${colors.n600}); } `; return ( diff --git a/client/sidebar/header/CreateChannel.js b/client/sidebar/header/CreateChannel.js index 88bbf4bbcb78..5476372d0023 100644 --- a/client/sidebar/header/CreateChannel.js +++ b/client/sidebar/header/CreateChannel.js @@ -7,6 +7,7 @@ import { Icon, Field, ToggleSwitch, + FieldGroup, } from '@rocket.chat/fuselage'; import { useDebouncedCallback } from '@rocket.chat/fuselage-hooks'; import React, { useEffect, useMemo, useState } from 'react'; @@ -77,92 +78,94 @@ const CreateChannel = ({ - - {t('Name')} - - } - placeholder={t('Channel_name')} - onChange={handlers.handleName} - /> - - {hasUnsavedChanges && nameError && {nameError}} - - - - {t('Topic')}{' '} - - ({t('optional')}) + + + {t('Name')} + + } + placeholder={t('Channel_name')} + onChange={handlers.handleName} + /> + + {hasUnsavedChanges && nameError && {nameError}} + + + + {t('Topic')}{' '} + + ({t('optional')}) + + + + + + + + + + {t('Private')} + + {values.type + ? t('Only_invited_users_can_acess_this_channel') + : t('Everyone_can_access_this_channel')} + + + - - - - - - - - - {t('Private')} - - {values.type - ? t('Only_invited_users_can_acess_this_channel') - : t('Everyone_can_access_this_channel')} - + + + + + {t('Read_only')} + + {t('All_users_in_the_channel_can_write_new_messages')} + + + - - - - - - - {t('Read_only')} - - {t('All_users_in_the_channel_can_write_new_messages')} - + + + + + {t('Encrypted')} + + {values.type ? t('Encrypted_channel_Description') : t('Encrypted_not_available')} + + + - - - - - - - {t('Encrypted')} - - {values.type ? t('Encrypted_channel_Description') : t('Encrypted_not_available')} - + + + + + {t('Broadcast')} + {t('Broadcast_channel_Description')} + + - - - - - - - {t('Broadcast')} - {t('Broadcast_channel_Description')} - - - - - - {`${t('Add_members')} (${t('optional')})`} - - + + + {`${t('Add_members')} (${t('optional')})`} + + + diff --git a/client/views/teams/CreateTeamModal/CreateTeamModal.tsx b/client/views/teams/CreateTeamModal/CreateTeamModal.tsx index e2889e20f13e..4b29709aa225 100644 --- a/client/views/teams/CreateTeamModal/CreateTeamModal.tsx +++ b/client/views/teams/CreateTeamModal/CreateTeamModal.tsx @@ -281,7 +281,7 @@ const CreateTeamModal: FC = ({ onClose }) => { - + {t('Teams_New_Private_Label')} {type @@ -294,7 +294,7 @@ const CreateTeamModal: FC = ({ onClose }) => { - + {t('Teams_New_Read_only_Label')} {t('Teams_New_Read_only_Description')} @@ -307,7 +307,7 @@ const CreateTeamModal: FC = ({ onClose }) => { - + {t('Teams_New_Encrypted_Label')} {type @@ -324,7 +324,7 @@ const CreateTeamModal: FC = ({ onClose }) => { - + {t('Teams_New_Broadcast_Label')} {t('Teams_New_Broadcast_Description')} diff --git a/package-lock.json b/package-lock.json index 1c6943115822..0fd98600f251 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5126,9 +5126,9 @@ } }, "@rocket.chat/fuselage": { - "version": "0.6.3-dev.303", - "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage/-/fuselage-0.6.3-dev.303.tgz", - "integrity": "sha512-fav0Aos4Oeqkmy2IRsbLHvs2g0wAUcPmYFD2zy6ulgcwbgEsElRAU1n8cw67HAErLvtzMq0K6MSbBg/8zQ21yQ==", + "version": "0.6.3-dev.306", + "resolved": "https://registry.npmjs.org/@rocket.chat/fuselage/-/fuselage-0.6.3-dev.306.tgz", + "integrity": "sha512-R8rUZreKcsBaJEGoDs9jo2v0KkBGTx8QXKgbuqCY728LNYVcQ63sBKDZcZZJtzodIGszMQInk6ybJHhRAEB+qw==", "requires": { "@rocket.chat/css-in-js": "^0.28.0", "@rocket.chat/fuselage-tokens": "^0.28.0", diff --git a/package.json b/package.json index 6a3c703543ea..3af3597c61e9 100644 --- a/package.json +++ b/package.json @@ -158,7 +158,7 @@ "@rocket.chat/apps-engine": "1.27.1", "@rocket.chat/css-in-js": "^0.28.0", "@rocket.chat/emitter": "^0.28.0", - "@rocket.chat/fuselage": "^0.6.3-dev.303", + "@rocket.chat/fuselage": "^0.6.3-dev.306", "@rocket.chat/fuselage-hooks": "^0.28.0", "@rocket.chat/fuselage-polyfills": "^0.28.0", "@rocket.chat/fuselage-tokens": "^0.28.0", From 09dd33742e0cbd59750ff2070c597a8c979c03d3 Mon Sep 17 00:00:00 2001 From: Ikko Ashimine Date: Fri, 13 Aug 2021 05:33:53 +0900 Subject: [PATCH 21/76] Chore: Fix typo in rtl.css (#22431) hte -> the Co-authored-by: Tasso Evangelista --- app/theme/client/imports/general/rtl.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/theme/client/imports/general/rtl.css b/app/theme/client/imports/general/rtl.css index 436f2305e2b1..5b4d5c5cf421 100644 --- a/app/theme/client/imports/general/rtl.css +++ b/app/theme/client/imports/general/rtl.css @@ -415,7 +415,7 @@ } } - /* Override toastr messages to show on hte left side */ + /* Override toastr messages to show on the left side */ & .toast-top-right { right: auto; left: 12px; From f462a4230bac4e146adb52e8d47c0cc869a2ba3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tiago=20Epif=C3=A2nio?= <26820396+epif4nio@users.noreply.github.com> Date: Fri, 13 Aug 2021 04:00:14 +0100 Subject: [PATCH 22/76] [FIX] "Read Only" field description is incorrect when the option is checked (#21868) * Update "Read Only" field description when the option is checked in channel's creation. Co-authored-by: dougfabris --- client/sidebar/header/CreateChannel.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/client/sidebar/header/CreateChannel.js b/client/sidebar/header/CreateChannel.js index 5476372d0023..a0bfb89fe8fd 100644 --- a/client/sidebar/header/CreateChannel.js +++ b/client/sidebar/header/CreateChannel.js @@ -127,7 +127,9 @@ const CreateChannel = ({ {t('Read_only')} - {t('All_users_in_the_channel_can_write_new_messages')} + {values.readOnly + ? t('Only_authorized_users_can_write_new_messages') + : t('All_users_in_the_channel_can_write_new_messages')} Date: Fri, 13 Aug 2021 09:40:10 -0300 Subject: [PATCH 23/76] [FIX] Can't access other administration menus after opening Engagement Dashboard (#22870) * fixed engagement dashboard tab exit * undo unnecessary changes * removed unused import --- .../client/components/EngagementDashboardRoute.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/ee/app/engagement-dashboard/client/components/EngagementDashboardRoute.js b/ee/app/engagement-dashboard/client/components/EngagementDashboardRoute.js index ff337512ed4e..3122ea19a3ef 100644 --- a/ee/app/engagement-dashboard/client/components/EngagementDashboardRoute.js +++ b/ee/app/engagement-dashboard/client/components/EngagementDashboardRoute.js @@ -1,12 +1,11 @@ import React, { useEffect } from 'react'; -import { useCurrentRoute, useRoute, useRouteParameter } from '../../../../../client/contexts/RouterContext'; +import { useCurrentRoute, useRoute } from '../../../../../client/contexts/RouterContext'; import { EngagementDashboardPage } from './EngagementDashboardPage'; export function EngagementDashboardRoute() { const engagementDashboardRoute = useRoute('engagement-dashboard'); - const [routeName] = useCurrentRoute(); - const tab = useRouteParameter('tab'); + const [routeName, { tab }] = useCurrentRoute(); useEffect(() => { if (routeName !== 'engagement-dashboard') { From 27f52bfe32d5a2cff5868c6d9944ec865b7665c2 Mon Sep 17 00:00:00 2001 From: Kevin Aleman Date: Fri, 13 Aug 2021 09:13:32 -0600 Subject: [PATCH 24/76] Use correct param to saveBusinessHour method (#22835) Co-authored-by: Renato Becker Co-authored-by: Murtaza Patrawala <34130764+murtaza98@users.noreply.github.com> --- app/api/server/lib/users.js | 2 +- app/livechat/server/methods/saveBusinessHour.ts | 6 +++++- ee/app/livechat-enterprise/server/business-hour/Custom.ts | 8 ++++++-- ee/app/livechat-enterprise/server/business-hour/Helper.ts | 6 +++--- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/app/api/server/lib/users.js b/app/api/server/lib/users.js index e91db181dfa2..9801e955f1b7 100644 --- a/app/api/server/lib/users.js +++ b/app/api/server/lib/users.js @@ -10,7 +10,7 @@ export async function findUsersToAutocomplete({ uid, selector }) { const exceptions = selector.exceptions || []; const conditions = selector.conditions || {}; const options = { - fields: { + projection: { name: 1, username: 1, nickname: 1, diff --git a/app/livechat/server/methods/saveBusinessHour.ts b/app/livechat/server/methods/saveBusinessHour.ts index d5cd25349203..b5bc8b2c6645 100644 --- a/app/livechat/server/methods/saveBusinessHour.ts +++ b/app/livechat/server/methods/saveBusinessHour.ts @@ -5,6 +5,10 @@ import { businessHourManager } from '../business-hour'; Meteor.methods({ 'livechat:saveBusinessHour'(businessHourData: ILivechatBusinessHour) { - businessHourManager.saveBusinessHour(businessHourData); + try { + Promise.await(businessHourManager.saveBusinessHour(businessHourData)); + } catch (e) { + throw new Meteor.Error(e.message); + } }, }); diff --git a/ee/app/livechat-enterprise/server/business-hour/Custom.ts b/ee/app/livechat-enterprise/server/business-hour/Custom.ts index 890276363f5b..b5ae8b18a2cc 100644 --- a/ee/app/livechat-enterprise/server/business-hour/Custom.ts +++ b/ee/app/livechat-enterprise/server/business-hour/Custom.ts @@ -35,15 +35,19 @@ class CustomBusinessHour extends AbstractBusinessHourType implements IBusinessHo } async saveBusinessHour(businessHour: ILivechatBusinessHour & IBusinessHoursExtraProperties): Promise { + const existingBusinessHour = await this.BusinessHourRepository.findOne({ name: businessHour.name }, { projection: { _id: 1 } }) as ILivechatBusinessHour; + if (existingBusinessHour && existingBusinessHour._id !== businessHour._id) { + throw new Error('error-business-hour-name-already-in-use'); + } const { timezoneName, departmentsToApplyBusinessHour, ...businessHourData } = businessHour; businessHourData.timezone = { name: timezoneName, utc: this.getUTCFromTimezone(timezoneName), }; const departments = departmentsToApplyBusinessHour?.split(',').filter(Boolean) || []; - const businessHourToReturn = { ...businessHourData }; + const businessHourToReturn = { ...businessHourData, departmentsToApplyBusinessHour }; delete businessHourData.departments; - const businessHourId = await this.baseSaveBusinessHour(businessHour); + const businessHourId = await this.baseSaveBusinessHour(businessHourData); const currentDepartments = (await this.DepartmentsRepository.findByBusinessHourId(businessHourId, { fields: { _id: 1 } }).toArray()).map((dept: any) => dept._id); const toRemove = [...currentDepartments.filter((dept: string) => !departments.includes(dept))]; const toAdd = [...departments.filter((dept: string) => !currentDepartments.includes(dept))]; diff --git a/ee/app/livechat-enterprise/server/business-hour/Helper.ts b/ee/app/livechat-enterprise/server/business-hour/Helper.ts index dace2aeb3e53..ef729e8def20 100644 --- a/ee/app/livechat-enterprise/server/business-hour/Helper.ts +++ b/ee/app/livechat-enterprise/server/business-hour/Helper.ts @@ -13,7 +13,7 @@ const getAllAgentIdsWithoutDepartment = async (): Promise => { const agentIdsWithDepartment = (await LivechatDepartmentAgents.find({}, { fields: { agentId: 1 } }).toArray()).map((dept: any) => dept.agentId); const agentIdsWithoutDepartment = (await Users.findUsersInRolesWithQuery('livechat-agent', { _id: { $nin: agentIdsWithDepartment }, - }, { fields: { _id: 1 } }).toArray()).map((user: any) => user._id); + }, { projection: { _id: 1 } }).toArray()).map((user: any) => user._id); return agentIdsWithoutDepartment; }; @@ -21,8 +21,8 @@ const getAgentIdsToHandle = async (businessHour: Record): Promise dept._id); - return (await LivechatDepartmentAgents.findByDepartmentIds(departmentIds, { fields: { agentId: 1 } }).toArray()).map((dept: any) => dept.agentId); + const departmentIds = (await LivechatDepartment.findEnabledByBusinessHourId(businessHour._id, { projection: { _id: 1 } }).toArray()).map((dept: any) => dept._id); + return (await LivechatDepartmentAgents.findByDepartmentIds(departmentIds, { projection: { agentId: 1 } }).toArray()).map((dept: any) => dept.agentId); }; export const openBusinessHour = async (businessHour: Record): Promise => { From 127a102e49d2321063d5ccf5193146ee24d27284 Mon Sep 17 00:00:00 2001 From: Thassio Victor Date: Fri, 13 Aug 2021 15:46:11 -0300 Subject: [PATCH 25/76] [FIX] Apps-Engine's scheduler failing to update run tasks (#22882) Co-authored-by: Douglas Gubert --- app/apps/server/bridges/scheduler.ts | 8 ++++---- package-lock.json | 17 ++++++++--------- package.json | 2 +- 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/app/apps/server/bridges/scheduler.ts b/app/apps/server/bridges/scheduler.ts index 6831861b5dba..0676178c84de 100644 --- a/app/apps/server/bridges/scheduler.ts +++ b/app/apps/server/bridges/scheduler.ts @@ -17,12 +17,12 @@ function _callProcessor(processor: Function): (job: { attrs?: { data: object } } // This field is for internal use, no need to leak to app processor delete (data as any).appId; - processor(data); + return processor(data); }; } /** - * Provides the Apps Engine with task scheduling capabilities + * Provides the Apps Engine with task scheduling capabilities. * It uses {@link agenda:github.com/agenda/agenda} as backend */ export class AppSchedulerBridge extends SchedulerBridge { @@ -43,7 +43,7 @@ export class AppSchedulerBridge extends SchedulerBridge { } /** - * Entity that will be run in a job + * Entity that will be run in a job. * @typedef {Object} Processor * @property {string} id The processor's identifier * @property {function} processor The function that will be run on a given schedule @@ -127,7 +127,7 @@ export class AppSchedulerBridge extends SchedulerBridge { } /** - * Schedules a registered processor to run recurrently according to a given interval + * Schedules a registered processor to run recurrently according to a given interval. * * @param {Object} job * @param {string} job.id The processor's id diff --git a/package-lock.json b/package-lock.json index 0fd98600f251..d77f715b94f6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10821,9 +10821,8 @@ "integrity": "sha512-/9aQCnQHF+0IiCl0qhXoK7qs//SwYE7zX8lsr/DNk1BRAHYxeLZPL4pguwK29gUEqasYQjqPtEpDRSWEkdHn9g==" }, "agenda": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/agenda/-/agenda-3.1.0.tgz", - "integrity": "sha512-UtxV/37gkjDYl0H2Lr4hPrBqOhAgtxYeGSYooSd1eyOmXlK1wFkbs77nItOykufFRv6tR6fskWP2RkyBndXYtg==", + "version": "github:RocketChat/agenda#c2cfcc532b8409561104dca980e6adbbcbdf5442", + "from": "github:RocketChat/agenda#3.1.2", "requires": { "cron": "~1.8.0", "date.js": "~0.3.3", @@ -10843,9 +10842,9 @@ } }, "bson": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.5.tgz", - "integrity": "sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg==" + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz", + "integrity": "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==" }, "debug": { "version": "4.1.1", @@ -10869,9 +10868,9 @@ } }, "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" } } }, diff --git a/package.json b/package.json index 3af3597c61e9..5a97e2741eb1 100644 --- a/package.json +++ b/package.json @@ -172,7 +172,7 @@ "@slack/client": "^4.12.0", "@types/lodash": "^4.14.171", "adm-zip": "0.4.14", - "agenda": "^3.1.0", + "agenda": "github:RocketChat/agenda#3.1.2", "apn": "2.2.0", "archiver": "^3.1.1", "arraybuffer-to-string": "^1.0.2", From f7501deb7ea0af190c2c7d4af30b247bcf8d2db6 Mon Sep 17 00:00:00 2001 From: gabriellsh <40830821+gabriellsh@users.noreply.github.com> Date: Fri, 13 Aug 2021 18:41:16 -0300 Subject: [PATCH 26/76] [IMPROVE] Rewrite File Upload Modal (#22750) * Image upload preview * Finished file upload modal * Fix image preview size * Fix image aspect ratio * remove preview from ie11 * fix toast * remove multiplication * Fix scroll * fix: conditional ImagePreview return * Fix filetype undefined * Fix preview infinite loading Co-authored-by: dougfabris --- app/ui/client/lib/fileUpload.js | 206 +++--------------- .../modals/FileUploadModal/FilePreview.tsx | 55 +++++ .../FileUploadModal.stories.js | 28 +++ .../FileUploadModal/FileUploadModal.tsx | 138 ++++++++++++ .../modals/FileUploadModal/GenericPreview.tsx | 13 ++ .../modals/FileUploadModal/ImagePreview.tsx | 42 ++++ .../modals/FileUploadModal/MediaPreview.tsx | 79 +++++++ .../FileUploadModal/PreviewSkeleton.tsx | 6 + .../modals/FileUploadModal/index.ts | 1 + client/lib/formatBytes.ts | 14 ++ packages/rocketchat-i18n/i18n/en.i18n.json | 2 + 11 files changed, 403 insertions(+), 181 deletions(-) create mode 100644 client/components/modals/FileUploadModal/FilePreview.tsx create mode 100644 client/components/modals/FileUploadModal/FileUploadModal.stories.js create mode 100644 client/components/modals/FileUploadModal/FileUploadModal.tsx create mode 100644 client/components/modals/FileUploadModal/GenericPreview.tsx create mode 100644 client/components/modals/FileUploadModal/ImagePreview.tsx create mode 100644 client/components/modals/FileUploadModal/MediaPreview.tsx create mode 100644 client/components/modals/FileUploadModal/PreviewSkeleton.tsx create mode 100644 client/components/modals/FileUploadModal/index.ts create mode 100644 client/lib/formatBytes.ts diff --git a/app/ui/client/lib/fileUpload.js b/app/ui/client/lib/fileUpload.js index b8ad23505353..78ba246bd890 100644 --- a/app/ui/client/lib/fileUpload.js +++ b/app/ui/client/lib/fileUpload.js @@ -1,20 +1,12 @@ import { Tracker } from 'meteor/tracker'; import { Session } from 'meteor/session'; -import s from 'underscore.string'; -import { Handlebars } from 'meteor/ui'; import { Random } from 'meteor/random'; import { settings } from '../../../settings/client'; -import { t, fileUploadIsValidContentType, APIClient } from '../../../utils'; -import { modal, prependReplies } from '../../../ui-utils'; - - -const readAsDataURL = (file, callback) => { - const reader = new FileReader(); - reader.onload = (e) => callback(e.target.result, file); - - return reader.readAsDataURL(file); -}; +import { fileUploadIsValidContentType, APIClient } from '../../../utils'; +import { prependReplies } from '../../../ui-utils'; +import { imperativeModal } from '../../../../client/lib/imperativeModal'; +import FileUploadModal from '../../../../client/components/modals/FileUploadModal'; export const uploadFileWithMessage = async (rid, tmid, { description, fileName, msg, file }) => { const data = new FormData(); @@ -84,129 +76,6 @@ export const uploadFileWithMessage = async (rid, tmid, { description, fileName, } }; - -const showUploadPreview = (file, callback) => { - // If greater then 10MB don't try and show a preview - if (file.file.size > (10 * 1000000)) { - return callback(file, null); - } - - if (file.file.type == null) { - return callback(file, null); - } - - if ((file.file.type.indexOf('audio') > -1) || (file.file.type.indexOf('video') > -1) || (file.file.type.indexOf('image') > -1)) { - file.type = file.file.type.split('/')[0]; - - return readAsDataURL(file.file, (content) => callback(file, content)); - } - - return callback(file, null); -}; - -const getAudioUploadPreview = (file, preview) => `\ -
- -
-
-
- -
-
- -
-
`; - -const getVideoUploadPreview = (file, preview) => `\ -
- -
-
-
- -
-
- -
-
`; - -const getImageUploadPreview = (file, preview) => `\ -
-
-
-
-
- -
-
- -
-
`; - -const formatBytes = (bytes, decimals) => { - if (bytes === 0) { - return '0 Bytes'; - } - - const k = 1000; - const dm = (decimals + 1) || 3; - - const sizes = [ - 'Bytes', - 'KB', - 'MB', - 'GB', - 'TB', - 'PB', - ]; - - const i = Math.floor(Math.log(bytes) / Math.log(k)); - - return `${ parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) } ${ sizes[i] }`; -}; - -const getGenericUploadPreview = (file) => `\ -
-
${ Handlebars._escape(file.name) } - ${ formatBytes(file.file.size) }
-
-
-
- -
-
- -
-
`; - -const getUploadPreview = async (file, preview) => { - if (file.type === 'audio') { - return getAudioUploadPreview(file, preview); - } - - if (file.type === 'video') { - return getVideoUploadPreview(file, preview); - } - - const isImageFormatSupported = () => new Promise((resolve) => { - const element = document.createElement('img'); - element.onload = () => resolve(true); - element.onerror = () => resolve(false); - element.src = preview; - }); - - if (file.type === 'image' && await isImageFormatSupported()) { - return getImageUploadPreview(file, preview); - } - - return getGenericUploadPreview(file, preview); -}; - export const fileUpload = async (files, input, { rid, tmid }) => { const threadsEnabled = settings.get('Threads_enabled'); @@ -228,55 +97,30 @@ export const fileUpload = async (files, input, { rid, tmid }) => { const uploadNextFile = () => { const file = files.pop(); if (!file) { - modal.close(); return; } - if (file.file.type && !fileUploadIsValidContentType(file.file.type)) { - modal.open({ - title: t('FileUpload_MediaType_NotAccepted'), - text: file.file.type || `*.${ s.strRightBack(file.file.name, '.') }`, - type: 'error', - timer: 3000, - }); - return; - } - - if (file.file.size === 0) { - modal.open({ - title: t('FileUpload_File_Empty'), - type: 'error', - timer: 1000, - }); - return; - } - - showUploadPreview(file, async (file, preview) => modal.open({ - title: t('Upload_file_question'), - text: await getUploadPreview(file, preview), - showCancelButton: true, - closeOnConfirm: false, - closeOnCancel: false, - confirmButtonText: t('Send'), - cancelButtonText: t('Cancel'), - html: true, - onRendered: () => $('#file-description').focus(), - }, async (isConfirm) => { - if (!isConfirm) { - return; - } - - const fileName = document.getElementById('file-name').value || file.name || file.file.name; - - uploadFileWithMessage(rid, tmid, { - description: document.getElementById('file-description').value || undefined, - fileName, - msg: msg || undefined, - file, - }); - - uploadNextFile(); - })); + imperativeModal.open({ + component: FileUploadModal, + props: { + file: file.file, + onClose: () => { + imperativeModal.close(); + uploadNextFile(); + }, + onSubmit: (fileName, description) => { + uploadFileWithMessage(rid, tmid, { + description, + fileName, + msg: msg || undefined, + file, + }); + imperativeModal.close(); + uploadNextFile(); + }, + isValidContentType: file.file.type && fileUploadIsValidContentType(file.file.type), + }, + }); }; uploadNextFile(); diff --git a/client/components/modals/FileUploadModal/FilePreview.tsx b/client/components/modals/FileUploadModal/FilePreview.tsx new file mode 100644 index 000000000000..f518dc7ebf40 --- /dev/null +++ b/client/components/modals/FileUploadModal/FilePreview.tsx @@ -0,0 +1,55 @@ +import React, { ReactElement } from 'react'; + +import { isIE11 } from '../../../../app/ui-utils/client/lib/isIE11'; +import GenericPreview from './GenericPreview'; +import MediaPreview from './MediaPreview'; + +export enum FilePreviewType { + IMAGE = 'image', + AUDIO = 'audio', + VIDEO = 'video', +} + +const getFileType = (fileType: File['type']): FilePreviewType | undefined => { + if (!fileType) { + return; + } + for (const type of Object.values(FilePreviewType)) { + if (fileType.indexOf(type) > -1) { + return type; + } + } +}; + +const shouldShowMediaPreview = (file: File, fileType: FilePreviewType | undefined): boolean => { + if (!fileType) { + return false; + } + if (isIE11()) { + return false; + } + // Avoid preview if file size bigger than 10mb + if (file.size > 10000000) { + return false; + } + if (!Object.values(FilePreviewType).includes(fileType)) { + return false; + } + return true; +}; + +type FilePreviewProps = { + file: File; +}; + +const FilePreview = ({ file }: FilePreviewProps): ReactElement => { + const fileType = getFileType(file.type); + + if (shouldShowMediaPreview(file, fileType)) { + return ; + } + + return ; +}; + +export default FilePreview; diff --git a/client/components/modals/FileUploadModal/FileUploadModal.stories.js b/client/components/modals/FileUploadModal/FileUploadModal.stories.js new file mode 100644 index 000000000000..7ebd5b85909f --- /dev/null +++ b/client/components/modals/FileUploadModal/FileUploadModal.stories.js @@ -0,0 +1,28 @@ +import { Box } from '@rocket.chat/fuselage'; +import React, { useState } from 'react'; + +import FileUploadModal from '.'; + +export default { + title: 'components/modals/FileUploadModal', + component: FileUploadModal, +}; + +const onClose = () => console.log('close'); + +const _file = new File(['lol'], 'lol', { type: 'image' }); + +export const Default = () => { + const [file, setFile] = useState(_file); + + const handleFile = (e) => { + console.log(e.target.files); + setFile(e.target.files[0]); + }; + return ( + + + + + ); +}; diff --git a/client/components/modals/FileUploadModal/FileUploadModal.tsx b/client/components/modals/FileUploadModal/FileUploadModal.tsx new file mode 100644 index 000000000000..8e51360e253c --- /dev/null +++ b/client/components/modals/FileUploadModal/FileUploadModal.tsx @@ -0,0 +1,138 @@ +import { + Modal, + Box, + Field, + FieldGroup, + TextInput, + ButtonGroup, + Button, +} from '@rocket.chat/fuselage'; +import { useAutoFocus } from '@rocket.chat/fuselage-hooks'; +import React, { + ReactElement, + memo, + useState, + ChangeEvent, + FormEventHandler, + useEffect, +} from 'react'; + +import { useToastMessageDispatch } from '../../../contexts/ToastMessagesContext'; +import { useTranslation } from '../../../contexts/TranslationContext'; +import FilePreview from './FilePreview'; + +type FilePreviewModalProps = { + onClose: () => void; + onSubmit: (name: string, description?: string) => void; + file: File; + isValidContentType: boolean; +}; + +const FilePreviewModal = ({ + onClose, + file, + onSubmit, + isValidContentType, +}: FilePreviewModalProps): ReactElement => { + const [name, setName] = useState(file.name); + const [description, setDescription] = useState(''); + const t = useTranslation(); + const dispatchToastMessage = useToastMessageDispatch(); + + const ref = useAutoFocus(); + + const handleName = (e: ChangeEvent): void => { + setName(e.currentTarget.value); + }; + + const handleDescription = (e: ChangeEvent): void => { + setDescription(e.currentTarget.value); + }; + + const handleSubmit: FormEventHandler = (e): void => { + e.preventDefault(); + if (!name) { + return dispatchToastMessage({ + type: 'error', + message: t('error-the-field-is-required', { field: t('Name') }), + }); + } + onSubmit(name, description); + }; + + useEffect(() => { + if (!isValidContentType) { + dispatchToastMessage({ + type: 'error', + message: t('FileUpload_MediaType_NotAccepted__type__', { type: file.type }), + }); + onClose(); + return; + } + + if (file.size === 0) { + dispatchToastMessage({ + type: 'error', + message: t('FileUpload_File_Empty'), + }); + onClose(); + } + }, [file, dispatchToastMessage, isValidContentType, t, onClose]); + + return ( + + + + {t('FileUpload')} + + + + + + + + + {t('Upload_file_name')} + + + + {!name && ( + {t('error-the-field-is-required', { field: t('Name') })} + )} + + + {t('Upload_file_description')} + + + + + + + + + + + + + + + ); +}; + +export default memo(FilePreviewModal); diff --git a/client/components/modals/FileUploadModal/GenericPreview.tsx b/client/components/modals/FileUploadModal/GenericPreview.tsx new file mode 100644 index 000000000000..26c5884eb143 --- /dev/null +++ b/client/components/modals/FileUploadModal/GenericPreview.tsx @@ -0,0 +1,13 @@ +import { Box, Icon } from '@rocket.chat/fuselage'; +import React, { ReactElement } from 'react'; + +import { formatBytes } from '../../../lib/formatBytes'; + +const GenericPreview = ({ file }: { file: File }): ReactElement => ( + + + {`${file.name} - ${formatBytes(file.size, 2)}`} + +); + +export default GenericPreview; diff --git a/client/components/modals/FileUploadModal/ImagePreview.tsx b/client/components/modals/FileUploadModal/ImagePreview.tsx new file mode 100644 index 000000000000..28cf50efd672 --- /dev/null +++ b/client/components/modals/FileUploadModal/ImagePreview.tsx @@ -0,0 +1,42 @@ +import { Box } from '@rocket.chat/fuselage'; +import React, { useState, ReactElement } from 'react'; + +import GenericPreview from './GenericPreview'; +import PreviewSkeleton from './PreviewSkeleton'; + +type ImagePreviewProps = { + url: string; + file: File; +}; + +const ImagePreview = ({ url, file }: ImagePreviewProps): ReactElement => { + const [error, setError] = useState(false); + const [loading, setLoading] = useState(true); + + const handleLoad = (): void => setLoading(false); + const handleError = (): void => { + setLoading(false); + setError(true); + }; + + if (error) { + return ; + } + + return ( + <> + {loading && } + + + ); +}; + +export default ImagePreview; diff --git a/client/components/modals/FileUploadModal/MediaPreview.tsx b/client/components/modals/FileUploadModal/MediaPreview.tsx new file mode 100644 index 000000000000..70e476e193a1 --- /dev/null +++ b/client/components/modals/FileUploadModal/MediaPreview.tsx @@ -0,0 +1,79 @@ +import { Box, Icon } from '@rocket.chat/fuselage'; +import React, { ReactElement, useEffect, useState, memo } from 'react'; + +import { useTranslation } from '../../../contexts/TranslationContext'; +import { FilePreviewType } from './FilePreview'; +import ImagePreview from './ImagePreview'; +import PreviewSkeleton from './PreviewSkeleton'; + +type ReaderOnloadCallback = (url: FileReader['result']) => void; + +const readFileAsDataURL = (file: File, callback: ReaderOnloadCallback): void => { + const reader = new FileReader(); + reader.onload = (e): void => callback(e?.target?.result || null); + + return reader.readAsDataURL(file); +}; + +const useFileAsDataURL = (file: File): [loaded: boolean, url: null | FileReader['result']] => { + const [loaded, setLoaded] = useState(false); + const [url, setUrl] = useState(null); + + useEffect(() => { + setLoaded(false); + readFileAsDataURL(file, (url) => { + setUrl(url); + setLoaded(true); + }); + }, [file]); + return [loaded, url]; +}; + +type MediaPreviewProps = { + file: File; + fileType: FilePreviewType; +}; + +const MediaPreview = ({ file, fileType }: MediaPreviewProps): ReactElement => { + const [loaded, url] = useFileAsDataURL(file); + const t = useTranslation(); + + if (!loaded) { + return ; + } + + if (typeof url !== 'string') { + return ( + + + {t('FileUpload_Cannot_preview_file')} + + ); + } + + if (fileType === FilePreviewType.IMAGE) { + return ; + } + + if (fileType === FilePreviewType.VIDEO) { + return ( + + + {t('Browser_does_not_support_video_element')} + + ); + } + + if (fileType === FilePreviewType.AUDIO) { + return ( + + + {t('Browser_does_not_support_audio_element')} + + ); + } + + throw new Error('Wrong props provided for MediaPreview'); +}; + +export default memo(MediaPreview); diff --git a/client/components/modals/FileUploadModal/PreviewSkeleton.tsx b/client/components/modals/FileUploadModal/PreviewSkeleton.tsx new file mode 100644 index 000000000000..8940a5e8e591 --- /dev/null +++ b/client/components/modals/FileUploadModal/PreviewSkeleton.tsx @@ -0,0 +1,6 @@ +import { Skeleton } from '@rocket.chat/fuselage'; +import React, { ReactElement } from 'react'; + +const PreviewSkeleton = (): ReactElement => ; + +export default PreviewSkeleton; diff --git a/client/components/modals/FileUploadModal/index.ts b/client/components/modals/FileUploadModal/index.ts new file mode 100644 index 000000000000..8de77517738b --- /dev/null +++ b/client/components/modals/FileUploadModal/index.ts @@ -0,0 +1 @@ +export { default } from './FileUploadModal'; diff --git a/client/lib/formatBytes.ts b/client/lib/formatBytes.ts new file mode 100644 index 000000000000..f507ee50f6d6 --- /dev/null +++ b/client/lib/formatBytes.ts @@ -0,0 +1,14 @@ +export const formatBytes = (bytes: number, decimals?: number): string => { + if (bytes === 0) { + return '0 Bytes'; + } + + const k = 1024; + const dm = decimals || 0; + + const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB']; + + const i = Math.floor(Math.log(bytes) / Math.log(k)); + + return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`; +}; diff --git a/packages/rocketchat-i18n/i18n/en.i18n.json b/packages/rocketchat-i18n/i18n/en.i18n.json index 6ab0e3ba7642..c532ba25a94e 100644 --- a/packages/rocketchat-i18n/i18n/en.i18n.json +++ b/packages/rocketchat-i18n/i18n/en.i18n.json @@ -1902,6 +1902,7 @@ "FileSize_KB": "__fileSize__ KB", "FileSize_MB": "__fileSize__ MB", "FileUpload": "File Upload", + "FileUpload_Cannot_preview_file": "Cannot preview file", "FileUpload_Disabled": "File uploads are disabled.", "FileUpload_Enable_json_web_token_for_files": "Enable Json Web Tokens protection to file uploads", "FileUpload_Enable_json_web_token_for_files_description": "Appends a JWT to uploaded files urls", @@ -1924,6 +1925,7 @@ "FileUpload_json_web_token_secret_for_files_description": "File Upload Json Web Token Secret (Used to be able to access uploaded files without authentication)", "FileUpload_MaxFileSize": "Maximum File Upload Size (in bytes)", "FileUpload_MaxFileSizeDescription": "Set it to -1 to remove the file size limitation.", + "FileUpload_MediaType_NotAccepted__type__": "Media Type Not Accepted: __type__", "FileUpload_MediaType_NotAccepted": "Media Types Not Accepted", "FileUpload_MediaTypeBlackList": "Blocked Media Types", "FileUpload_MediaTypeBlackListDescription": "Comma-separated list of media types. This setting has priority over the Accepted Media Types.", From e4342b397c32ad00f028789523d4e8a26c6dbfa5 Mon Sep 17 00:00:00 2001 From: Kevin Aleman Date: Fri, 13 Aug 2021 22:17:33 -0600 Subject: [PATCH 27/76] [FIX] Close omnichannel conversations when agent is deactivated (#22917) * close omnichannel conversations when agent is deactivated * Remove console.log * remove unnecesary props from type * Update app/lib/server/functions/setUserActiveStatus.js Co-authored-by: Murtaza Patrawala <34130764+murtaza98@users.noreply.github.com> Co-authored-by: Renato Becker Co-authored-by: Murtaza Patrawala <34130764+murtaza98@users.noreply.github.com> --- .../closeOmnichannelConversations.ts | 19 +++++++++++++++++++ .../server/functions/setUserActiveStatus.js | 11 ++++++++--- app/models/server/models/LivechatRooms.js | 15 +++++++++++++++ packages/rocketchat-i18n/i18n/en.i18n.json | 1 + packages/rocketchat-i18n/i18n/es.i18n.json | 1 + 5 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 app/lib/server/functions/closeOmnichannelConversations.ts diff --git a/app/lib/server/functions/closeOmnichannelConversations.ts b/app/lib/server/functions/closeOmnichannelConversations.ts new file mode 100644 index 000000000000..46be29d8a984 --- /dev/null +++ b/app/lib/server/functions/closeOmnichannelConversations.ts @@ -0,0 +1,19 @@ +import { TAPi18n } from 'meteor/rocketchat:tap-i18n'; + +import { LivechatRooms } from '../../../models/server'; +import { IUser } from '../../../../definition/IUser'; +import { settings } from '../../../settings/server'; +import { Livechat } from '../../../livechat/server/lib/Livechat'; + +type SubscribedRooms = { + rid: string; + t: string; +} + +export const closeOmnichannelConversations = (user: IUser, subscribedRooms: SubscribedRooms[]): void => { + const roomsInfo = LivechatRooms.findByIds(subscribedRooms.map(({ rid }) => rid)); + const language = settings.get('Language') || 'en'; + roomsInfo.map((room: any) => + Livechat.closeRoom({ user, visitor: {}, room, comment: TAPi18n.__('Agent_deactivated', { lng: language }) }), + ); +}; diff --git a/app/lib/server/functions/setUserActiveStatus.js b/app/lib/server/functions/setUserActiveStatus.js index fe9a889e0cf1..28d3111d0d2f 100644 --- a/app/lib/server/functions/setUserActiveStatus.js +++ b/app/lib/server/functions/setUserActiveStatus.js @@ -6,6 +6,7 @@ import * as Mailer from '../../../mailer'; import { Users, Subscriptions, Rooms } from '../../../models'; import { settings } from '../../../settings'; import { relinquishRoomOwnerships } from './relinquishRoomOwnerships'; +import { closeOmnichannelConversations } from './closeOmnichannelConversations'; import { shouldRemoveOrChangeOwner, getSubscribedRoomsForUserWithDetails } from './getRoomsWithSingleOwner'; import { getUserSingleOwnedRooms } from './getUserSingleOwnedRooms'; @@ -41,13 +42,17 @@ export function setUserActiveStatus(userId, active, confirmRelinquish = false) { // Users without username can't do anything, so there is no need to check for owned rooms if (user.username != null && !active) { const subscribedRooms = getSubscribedRoomsForUserWithDetails(userId); + // give omnichannel rooms a special treatment :) + const chatSubscribedRooms = subscribedRooms.filter(({ t }) => t !== 'l'); + const livechatSubscribedRooms = subscribedRooms.filter(({ t }) => t === 'l'); - if (shouldRemoveOrChangeOwner(subscribedRooms) && !confirmRelinquish) { - const rooms = getUserSingleOwnedRooms(subscribedRooms); + if (shouldRemoveOrChangeOwner(chatSubscribedRooms) && !confirmRelinquish) { + const rooms = getUserSingleOwnedRooms(chatSubscribedRooms); throw new Meteor.Error('user-last-owner', '', rooms); } - relinquishRoomOwnerships(user._id, subscribedRooms, false); + closeOmnichannelConversations(user, livechatSubscribedRooms); + relinquishRoomOwnerships(user, chatSubscribedRooms, false); } Users.setUserActive(userId, active); diff --git a/app/models/server/models/LivechatRooms.js b/app/models/server/models/LivechatRooms.js index a57b5e9f3581..0b3d2b24e760 100644 --- a/app/models/server/models/LivechatRooms.js +++ b/app/models/server/models/LivechatRooms.js @@ -138,6 +138,21 @@ export class LivechatRooms extends Base { return this.find(query, options); } + findByIds(ids, fields) { + const options = {}; + + if (fields) { + options.fields = fields; + } + + const query = { + t: 'l', + _id: { $in: ids }, + }; + + return this.find(query, options); + } + findOneById(_id, fields = {}) { const options = {}; diff --git a/packages/rocketchat-i18n/i18n/en.i18n.json b/packages/rocketchat-i18n/i18n/en.i18n.json index c532ba25a94e..b065ff649ece 100644 --- a/packages/rocketchat-i18n/i18n/en.i18n.json +++ b/packages/rocketchat-i18n/i18n/en.i18n.json @@ -301,6 +301,7 @@ "Agent_messages": "Agent Messages", "Agent_Name_Placeholder": "Please enter an agent name...", "Agent_removed": "Agent removed", + "Agent_deactivated": "Agent was deactivated", "Agents": "Agents", "Alerts": "Alerts", "Alias": "Alias", diff --git a/packages/rocketchat-i18n/i18n/es.i18n.json b/packages/rocketchat-i18n/i18n/es.i18n.json index b4aedc633e85..5e3bb4e0741e 100644 --- a/packages/rocketchat-i18n/i18n/es.i18n.json +++ b/packages/rocketchat-i18n/i18n/es.i18n.json @@ -301,6 +301,7 @@ "Agent_messages": "Mensajes del agente", "Agent_Name_Placeholder": "Por favor, introduzca el nombre de un agente...", "Agent_removed": "Agente eliminado", + "Agent_deactivated": "Agente desactivado", "Agents": "Agentes", "Alerts": "Alertas", "Alias": "Alias", From 6d501764eb9b3c43fb4a2e3767e28fc6faa3152d Mon Sep 17 00:00:00 2001 From: gabriellsh <40830821+gabriellsh@users.noreply.github.com> Date: Mon, 16 Aug 2021 10:42:43 -0300 Subject: [PATCH 28/76] Chore: Remove unused ChannelActions.js #22929 Co-authored-by: Douglas Fabris --- app/ui-utils/client/index.js | 1 - app/ui-utils/client/lib/ChannelActions.js | 98 ----------------------- 2 files changed, 99 deletions(-) delete mode 100644 app/ui-utils/client/lib/ChannelActions.js diff --git a/app/ui-utils/client/index.js b/app/ui-utils/client/index.js index ff68ad0c9549..b94a368d4eaf 100644 --- a/app/ui-utils/client/index.js +++ b/app/ui-utils/client/index.js @@ -3,7 +3,6 @@ export { SideNav } from './lib/SideNav'; export { AccountBox } from './lib/AccountBox'; export { menu } from './lib/menu'; export { call } from './lib/callMethod'; -export { erase, hide, leave } from './lib/ChannelActions'; export { MessageAction } from './lib/MessageAction'; export { messageBox } from './lib/messageBox'; export { popover } from './lib/popover'; diff --git a/app/ui-utils/client/lib/ChannelActions.js b/app/ui-utils/client/lib/ChannelActions.js deleted file mode 100644 index 4988f2790854..000000000000 --- a/app/ui-utils/client/lib/ChannelActions.js +++ /dev/null @@ -1,98 +0,0 @@ -import { FlowRouter } from 'meteor/kadira:flow-router'; -import { Session } from 'meteor/session'; - -import { modal } from './modal'; -import { call } from './callMethod'; -import { RoomManager } from './RoomManager'; -import { t, UiTextContext, roomTypes, handleError } from '../../../utils'; - -export function hide(type, rid, name) { - const warnText = roomTypes.getConfig(type).getUiText(UiTextContext.HIDE_WARNING); - - modal.open({ - title: t('Are_you_sure'), - text: warnText ? t(warnText, name) : '', - type: 'warning', - showCancelButton: true, - confirmButtonColor: '#DD6B55', - confirmButtonText: t('Yes_hide_it'), - cancelButtonText: t('Cancel'), - closeOnConfirm: true, - dontAskAgain: { - action: 'hideRoom', - label: t('Hide_room'), - }, - html: false, - }, async function() { - if (['channel', 'group', 'direct'].includes(FlowRouter.getRouteName()) && (Session.get('openedRoom') === rid)) { - FlowRouter.go('home'); - } - - await call('hideRoom', rid); - if (rid === Session.get('openedRoom')) { - Session.delete('openedRoom'); - } - }); - return false; -} - -export async function leave(type, rid, name) { - const warnText = roomTypes.getConfig(type).getUiText(UiTextContext.LEAVE_WARNING); - - modal.open({ - title: t('Are_you_sure'), - text: warnText ? t(warnText, name) : '', - type: 'warning', - showCancelButton: true, - confirmButtonColor: '#DD6B55', - confirmButtonText: t('Yes_leave_it'), - cancelButtonText: t('Cancel'), - closeOnConfirm: false, - html: false, - }, async function(isConfirm) { - if (!isConfirm) { - return; - } - try { - await call('leaveRoom', rid); - modal.close(); - if (['channel', 'group', 'direct'].includes(FlowRouter.getRouteName()) && (Session.get('openedRoom') === rid)) { - FlowRouter.go('home'); - } - RoomManager.close(rid); - } catch (error) { - return modal.open({ - type: 'error', - title: t('Warning'), - text: handleError(error, false), - html: false, - }); - } - }); -} - -export function erase(rid) { - modal.open({ - title: t('Are_you_sure'), - text: t('Delete_Room_Warning'), - type: 'warning', - showCancelButton: true, - confirmButtonColor: '#DD6B55', - confirmButtonText: t('Yes_delete_it'), - cancelButtonText: t('Cancel'), - closeOnConfirm: false, - html: false, - }, async () => { - await call('eraseRoom', rid); - if (['channel', 'group', 'direct'].includes(FlowRouter.getRouteName()) && (Session.get('openedRoom') === rid)) { - FlowRouter.go('home'); - } - modal.open({ - title: t('Deleted'), - text: t('Room_has_been_deleted'), - type: 'success', - timer: 2000, - showConfirmButton: false, - }); - }); -} From 8e21e1c3d05e04a873713a533ae0fc152dc1180f Mon Sep 17 00:00:00 2001 From: "lingohub[bot]" <69908207+lingohub[bot]@users.noreply.github.com> Date: Mon, 16 Aug 2021 11:16:32 -0300 Subject: [PATCH 29/76] =?UTF-8?q?Language=20update=20from=20LingoHub=20?= =?UTF-8?q?=F0=9F=A4=96=20(#22937)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Project Name: Rocket.Chat Project Link: https://translate.lingohub.com/rocketchat/dashboard/rocket-dot-chat User: Robot LingoHub Easy language translations with LingoHub 🚀 Co-authored-by: Robot LingoHub --- packages/rocketchat-i18n/i18n/bn-IN.i18n.json | 2 +- packages/rocketchat-i18n/i18n/fr.i18n.json | 3 +++ packages/rocketchat-i18n/i18n/nl.i18n.json | 3 +++ packages/rocketchat-i18n/i18n/ru.i18n.json | 5 +++++ 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/rocketchat-i18n/i18n/bn-IN.i18n.json b/packages/rocketchat-i18n/i18n/bn-IN.i18n.json index 539c1bb35134..d42781eef18f 100644 --- a/packages/rocketchat-i18n/i18n/bn-IN.i18n.json +++ b/packages/rocketchat-i18n/i18n/bn-IN.i18n.json @@ -43,4 +43,4 @@ "add-user": "ব্যবহারকারী যুক্ত করুন", "Closed_automatically": "সিস্টেম দ্বারা স্বয়ংক্রিয়ভাবে বন্ধ", "Customize": "কাস্টমাইজ করুন" -} +} \ No newline at end of file diff --git a/packages/rocketchat-i18n/i18n/fr.i18n.json b/packages/rocketchat-i18n/i18n/fr.i18n.json index 7e6f86e14b6d..83519fc5d9a3 100644 --- a/packages/rocketchat-i18n/i18n/fr.i18n.json +++ b/packages/rocketchat-i18n/i18n/fr.i18n.json @@ -301,6 +301,7 @@ "Agent_messages": "Messages de l'agent", "Agent_Name_Placeholder": "Veuillez saisir un nom d'agent...", "Agent_removed": "Assistant supprimé", + "Agent_deactivated": "L'agent a été désactivé", "Agents": "Agents", "Alerts": "Alertes", "Alias": "Alias", @@ -1902,6 +1903,7 @@ "FileSize_KB": "__fileSize__ Ko", "FileSize_MB": "__fileSize__ Mo", "FileUpload": "Envoi de fichiers", + "FileUpload_Cannot_preview_file": "Impossible de prévisualiser le fichier", "FileUpload_Disabled": "L'envoi de fichiers n'est pas activé.", "FileUpload_Enable_json_web_token_for_files": "Activer la protection des jetons Web Json pour l'upload de fichiers", "FileUpload_Enable_json_web_token_for_files_description": "Ajoute un JWT aux URL des fichiers uploadés", @@ -1924,6 +1926,7 @@ "FileUpload_json_web_token_secret_for_files_description": "Téléversement de fichier Json Web Token Secret (utilisé pour pouvoir accéder aux fichiers téléversés sans authentification)", "FileUpload_MaxFileSize": "Taille maximale pour l'envoi de fichier (en octets)", "FileUpload_MaxFileSizeDescription": "Définissez-le sur -1 pour supprimer la limitation de taille de fichier.", + "FileUpload_MediaType_NotAccepted__type__": "Type de média non accepté : __type__", "FileUpload_MediaType_NotAccepted": "Types de fichiers non acceptés", "FileUpload_MediaTypeBlackList": "Type de médias bloqués", "FileUpload_MediaTypeBlackListDescription": "Liste des types de média séparé par des virgules. Ce paramètre a la priorité sur les types de supports acceptés.", diff --git a/packages/rocketchat-i18n/i18n/nl.i18n.json b/packages/rocketchat-i18n/i18n/nl.i18n.json index 8c1902a9bd78..89d85e91a004 100644 --- a/packages/rocketchat-i18n/i18n/nl.i18n.json +++ b/packages/rocketchat-i18n/i18n/nl.i18n.json @@ -301,6 +301,7 @@ "Agent_messages": "Agentberichten", "Agent_Name_Placeholder": "Voer een agentnaam in...", "Agent_removed": "Agent verwijderd", + "Agent_deactivated": "Agent werd gedeactiveerd", "Agents": "Agenten", "Alerts": "Waarschuwingen", "Alias": "Alias", @@ -1902,6 +1903,7 @@ "FileSize_KB": "__fileSize__ KB", "FileSize_MB": "__fileSize__ MB", "FileUpload": "Bestand uploaden", + "FileUpload_Cannot_preview_file": "Kan geen preview bekijken", "FileUpload_Disabled": "Bestandsuploads zijn uitgeschakeld.", "FileUpload_Enable_json_web_token_for_files": "Schakel Json Web Tokens-beveiliging in voor bestandsuploads", "FileUpload_Enable_json_web_token_for_files_description": "Voegt een JWT toe aan geüploade bestands-url's", @@ -1924,6 +1926,7 @@ "FileUpload_json_web_token_secret_for_files_description": "Json Web Token Secret voor bestanden uploaden (gebruikt om toegang te krijgen tot geüploade bestanden zonder authenticatie)", "FileUpload_MaxFileSize": "Maximale bestandsuploadgrootte (in bytes)", "FileUpload_MaxFileSizeDescription": "Stel het in op -1 om de beperking van de bestandsgrootte te verwijderen.", + "FileUpload_MediaType_NotAccepted__type__": "Mediatype niet geaccepteerd: __type__", "FileUpload_MediaType_NotAccepted": "Mediatypen worden niet geaccepteerd", "FileUpload_MediaTypeBlackList": "Geblokkeerde mediatypen", "FileUpload_MediaTypeBlackListDescription": "Door komma's gescheiden lijst met mediatypen. Deze instelling heeft voorrang op de geaccepteerde mediatypen.", diff --git a/packages/rocketchat-i18n/i18n/ru.i18n.json b/packages/rocketchat-i18n/i18n/ru.i18n.json index fecf86733d2e..85faaf1f9905 100644 --- a/packages/rocketchat-i18n/i18n/ru.i18n.json +++ b/packages/rocketchat-i18n/i18n/ru.i18n.json @@ -301,6 +301,7 @@ "Agent_messages": "Сообщения агента", "Agent_Name_Placeholder": "Пожалуйста, введите имя агента...", "Agent_removed": "Представитель удален", + "Agent_deactivated": "Агент был деактивирован", "Agents": "Агенты", "Alerts": "Уведомлять", "Alias": "Псевдоним", @@ -530,6 +531,7 @@ "are_also_typing": "тоже печатает...", "are_typing": "печатает...", "Are_you_sure": "Вы уверены?", + "Are_you_sure_you_want_to_clear_all_unread_messages": "Вы уверены, что хотите очистить все непрочитанные сообщения?", "Are_you_sure_you_want_to_close_this_chat": "Вы уверены, что хотите закрыть этот чат?", "Are_you_sure_you_want_to_delete_this_record": "Вы уверены, что хотите удалить эту запись?", "Are_you_sure_you_want_to_delete_your_account": "Вы уверены, что хотите удалить свою учетную запись?", @@ -1840,6 +1842,7 @@ "Federation_SRV_no_support_details": "Некоторые DNS-провайдеры не разрешают устанавливать _https или _http в SRV-записях, поэтому мы поддерживаем эти случаи, используя наш старый метод разрешения DNS-записей.", "Federation_Must_add_records": "Вы должны добавить следующие DNS записи на вашем сервере:", "Federation_SRV_records_200": "SRV-запись (2.0.0 или новее)", + "Federation_DNS_info_update": "Эта информация обновляется каждую 1 минуту", "Federation_Adding_Federated_Users": "Добавление федеративных пользователей", "Federation_Guide_adding_users": "Мы расскажем вам, как добавить первого федеративного пользователя.", "Federation_Is_working_correctly": "Интеграция федерации работает правильно.", @@ -1894,6 +1897,7 @@ "FileSize_KB": "__fileSize__ КБ", "FileSize_MB": "__fileSize__ МБ", "FileUpload": "Загрузка файлов", + "FileUpload_Cannot_preview_file": "Невозможно просмотреть файл", "FileUpload_Disabled": "Загрузка файлов отключена.", "FileUpload_Enable_json_web_token_for_files": "Включить защиту Json Web Tokens для загрузки файлов", "FileUpload_Enable_json_web_token_for_files_description": "Добавляет JWT к URL загруженных файлов", @@ -1916,6 +1920,7 @@ "FileUpload_json_web_token_secret_for_files_description": "Json Web Token Secret Загрузки Файлов (используется для доступа к загруженным файлам без аутентификации)", "FileUpload_MaxFileSize": "Максимальный размер загружаемых файлов (в байтах)", "FileUpload_MaxFileSizeDescription": "Установите значение -1 для удаления ограничения размера файла.", + "FileUpload_MediaType_NotAccepted__type__": "Данный тип медиа не принимается: __type__", "FileUpload_MediaType_NotAccepted": "Медиа-файлы не приняты", "FileUpload_MediaTypeBlackList": "Запрещенные типы файлов", "FileUpload_MediaTypeBlackListDescription": "Список типов медиа разделенных запятыми. Данная настойка имеет приоритет перед настройкой Разрешённые типы файлов", From ba131c232eae7a32fe8938b66ee530883bbc2f8c Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Mon, 16 Aug 2021 13:46:50 -0300 Subject: [PATCH 30/76] [FIX] User presence being processes even if presence monitor was disabled (#22927) --- server/lib/isPresenceMonitorEnabled.ts | 6 +++++ server/modules/watchers/watchers.module.ts | 6 ++--- server/services/meteor/service.ts | 26 ++++++++++--------- server/startup/presence.js | 30 +++++++++++----------- server/stream/streamBroadcast.js | 8 +++--- 5 files changed, 40 insertions(+), 36 deletions(-) create mode 100644 server/lib/isPresenceMonitorEnabled.ts diff --git a/server/lib/isPresenceMonitorEnabled.ts b/server/lib/isPresenceMonitorEnabled.ts new file mode 100644 index 000000000000..2616337decce --- /dev/null +++ b/server/lib/isPresenceMonitorEnabled.ts @@ -0,0 +1,6 @@ +const startMonitor = typeof process.env.DISABLE_PRESENCE_MONITOR === 'undefined' + || !['true', 'yes'].includes(String(process.env.DISABLE_PRESENCE_MONITOR).toLowerCase()); + +export function isPresenceMonitorEnabled(): boolean { + return startMonitor; +} diff --git a/server/modules/watchers/watchers.module.ts b/server/modules/watchers/watchers.module.ts index 2010ef956976..b95a6b535bad 100644 --- a/server/modules/watchers/watchers.module.ts +++ b/server/modules/watchers/watchers.module.ts @@ -34,6 +34,7 @@ import { IntegrationsRaw } from '../../../app/models/server/raw/Integrations'; import { EventSignatures } from '../../sdk/lib/Events'; import { IEmailInbox } from '../../../definition/IEmailInbox'; import { EmailInboxRaw } from '../../../app/models/server/raw/EmailInbox'; +import { isPresenceMonitorEnabled } from '../../lib/isPresenceMonitorEnabled'; interface IModelsParam { Subscriptions: SubscriptionsRaw; @@ -81,9 +82,6 @@ const hasKeys = (requiredKeys: string[]): (data?: Record) => boolea const hasRoomFields = hasKeys(Object.keys(roomFields)); const hasSubscriptionFields = hasKeys(Object.keys(subscriptionFields)); -const startMonitor = typeof process.env.DISABLE_PRESENCE_MONITOR === 'undefined' - || !['true', 'yes'].includes(String(process.env.DISABLE_PRESENCE_MONITOR).toLowerCase()); - export function initWatchers(models: IModelsParam, broadcast: BroadcastCallback, watch: Watcher): void { const { Messages, @@ -192,7 +190,7 @@ export function initWatchers(models: IModelsParam, broadcast: BroadcastCallback, }); }); - if (startMonitor) { + if (isPresenceMonitorEnabled()) { watch(UsersSessions, async ({ clientAction, id, data: eventData }) => { switch (clientAction) { case 'inserted': diff --git a/server/services/meteor/service.ts b/server/services/meteor/service.ts index 3b4214d28575..473ea38be03a 100644 --- a/server/services/meteor/service.ts +++ b/server/services/meteor/service.ts @@ -21,7 +21,7 @@ import { triggerHandler } from '../../../app/integrations/server/lib/triggerHand import { ListenersModule, minimongoChangeMap } from '../../modules/listeners/listeners.module'; import notifications from '../../../app/notifications/server/lib/Notifications'; import { configureEmailInboxes } from '../../features/EmailInbox/EmailInbox'; - +import { isPresenceMonitorEnabled } from '../../lib/isPresenceMonitorEnabled'; const autoUpdateRecords = new Map(); @@ -135,18 +135,20 @@ export class MeteorService extends ServiceClass implements IMeteor { }); // TODO: May need to merge with https://github.com/RocketChat/Rocket.Chat/blob/0ddc2831baf8340cbbbc432f88fc2cb97be70e9b/ee/server/services/Presence/Presence.ts#L28 - this.onEvent('watch.userSessions', async ({ clientAction, userSession }): Promise => { - if (clientAction === 'removed') { - UserPresenceMonitor.processUserSession({ - _id: userSession._id, - connections: [{ - fake: true, - }], - }, 'removed'); - } + if (isPresenceMonitorEnabled()) { + this.onEvent('watch.userSessions', async ({ clientAction, userSession }): Promise => { + if (clientAction === 'removed') { + UserPresenceMonitor.processUserSession({ + _id: userSession._id, + connections: [{ + fake: true, + }], + }, 'removed'); + } - UserPresenceMonitor.processUserSession(userSession, minimongoChangeMap[clientAction]); - }); + UserPresenceMonitor.processUserSession(userSession, minimongoChangeMap[clientAction]); + }); + } this.onEvent('watch.instanceStatus', async ({ clientAction, id, data }): Promise => { if (clientAction === 'removed') { diff --git a/server/startup/presence.js b/server/startup/presence.js index bcad81c80bb3..73fc47b2725c 100644 --- a/server/startup/presence.js +++ b/server/startup/presence.js @@ -3,27 +3,27 @@ import { UserPresence } from 'meteor/konecty:user-presence'; import InstanceStatusModel from '../../app/models/server/models/InstanceStatus'; import UsersSessionsModel from '../../app/models/server/models/UsersSessions'; +import { isPresenceMonitorEnabled } from '../lib/isPresenceMonitorEnabled'; Meteor.startup(function() { UserPresence.start(); - const startMonitor = typeof process.env.DISABLE_PRESENCE_MONITOR === 'undefined' - || !['true', 'yes'].includes(String(process.env.DISABLE_PRESENCE_MONITOR).toLowerCase()); - if (startMonitor) { - // UserPresenceMonitor.start(); + if (!isPresenceMonitorEnabled()) { + return; + } + // UserPresenceMonitor.start(); - // Remove lost connections - const ids = InstanceStatusModel.find({}, { fields: { _id: 1 } }).fetch().map((id) => id._id); + // Remove lost connections + const ids = InstanceStatusModel.find({}, { fields: { _id: 1 } }).fetch().map((id) => id._id); - const update = { - $pull: { - connections: { - instanceId: { - $nin: ids, - }, + const update = { + $pull: { + connections: { + instanceId: { + $nin: ids, }, }, - }; - UsersSessionsModel.update({}, update, { multi: true }); - } + }, + }; + UsersSessionsModel.update({}, update, { multi: true }); }); diff --git a/server/stream/streamBroadcast.js b/server/stream/streamBroadcast.js index 73e0c532b127..bf60f7c93340 100644 --- a/server/stream/streamBroadcast.js +++ b/server/stream/streamBroadcast.js @@ -11,13 +11,11 @@ import { isDocker, getURL } from '../../app/utils'; import { Users } from '../../app/models/server'; import InstanceStatusModel from '../../app/models/server/models/InstanceStatus'; import { StreamerCentral } from '../modules/streamer/streamer.module'; +import { isPresenceMonitorEnabled } from '../lib/isPresenceMonitorEnabled'; process.env.PORT = String(process.env.PORT).trim(); process.env.INSTANCE_IP = String(process.env.INSTANCE_IP).trim(); -const startMonitor = typeof process.env.DISABLE_PRESENCE_MONITOR === 'undefined' - || !['true', 'yes'].includes(String(process.env.DISABLE_PRESENCE_MONITOR).toLowerCase()); - const connections = {}; this.connections = connections; @@ -60,7 +58,7 @@ const cache = new Map(); const originalSetDefaultStatus = UserPresence.setDefaultStatus; export let matrixBroadCastActions; function startMatrixBroadcast() { - if (!startMonitor) { + if (!isPresenceMonitorEnabled()) { UserPresence.setDefaultStatus = originalSetDefaultStatus; } @@ -154,7 +152,7 @@ function startStreamCastBroadcast(value) { logger.connection.info('connecting in', instance, value); - if (!startMonitor) { + if (!isPresenceMonitorEnabled()) { UserPresence.setDefaultStatus = (id, status) => { Users.updateDefaultStatus(id, status); }; From fd6eb15b7f0e4bcb6fd3005398a708cf649f11d3 Mon Sep 17 00:00:00 2001 From: Shailesh Baldaniya Date: Tue, 17 Aug 2021 01:12:52 +0530 Subject: [PATCH 31/76] [FIX] users.list REST API Endpoint should return all results when count is 0 Co-authored-by: Leonardo Ostjen Couto --- app/api/server/v1/users.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/app/api/server/v1/users.js b/app/api/server/v1/users.js index f5728e450623..50f7e4a8ff7d 100644 --- a/app/api/server/v1/users.js +++ b/app/api/server/v1/users.js @@ -238,6 +238,10 @@ API.v1.addRoute('users.list', { authRequired: true }, { const actualSort = sort && sort.name ? { nameInsensitive: sort.name, ...sort } : sort || { username: 1 }; + const limit = count !== 0 ? [{ + $limit: count, + }] : []; + const result = Promise.await( UsersRaw.col .aggregate([ @@ -260,9 +264,7 @@ API.v1.addRoute('users.list', { authRequired: true }, { $sort: actualSort, }, { $skip: offset, - }, { - $limit: count, - }], + }, ...limit], totalCount: [{ $group: { _id: null, total: { $sum: 1 } } }], }, }, From 93120458811941ca6b911c6f4153665cb2a83b7c Mon Sep 17 00:00:00 2001 From: yash-rajpal <58601732+yash-rajpal@users.noreply.github.com> Date: Tue, 17 Aug 2021 09:57:19 +0530 Subject: [PATCH 32/76] [FIX] Adding Jitsi calls to Direct Multiple Room #22626 * Adding direct_multiple for Jitsi calls * fix: add direct_multiple in BBB Co-authored-by: Tasso Evangelista Co-authored-by: dougfabris --- app/videobridge/client/tabBar.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/videobridge/client/tabBar.tsx b/app/videobridge/client/tabBar.tsx index 9e66c69beb24..d67fc0b88a20 100644 --- a/app/videobridge/client/tabBar.tsx +++ b/app/videobridge/client/tabBar.tsx @@ -22,7 +22,7 @@ addAction('bbb_video', ({ room }) => { const enabledTeams = useSetting('bigbluebutton_enable_teams'); const groups = useStableArray([ - enabledDirect && 'direct', + enabledDirect && 'direct', 'direct_multiple', enabledGroup && 'group', enabledTeams && 'team', enabledChannel && 'channel', @@ -56,6 +56,7 @@ addAction('video', ({ room }) => { const groups = useStableArray([ 'direct', + 'direct_multiple', 'group', 'live', enabledTeams && 'team', From e7649144db43496d0b37cdeccae6e152ca25f564 Mon Sep 17 00:00:00 2001 From: Douglas Fabris Date: Tue, 17 Aug 2021 13:36:34 -0300 Subject: [PATCH 33/76] Regression: readNow blocked by a invalid condition (#22952) --- app/ui-utils/client/lib/readMessages.js | 6 ------ 1 file changed, 6 deletions(-) diff --git a/app/ui-utils/client/lib/readMessages.js b/app/ui-utils/client/lib/readMessages.js index ee3ce0f63e7c..8797ad6c6023 100644 --- a/app/ui-utils/client/lib/readMessages.js +++ b/app/ui-utils/client/lib/readMessages.js @@ -66,8 +66,6 @@ export const readMessage = new class extends Emitter { } readNow(rid = Session.get('openedRoom')) { - const unread = Session.get('unread'); - if (rid == null) { this.log('readMessage -> readNow canceled, no rid informed'); return; @@ -79,10 +77,6 @@ export const readMessage = new class extends Emitter { return; } - if ((unread != null) && unread !== '') { - return; - } - return Meteor.call('readMessages', rid, () => { RoomHistoryManager.getRoom(rid).unreadNotLoaded.set(0); return this.emit(rid); From 23fb89cbefc24f2eb6b103c849478aad74c40e0a Mon Sep 17 00:00:00 2001 From: Douglas Fabris Date: Wed, 18 Aug 2021 09:58:03 -0300 Subject: [PATCH 34/76] [FIX] 404 error when creating direct room for the first time #22944 * fix: race condition when creating room for the first time * fix: review --- app/e2e/client/rocketchat.e2e.js | 2 +- app/ui-utils/client/lib/openRoom.js | 12 ------------ app/utils/client/index.js | 1 + .../client => utils/client/lib}/waitUntilFind.ts | 0 client/lib/goToRoomById.ts | 4 +++- client/startup/e2e.ts | 2 +- .../contextualBar/RoomMembers/List/RoomMembers.js | 3 ++- .../RoomMembers/List/RoomMembersWithData.js | 2 ++ 8 files changed, 10 insertions(+), 16 deletions(-) rename app/{e2e/client => utils/client/lib}/waitUntilFind.ts (100%) diff --git a/app/e2e/client/rocketchat.e2e.js b/app/e2e/client/rocketchat.e2e.js index 74d52a129f0d..2c0541350ec5 100644 --- a/app/e2e/client/rocketchat.e2e.js +++ b/app/e2e/client/rocketchat.e2e.js @@ -25,7 +25,7 @@ import { call } from '../../ui-utils'; import './events.js'; import './tabbar'; import { log, logError } from './logger'; -import { waitUntilFind } from './waitUntilFind'; +import { waitUntilFind } from '../../utils/client/lib/waitUntilFind'; import { imperativeModal } from '../../../client/lib/imperativeModal'; import SaveE2EPasswordModal from './SaveE2EPasswordModal'; import EnterE2EPasswordModal from './EnterE2EPasswordModal'; diff --git a/app/ui-utils/client/lib/openRoom.js b/app/ui-utils/client/lib/openRoom.js index 30a8e7f20cb6..7d4261f7c29a 100644 --- a/app/ui-utils/client/lib/openRoom.js +++ b/app/ui-utils/client/lib/openRoom.js @@ -19,18 +19,6 @@ window.currentTracker = undefined; // cleanup session when hot reloading Session.set('openedRoom', null); - -export const waitUntilRoomBeInserted = async (type, rid) => new Promise((resolve) => { - Tracker.autorun((c) => { - const room = roomTypes.findRoom(type, rid, Meteor.user()); - if (room) { - c.stop(); - return resolve(room); - } - }); -}); - - NewRoomManager.on('changed', (rid) => { Session.set('openedRoom', rid); RoomManager.openedRoom = rid; diff --git a/app/utils/client/index.js b/app/utils/client/index.js index 6df40269d05e..4ada524ca0b6 100644 --- a/app/utils/client/index.js +++ b/app/utils/client/index.js @@ -19,3 +19,4 @@ export { templateVarHandler } from '../lib/templateVarHandler'; export { APIClient, mountArrayQueryParameters } from './lib/RestApiClient'; export { canDeleteMessage } from './lib/canDeleteMessage'; export { secondsToHHMMSS } from '../lib/timeConverter'; +export { waitUntilFind } from './lib/waitUntilFind'; diff --git a/app/e2e/client/waitUntilFind.ts b/app/utils/client/lib/waitUntilFind.ts similarity index 100% rename from app/e2e/client/waitUntilFind.ts rename to app/utils/client/lib/waitUntilFind.ts diff --git a/client/lib/goToRoomById.ts b/client/lib/goToRoomById.ts index b80c2222fe54..1be5bd2ce671 100644 --- a/client/lib/goToRoomById.ts +++ b/client/lib/goToRoomById.ts @@ -12,12 +12,14 @@ export const goToRoomById = async (rid: IRoom['_id']): Promise => { if (!rid) { return; } + const subscription = ChatSubscription.findOne({ rid }); + if (subscription) { roomTypes.openRouteLink(subscription.t, subscription, FlowRouter.current().queryParams); return; } const room = await getRoomById(rid); - roomTypes.openRouteLink(room.t, room, FlowRouter.current().queryParams); + roomTypes.openRouteLink(room.t, { rid: room._id, ...room }, FlowRouter.current().queryParams); }; diff --git a/client/startup/e2e.ts b/client/startup/e2e.ts index bc5b74c668a9..c4db9afe62ca 100644 --- a/client/startup/e2e.ts +++ b/client/startup/e2e.ts @@ -3,12 +3,12 @@ import { Meteor } from 'meteor/meteor'; import { Tracker } from 'meteor/tracker'; import { e2e } from '../../app/e2e/client/rocketchat.e2e'; -import { waitUntilFind } from '../../app/e2e/client/waitUntilFind'; import { Subscriptions, Rooms } from '../../app/models/client'; import { Notifications } from '../../app/notifications/client'; import { promises } from '../../app/promises/client'; import { settings } from '../../app/settings/client'; import { Layout } from '../../app/ui-utils/client'; +import { waitUntilFind } from '../../app/utils/client'; import { IMessage } from '../../definition/IMessage'; import { IRoom } from '../../definition/IRoom'; import { ISubscription } from '../../definition/ISubscription'; diff --git a/client/views/room/contextualBar/RoomMembers/List/RoomMembers.js b/client/views/room/contextualBar/RoomMembers/List/RoomMembers.js index d769791a7a42..a5dbc7f0b74a 100644 --- a/client/views/room/contextualBar/RoomMembers/List/RoomMembers.js +++ b/client/views/room/contextualBar/RoomMembers/List/RoomMembers.js @@ -35,6 +35,7 @@ const RoomMembers = ({ renderRow: Row = DefaultRow, rid, isTeam, + isDirect, reload, }) => { const t = useTranslation(); @@ -130,7 +131,7 @@ const RoomMembers = ({ )} - {(onClickInvite || onClickAdd) && ( + {!isDirect && (onClickInvite || onClickAdd) && ( {onClickInvite && ( diff --git a/client/views/room/contextualBar/RoomMembers/List/RoomMembersWithData.js b/client/views/room/contextualBar/RoomMembers/List/RoomMembersWithData.js index 4a2ca2ed5572..0558b4f54064 100644 --- a/client/views/room/contextualBar/RoomMembers/List/RoomMembersWithData.js +++ b/client/views/room/contextualBar/RoomMembers/List/RoomMembersWithData.js @@ -21,6 +21,7 @@ const RoomMembersWithData = ({ rid }) => { const onClickClose = useTabBarClose(); const room = useUserRoom(rid); const isTeam = room.teamMain; + const isDirect = room.t === 'd'; room.type = room.t; room.rid = rid; @@ -100,6 +101,7 @@ const RoomMembersWithData = ({ rid }) => { Date: Wed, 18 Aug 2021 07:58:26 -0600 Subject: [PATCH 35/76] [FIX] Return transcript/dashboards based on timezone settings (#22850) --- app/lib/server/startup/settings.js | 22 +++ app/livechat/client/lib/chartHandler.js | 8 +- .../imports/server/rest/dashboards.js | 13 +- app/livechat/server/lib/Analytics.js | 148 ++++++++++++------ app/livechat/server/lib/Livechat.js | 10 +- .../server/lib/analytics/dashboards.js | 16 +- .../server/methods/getAgentOverviewData.js | 7 +- .../server/methods/getAnalyticsChartData.js | 8 +- .../methods/getAnalyticsOverviewData.js | 12 +- .../server/methods/requestTranscript.js | 2 +- app/livechat/server/methods/sendTranscript.js | 2 +- app/models/server/models/LivechatRooms.js | 98 ++++++++++-- app/utils/server/lib/getTimezone.ts | 28 ++++ client/components/AutoCompleteDepartment.js | 3 +- .../views/admin/settings/MemoizedSetting.js | 2 + .../inputs/SelectTimezoneSettingInput.js | 52 ++++++ .../analytics/InterchangeableChart.js | 25 +++ .../charts/AgentStatusChart.js | 16 +- .../charts/ChatDurationChart.js | 16 +- .../realTimeMonitoring/charts/ChatsChart.js | 8 +- .../charts/ResponseTimesChart.js | 16 +- package-lock.json | 27 +++- package.json | 2 +- packages/rocketchat-i18n/i18n/en.i18n.json | 5 + packages/rocketchat-i18n/i18n/es.i18n.json | 6 + packages/rocketchat-i18n/i18n/pt-BR.i18n.json | 6 + 26 files changed, 459 insertions(+), 99 deletions(-) create mode 100644 app/utils/server/lib/getTimezone.ts create mode 100644 client/views/admin/settings/inputs/SelectTimezoneSettingInput.js diff --git a/app/lib/server/startup/settings.js b/app/lib/server/startup/settings.js index 18720214f4ed..55eb52080e02 100644 --- a/app/lib/server/startup/settings.js +++ b/app/lib/server/startup/settings.js @@ -1071,6 +1071,28 @@ settings.addGroup('General', function() { type: 'boolean', }); }); + this.section('Timezone', function() { + this.add('Default_Timezone_For_Reporting', 'server', { + type: 'select', + values: [{ + key: 'server', + i18nLabel: 'Default_Server_Timezone', + }, { + key: 'custom', + i18nLabel: 'Default_Custom_Timezone', + }, { + key: 'user', + i18nLabel: 'Default_User_Timezone', + }], + }); + this.add('Default_Custom_Timezone', '', { + type: 'timezone', + enableQuery: { + _id: 'Default_Timezone_For_Reporting', + value: 'custom', + }, + }); + }); }); settings.addGroup('Message', function() { diff --git a/app/livechat/client/lib/chartHandler.js b/app/livechat/client/lib/chartHandler.js index f8c7e67dd22d..7af6388409b1 100644 --- a/app/livechat/client/lib/chartHandler.js +++ b/app/livechat/client/lib/chartHandler.js @@ -1,6 +1,6 @@ import { TAPi18n } from 'meteor/rocketchat:tap-i18n'; -const lineChartConfiguration = ({ legends = false, anim = false, smallTicks = false }) => { +const lineChartConfiguration = ({ legends = false, anim = false, smallTicks = false, displayColors = false, tooltipCallbacks = {} }) => { const config = { layout: { padding: { @@ -17,7 +17,8 @@ const lineChartConfiguration = ({ legends = false, anim = false, smallTicks = fa tooltips: { enabled: true, mode: 'point', - displayColors: false, // hide color box + displayColors, + ...tooltipCallbacks, }, scales: { xAxes: [{ @@ -81,7 +82,7 @@ const lineChartConfiguration = ({ legends = false, anim = false, smallTicks = fa }; -const doughnutChartConfiguration = (title) => ({ +const doughnutChartConfiguration = (title, tooltipCallbacks = {}) => ({ layout: { padding: { top: 0, @@ -104,6 +105,7 @@ const doughnutChartConfiguration = (title) => ({ enabled: true, mode: 'point', displayColors: false, // hide color box + ...tooltipCallbacks, }, // animation: { // duration: 0 // general animation time diff --git a/app/livechat/imports/server/rest/dashboards.js b/app/livechat/imports/server/rest/dashboards.js index af8972296b20..9a37d61cc6f2 100644 --- a/app/livechat/imports/server/rest/dashboards.js +++ b/app/livechat/imports/server/rest/dashboards.js @@ -13,6 +13,7 @@ import { getAgentsProductivityMetrics, getChatsMetrics, } from '../../../server/lib/analytics/dashboards'; +import { Users } from '../../../../models'; API.v1.addRoute('livechat/analytics/dashboards/conversation-totalizers', { authRequired: true }, { get() { @@ -36,7 +37,9 @@ API.v1.addRoute('livechat/analytics/dashboards/conversation-totalizers', { authR } end = new Date(end); - const totalizers = getConversationsMetrics({ start, end, departmentId }); + const user = Users.findOneById(this.userId, { fields: { utcOffset: 1, language: 1 } }); + + const totalizers = getConversationsMetrics({ start, end, departmentId, user }); return API.v1.success(totalizers); }, }); @@ -63,7 +66,9 @@ API.v1.addRoute('livechat/analytics/dashboards/agents-productivity-totalizers', } end = new Date(end); - const totalizers = getAgentsProductivityMetrics({ start, end, departmentId }); + const user = Users.findOneById(this.userId, { fields: { utcOffset: 1, language: 1 } }); + + const totalizers = getAgentsProductivityMetrics({ start, end, departmentId, user }); return API.v1.success(totalizers); }, }); @@ -117,7 +122,9 @@ API.v1.addRoute('livechat/analytics/dashboards/productivity-totalizers', { authR } end = new Date(end); - const totalizers = getProductivityMetrics({ start, end, departmentId }); + const user = Users.findOneById(this.userId, { fields: { utcOffset: 1, language: 1 } }); + + const totalizers = getProductivityMetrics({ start, end, departmentId, user }); return API.v1.success(totalizers); }, diff --git a/app/livechat/server/lib/Analytics.js b/app/livechat/server/lib/Analytics.js index b55486751f82..c4251fbd1bce 100644 --- a/app/livechat/server/lib/Analytics.js +++ b/app/livechat/server/lib/Analytics.js @@ -1,63 +1,85 @@ +import { TAPi18n } from 'meteor/rocketchat:tap-i18n'; import moment from 'moment'; import { LivechatRooms } from '../../../models'; import { secondsToHHMMSS } from '../../../utils/server'; +import { getTimezone } from '../../../utils/server/lib/getTimezone'; +import { Logger } from '../../../logger'; + +const HOURS_IN_DAY = 24; +const logger = new Logger('OmnichannelAnalytics'); export const Analytics = { getAgentOverviewData(options) { - const from = moment(options.daterange.from); - const to = moment(options.daterange.to); + const { departmentId, utcOffset, daterange: { from: fDate, to: tDate } = {}, chartOptions: { name } = {} } = options; + const timezone = getTimezone({ utcOffset }); + const from = moment.tz(fDate, 'YYYY-MM-DD', timezone).startOf('day').utc(); + const to = moment.tz(tDate, 'YYYY-MM-DD', timezone).endOf('day').utc(); + + logger.debug(`getAgentOverviewData[${ name }] -> Using timezone ${ timezone } with date range ${ from } - ${ to }`); if (!(moment(from).isValid() && moment(to).isValid())) { - console.log('livechat:getAgentOverviewData => Invalid dates'); + logger.error('livechat:getAgentOverviewData => Invalid dates'); return; } - if (!this.AgentOverviewData[options.chartOptions.name]) { - console.log(`Method RocketChat.Livechat.Analytics.AgentOverviewData.${ options.chartOptions.name } does NOT exist`); + if (!this.AgentOverviewData[name]) { + logger.error(`Method RocketChat.Livechat.Analytics.AgentOverviewData.${ name } does NOT exist`); return; } - const { departmentId } = options; - - return this.AgentOverviewData[options.chartOptions.name](from, to, departmentId); + return this.AgentOverviewData[name](from, to, departmentId); }, getAnalyticsChartData(options) { + const { + utcOffset, + departmentId, + daterange: { from: fDate, to: tDate } = {}, + chartOptions: { name: chartLabel }, + chartOptions: { name } = {}, + } = options; + // Check if function exists, prevent server error in case property altered - if (!this.ChartData[options.chartOptions.name]) { - console.log(`Method RocketChat.Livechat.Analytics.ChartData.${ options.chartOptions.name } does NOT exist`); + if (!this.ChartData[name]) { + logger.error(`Method RocketChat.Livechat.Analytics.ChartData.${ name } does NOT exist`); return; } - const from = moment(options.daterange.from); - const to = moment(options.daterange.to); + const timezone = getTimezone({ utcOffset }); + const from = moment.tz(fDate, 'YYYY-MM-DD', timezone).startOf('day').utc(); + const to = moment.tz(tDate, 'YYYY-MM-DD', timezone).endOf('day').utc(); + const isSameDay = from.diff(to, 'days') === 0; + + logger.debug(`getAnalyticsChartData[${ name }] -> Using timezone ${ timezone } with date range ${ from } - ${ to }`); if (!(moment(from).isValid() && moment(to).isValid())) { - console.log('livechat:getAnalyticsChartData => Invalid dates'); + logger.error('livechat:getAnalyticsChartData => Invalid dates'); return; } const data = { - chartLabel: options.chartOptions.name, + chartLabel, dataLabels: [], dataPoints: [], }; - const { departmentId } = options; - - if (from.diff(to) === 0) { // data for single day - for (let m = moment(from); m.diff(to, 'days') <= 0; m.add(1, 'hours')) { - const hour = m.format('H'); - data.dataLabels.push(`${ moment(hour, ['H']).format('hA') }-${ moment((parseInt(hour) + 1) % 24, ['H']).format('hA') }`); + if (isSameDay) { // data for single day + for (let m = moment(from), currentHour = 0; currentHour < HOURS_IN_DAY; currentHour++) { + const hour = m.add(currentHour ? 1 : 0, 'hour').format('H'); + const label = { + from: moment.utc().set({ hour }).tz(timezone).format('hA'), + to: moment.utc().set({ hour }).add(1, 'hour').tz(timezone).format('hA'), + }; + data.dataLabels.push(`${ label.from }-${ label.to }`); const date = { gte: m, lt: moment(m).add(1, 'hours'), }; - data.dataPoints.push(this.ChartData[options.chartOptions.name](date, departmentId)); + data.dataPoints.push(this.ChartData[name](date, departmentId)); } } else { for (let m = moment(from); m.diff(to, 'days') <= 0; m.add(1, 'days')) { @@ -68,7 +90,7 @@ export const Analytics = { lt: moment(m).add(1, 'days'), }; - data.dataPoints.push(this.ChartData[options.chartOptions.name](date, departmentId)); + data.dataPoints.push(this.ChartData[name](date, departmentId)); } } @@ -76,21 +98,32 @@ export const Analytics = { }, getAnalyticsOverviewData(options) { - const from = moment(options.daterange.from); - const to = moment(options.daterange.to); - const { departmentId } = options; + const { + departmentId, + utcOffset = 0, + language, + daterange: { from: fDate, to: tDate } = {}, + analyticsOptions: { name } = {}, + } = options; + const timezone = getTimezone({ utcOffset }); + const from = moment.tz(fDate, 'YYYY-MM-DD', timezone).startOf('day').utc(); + const to = moment.tz(tDate, 'YYYY-MM-DD', timezone).endOf('day').utc(); + + logger.debug(`getAnalyticsOverviewData[${ name }] -> Using timezone ${ timezone } with date range ${ from } - ${ to }`); if (!(moment(from).isValid() && moment(to).isValid())) { - console.log('livechat:getAnalyticsOverviewData => Invalid dates'); + logger.error('livechat:getAnalyticsOverviewData => Invalid dates'); return; } - if (!this.OverviewData[options.analyticsOptions.name]) { - console.log(`Method RocketChat.Livechat.Analytics.OverviewData.${ options.analyticsOptions.name } does NOT exist`); + if (!this.OverviewData[name]) { + logger.error(`Method RocketChat.Livechat.Analytics.OverviewData.${ name } does NOT exist`); return; } - return this.OverviewData[options.analyticsOptions.name](from, to, departmentId); + const t = (s) => TAPi18n.__(s, { lng: language }); + + return this.OverviewData[name](from, to, departmentId, timezone, t); }, ChartData: { @@ -122,10 +155,14 @@ export const Analytics = { Total_messages(date, departmentId) { let total = 0; - LivechatRooms.getAnalyticsMetricsBetweenDate('l', date, { departmentId }).forEach(({ msgs }) => { + // we don't want to count visitor messages + const extraFilter = { $lte: ['$token', null] }; + const allConversations = Promise.await(LivechatRooms.getAnalyticsMetricsBetweenDateWithMessages('l', date, { departmentId }, extraFilter).toArray()); + allConversations.map(({ msgs }) => { if (msgs) { total += msgs; } + return null; }); return total; @@ -242,7 +279,8 @@ export const Analytics = { * * @returns {Array[Object]} */ - Conversations(from, to, departmentId) { + Conversations(from, to, departmentId, timezone, t = (v) => v) { + // TODO: most calls to db here can be done in one single call instead of one per day/hour let totalConversations = 0; // Total conversations let openConversations = 0; // open conversations let totalMessages = 0; // total msgs @@ -260,28 +298,30 @@ export const Analytics = { totalMessagesOnWeekday.set(weekday, totalMessagesOnWeekday.has(weekday) ? totalMessagesOnWeekday.get(weekday) + msgs : msgs); }; - for (let m = moment(from); m.diff(to, 'days') <= 0; m.add(1, 'days')) { + for (let m = moment.tz(from, timezone).startOf('day').utc(), daysProcessed = 0; daysProcessed < days; daysProcessed++) { + const clonedDate = m.clone(); const date = { - gte: m, - lt: moment(m).add(1, 'days'), + gte: clonedDate, + lt: m.add(1, 'days'), }; - const result = Promise.await(LivechatRooms.getAnalyticsBetweenDate(date, { departmentId }).toArray()); totalConversations += result.length; - result.forEach(summarize(m)); + result.forEach(summarize(clonedDate)); } const busiestDay = this.getKeyHavingMaxValue(totalMessagesOnWeekday, '-'); // returns key with max value + // TODO: this code assumes the busiest day is the same every week, which may not be true + // This means that for periods larger than 1 week, the busiest hour won't be the "busiest hour" + // on the period, but the busiest hour on the busiest day. (sorry for busiest excess) // iterate through all busiestDay in given date-range and find busiest hour - for (let m = moment(from).day(busiestDay); m <= to; m.add(7, 'days')) { + for (let m = moment.tz(from, timezone).day(busiestDay).startOf('day').utc(); m <= to; m.add(7, 'days')) { if (m < from) { continue; } - - for (let h = moment(m); h.diff(m, 'days') <= 0; h.add(1, 'hours')) { + for (let h = moment(m), currentHour = 0; currentHour < 24; currentHour++) { const date = { - gte: h, - lt: moment(h).add(1, 'hours'), + gte: h.clone(), + lt: h.add(1, 'hours'), }; Promise.await(LivechatRooms.getAnalyticsBetweenDate(date, { departmentId }).toArray()).forEach(({ msgs, @@ -292,7 +332,11 @@ export const Analytics = { } } - const busiestHour = this.getKeyHavingMaxValue(totalMessagesInHour, -1); + const utcBusiestHour = this.getKeyHavingMaxValue(totalMessagesInHour, -1); + const busiestHour = { + to: utcBusiestHour >= 0 ? moment.utc().set({ hour: utcBusiestHour }).tz(timezone).format('hA') : '-', + from: utcBusiestHour >= 0 ? moment.utc().set({ hour: utcBusiestHour }).subtract(1, 'hour').tz(timezone).format('hA') : '', + }; const data = [{ title: 'Total_conversations', @@ -305,13 +349,13 @@ export const Analytics = { value: totalMessages, }, { title: 'Busiest_day', - value: busiestDay, + value: t(busiestDay), }, { title: 'Conversations_per_day', value: (totalConversations / days).toFixed(2), }, { title: 'Busiest_time', - value: busiestHour > 0 ? `${ moment(busiestHour, ['H']).format('hA') }-${ moment((parseInt(busiestHour) + 1) % 24, ['H']).format('hA') }` : '-', + value: `${ busiestHour.from }${ busiestHour.to ? `- ${ busiestHour.to }` : '' }`, }]; return data; @@ -417,13 +461,13 @@ export const Analytics = { data: [], }; - LivechatRooms.getAnalyticsMetricsBetweenDate('l', date, { departmentId }).forEach(({ - servedBy, - }) => { - if (servedBy) { - this.updateMap(agentConversations, servedBy.username, 1); + const allConversations = Promise.await(LivechatRooms.getAnalyticsMetricsBetweenDateWithMessages('l', date, { departmentId }).toArray()); + allConversations.map((room) => { + if (room.servedBy) { + this.updateMap(agentConversations, room.servedBy.username, 1); total++; } + return null; }); agentConversations.forEach((value, key) => { // calculate percentage @@ -527,13 +571,17 @@ export const Analytics = { data: [], }; - LivechatRooms.getAnalyticsMetricsBetweenDate('l', date, { departmentId }).forEach(({ + // we don't want to count visitor messages + const extraFilter = { $lte: ['$token', null] }; + const allConversations = Promise.await(LivechatRooms.getAnalyticsMetricsBetweenDateWithMessages('l', date, { departmentId }, extraFilter).toArray()); + allConversations.map(({ servedBy, msgs, }) => { if (servedBy) { this.updateMap(agentMessages, servedBy.username, msgs); } + return null; }); agentMessages.forEach((value, key) => { // calculate percentage diff --git a/app/livechat/server/lib/Livechat.js b/app/livechat/server/lib/Livechat.js index 04f08efacd4c..b07f9750cf4e 100644 --- a/app/livechat/server/lib/Livechat.js +++ b/app/livechat/server/lib/Livechat.js @@ -7,13 +7,14 @@ import { TAPi18n } from 'meteor/rocketchat:tap-i18n'; import { HTTP } from 'meteor/http'; import _ from 'underscore'; import s from 'underscore.string'; -import moment from 'moment'; +import moment from 'moment-timezone'; import UAParser from 'ua-parser-js'; import { QueueManager } from './QueueManager'; import { RoutingManager } from './RoutingManager'; import { Analytics } from './Analytics'; import { settings } from '../../../settings/server'; +import { getTimezone } from '../../../utils/server/lib/getTimezone'; import { callbacks } from '../../../callbacks/server'; import { Users, @@ -983,6 +984,7 @@ export const Livechat = { const visitor = LivechatVisitors.getVisitorByToken(token, { fields: { _id: 1, token: 1, language: 1, username: 1, name: 1 } }); const userLanguage = (visitor && visitor.language) || settings.get('Language') || 'en'; + const timezone = getTimezone(user); // allow to only user to send transcripts from their own chats if (!room || room.t !== 'l' || !room.v || room.v.token !== token) { @@ -1002,7 +1004,7 @@ export const Livechat = { author = showAgentInfo ? message.u.name || message.u.username : TAPi18n.__('Agent', { lng: userLanguage }); } - const datetime = moment(message.ts).locale(userLanguage).format('LLL'); + const datetime = moment.tz(message.ts, timezone).locale(userLanguage).format('LLL'); const singleMessage = `

${ author } ${ datetime }

${ message.msg }

@@ -1045,6 +1047,7 @@ export const Livechat = { check(user, Match.ObjectIncluding({ _id: String, username: String, + utcOffset: Number, name: Match.Maybe(String), })); @@ -1058,13 +1061,14 @@ export const Livechat = { throw new Meteor.Error('error-transcript-already-requested', 'Transcript already requested'); } - const { _id, username, name } = user; + const { _id, username, name, utcOffset } = user; const transcriptRequest = { requestedAt: new Date(), requestedBy: { _id, username, name, + utcOffset, }, email, subject, diff --git a/app/livechat/server/lib/analytics/dashboards.js b/app/livechat/server/lib/analytics/dashboards.js index e3d9c2db552c..18bdca630033 100644 --- a/app/livechat/server/lib/analytics/dashboards.js +++ b/app/livechat/server/lib/analytics/dashboards.js @@ -1,6 +1,7 @@ import moment from 'moment'; import { LivechatRooms, Users, LivechatVisitors, LivechatAgentActivity } from '../../../../models/server/raw'; +import { settings } from '../../../../settings'; import { Livechat } from '../Livechat'; import { secondsToHHMMSS } from '../../../../utils/server'; import { @@ -31,6 +32,7 @@ const getProductivityMetricsAsync = async ({ start, end, departmentId = undefined, + user = {}, }) => { if (!start || !end) { throw new Error('"start" and "end" must be provided'); @@ -44,6 +46,8 @@ const getProductivityMetricsAsync = async ({ name: 'Productivity', }, departmentId, + utcOffset: user.utcOffset, + language: user.language || settings.get('Language') || 'en', }); const averageWaitingTime = await findAllAverageWaitingTimeAsync({ start, @@ -71,6 +75,7 @@ const getAgentsProductivityMetricsAsync = async ({ start, end, departmentId = undefined, + user = {}, }) => { if (!start || !end) { throw new Error('"start" and "end" must be provided'); @@ -93,6 +98,8 @@ const getAgentsProductivityMetricsAsync = async ({ name: 'Conversations', }, departmentId, + utcOffset: user.utcOffset, + language: user.language || settings.get('Language') || 'en', }); const totalOfServiceTime = averageOfServiceTime.departments.length; @@ -169,6 +176,7 @@ const getConversationsMetricsAsync = async ({ start, end, departmentId, + user = {}, }) => { if (!start || !end) { throw new Error('"start" and "end" must be provided'); @@ -182,6 +190,8 @@ const getConversationsMetricsAsync = async ({ name: 'Conversations', }, ...departmentId && departmentId !== 'undefined' && { departmentId }, + utcOffset: user.utcOffset, + language: user.language || settings.get('Language') || 'en', }); const metrics = ['Total_conversations', 'Open_conversations', 'Total_messages']; const visitorsCount = await LivechatVisitors.getVisitorsBetweenDate({ start, end, department: departmentId }).count(); @@ -264,9 +274,9 @@ const findAllResponseTimeMetricsAsync = async ({ }; export const findAllChatsStatus = ({ start, end, departmentId = undefined }) => Promise.await(findAllChatsStatusAsync({ start, end, departmentId })); -export const getProductivityMetrics = ({ start, end, departmentId = undefined }) => Promise.await(getProductivityMetricsAsync({ start, end, departmentId })); -export const getAgentsProductivityMetrics = ({ start, end, departmentId = undefined }) => Promise.await(getAgentsProductivityMetricsAsync({ start, end, departmentId })); -export const getConversationsMetrics = ({ start, end, departmentId = undefined }) => Promise.await(getConversationsMetricsAsync({ start, end, departmentId })); +export const getProductivityMetrics = ({ start, end, departmentId = undefined, user = {} }) => Promise.await(getProductivityMetricsAsync({ start, end, departmentId, user })); +export const getAgentsProductivityMetrics = ({ start, end, departmentId = undefined, user = {} }) => Promise.await(getAgentsProductivityMetricsAsync({ start, end, departmentId, user })); +export const getConversationsMetrics = ({ start, end, departmentId = undefined, user = {} }) => Promise.await(getConversationsMetricsAsync({ start, end, departmentId, user })); export const findAllChatMetricsByAgent = ({ start, end, departmentId = undefined }) => Promise.await(findAllChatMetricsByAgentAsync({ start, end, departmentId })); export const findAllChatMetricsByDepartment = ({ start, end, departmentId = undefined }) => Promise.await(findAllChatMetricsByDepartmentAsync({ start, end, departmentId })); export const findAllResponseTimeMetrics = ({ start, end, departmentId = undefined }) => Promise.await(findAllResponseTimeMetricsAsync({ start, end, departmentId })); diff --git a/app/livechat/server/methods/getAgentOverviewData.js b/app/livechat/server/methods/getAgentOverviewData.js index 7722de1bacb3..f6cc509f1441 100644 --- a/app/livechat/server/methods/getAgentOverviewData.js +++ b/app/livechat/server/methods/getAgentOverviewData.js @@ -2,10 +2,12 @@ import { Meteor } from 'meteor/meteor'; import { hasPermission } from '../../../authorization'; import { Livechat } from '../lib/Livechat'; +import { Users } from '../../../models'; Meteor.methods({ 'livechat:getAgentOverviewData'(options) { - if (!Meteor.userId() || !hasPermission(Meteor.userId(), 'view-livechat-manager')) { + const userId = Meteor.userId(); + if (!userId || !hasPermission(userId, 'view-livechat-manager')) { throw new Meteor.Error('error-not-allowed', 'Not allowed', { method: 'livechat:getAgentOverviewData', }); @@ -16,6 +18,7 @@ Meteor.methods({ return; } - return Livechat.Analytics.getAgentOverviewData(options); + const user = Users.findOneById(userId, { fields: { _id: 1, utcOffset: 1 } }); + return Livechat.Analytics.getAgentOverviewData({ ...options, utcOffset: user?.utcOffset || 0 }); }, }); diff --git a/app/livechat/server/methods/getAnalyticsChartData.js b/app/livechat/server/methods/getAnalyticsChartData.js index efe2a8529052..42b92ac31a4b 100644 --- a/app/livechat/server/methods/getAnalyticsChartData.js +++ b/app/livechat/server/methods/getAnalyticsChartData.js @@ -1,11 +1,13 @@ import { Meteor } from 'meteor/meteor'; import { hasPermission } from '../../../authorization'; +import { Users } from '../../../models'; import { Livechat } from '../lib/Livechat'; Meteor.methods({ 'livechat:getAnalyticsChartData'(options) { - if (!Meteor.userId() || !hasPermission(Meteor.userId(), 'view-livechat-manager')) { + const userId = Meteor.userId(); + if (!userId || !hasPermission(userId, 'view-livechat-manager')) { throw new Meteor.Error('error-not-allowed', 'Not allowed', { method: 'livechat:getAnalyticsChartData', }); @@ -16,6 +18,8 @@ Meteor.methods({ return; } - return Livechat.Analytics.getAnalyticsChartData(options); + const user = Users.findOneById(userId, { fields: { _id: 1, utcOffset: 1 } }); + + return Livechat.Analytics.getAnalyticsChartData({ ...options, utcOffset: user?.utcOffset }); }, }); diff --git a/app/livechat/server/methods/getAnalyticsOverviewData.js b/app/livechat/server/methods/getAnalyticsOverviewData.js index 4f41291d804a..741e26ccee53 100644 --- a/app/livechat/server/methods/getAnalyticsOverviewData.js +++ b/app/livechat/server/methods/getAnalyticsOverviewData.js @@ -1,21 +1,27 @@ import { Meteor } from 'meteor/meteor'; import { hasPermission } from '../../../authorization'; +import { Users } from '../../../models'; +import { settings } from '../../../settings'; import { Livechat } from '../lib/Livechat'; Meteor.methods({ 'livechat:getAnalyticsOverviewData'(options) { - if (!Meteor.userId() || !hasPermission(Meteor.userId(), 'view-livechat-manager')) { + const userId = Meteor.userId(); + if (!userId || !hasPermission(userId, 'view-livechat-manager')) { throw new Meteor.Error('error-not-allowed', 'Not allowed', { method: 'livechat:getAnalyticsOverviewData', }); } if (!(options.analyticsOptions && options.analyticsOptions.name)) { - console.log('Incorrect analytics options'); + console.error('Incorrect analytics options'); return; } - return Livechat.Analytics.getAnalyticsOverviewData(options); + const user = Users.findOneById(userId, { fields: { _id: 1, utcOffset: 1, language: 1 } }); + const language = user.language || settings.get('Language') || 'en'; + + return Livechat.Analytics.getAnalyticsOverviewData({ ...options, utcOffset: user?.utcOffset || 0, language }); }, }); diff --git a/app/livechat/server/methods/requestTranscript.js b/app/livechat/server/methods/requestTranscript.js index 20e5b4477ec1..82856c225522 100644 --- a/app/livechat/server/methods/requestTranscript.js +++ b/app/livechat/server/methods/requestTranscript.js @@ -14,7 +14,7 @@ Meteor.methods({ throw new Meteor.Error('error-not-allowed', 'Not allowed', { method: 'livechat:requestTranscript' }); } - const user = Users.findOneById(Meteor.userId(), { fields: { _id: 1, username: 1, name: 1 } }); + const user = Users.findOneById(Meteor.userId(), { fields: { _id: 1, username: 1, name: 1, utcOffset: 1 } }); return Livechat.requestTranscript({ rid, email, subject, user }); }, }); diff --git a/app/livechat/server/methods/sendTranscript.js b/app/livechat/server/methods/sendTranscript.js index 0229b9a26f06..41e945f28889 100644 --- a/app/livechat/server/methods/sendTranscript.js +++ b/app/livechat/server/methods/sendTranscript.js @@ -15,7 +15,7 @@ Meteor.methods({ throw new Meteor.Error('error-not-allowed', 'Not allowed', { method: 'livechat:sendTranscript' }); } - const user = Users.findOneById(Meteor.userId(), { fields: { _id: 1, username: 1, name: 1 } }); + const user = Users.findOneById(Meteor.userId(), { fields: { _id: 1, username: 1, name: 1, utcOffset: 1 } }); return Livechat.sendTranscript({ token, rid, email, subject, user }); }, }); diff --git a/app/models/server/models/LivechatRooms.js b/app/models/server/models/LivechatRooms.js index 0b3d2b24e760..70edf612cba9 100644 --- a/app/models/server/models/LivechatRooms.js +++ b/app/models/server/models/LivechatRooms.js @@ -441,6 +441,73 @@ export class LivechatRooms extends Base { return this.find(query, { fields: { ts: 1, departmentId: 1, open: 1, servedBy: 1, metrics: 1, msgs: 1 } }); } + getAnalyticsMetricsBetweenDateWithMessages(t, date, { departmentId } = {}, extraQuery) { + return this.model.rawCollection().aggregate([ + { + $match: { + t, + ts: { + $gte: new Date(date.gte), // ISO Date, ts >= date.gte + $lt: new Date(date.lt), // ISODate, ts < date.lt + }, + ...departmentId && departmentId !== 'undefined' && { departmentId }, + }, + }, + { $addFields: { roomId: '$_id' } }, + { + $lookup: { + from: 'rocketchat_message', + // mongo doesn't like _id as variable name here :( + let: { roomId: '$roomId' }, + pipeline: [{ + $match: { + $expr: { + $and: [{ + $eq: ['$$roomId', '$rid'], + }, { + // this is similar to do { $exists: false } + $lte: ['$t', null], + }, ...extraQuery ? [extraQuery] : []], + }, + }, + }], + as: 'messages', + }, + }, + { + $unwind: { + path: '$messages', + preserveNullAndEmptyArrays: true, + }, + }, + { + $group: { + _id: { + _id: '$_id', + ts: '$ts', + departmentId: '$departmentId', + open: '$open', + servedBy: '$servedBy', + metrics: '$metrics', + }, + messagesCount: { + $sum: 1, + }, + }, + }, + { + $project: { + _id: '$_id._id', + ts: '$_id.ts', + departmentId: '$_id.departmentId', + open: '$_id.open', + servedBy: '$_id.servedBy', + metrics: '$_id.metrics', + msgs: '$messagesCount', + }, + }]); + } + getAnalyticsBetweenDate(date, { departmentId } = {}) { return this.model.rawCollection().aggregate([ { @@ -453,11 +520,24 @@ export class LivechatRooms extends Base { ...departmentId && departmentId !== 'undefined' && { departmentId }, }, }, + { $addFields: { roomId: '$_id' } }, { $lookup: { from: 'rocketchat_message', - localField: '_id', - foreignField: 'rid', + // mongo doesn't like _id as variable name here :( + let: { roomId: '$roomId' }, + pipeline: [{ + $match: { + $expr: { + $and: [{ + $eq: ['$$roomId', '$rid'], + }, { + // this is similar to do { $exists: false } + $lte: ['$t', null], + }], + }, + }, + }], as: 'messages', }, }, @@ -476,16 +556,9 @@ export class LivechatRooms extends Base { open: '$open', servedBy: '$servedBy', metrics: '$metrics', - msgs: '$msgs', }, - messages: { - $sum: { - $cond: [{ - $and: [ - { $ifNull: ['$messages.t', false] }, - ], - }, 1, 0], - }, + messagesCount: { + $sum: 1, }, }, }, @@ -497,10 +570,9 @@ export class LivechatRooms extends Base { open: '$_id.open', servedBy: '$_id.servedBy', metrics: '$_id.metrics', - msgs: { $subtract: ['$_id.msgs', '$messages'] }, + msgs: '$messagesCount', }, }, - ]); } diff --git a/app/utils/server/lib/getTimezone.ts b/app/utils/server/lib/getTimezone.ts new file mode 100644 index 000000000000..9f68cb38325b --- /dev/null +++ b/app/utils/server/lib/getTimezone.ts @@ -0,0 +1,28 @@ +import moment from 'moment-timezone'; + +import { settings } from '../../../settings/server'; +import { SettingValue } from '../../../../definition/ISetting'; + +const padOffset = (offset: string | number): string => { + const numberOffset = Number(offset); + const absOffset = Math.abs(numberOffset); + const isNegative = !(numberOffset === absOffset); + + return `${ isNegative ? '-' : '+' }${ absOffset < 10 ? `0${ absOffset }` : absOffset }:00`; +}; + +const guessTimezoneFromOffset = (offset: string | number): string => moment.tz.names() + .find((tz) => padOffset(offset) === moment.tz(tz).format('Z').toString()) || moment.tz.guess(); + +export const getTimezone = (user: { utcOffset: string | number }): string | void | SettingValue => { + const timezone = settings.get('Default_Timezone_For_Reporting'); + + switch (timezone) { + case 'custom': + return settings.get('Default_Custom_Timezone'); + case 'user': + return guessTimezoneFromOffset(user.utcOffset); + default: + return moment.tz.guess(); + } +}; diff --git a/client/components/AutoCompleteDepartment.js b/client/components/AutoCompleteDepartment.js index c7a4b83f7dc3..964be7315f23 100644 --- a/client/components/AutoCompleteDepartment.js +++ b/client/components/AutoCompleteDepartment.js @@ -43,8 +43,9 @@ const AutoCompleteDepartment = (props) => { return 0; }); + const findValue = value !== undefined && value !== null ? value : ''; const department = sortedByName.find( - (dep) => dep._id === (typeof value === 'string' ? value : value.value), + (dep) => dep._id === (typeof findValue !== 'object' && findValue ? findValue : findValue.value), )?.value; return ( diff --git a/client/views/admin/settings/MemoizedSetting.js b/client/views/admin/settings/MemoizedSetting.js index 4bb5ba365e05..3454bba36e62 100644 --- a/client/views/admin/settings/MemoizedSetting.js +++ b/client/views/admin/settings/MemoizedSetting.js @@ -15,6 +15,7 @@ import PasswordSettingInput from './inputs/PasswordSettingInput'; import RelativeUrlSettingInput from './inputs/RelativeUrlSettingInput'; import RoomPickSettingInput from './inputs/RoomPickSettingInput'; import SelectSettingInput from './inputs/SelectSettingInput'; +import SelectTimezoneSettingInput from './inputs/SelectTimezoneSettingInput'; import StringSettingInput from './inputs/StringSettingInput'; const MemoizedSetting = ({ @@ -44,6 +45,7 @@ const MemoizedSetting = ({ action: ActionSettingInput, asset: AssetSettingInput, roomPick: RoomPickSettingInput, + timezone: SelectTimezoneSettingInput, }[type] || GenericSettingInput; return ( diff --git a/client/views/admin/settings/inputs/SelectTimezoneSettingInput.js b/client/views/admin/settings/inputs/SelectTimezoneSettingInput.js new file mode 100644 index 000000000000..d8edee60cd5e --- /dev/null +++ b/client/views/admin/settings/inputs/SelectTimezoneSettingInput.js @@ -0,0 +1,52 @@ +import { Box, Field, Flex, Select } from '@rocket.chat/fuselage'; +import moment from 'moment-timezone'; +import React from 'react'; + +import ResetSettingButton from '../ResetSettingButton'; + +function SelectTimezoneSettingInput({ + _id, + label, + value, + placeholder, + readonly, + autocomplete, + disabled, + hasResetButton, + onChangeValue, + onResetButtonClick, +}) { + const handleChange = (value) => { + onChangeValue && onChangeValue(value); + }; + + return ( + <> + + + + {label} + + {hasResetButton && ( + + )} + + + +