aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Vijay A <vraravam@users.noreply.github.com>2021-10-27 07:25:26 +0530
committerLibravatar Vijay A <vraravam@users.noreply.github.com>2021-10-27 07:25:26 +0530
commit477bdd76a7405ff10a5cfabdec00ee9ae02f2698 (patch)
treebfa8cfb70e6852b9f535ccfd9b05712269a70dc1
parentBumped up ferdi beta version to '5.6.3-beta.2' (diff)
parent5.6.3-nightly.44 [skip ci] (diff)
downloadferdium-app-477bdd76a7405ff10a5cfabdec00ee9ae02f2698.tar.gz
ferdium-app-477bdd76a7405ff10a5cfabdec00ee9ae02f2698.tar.zst
ferdium-app-477bdd76a7405ff10a5cfabdec00ee9ae02f2698.zip
Merge branch 'nightly' into release
-rw-r--r--.all-contributorsrc90
-rw-r--r--.eslintrc.js3
-rw-r--r--.github/workflows/dependency-updates.yml2
-rw-r--r--.github/workflows/ferdi-builds.yml6
-rw-r--r--CONTRIBUTING.md4
-rw-r--r--Dockerfile2
-rw-r--r--README.md14
-rw-r--r--package-lock.json2063
-rw-r--r--package.json72
m---------recipes0
-rw-r--r--src/I18n.js4
-rw-r--r--src/actions/service.ts4
-rw-r--r--src/app.js4
-rw-r--r--src/components/auth/AuthLayout.js2
-rw-r--r--src/components/auth/Login.js4
-rw-r--r--src/components/layout/AppLayout.js23
-rw-r--r--src/components/layout/Sidebar.js37
-rw-r--r--src/components/services/content/ServiceWebview.js20
-rw-r--r--src/components/services/tabs/TabBarSortableList.js3
-rw-r--r--src/components/services/tabs/TabItem.js18
-rw-r--r--src/components/services/tabs/Tabbar.js3
-rw-r--r--src/components/settings/navigation/SettingsNavigation.js21
-rw-r--r--src/components/settings/settings/EditSettingsForm.js21
-rw-r--r--src/components/ui/Button.js95
-rw-r--r--src/components/ui/Button.tsx73
-rw-r--r--src/config.ts10
-rw-r--r--src/containers/layout/AppLayoutContainer.js3
-rw-r--r--src/containers/settings/EditServiceScreen.js4
-rw-r--r--src/containers/settings/EditSettingsScreen.js28
-rw-r--r--src/features/publishDebugInfo/index.js2
-rwxr-xr-xsrc/features/settingsWS/actions.ts13
-rwxr-xr-xsrc/features/settingsWS/index.ts28
-rwxr-xr-xsrc/features/settingsWS/state.ts13
-rwxr-xr-xsrc/features/settingsWS/store.js132
-rw-r--r--src/features/todos/index.ts25
-rw-r--r--src/features/todos/store.js9
-rw-r--r--src/features/workspaces/index.ts22
-rw-r--r--src/features/workspaces/store.js8
-rw-r--r--src/helpers/url-helpers.ts6
-rw-r--r--src/helpers/validation-helpers.ts21
-rw-r--r--src/i18n/locales/af.json1
-rw-r--r--src/i18n/locales/ar.json1
-rw-r--r--src/i18n/locales/be.json1
-rw-r--r--src/i18n/locales/bs.json1
-rw-r--r--src/i18n/locales/ca.json1
-rw-r--r--src/i18n/locales/cs.json1
-rw-r--r--src/i18n/locales/da.json1
-rw-r--r--src/i18n/locales/de.json1
-rw-r--r--src/i18n/locales/el.json1
-rw-r--r--src/i18n/locales/en-US.json1
-rw-r--r--src/i18n/locales/es.json1
-rw-r--r--src/i18n/locales/fi.json1
-rw-r--r--src/i18n/locales/fr.json9
-rw-r--r--src/i18n/locales/ga.json1
-rw-r--r--src/i18n/locales/he.json1
-rw-r--r--src/i18n/locales/hi.json1
-rw-r--r--src/i18n/locales/hr.json1
-rw-r--r--src/i18n/locales/hu.json1
-rw-r--r--src/i18n/locales/id.json1
-rw-r--r--src/i18n/locales/it.json7
-rw-r--r--src/i18n/locales/ja.json1
-rw-r--r--src/i18n/locales/ka.json1
-rw-r--r--src/i18n/locales/ko.json1
-rw-r--r--src/i18n/locales/nl-BE.json1
-rw-r--r--src/i18n/locales/nl.json177
-rw-r--r--src/i18n/locales/no.json1
-rw-r--r--src/i18n/locales/pl.json1
-rw-r--r--src/i18n/locales/pt-BR.json1
-rw-r--r--src/i18n/locales/pt.json1
-rw-r--r--src/i18n/locales/ro.json1
-rw-r--r--src/i18n/locales/ru.json1
-rw-r--r--src/i18n/locales/sk.json1
-rw-r--r--src/i18n/locales/sl.json1
-rw-r--r--src/i18n/locales/sr.json1
-rw-r--r--src/i18n/locales/sv.json1
-rw-r--r--src/i18n/locales/te.json1
-rw-r--r--src/i18n/locales/tr.json1
-rw-r--r--src/i18n/locales/uk.json1
-rw-r--r--src/i18n/locales/vi.json1
-rw-r--r--src/i18n/locales/zh-HANT.json1
-rw-r--r--src/i18n/locales/zh.json1
-rw-r--r--src/index.ts4
-rw-r--r--src/internal-server/app/Controllers/Http/ServiceController.js2
-rw-r--r--src/internal-server/app/Controllers/Http/StaticController.js20
-rw-r--r--src/internal-server/start/routes.js5
-rw-r--r--src/lib/Menu.js55
-rw-r--r--src/models/Service.js4
-rw-r--r--src/models/UserAgent.js2
-rw-r--r--src/stores.types.ts4
-rw-r--r--src/stores/FeaturesStore.js10
-rw-r--r--src/stores/GlobalErrorStore.js6
-rw-r--r--src/stores/ServicesStore.js24
-rw-r--r--src/styles/tabs.scss27
-rw-r--r--src/webview/badge.ts20
-rw-r--r--src/webview/dialogTitle.ts33
-rw-r--r--src/webview/lib/RecipeWebview.js24
-rw-r--r--src/webview/lib/Userscript.js10
-rw-r--r--src/webview/recipe.js5
-rw-r--r--tsconfig.json3
99 files changed, 1624 insertions, 1777 deletions
diff --git a/.all-contributorsrc b/.all-contributorsrc
index 1457084cb..82719f20d 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -995,6 +995,96 @@
995 "contributions": [ 995 "contributions": [
996 "code" 996 "code"
997 ] 997 ]
998 },
999 {
1000 "login": "Suvarna221B",
1001 "name": "Suvarna Sivadas",
1002 "avatar_url": "https://avatars.githubusercontent.com/u/31803071?v=4",
1003 "profile": "https://github.com/Suvarna221B",
1004 "contributions": [
1005 "code"
1006 ]
1007 },
1008 {
1009 "login": "johan-mathew",
1010 "name": "Johan Mathew",
1011 "avatar_url": "https://avatars.githubusercontent.com/u/31700508?v=4",
1012 "profile": "https://github.com/johan-mathew",
1013 "contributions": [
1014 "code"
1015 ]
1016 },
1017 {
1018 "login": "AjeshKumarS",
1019 "name": "Ajesh Kumar S",
1020 "avatar_url": "https://avatars.githubusercontent.com/u/31558237?v=4",
1021 "profile": "https://github.com/AjeshKumarS",
1022 "contributions": [
1023 "code"
1024 ]
1025 },
1026 {
1027 "login": "sreelekhaMarasig",
1028 "name": "Ajesh Kumar S",
1029 "avatar_url": "https://avatars.githubusercontent.com/u/93112178?v=4",
1030 "profile": "https://github.com/sreelekhaMarasig",
1031 "contributions": [
1032 "code"
1033 ]
1034 },
1035 {
1036 "login": "MadhuriBandanadam",
1037 "name": "Madhuri",
1038 "avatar_url": "https://avatars.githubusercontent.com/u/63137999?v=4",
1039 "profile": "https://github.com/MadhuriBandanadam",
1040 "contributions": [
1041 "code"
1042 ]
1043 },
1044 {
1045 "login": "abinmn",
1046 "name": "Abin Mn",
1047 "avatar_url": "https://avatars.githubusercontent.com/u/29946484?v=4",
1048 "profile": "https://github.com/abinmn",
1049 "contributions": [
1050 "code"
1051 ]
1052 },
1053 {
1054 "login": "AnjithPaul",
1055 "name": "Anjith Paul",
1056 "avatar_url": "https://avatars.githubusercontent.com/u/65152866?v=4",
1057 "profile": "https://github.com/AnjithPaul",
1058 "contributions": [
1059 "code"
1060 ]
1061 },
1062 {
1063 "login": "Vishnu017",
1064 "name": "Vishnu017",
1065 "avatar_url": "https://avatars.githubusercontent.com/u/39431453?v=4",
1066 "profile": "https://github.com/Vishnu017",
1067 "contributions": [
1068 "code"
1069 ]
1070 },
1071 {
1072 "login": "rachelcynthia",
1073 "name": "Rachel Cynthia V",
1074 "avatar_url": "https://avatars.githubusercontent.com/u/46859572?v=4",
1075 "profile": "https://github.com/rachelcynthia",
1076 "contributions": [
1077 "code"
1078 ]
1079 },
1080 {
1081 "login": "Chandrika-Priya",
1082 "name": "Chandrika Priya Bogadi",
1083 "avatar_url": "https://avatars.githubusercontent.com/u/46720139?v=4",
1084 "profile": "https://github.com/Chandrika-Priya",
1085 "contributions": [
1086 "code"
1087 ]
998 } 1088 }
999 ], 1089 ],
1000 "contributorsPerLine": 16, 1090 "contributorsPerLine": 16,
diff --git a/.eslintrc.js b/.eslintrc.js
index dd50364d0..af9eaef9d 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -127,6 +127,9 @@ module.exports = {
127 'consistent-return': 1, 127 'consistent-return': 1,
128 'implicit-arrow-linebreak': 0, 128 'implicit-arrow-linebreak': 0,
129 indent: 0, 129 indent: 0,
130 // TODO: Turn this rule on once the js to ts conversions are over
131 // This is necessary as workaround for window.ferdi vs window['ferdi']
132 'dot-notation': 0,
130 'function-paren-newline': 0, 133 'function-paren-newline': 0,
131 'linebreak-style': 0, 134 'linebreak-style': 0,
132 'max-len': 0, 135 'max-len': 0,
diff --git a/.github/workflows/dependency-updates.yml b/.github/workflows/dependency-updates.yml
index 8e7b5ae8e..81a8ad556 100644
--- a/.github/workflows/dependency-updates.yml
+++ b/.github/workflows/dependency-updates.yml
@@ -55,7 +55,7 @@ jobs:
55 - name: Install pnpm 55 - name: Install pnpm
56 uses: pnpm/action-setup@v2.0.1 56 uses: pnpm/action-setup@v2.0.1
57 with: 57 with:
58 version: 6.17.1 58 version: 6.19.0
59 - name: Uninstall locally and reinstall global npm modules 59 - name: Uninstall locally and reinstall global npm modules
60 run: | 60 run: |
61 npm uninstall node-gyp 61 npm uninstall node-gyp
diff --git a/.github/workflows/ferdi-builds.yml b/.github/workflows/ferdi-builds.yml
index bbd001a0a..e00893c19 100644
--- a/.github/workflows/ferdi-builds.yml
+++ b/.github/workflows/ferdi-builds.yml
@@ -152,7 +152,7 @@ jobs:
152 - name: Install pnpm 152 - name: Install pnpm
153 uses: pnpm/action-setup@v2.0.1 153 uses: pnpm/action-setup@v2.0.1
154 with: 154 with:
155 version: 6.17.1 155 version: 6.19.0
156 - name: Uninstall locally and reinstall global npm modules 156 - name: Uninstall locally and reinstall global npm modules
157 run: | 157 run: |
158 npm uninstall node-gyp 158 npm uninstall node-gyp
@@ -255,7 +255,7 @@ jobs:
255 - name: Install pnpm 255 - name: Install pnpm
256 uses: pnpm/action-setup@v2.0.1 256 uses: pnpm/action-setup@v2.0.1
257 with: 257 with:
258 version: 6.17.1 258 version: 6.19.0
259 - name: Uninstall locally and reinstall global npm modules 259 - name: Uninstall locally and reinstall global npm modules
260 run: | 260 run: |
261 npm uninstall node-gyp 261 npm uninstall node-gyp
@@ -379,7 +379,7 @@ jobs:
379 - name: Install pnpm 379 - name: Install pnpm
380 uses: pnpm/action-setup@v2.0.1 380 uses: pnpm/action-setup@v2.0.1
381 with: 381 with:
382 version: 6.17.1 382 version: 6.19.0
383 - name: Uninstall locally and reinstall global npm modules 383 - name: Uninstall locally and reinstall global npm modules
384 run: | 384 run: |
385 npm uninstall node-gyp 385 npm uninstall node-gyp
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 4459c46f7..65c9a30ca 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -64,7 +64,7 @@ v14.18.1
64npm -v 64npm -v
656.14.13 656.14.13
66pnpm -v 66pnpm -v
676.17.1 676.19.0
68``` 68```
69 69
70_Note:_ You can choose any package manager to manage multiple versions of `node` and `npm`. For eg, [nvm](https://github.com/nvm-sh/nvm) or [asdf](https://github.com/asdf-vm/asdf). 70_Note:_ You can choose any package manager to manage multiple versions of `node` and `npm`. For eg, [nvm](https://github.com/nvm-sh/nvm) or [asdf](https://github.com/asdf-vm/asdf).
@@ -196,7 +196,7 @@ DEBUG=Ferdi:* npm run start
196- Optionally, you can run both commands in one terminal with [concurrently](https://www.npmjs.com/package/concurrently): 196- Optionally, you can run both commands in one terminal with [concurrently](https://www.npmjs.com/package/concurrently):
197 197
198```bash 198```bash
199DEBUG=Ferdi:* npm run start:all-dev 199DEBUG_COLORS=1 DEBUG=Ferdi:* npm run start:all-dev
200``` 200```
201 201
202Note: please prefer [`debug()`](https://github.com/visionmedia/debug) over `console.log()`. 202Note: please prefer [`debug()`](https://github.com/visionmedia/debug) over `console.log()`.
diff --git a/Dockerfile b/Dockerfile
index 404502283..13551dad3 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -16,7 +16,7 @@ RUN apt-get update -y \
16 16
17WORKDIR /usr/src/ferdi 17WORKDIR /usr/src/ferdi
18 18
19RUN npm i -g pnpm@6.17.1 \ 19RUN npm i -g pnpm@6.19.0 \
20 && npm ls -g node-gyp@8.2.0 || npm i -g node-gyp@8.2.0 20 && npm ls -g node-gyp@8.2.0 || npm i -g node-gyp@8.2.0
21 21
22COPY package*.json . 22COPY package*.json .
diff --git a/README.md b/README.md
index 84c2875ef..050d4166e 100644
--- a/README.md
+++ b/README.md
@@ -14,7 +14,7 @@
14<p align="center"> 14<p align="center">
15<img alt="GitHub Releases" src="https://img.shields.io/github/downloads/getferdi/ferdi/latest/total?label=Downloads&logo=iCloud&logoColor=%23FFFFFF"> 15<img alt="GitHub Releases" src="https://img.shields.io/github/downloads/getferdi/ferdi/latest/total?label=Downloads&logo=iCloud&logoColor=%23FFFFFF">
16<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section --> 16<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
17<a href='#contributors-'><img src='https://img.shields.io/badge/contributors-100-default.svg?logo=github' alt='Contributors'/></a> 17<a href='#contributors-'><img src='https://img.shields.io/badge/contributors-110-default.svg?logo=github' alt='Contributors'/></a>
18<!-- ALL-CONTRIBUTORS-BADGE:END --> 18<!-- ALL-CONTRIBUTORS-BADGE:END -->
19<a href="#backers-via-opencollective"><img alt="Open Collective backers" src="https://img.shields.io/opencollective/backers/getferdi?logo=open-collective"></a> 19<a href="#backers-via-opencollective"><img alt="Open Collective backers" src="https://img.shields.io/opencollective/backers/getferdi?logo=open-collective"></a>
20<a href="#sponsors-via-opencollective"><img alt="Open Collective sponsors" src="https://img.shields.io/opencollective/sponsors/getferdi?logo=open-collective"></a> 20<a href="#sponsors-via-opencollective"><img alt="Open Collective sponsors" src="https://img.shields.io/opencollective/sponsors/getferdi?logo=open-collective"></a>
@@ -227,7 +227,7 @@ If you use an AUR Helper, e.g. yay, install it via `yay -S ferdi`.
227 227
228### Adds internal changes 228### Adds internal changes
229 229
230- [x] Upgrades to Electron 15.2.0 230- [x] Upgrades to Electron 15.3.0
231- [x] Switches to [`electron-spellchecker`](https://github.com/electron-userland/electron-spellchecker) to improve application size 231- [x] Switches to [`electron-spellchecker`](https://github.com/electron-userland/electron-spellchecker) to improve application size
232- [x] Minifies build files to improve app size 232- [x] Minifies build files to improve app size
233- [x] Adds "npm run prepare-code" command for development to lint and beautify code 233- [x] Adds "npm run prepare-code" command for development to lint and beautify code
@@ -390,6 +390,16 @@ Thanks goes to these awesome people:
390 <td align="center"><a href='https://www.ekino.com' title='Sadetdin EYILI: code, bug, userTesting'><img src='https://avatars.githubusercontent.com/u/5607440?v=4' alt='sad270' style='border-radius:42px;width:42px;height:42px;'/></a></td> 390 <td align="center"><a href='https://www.ekino.com' title='Sadetdin EYILI: code, bug, userTesting'><img src='https://avatars.githubusercontent.com/u/5607440?v=4' alt='sad270' style='border-radius:42px;width:42px;height:42px;'/></a></td>
391 <td align="center"><a href='https://github.com/Tsakatac' title='Tsakatac: bug'><img src='https://avatars.githubusercontent.com/u/89021195?v=4' alt='Tsakatac' style='border-radius:42px;width:42px;height:42px;'/></a></td> 391 <td align="center"><a href='https://github.com/Tsakatac' title='Tsakatac: bug'><img src='https://avatars.githubusercontent.com/u/89021195?v=4' alt='Tsakatac' style='border-radius:42px;width:42px;height:42px;'/></a></td>
392 <td align="center"><a href='http://niute.ch' title='niu tech: code'><img src='https://avatars.githubusercontent.com/u/384997?v=4' alt='niutech' style='border-radius:42px;width:42px;height:42px;'/></a></td> 392 <td align="center"><a href='http://niute.ch' title='niu tech: code'><img src='https://avatars.githubusercontent.com/u/384997?v=4' alt='niutech' style='border-radius:42px;width:42px;height:42px;'/></a></td>
393 <td align="center"><a href='https://github.com/Suvarna221B' title='Suvarna Sivadas: code'><img src='https://avatars.githubusercontent.com/u/31803071?v=4' alt='Suvarna221B' style='border-radius:42px;width:42px;height:42px;'/></a></td>
394 <td align="center"><a href='https://github.com/johan-mathew' title='Johan Mathew: code'><img src='https://avatars.githubusercontent.com/u/31700508?v=4' alt='johan-mathew' style='border-radius:42px;width:42px;height:42px;'/></a></td>
395 <td align="center"><a href='https://github.com/AjeshKumarS' title='Ajesh Kumar S: code'><img src='https://avatars.githubusercontent.com/u/31558237?v=4' alt='AjeshKumarS' style='border-radius:42px;width:42px;height:42px;'/></a></td>
396 <td align="center"><a href='https://github.com/sreelekhaMarasig' title='Ajesh Kumar S: code'><img src='https://avatars.githubusercontent.com/u/93112178?v=4' alt='sreelekhaMarasig' style='border-radius:42px;width:42px;height:42px;'/></a></td>
397 <td align="center"><a href='https://github.com/MadhuriBandanadam' title='Madhuri: code'><img src='https://avatars.githubusercontent.com/u/63137999?v=4' alt='MadhuriBandanadam' style='border-radius:42px;width:42px;height:42px;'/></a></td>
398 <td align="center"><a href='https://github.com/abinmn' title='Abin Mn: code'><img src='https://avatars.githubusercontent.com/u/29946484?v=4' alt='abinmn' style='border-radius:42px;width:42px;height:42px;'/></a></td>
399 <td align="center"><a href='https://github.com/AnjithPaul' title='Anjith Paul: code'><img src='https://avatars.githubusercontent.com/u/65152866?v=4' alt='AnjithPaul' style='border-radius:42px;width:42px;height:42px;'/></a></td>
400 <td align="center"><a href='https://github.com/Vishnu017' title='Vishnu017: code'><img src='https://avatars.githubusercontent.com/u/39431453?v=4' alt='Vishnu017' style='border-radius:42px;width:42px;height:42px;'/></a></td>
401 <td align="center"><a href='https://github.com/rachelcynthia' title='Rachel Cynthia V: code'><img src='https://avatars.githubusercontent.com/u/46859572?v=4' alt='rachelcynthia' style='border-radius:42px;width:42px;height:42px;'/></a></td>
402 <td align="center"><a href='https://github.com/Chandrika-Priya' title='Chandrika Priya Bogadi: code'><img src='https://avatars.githubusercontent.com/u/46720139?v=4' alt='Chandrika-Priya' style='border-radius:42px;width:42px;height:42px;'/></a></td>
393 </tr> 403 </tr>
394</table> 404</table>
395 405
diff --git a/package-lock.json b/package-lock.json
index 953500553..8993173a4 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
1{ 1{
2 "name": "ferdi", 2 "name": "ferdi",
3 "version": "5.6.3-beta.2", 3 "version": "5.6.3-nightly.44",
4 "lockfileVersion": 1, 4 "lockfileVersion": 1,
5 "requires": true, 5 "requires": true,
6 "dependencies": { 6 "dependencies": {
@@ -684,9 +684,9 @@
684 } 684 }
685 }, 685 },
686 "@babel/plugin-proposal-decorators": { 686 "@babel/plugin-proposal-decorators": {
687 "version": "7.15.4", 687 "version": "7.15.8",
688 "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.15.4.tgz", 688 "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.15.8.tgz",
689 "integrity": "sha512-WNER+YLs7avvRukEddhu5PSfSaMMimX2xBFgLQS7Bw16yrUxJGWidO9nQp+yLy9MVybg5Ba3BlhAw+BkdhpDmg==", 689 "integrity": "sha512-5n8+xGK7YDrXF+WAORg3P7LlCCdiaAyKLZi22eP2BwTy4kJ0kFUMMDCj4nQ8YrKyNZgjhU/9eRVqONnjB3us8g==",
690 "dev": true, 690 "dev": true,
691 "requires": { 691 "requires": {
692 "@babel/helper-create-class-features-plugin": "^7.15.4", 692 "@babel/helper-create-class-features-plugin": "^7.15.4",
@@ -1345,9 +1345,9 @@
1345 } 1345 }
1346 }, 1346 },
1347 "@babel/preset-env": { 1347 "@babel/preset-env": {
1348 "version": "7.15.6", 1348 "version": "7.15.8",
1349 "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.15.6.tgz", 1349 "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.15.8.tgz",
1350 "integrity": "sha512-L+6jcGn7EWu7zqaO2uoTDjjMBW+88FXzV8KvrBl2z6MtRNxlsmUNRlZPaNNPUTgqhyC5DHNFk/2Jmra+ublZWw==", 1350 "integrity": "sha512-rCC0wH8husJgY4FPbHsiYyiLxSY8oMDJH7Rl6RQMknbN9oDDHhM9RDFvnGM2MgkbUJzSQB4gtuwygY5mCqGSsA==",
1351 "dev": true, 1351 "dev": true,
1352 "requires": { 1352 "requires": {
1353 "@babel/compat-data": "^7.15.0", 1353 "@babel/compat-data": "^7.15.0",
@@ -1355,7 +1355,7 @@
1355 "@babel/helper-plugin-utils": "^7.14.5", 1355 "@babel/helper-plugin-utils": "^7.14.5",
1356 "@babel/helper-validator-option": "^7.14.5", 1356 "@babel/helper-validator-option": "^7.14.5",
1357 "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.15.4", 1357 "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.15.4",
1358 "@babel/plugin-proposal-async-generator-functions": "^7.15.4", 1358 "@babel/plugin-proposal-async-generator-functions": "^7.15.8",
1359 "@babel/plugin-proposal-class-properties": "^7.14.5", 1359 "@babel/plugin-proposal-class-properties": "^7.14.5",
1360 "@babel/plugin-proposal-class-static-block": "^7.15.4", 1360 "@babel/plugin-proposal-class-static-block": "^7.15.4",
1361 "@babel/plugin-proposal-dynamic-import": "^7.14.5", 1361 "@babel/plugin-proposal-dynamic-import": "^7.14.5",
@@ -1410,7 +1410,7 @@
1410 "@babel/plugin-transform-regenerator": "^7.14.5", 1410 "@babel/plugin-transform-regenerator": "^7.14.5",
1411 "@babel/plugin-transform-reserved-words": "^7.14.5", 1411 "@babel/plugin-transform-reserved-words": "^7.14.5",
1412 "@babel/plugin-transform-shorthand-properties": "^7.14.5", 1412 "@babel/plugin-transform-shorthand-properties": "^7.14.5",
1413 "@babel/plugin-transform-spread": "^7.14.6", 1413 "@babel/plugin-transform-spread": "^7.15.8",
1414 "@babel/plugin-transform-sticky-regex": "^7.14.5", 1414 "@babel/plugin-transform-sticky-regex": "^7.14.5",
1415 "@babel/plugin-transform-template-literals": "^7.14.5", 1415 "@babel/plugin-transform-template-literals": "^7.14.5",
1416 "@babel/plugin-transform-typeof-symbol": "^7.14.5", 1416 "@babel/plugin-transform-typeof-symbol": "^7.14.5",
@@ -1419,7 +1419,7 @@
1419 "@babel/preset-modules": "^0.1.4", 1419 "@babel/preset-modules": "^0.1.4",
1420 "@babel/types": "^7.15.6", 1420 "@babel/types": "^7.15.6",
1421 "babel-plugin-polyfill-corejs2": "^0.2.2", 1421 "babel-plugin-polyfill-corejs2": "^0.2.2",
1422 "babel-plugin-polyfill-corejs3": "^0.2.2", 1422 "babel-plugin-polyfill-corejs3": "^0.2.5",
1423 "babel-plugin-polyfill-regenerator": "^0.2.2", 1423 "babel-plugin-polyfill-regenerator": "^0.2.2",
1424 "core-js-compat": "^3.16.0", 1424 "core-js-compat": "^3.16.0",
1425 "semver": "^6.3.0" 1425 "semver": "^6.3.0"
@@ -1434,9 +1434,9 @@
1434 } 1434 }
1435 }, 1435 },
1436 "@babel/preset-modules": { 1436 "@babel/preset-modules": {
1437 "version": "0.1.4", 1437 "version": "0.1.5",
1438 "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", 1438 "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz",
1439 "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", 1439 "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==",
1440 "dev": true, 1440 "dev": true,
1441 "requires": { 1441 "requires": {
1442 "@babel/helper-plugin-utils": "^7.0.0", 1442 "@babel/helper-plugin-utils": "^7.0.0",
@@ -1579,16 +1579,16 @@
1579 "dev": true 1579 "dev": true
1580 }, 1580 },
1581 "@commitlint/cli": { 1581 "@commitlint/cli": {
1582 "version": "13.1.0", 1582 "version": "13.2.1",
1583 "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-13.1.0.tgz", 1583 "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-13.2.1.tgz",
1584 "integrity": "sha512-xN/uNYWtGTva5OMSd+xA6e6/c2jk8av7MUbdd6w2cw89u6z3fAWoyiH87X0ewdSMNYmW/6B3L/2dIVGHRDID5w==", 1584 "integrity": "sha512-JGzYk2ay5JkRS5w+FLQzr0u/Kih52ds4HPpa3vnwVOQN8Q+S1VYr8Nk/6kRm6uNYsAcC1nejtuDxRdLcLh/9TA==",
1585 "dev": true, 1585 "dev": true,
1586 "requires": { 1586 "requires": {
1587 "@commitlint/format": "^13.1.0", 1587 "@commitlint/format": "^13.2.0",
1588 "@commitlint/lint": "^13.1.0", 1588 "@commitlint/lint": "^13.2.0",
1589 "@commitlint/load": "^13.1.0", 1589 "@commitlint/load": "^13.2.1",
1590 "@commitlint/read": "^13.1.0", 1590 "@commitlint/read": "^13.2.0",
1591 "@commitlint/types": "^13.1.0", 1591 "@commitlint/types": "^13.2.0",
1592 "lodash": "^4.17.19", 1592 "lodash": "^4.17.19",
1593 "resolve-from": "5.0.0", 1593 "resolve-from": "5.0.0",
1594 "resolve-global": "1.0.0", 1594 "resolve-global": "1.0.0",
@@ -1604,9 +1604,9 @@
1604 } 1604 }
1605 }, 1605 },
1606 "@commitlint/config-conventional": { 1606 "@commitlint/config-conventional": {
1607 "version": "13.1.0", 1607 "version": "13.2.0",
1608 "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-13.1.0.tgz", 1608 "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-13.2.0.tgz",
1609 "integrity": "sha512-zukJXqdr6jtMiVRy3tTHmwgKcUMGfqKDEskRigc5W3k2aYF4gBAtCEjMAJGZgSQE4DMcHeok0pEV2ANmTpb0cw==", 1609 "integrity": "sha512-7u7DdOiF+3qSdDlbQGfpvCH8DCQdLFvnI2+VucYmmV7E92iD6t9PBj+UjIoSQCaMAzYp27Vkall78AkcXBh6Xw==",
1610 "dev": true, 1610 "dev": true,
1611 "requires": { 1611 "requires": {
1612 "conventional-changelog-conventionalcommits": "^4.3.1" 1612 "conventional-changelog-conventionalcommits": "^4.3.1"
@@ -1851,78 +1851,6 @@
1851 "@commitlint/to-lines": "^13.2.0", 1851 "@commitlint/to-lines": "^13.2.0",
1852 "@commitlint/types": "^13.2.0", 1852 "@commitlint/types": "^13.2.0",
1853 "execa": "^5.0.0" 1853 "execa": "^5.0.0"
1854 },
1855 "dependencies": {
1856 "cross-spawn": {
1857 "version": "7.0.3",
1858 "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
1859 "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
1860 "dev": true,
1861 "requires": {
1862 "path-key": "^3.1.0",
1863 "shebang-command": "^2.0.0",
1864 "which": "^2.0.1"
1865 }
1866 },
1867 "execa": {
1868 "version": "5.1.1",
1869 "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
1870 "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
1871 "dev": true,
1872 "requires": {
1873 "cross-spawn": "^7.0.3",
1874 "get-stream": "^6.0.0",
1875 "human-signals": "^2.1.0",
1876 "is-stream": "^2.0.0",
1877 "merge-stream": "^2.0.0",
1878 "npm-run-path": "^4.0.1",
1879 "onetime": "^5.1.2",
1880 "signal-exit": "^3.0.3",
1881 "strip-final-newline": "^2.0.0"
1882 }
1883 },
1884 "get-stream": {
1885 "version": "6.0.1",
1886 "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
1887 "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
1888 "dev": true
1889 },
1890 "human-signals": {
1891 "version": "2.1.0",
1892 "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
1893 "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
1894 "dev": true
1895 },
1896 "path-key": {
1897 "version": "3.1.1",
1898 "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
1899 "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
1900 "dev": true
1901 },
1902 "shebang-command": {
1903 "version": "2.0.0",
1904 "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
1905 "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
1906 "dev": true,
1907 "requires": {
1908 "shebang-regex": "^3.0.0"
1909 }
1910 },
1911 "shebang-regex": {
1912 "version": "3.0.0",
1913 "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
1914 "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
1915 "dev": true
1916 },
1917 "which": {
1918 "version": "2.0.2",
1919 "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
1920 "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
1921 "dev": true,
1922 "requires": {
1923 "isexe": "^2.0.0"
1924 }
1925 }
1926 } 1854 }
1927 }, 1855 },
1928 "@commitlint/to-lines": { 1856 "@commitlint/to-lines": {
@@ -1976,6 +1904,12 @@
1976 "requires": { 1904 "requires": {
1977 "p-limit": "^3.0.2" 1905 "p-limit": "^3.0.2"
1978 } 1906 }
1907 },
1908 "path-exists": {
1909 "version": "4.0.0",
1910 "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
1911 "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
1912 "dev": true
1979 } 1913 }
1980 } 1914 }
1981 }, 1915 },
@@ -2258,19 +2192,19 @@
2258 } 2192 }
2259 }, 2193 },
2260 "@formatjs/cli": { 2194 "@formatjs/cli": {
2261 "version": "4.2.33", 2195 "version": "4.4.0",
2262 "resolved": "https://registry.npmjs.org/@formatjs/cli/-/cli-4.2.33.tgz", 2196 "resolved": "https://registry.npmjs.org/@formatjs/cli/-/cli-4.4.0.tgz",
2263 "integrity": "sha512-4Lg+KZ5QhXgF6+zjHyZlxMG8I0D3m3PZyrj3hRl97vdZ6rAWKVFWw8fkTO/iyhUCP2iC47Eh9r+ZTgGARX9Teg==", 2197 "integrity": "sha512-aBo+U8/EoBDWmksgPo3mhUunW55GFTqVA6hiudfHBPARfXX/b6JtXDi0fJGZpN2LbtYyvy4OrQlMP+c/7LGPQQ==",
2264 "dev": true, 2198 "dev": true,
2265 "requires": { 2199 "requires": {
2266 "@formatjs/icu-messageformat-parser": "2.0.11", 2200 "@formatjs/icu-messageformat-parser": "2.0.14",
2267 "@formatjs/ts-transformer": "3.4.10", 2201 "@formatjs/ts-transformer": "3.6.0",
2268 "@types/estree": "^0.0.50", 2202 "@types/estree": "^0.0.50",
2269 "@types/fs-extra": "^9.0.1", 2203 "@types/fs-extra": "^9.0.1",
2270 "@types/json-stable-stringify": "^1.0.32", 2204 "@types/json-stable-stringify": "^1.0.32",
2271 "@types/node": "14", 2205 "@types/node": "14",
2272 "@vue/compiler-core": "^3.0.5", 2206 "@vue/compiler-core": "^3.2.19",
2273 "@vue/compiler-sfc": "^3.0.5", 2207 "@vue/compiler-sfc": "^3.2.19",
2274 "chalk": "^4.0.0", 2208 "chalk": "^4.0.0",
2275 "commander": "8", 2209 "commander": "8",
2276 "fast-glob": "^3.2.7", 2210 "fast-glob": "^3.2.7",
@@ -2278,7 +2212,7 @@
2278 "json-stable-stringify": "^1.0.1", 2212 "json-stable-stringify": "^1.0.1",
2279 "loud-rejection": "^2.2.0", 2213 "loud-rejection": "^2.2.0",
2280 "tslib": "^2.1.0", 2214 "tslib": "^2.1.0",
2281 "typescript": "4" 2215 "typescript": "^4.4"
2282 }, 2216 },
2283 "dependencies": { 2217 "dependencies": {
2284 "ansi-styles": { 2218 "ansi-styles": {
@@ -2316,9 +2250,9 @@
2316 "dev": true 2250 "dev": true
2317 }, 2251 },
2318 "commander": { 2252 "commander": {
2319 "version": "8.2.0", 2253 "version": "8.3.0",
2320 "resolved": "https://registry.npmjs.org/commander/-/commander-8.2.0.tgz", 2254 "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
2321 "integrity": "sha512-LLKxDvHeL91/8MIyTAD5BFMNtoIwztGPMiM/7Bl8rIPmHCZXRxmSWr91h57dpOpnQ6jIUqEWdXE/uBYMfiVZDA==", 2255 "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
2322 "dev": true 2256 "dev": true
2323 }, 2257 },
2324 "has-flag": { 2258 "has-flag": {
@@ -2335,15 +2269,21 @@
2335 "requires": { 2269 "requires": {
2336 "has-flag": "^4.0.0" 2270 "has-flag": "^4.0.0"
2337 } 2271 }
2272 },
2273 "typescript": {
2274 "version": "4.4.4",
2275 "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz",
2276 "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==",
2277 "dev": true
2338 } 2278 }
2339 } 2279 }
2340 }, 2280 },
2341 "@formatjs/ecma402-abstract": { 2281 "@formatjs/ecma402-abstract": {
2342 "version": "1.9.8", 2282 "version": "1.10.0",
2343 "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.9.8.tgz", 2283 "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.10.0.tgz",
2344 "integrity": "sha512-2U4n11bLmTij/k4ePCEFKJILPYwdMcJTdnKVBi+JMWBgu5O1N+XhCazlE6QXqVO1Agh2Doh0b/9Jf1mSmSVfhA==", 2284 "integrity": "sha512-WNkcUHC6xw12rWY87TUw6KXzb1LnOooYBLLqtyn1kW2j197rcwpqmUOJMBED56YcLzaJPfVw1L2ShiDhL5pVnQ==",
2345 "requires": { 2285 "requires": {
2346 "@formatjs/intl-localematcher": "0.2.20", 2286 "@formatjs/intl-localematcher": "0.2.21",
2347 "tslib": "^2.1.0" 2287 "tslib": "^2.1.0"
2348 } 2288 }
2349 }, 2289 },
@@ -2356,75 +2296,77 @@
2356 } 2296 }
2357 }, 2297 },
2358 "@formatjs/icu-messageformat-parser": { 2298 "@formatjs/icu-messageformat-parser": {
2359 "version": "2.0.11", 2299 "version": "2.0.14",
2360 "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.0.11.tgz", 2300 "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.0.14.tgz",
2361 "integrity": "sha512-5mWb8U8aulYGwnDZWrr+vdgn5PilvtrqQYQ1pvpgzQes/osi85TwmL2GqTGLlKIvBKD2XNA61kAqXYY95w4LWg==", 2301 "integrity": "sha512-M79MdUMLnfLK8eMrznUwke6afH9G/eOQeYvMUJ7uElXIL+//PyyjOzb42hAYfDAGYsAcKA2TsUo33Yuy2lE4AQ==",
2362 "requires": { 2302 "requires": {
2363 "@formatjs/ecma402-abstract": "1.9.8", 2303 "@formatjs/ecma402-abstract": "1.10.0",
2364 "@formatjs/icu-skeleton-parser": "1.2.12", 2304 "@formatjs/icu-skeleton-parser": "1.3.1",
2365 "tslib": "^2.1.0" 2305 "tslib": "^2.1.0"
2366 } 2306 }
2367 }, 2307 },
2368 "@formatjs/icu-skeleton-parser": { 2308 "@formatjs/icu-skeleton-parser": {
2369 "version": "1.2.12", 2309 "version": "1.3.1",
2370 "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.2.12.tgz", 2310 "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.1.tgz",
2371 "integrity": "sha512-DTFxWmEA02ZNW6fsYjGYSADvtrqqjCYF7DSgCmMfaaE0gLP4pCdAgOPE+lkXXU+jP8iCw/YhMT2Seyk/C5lBWg==", 2311 "integrity": "sha512-WdPNjhv9e7EfyrIVYk6hN6/mC9YF+PcfFViDI2kATwoi1uKHr+AkQCMoNrWyCDdUQ+Dn50mQOlrEkCBXoLrkPQ==",
2372 "requires": { 2312 "requires": {
2373 "@formatjs/ecma402-abstract": "1.9.8", 2313 "@formatjs/ecma402-abstract": "1.10.0",
2374 "tslib": "^2.1.0" 2314 "tslib": "^2.1.0"
2375 } 2315 }
2376 }, 2316 },
2377 "@formatjs/intl": { 2317 "@formatjs/intl": {
2378 "version": "1.14.1", 2318 "version": "1.15.0",
2379 "resolved": "https://registry.npmjs.org/@formatjs/intl/-/intl-1.14.1.tgz", 2319 "resolved": "https://registry.npmjs.org/@formatjs/intl/-/intl-1.15.0.tgz",
2380 "integrity": "sha512-mtL8oBgFwTu0GHFnxaF93fk/zNzNkPzl+27Fwg5AZ88pWHWb7037dpODzoCBnaIVk4FBO5emUn/6jI9Byj8hOw==", 2320 "integrity": "sha512-8apTN/j7+pF02U1pUbsORgvWHjVEXH6eXj1y1iw/bbPoVWqfTsUSj/u9hL9MMoLI04RnOQiuK2nIh0cKeOnh1Q==",
2381 "requires": { 2321 "requires": {
2382 "@formatjs/ecma402-abstract": "1.9.8", 2322 "@formatjs/ecma402-abstract": "1.10.0",
2383 "@formatjs/fast-memoize": "1.2.0", 2323 "@formatjs/fast-memoize": "1.2.0",
2384 "@formatjs/icu-messageformat-parser": "2.0.11", 2324 "@formatjs/icu-messageformat-parser": "2.0.14",
2385 "@formatjs/intl-displaynames": "5.2.3", 2325 "@formatjs/intl-displaynames": "5.2.5",
2386 "@formatjs/intl-listformat": "6.3.3", 2326 "@formatjs/intl-listformat": "6.3.5",
2387 "intl-messageformat": "9.9.1", 2327 "intl-messageformat": "9.9.4",
2388 "tslib": "^2.1.0" 2328 "tslib": "^2.1.0"
2389 } 2329 }
2390 }, 2330 },
2391 "@formatjs/intl-displaynames": { 2331 "@formatjs/intl-displaynames": {
2392 "version": "5.2.3", 2332 "version": "5.2.5",
2393 "resolved": "https://registry.npmjs.org/@formatjs/intl-displaynames/-/intl-displaynames-5.2.3.tgz", 2333 "resolved": "https://registry.npmjs.org/@formatjs/intl-displaynames/-/intl-displaynames-5.2.5.tgz",
2394 "integrity": "sha512-5BmhSurLbfgdeo0OBcNPPkIS8ikMMYaHe2NclxEQZqcMvrnQzNMNnUE2dDF5vZx+mkvKq77aQYzpc8RfqVsRCQ==", 2334 "integrity": "sha512-iYlce/hG31ohJOwpv3yhOiEIwEBMqOt2kzA2BQTx1ra8ferBn4WlTxkouoDNiAKEBD1LFYZBIC25jsSJUJOEbg==",
2395 "requires": { 2335 "requires": {
2396 "@formatjs/ecma402-abstract": "1.9.8", 2336 "@formatjs/ecma402-abstract": "1.10.0",
2397 "@formatjs/intl-localematcher": "0.2.20", 2337 "@formatjs/intl-localematcher": "0.2.21",
2398 "tslib": "^2.1.0" 2338 "tslib": "^2.1.0"
2399 } 2339 }
2400 }, 2340 },
2401 "@formatjs/intl-listformat": { 2341 "@formatjs/intl-listformat": {
2402 "version": "6.3.3", 2342 "version": "6.3.5",
2403 "resolved": "https://registry.npmjs.org/@formatjs/intl-listformat/-/intl-listformat-6.3.3.tgz", 2343 "resolved": "https://registry.npmjs.org/@formatjs/intl-listformat/-/intl-listformat-6.3.5.tgz",
2404 "integrity": "sha512-3nzAKgVS5rePDa5HiH0OwZgAhqxLtzlMc9Pg4QgajRHSP1TqFiMmQnnn52wd3+xVTb7cjZVm3JBnTv51/MhTOg==", 2344 "integrity": "sha512-GtiMMx5RB/gID7ydGr+i1lRbGu728plTfT196X151cE2PYEqC05BEuHQFlE1rcUGC2+RfFqlvmipYcbOqJTQug==",
2405 "requires": { 2345 "requires": {
2406 "@formatjs/ecma402-abstract": "1.9.8", 2346 "@formatjs/ecma402-abstract": "1.10.0",
2407 "@formatjs/intl-localematcher": "0.2.20", 2347 "@formatjs/intl-localematcher": "0.2.21",
2408 "tslib": "^2.1.0" 2348 "tslib": "^2.1.0"
2409 } 2349 }
2410 }, 2350 },
2411 "@formatjs/intl-localematcher": { 2351 "@formatjs/intl-localematcher": {
2412 "version": "0.2.20", 2352 "version": "0.2.21",
2413 "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.20.tgz", 2353 "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.21.tgz",
2414 "integrity": "sha512-/Ro85goRZnCojzxOegANFYL0LaDIpdPjAukR7xMTjOtRx+3yyjR0ifGTOW3/Kjhmab3t6GnyHBYWZSudxEOxPA==", 2354 "integrity": "sha512-JTJeLiNwexN4Gy0cMxoUPvJbKhXdnSuo5jPrDafEZpnDWlJ5VDYta8zUVVozO/pwzEmFVHEUpgiEDj+39L4oMg==",
2415 "requires": { 2355 "requires": {
2416 "tslib": "^2.1.0" 2356 "tslib": "^2.1.0"
2417 } 2357 }
2418 }, 2358 },
2419 "@formatjs/ts-transformer": { 2359 "@formatjs/ts-transformer": {
2420 "version": "3.4.10", 2360 "version": "3.6.0",
2421 "resolved": "https://registry.npmjs.org/@formatjs/ts-transformer/-/ts-transformer-3.4.10.tgz", 2361 "resolved": "https://registry.npmjs.org/@formatjs/ts-transformer/-/ts-transformer-3.6.0.tgz",
2422 "integrity": "sha512-5fu8x+8CtyrFe8zdwHvFsYLx9TEPjeJSODRS1ZJxkMVpTBHaNsPqsPkN1TuTk5x3+tSczxXmN1LGrAzUxNN3nQ==", 2362 "integrity": "sha512-r0J230J3TOLJolnAMbWsmzKu1NNitORzoPRGv0CPzjQSAmbTOtbrWNfYsyp+Ro8k5Gfkm9Qdg+BhxRXfyVTmtg==",
2423 "dev": true, 2363 "dev": true,
2424 "requires": { 2364 "requires": {
2425 "@formatjs/icu-messageformat-parser": "2.0.11", 2365 "@formatjs/icu-messageformat-parser": "2.0.14",
2366 "@types/node": "14 || 16",
2426 "chalk": "^4.0.0", 2367 "chalk": "^4.0.0",
2427 "tslib": "^2.1.0" 2368 "tslib": "^2.1.0",
2369 "typescript": "^4.4"
2428 }, 2370 },
2429 "dependencies": { 2371 "dependencies": {
2430 "ansi-styles": { 2372 "ansi-styles": {
@@ -2475,6 +2417,12 @@
2475 "requires": { 2417 "requires": {
2476 "has-flag": "^4.0.0" 2418 "has-flag": "^4.0.0"
2477 } 2419 }
2420 },
2421 "typescript": {
2422 "version": "4.4.4",
2423 "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz",
2424 "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==",
2425 "dev": true
2478 } 2426 }
2479 } 2427 }
2480 }, 2428 },
@@ -2570,6 +2518,12 @@
2570 "p-limit": "^2.2.0" 2518 "p-limit": "^2.2.0"
2571 } 2519 }
2572 }, 2520 },
2521 "path-exists": {
2522 "version": "4.0.0",
2523 "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
2524 "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
2525 "dev": true
2526 },
2573 "resolve-from": { 2527 "resolve-from": {
2574 "version": "5.0.0", 2528 "version": "5.0.0",
2575 "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", 2529 "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
@@ -2591,16 +2545,16 @@
2591 "dev": true 2545 "dev": true
2592 }, 2546 },
2593 "@jest/console": { 2547 "@jest/console": {
2594 "version": "27.2.5", 2548 "version": "27.3.1",
2595 "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.2.5.tgz", 2549 "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.3.1.tgz",
2596 "integrity": "sha512-smtlRF9vNKorRMCUtJ+yllIoiY8oFmfFG7xlzsAE76nKEwXNhjPOJIsc7Dv+AUitVt76t+KjIpUP9m98Crn2LQ==", 2550 "integrity": "sha512-RkFNWmv0iui+qsOr/29q9dyfKTTT5DCuP31kUwg7rmOKPT/ozLeGLKJKVIiOfbiKyleUZKIrHwhmiZWVe8IMdw==",
2597 "dev": true, 2551 "dev": true,
2598 "requires": { 2552 "requires": {
2599 "@jest/types": "^27.2.5", 2553 "@jest/types": "^27.2.5",
2600 "@types/node": "*", 2554 "@types/node": "*",
2601 "chalk": "^4.0.0", 2555 "chalk": "^4.0.0",
2602 "jest-message-util": "^27.2.5", 2556 "jest-message-util": "^27.3.1",
2603 "jest-util": "^27.2.5", 2557 "jest-util": "^27.3.1",
2604 "slash": "^3.0.0" 2558 "slash": "^3.0.0"
2605 }, 2559 },
2606 "dependencies": { 2560 "dependencies": {
@@ -2656,15 +2610,15 @@
2656 } 2610 }
2657 }, 2611 },
2658 "@jest/core": { 2612 "@jest/core": {
2659 "version": "27.2.5", 2613 "version": "27.3.1",
2660 "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.2.5.tgz", 2614 "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.3.1.tgz",
2661 "integrity": "sha512-VR7mQ+jykHN4WO3OvusRJMk4xCa2MFLipMS+43fpcRGaYrN1KwMATfVEXif7ccgFKYGy5D1TVXTNE4mGq/KMMA==", 2615 "integrity": "sha512-DMNE90RR5QKx0EA+wqe3/TNEwiRpOkhshKNxtLxd4rt3IZpCt+RSL+FoJsGeblRZmqdK4upHA/mKKGPPRAifhg==",
2662 "dev": true, 2616 "dev": true,
2663 "requires": { 2617 "requires": {
2664 "@jest/console": "^27.2.5", 2618 "@jest/console": "^27.3.1",
2665 "@jest/reporters": "^27.2.5", 2619 "@jest/reporters": "^27.3.1",
2666 "@jest/test-result": "^27.2.5", 2620 "@jest/test-result": "^27.3.1",
2667 "@jest/transform": "^27.2.5", 2621 "@jest/transform": "^27.3.1",
2668 "@jest/types": "^27.2.5", 2622 "@jest/types": "^27.2.5",
2669 "@types/node": "*", 2623 "@types/node": "*",
2670 "ansi-escapes": "^4.2.1", 2624 "ansi-escapes": "^4.2.1",
@@ -2672,19 +2626,19 @@
2672 "emittery": "^0.8.1", 2626 "emittery": "^0.8.1",
2673 "exit": "^0.1.2", 2627 "exit": "^0.1.2",
2674 "graceful-fs": "^4.2.4", 2628 "graceful-fs": "^4.2.4",
2675 "jest-changed-files": "^27.2.5", 2629 "jest-changed-files": "^27.3.0",
2676 "jest-config": "^27.2.5", 2630 "jest-config": "^27.3.1",
2677 "jest-haste-map": "^27.2.5", 2631 "jest-haste-map": "^27.3.1",
2678 "jest-message-util": "^27.2.5", 2632 "jest-message-util": "^27.3.1",
2679 "jest-regex-util": "^27.0.6", 2633 "jest-regex-util": "^27.0.6",
2680 "jest-resolve": "^27.2.5", 2634 "jest-resolve": "^27.3.1",
2681 "jest-resolve-dependencies": "^27.2.5", 2635 "jest-resolve-dependencies": "^27.3.1",
2682 "jest-runner": "^27.2.5", 2636 "jest-runner": "^27.3.1",
2683 "jest-runtime": "^27.2.5", 2637 "jest-runtime": "^27.3.1",
2684 "jest-snapshot": "^27.2.5", 2638 "jest-snapshot": "^27.3.1",
2685 "jest-util": "^27.2.5", 2639 "jest-util": "^27.3.1",
2686 "jest-validate": "^27.2.5", 2640 "jest-validate": "^27.3.1",
2687 "jest-watcher": "^27.2.5", 2641 "jest-watcher": "^27.3.1",
2688 "micromatch": "^4.0.4", 2642 "micromatch": "^4.0.4",
2689 "rimraf": "^3.0.0", 2643 "rimraf": "^3.0.0",
2690 "slash": "^3.0.0", 2644 "slash": "^3.0.0",
@@ -2801,52 +2755,52 @@
2801 } 2755 }
2802 }, 2756 },
2803 "@jest/environment": { 2757 "@jest/environment": {
2804 "version": "27.2.5", 2758 "version": "27.3.1",
2805 "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.2.5.tgz", 2759 "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.3.1.tgz",
2806 "integrity": "sha512-XvUW3q6OUF+54SYFCgbbfCd/BKTwm5b2MGLoc2jINXQLKQDTCS2P2IrpPOtQ08WWZDGzbhAzVhOYta3J2arubg==", 2760 "integrity": "sha512-BCKCj4mOVLme6Tanoyc9k0ultp3pnmuyHw73UHRPeeZxirsU/7E3HC4le/VDb/SMzE1JcPnto+XBKFOcoiJzVw==",
2807 "dev": true, 2761 "dev": true,
2808 "requires": { 2762 "requires": {
2809 "@jest/fake-timers": "^27.2.5", 2763 "@jest/fake-timers": "^27.3.1",
2810 "@jest/types": "^27.2.5", 2764 "@jest/types": "^27.2.5",
2811 "@types/node": "*", 2765 "@types/node": "*",
2812 "jest-mock": "^27.2.5" 2766 "jest-mock": "^27.3.0"
2813 } 2767 }
2814 }, 2768 },
2815 "@jest/fake-timers": { 2769 "@jest/fake-timers": {
2816 "version": "27.2.5", 2770 "version": "27.3.1",
2817 "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.2.5.tgz", 2771 "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.3.1.tgz",
2818 "integrity": "sha512-ZGUb6jg7BgwY+nmO0TW10bc7z7Hl2G/UTAvmxEyZ/GgNFoa31tY9/cgXmqcxnnZ7o5Xs7RAOz3G1SKIj8IVDlg==", 2772 "integrity": "sha512-M3ZFgwwlqJtWZ+QkBG5NmC23A9w+A6ZxNsO5nJxJsKYt4yguBd3i8TpjQz5NfCX91nEve1KqD9RA2Q+Q1uWqoA==",
2819 "dev": true, 2773 "dev": true,
2820 "requires": { 2774 "requires": {
2821 "@jest/types": "^27.2.5", 2775 "@jest/types": "^27.2.5",
2822 "@sinonjs/fake-timers": "^8.0.1", 2776 "@sinonjs/fake-timers": "^8.0.1",
2823 "@types/node": "*", 2777 "@types/node": "*",
2824 "jest-message-util": "^27.2.5", 2778 "jest-message-util": "^27.3.1",
2825 "jest-mock": "^27.2.5", 2779 "jest-mock": "^27.3.0",
2826 "jest-util": "^27.2.5" 2780 "jest-util": "^27.3.1"
2827 } 2781 }
2828 }, 2782 },
2829 "@jest/globals": { 2783 "@jest/globals": {
2830 "version": "27.2.5", 2784 "version": "27.3.1",
2831 "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.2.5.tgz", 2785 "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.3.1.tgz",
2832 "integrity": "sha512-naRI537GM+enFVJQs6DcwGYPn/0vgJNb06zGVbzXfDfe/epDPV73hP1vqO37PqSKDeOXM2KInr6ymYbL1HTP7g==", 2786 "integrity": "sha512-Q651FWiWQAIFiN+zS51xqhdZ8g9b88nGCobC87argAxA7nMfNQq0Q0i9zTfQYgLa6qFXk2cGANEqfK051CZ8Pg==",
2833 "dev": true, 2787 "dev": true,
2834 "requires": { 2788 "requires": {
2835 "@jest/environment": "^27.2.5", 2789 "@jest/environment": "^27.3.1",
2836 "@jest/types": "^27.2.5", 2790 "@jest/types": "^27.2.5",
2837 "expect": "^27.2.5" 2791 "expect": "^27.3.1"
2838 } 2792 }
2839 }, 2793 },
2840 "@jest/reporters": { 2794 "@jest/reporters": {
2841 "version": "27.2.5", 2795 "version": "27.3.1",
2842 "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.2.5.tgz", 2796 "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.3.1.tgz",
2843 "integrity": "sha512-zYuR9fap3Q3mxQ454VWF8I6jYHErh368NwcKHWO2uy2fwByqBzRHkf9j2ekMDM7PaSTWcLBSZyd7NNxR1iHxzQ==", 2797 "integrity": "sha512-m2YxPmL9Qn1emFVgZGEiMwDntDxRRQ2D58tiDQlwYTg5GvbFOKseYCcHtn0WsI8CG4vzPglo3nqbOiT8ySBT/w==",
2844 "dev": true, 2798 "dev": true,
2845 "requires": { 2799 "requires": {
2846 "@bcoe/v8-coverage": "^0.2.3", 2800 "@bcoe/v8-coverage": "^0.2.3",
2847 "@jest/console": "^27.2.5", 2801 "@jest/console": "^27.3.1",
2848 "@jest/test-result": "^27.2.5", 2802 "@jest/test-result": "^27.3.1",
2849 "@jest/transform": "^27.2.5", 2803 "@jest/transform": "^27.3.1",
2850 "@jest/types": "^27.2.5", 2804 "@jest/types": "^27.2.5",
2851 "@types/node": "*", 2805 "@types/node": "*",
2852 "chalk": "^4.0.0", 2806 "chalk": "^4.0.0",
@@ -2859,10 +2813,10 @@
2859 "istanbul-lib-report": "^3.0.0", 2813 "istanbul-lib-report": "^3.0.0",
2860 "istanbul-lib-source-maps": "^4.0.0", 2814 "istanbul-lib-source-maps": "^4.0.0",
2861 "istanbul-reports": "^3.0.2", 2815 "istanbul-reports": "^3.0.2",
2862 "jest-haste-map": "^27.2.5", 2816 "jest-haste-map": "^27.3.1",
2863 "jest-resolve": "^27.2.5", 2817 "jest-resolve": "^27.3.1",
2864 "jest-util": "^27.2.5", 2818 "jest-util": "^27.3.1",
2865 "jest-worker": "^27.2.5", 2819 "jest-worker": "^27.3.1",
2866 "slash": "^3.0.0", 2820 "slash": "^3.0.0",
2867 "source-map": "^0.6.0", 2821 "source-map": "^0.6.0",
2868 "string-length": "^4.0.1", 2822 "string-length": "^4.0.1",
@@ -2967,33 +2921,33 @@
2967 } 2921 }
2968 }, 2922 },
2969 "@jest/test-result": { 2923 "@jest/test-result": {
2970 "version": "27.2.5", 2924 "version": "27.3.1",
2971 "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.2.5.tgz", 2925 "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.3.1.tgz",
2972 "integrity": "sha512-ub7j3BrddxZ0BdSnM5JCF6cRZJ/7j3wgdX0+Dtwhw2Po+HKsELCiXUTvh+mgS4/89mpnU1CPhZxe2mTvuLPJJg==", 2926 "integrity": "sha512-mLn6Thm+w2yl0opM8J/QnPTqrfS4FoXsXF2WIWJb2O/GBSyResL71BRuMYbYRsGt7ELwS5JGcEcGb52BNrumgg==",
2973 "dev": true, 2927 "dev": true,
2974 "requires": { 2928 "requires": {
2975 "@jest/console": "^27.2.5", 2929 "@jest/console": "^27.3.1",
2976 "@jest/types": "^27.2.5", 2930 "@jest/types": "^27.2.5",
2977 "@types/istanbul-lib-coverage": "^2.0.0", 2931 "@types/istanbul-lib-coverage": "^2.0.0",
2978 "collect-v8-coverage": "^1.0.0" 2932 "collect-v8-coverage": "^1.0.0"
2979 } 2933 }
2980 }, 2934 },
2981 "@jest/test-sequencer": { 2935 "@jest/test-sequencer": {
2982 "version": "27.2.5", 2936 "version": "27.3.1",
2983 "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.2.5.tgz", 2937 "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.3.1.tgz",
2984 "integrity": "sha512-8j8fHZRfnjbbdMitMAGFKaBZ6YqvFRFJlMJzcy3v75edTOqc7RY65S9JpMY6wT260zAcL2sTQRga/P4PglCu3Q==", 2938 "integrity": "sha512-siySLo07IMEdSjA4fqEnxfIX8lB/lWYsBPwNFtkOvsFQvmBrL3yj3k3uFNZv/JDyApTakRpxbKLJ3CT8UGVCrA==",
2985 "dev": true, 2939 "dev": true,
2986 "requires": { 2940 "requires": {
2987 "@jest/test-result": "^27.2.5", 2941 "@jest/test-result": "^27.3.1",
2988 "graceful-fs": "^4.2.4", 2942 "graceful-fs": "^4.2.4",
2989 "jest-haste-map": "^27.2.5", 2943 "jest-haste-map": "^27.3.1",
2990 "jest-runtime": "^27.2.5" 2944 "jest-runtime": "^27.3.1"
2991 } 2945 }
2992 }, 2946 },
2993 "@jest/transform": { 2947 "@jest/transform": {
2994 "version": "27.2.5", 2948 "version": "27.3.1",
2995 "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.2.5.tgz", 2949 "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.3.1.tgz",
2996 "integrity": "sha512-29lRtAHHYGALbZOx343v0zKmdOg4Sb0rsA1uSv0818bvwRhs3TyElOmTVXlrw0v1ZTqXJCAH/cmoDXimBhQOJQ==", 2950 "integrity": "sha512-3fSvQ02kuvjOI1C1ssqMVBKJpZf6nwoCiSu00zAKh5nrp3SptNtZy/8s5deayHnqxhjD9CWDJ+yqQwuQ0ZafXQ==",
2997 "dev": true, 2951 "dev": true,
2998 "requires": { 2952 "requires": {
2999 "@babel/core": "^7.1.0", 2953 "@babel/core": "^7.1.0",
@@ -3003,9 +2957,9 @@
3003 "convert-source-map": "^1.4.0", 2957 "convert-source-map": "^1.4.0",
3004 "fast-json-stable-stringify": "^2.0.0", 2958 "fast-json-stable-stringify": "^2.0.0",
3005 "graceful-fs": "^4.2.4", 2959 "graceful-fs": "^4.2.4",
3006 "jest-haste-map": "^27.2.5", 2960 "jest-haste-map": "^27.3.1",
3007 "jest-regex-util": "^27.0.6", 2961 "jest-regex-util": "^27.0.6",
3008 "jest-util": "^27.2.5", 2962 "jest-util": "^27.3.1",
3009 "micromatch": "^4.0.4", 2963 "micromatch": "^4.0.4",
3010 "pirates": "^4.0.1", 2964 "pirates": "^4.0.1",
3011 "slash": "^3.0.0", 2965 "slash": "^3.0.0",
@@ -3296,14 +3250,14 @@
3296 } 3250 }
3297 }, 3251 },
3298 "@mdi/font": { 3252 "@mdi/font": {
3299 "version": "6.2.95", 3253 "version": "6.3.95",
3300 "resolved": "https://registry.npmjs.org/@mdi/font/-/font-6.2.95.tgz", 3254 "resolved": "https://registry.npmjs.org/@mdi/font/-/font-6.3.95.tgz",
3301 "integrity": "sha512-0RKkhabkFZP3ALwKqrjhdKdhydQpoydIjX6cvjIwLyjADCsE0pG68YkGY+S3qnfdErmhS4m8adwvgrAFXp2AYQ==" 3255 "integrity": "sha512-bbvnF7rNX9aMn7PeqDCa8ZQTPxEqerZeXo/lQQxE84Ka/7UrFcqvOO3XXVLtrCCtyA6uIqiG4oYFRPVJqv247Q=="
3302 }, 3256 },
3303 "@mdi/js": { 3257 "@mdi/js": {
3304 "version": "6.2.95", 3258 "version": "6.3.95",
3305 "resolved": "https://registry.npmjs.org/@mdi/js/-/js-6.2.95.tgz", 3259 "resolved": "https://registry.npmjs.org/@mdi/js/-/js-6.3.95.tgz",
3306 "integrity": "sha512-fbD22sEBathqVSQWcxshEtzhhRNFmMnV64z6T7DClRbQ9N5axorykt3Suv2zPzLDyiqH7UhNRu0VPvPCPDNpnQ==" 3260 "integrity": "sha512-/EI+ao3caXcYTWGYwwOylZKmO0ilywwE8CsEZl5L82Rgsv1eLUlCmLIrViE5A9pISsaTZELkzgbP1lQSGwRY8A=="
3307 }, 3261 },
3308 "@mdi/react": { 3262 "@mdi/react": {
3309 "version": "1.5.0", 3263 "version": "1.5.0",
@@ -3379,9 +3333,9 @@
3379 } 3333 }
3380 }, 3334 },
3381 "@sentry/electron": { 3335 "@sentry/electron": {
3382 "version": "2.5.3", 3336 "version": "2.5.4",
3383 "resolved": "https://registry.npmjs.org/@sentry/electron/-/electron-2.5.3.tgz", 3337 "resolved": "https://registry.npmjs.org/@sentry/electron/-/electron-2.5.4.tgz",
3384 "integrity": "sha512-WxfLd8Q9ddk38TUTscahh594MugHNBsN5/82gBhIdPwjKnd4JtuD+BAeZfz0ihe7xhP07SNSkkAszmFOIGnTcg==", 3338 "integrity": "sha512-tCCK+P581TmdjsDpHBQz7qYcldzGdUk1Fd6FPxPy1JKGzeY4uf/uSLKzR80Lzs5kTpEZFOwiMHSA8yjwFp5qoA==",
3385 "requires": { 3339 "requires": {
3386 "@sentry/browser": "6.7.1", 3340 "@sentry/browser": "6.7.1",
3387 "@sentry/core": "6.7.1", 3341 "@sentry/core": "6.7.1",
@@ -3692,18 +3646,18 @@
3692 "dev": true 3646 "dev": true
3693 }, 3647 },
3694 "@types/fs-extra": { 3648 "@types/fs-extra": {
3695 "version": "9.0.12", 3649 "version": "9.0.13",
3696 "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.12.tgz", 3650 "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz",
3697 "integrity": "sha512-I+bsBr67CurCGnSenZZ7v94gd3tc3+Aj2taxMT4yu4ABLuOgOjeFxX3dokG24ztSRg5tnT00sL8BszO7gSMoIw==", 3651 "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==",
3698 "dev": true, 3652 "dev": true,
3699 "requires": { 3653 "requires": {
3700 "@types/node": "*" 3654 "@types/node": "*"
3701 } 3655 }
3702 }, 3656 },
3703 "@types/glob": { 3657 "@types/glob": {
3704 "version": "7.1.4", 3658 "version": "7.2.0",
3705 "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz", 3659 "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz",
3706 "integrity": "sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==", 3660 "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==",
3707 "dev": true, 3661 "dev": true,
3708 "requires": { 3662 "requires": {
3709 "@types/minimatch": "*", 3663 "@types/minimatch": "*",
@@ -3726,18 +3680,6 @@
3726 "requires": { 3680 "requires": {
3727 "@types/react": "*", 3681 "@types/react": "*",
3728 "hoist-non-react-statics": "^3.3.0" 3682 "hoist-non-react-statics": "^3.3.0"
3729 },
3730 "dependencies": {
3731 "@types/react": {
3732 "version": "17.0.30",
3733 "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.30.tgz",
3734 "integrity": "sha512-3Dt/A8gd3TCXi2aRe84y7cK1K8G+N9CZRDG8kDGguOKa0kf/ZkSwTmVIDPsm/KbQOVMaDJXwhBtuOXxqwdpWVg==",
3735 "requires": {
3736 "@types/prop-types": "*",
3737 "@types/scheduler": "*",
3738 "csstype": "^3.0.2"
3739 }
3740 }
3741 } 3683 }
3742 }, 3684 },
3743 "@types/html-minifier-terser": { 3685 "@types/html-minifier-terser": {
@@ -3789,9 +3731,9 @@
3789 "dev": true 3731 "dev": true
3790 }, 3732 },
3791 "@types/lodash": { 3733 "@types/lodash": {
3792 "version": "4.14.172", 3734 "version": "4.14.176",
3793 "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.172.tgz", 3735 "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.176.tgz",
3794 "integrity": "sha512-/BHF5HAx3em7/KkzVKm3LrsD6HZAXuXO1AJZQ3cRRBZj4oHZDviWPYu0aEplAqDFNHZPW6d3G7KN+ONcCCC7pw==", 3736 "integrity": "sha512-xZmuPTa3rlZoIbtDUyJKZQimJV3bxCmzMIO2c9Pz9afyDro6kr7R79GwcB6mRhuoPmV2p1Vb66WOJH7F886WKQ==",
3795 "dev": true 3737 "dev": true
3796 }, 3738 },
3797 "@types/mime-types": { 3739 "@types/mime-types": {
@@ -3874,10 +3816,9 @@
3874 "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==" 3816 "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ=="
3875 }, 3817 },
3876 "@types/react": { 3818 "@types/react": {
3877 "version": "17.0.27", 3819 "version": "17.0.31",
3878 "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.27.tgz", 3820 "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.31.tgz",
3879 "integrity": "sha512-zgiJwtsggVGtr53MndV7jfiUESTqrbxOcBvwfe6KS/9bzaVPCTDieTWnFNecVNx6EAaapg5xsLLWFfHHR437AA==", 3821 "integrity": "sha512-MQSR5EL4JZtdWRvqDgz9kXhSDDoy2zMTYyg7UhP+FZ5ttUOocWyxiqFJiI57sUG0BtaEX7WDXYQlkCYkb3X9vQ==",
3880 "dev": true,
3881 "requires": { 3822 "requires": {
3882 "@types/prop-types": "*", 3823 "@types/prop-types": "*",
3883 "@types/scheduler": "*", 3824 "@types/scheduler": "*",
@@ -3885,9 +3826,9 @@
3885 } 3826 }
3886 }, 3827 },
3887 "@types/react-dom": { 3828 "@types/react-dom": {
3888 "version": "17.0.9", 3829 "version": "17.0.10",
3889 "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.9.tgz", 3830 "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.10.tgz",
3890 "integrity": "sha512-wIvGxLfgpVDSAMH5utdL9Ngm5Owu0VsGmldro3ORLXV8CShrL8awVj06NuEXFQ5xyaYfdca7Sgbk/50Ri1GdPg==", 3831 "integrity": "sha512-8oz3NAUId2z/zQdFI09IMhQPNgIbiP8Lslhv39DIDamr846/0spjZK0vnrMak0iB8EKb9QFTTIdg2Wj2zH5a3g==",
3891 "dev": true, 3832 "dev": true,
3892 "requires": { 3833 "requires": {
3893 "@types/react": "*" 3834 "@types/react": "*"
@@ -3905,9 +3846,9 @@
3905 "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" 3846 "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew=="
3906 }, 3847 },
3907 "@types/semver": { 3848 "@types/semver": {
3908 "version": "7.3.8", 3849 "version": "7.3.9",
3909 "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.8.tgz", 3850 "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.9.tgz",
3910 "integrity": "sha512-D/2EJvAlCEtYFEYmmlGwbGXuK886HzyCc3nZX/tkFTQdEU8jZDAgiv08P162yB17y4ZXZoq7yFAnW4GDBb9Now==" 3851 "integrity": "sha512-L/TMpyURfBkf+o/526Zb6kd/tchUP3iBDEPjqjb+U2MAJhVRxxrmr2fwpe08E7QsV7YLcpq0tUaQ9O9x97ZIxQ=="
3911 }, 3852 },
3912 "@types/source-list-map": { 3853 "@types/source-list-map": {
3913 "version": "0.1.2", 3854 "version": "0.1.2",
@@ -3966,9 +3907,9 @@
3966 "dev": true 3907 "dev": true
3967 }, 3908 },
3968 "@types/validator": { 3909 "@types/validator": {
3969 "version": "13.6.3", 3910 "version": "13.6.4",
3970 "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.6.3.tgz", 3911 "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.6.4.tgz",
3971 "integrity": "sha512-fWG42pMJOL4jKsDDZZREnXLjc3UE0R8LOJfARWYg6U966rxDT7TYejYzLnUF5cvSObGg34nd0+H2wHHU5Omdfw==", 3912 "integrity": "sha512-M9Lk74A8hjJIxnSW1+TcPo7Iv4arXBUvd91HuucGPjXVKRAhFHWP5HFpWjxhNWrm7HYoJwuyWpB+BKLgFYHq4w==",
3972 "dev": true 3913 "dev": true
3973 }, 3914 },
3974 "@types/verror": { 3915 "@types/verror": {
@@ -4045,74 +3986,74 @@
4045 "dev": true 3986 "dev": true
4046 }, 3987 },
4047 "@typescript-eslint/eslint-plugin": { 3988 "@typescript-eslint/eslint-plugin": {
4048 "version": "5.0.0", 3989 "version": "5.1.0",
4049 "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.0.0.tgz", 3990 "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.1.0.tgz",
4050 "integrity": "sha512-T6V6fCD2U0YesOedvydTnrNtsC8E+c2QzpawIpDdlaObX0OX5dLo7tLU5c64FhTZvA1Xrdim+cXDI7NPsVx8Cg==", 3991 "integrity": "sha512-bekODL3Tqf36Yz8u+ilha4zGxL9mdB6LIsIoMAvvC5FAuWo4NpZYXtCbv7B2CeR1LhI/lLtLk+q4tbtxuoVuCg==",
4051 "dev": true, 3992 "dev": true,
4052 "requires": { 3993 "requires": {
4053 "@typescript-eslint/experimental-utils": "5.0.0", 3994 "@typescript-eslint/experimental-utils": "5.1.0",
4054 "@typescript-eslint/scope-manager": "5.0.0", 3995 "@typescript-eslint/scope-manager": "5.1.0",
4055 "debug": "^4.3.1", 3996 "debug": "^4.3.2",
4056 "functional-red-black-tree": "^1.0.1", 3997 "functional-red-black-tree": "^1.0.1",
4057 "ignore": "^5.1.8", 3998 "ignore": "^5.1.8",
4058 "regexpp": "^3.1.0", 3999 "regexpp": "^3.2.0",
4059 "semver": "^7.3.5", 4000 "semver": "^7.3.5",
4060 "tsutils": "^3.21.0" 4001 "tsutils": "^3.21.0"
4061 } 4002 }
4062 }, 4003 },
4063 "@typescript-eslint/experimental-utils": { 4004 "@typescript-eslint/experimental-utils": {
4064 "version": "5.0.0", 4005 "version": "5.1.0",
4065 "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.0.0.tgz", 4006 "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.1.0.tgz",
4066 "integrity": "sha512-Dnp4dFIsZcPawD6CT1p5NibNUQyGSEz80sULJZkyhyna8AEqArmfwMwJPbmKzWVo4PabqNVzHYlzmcdLQWk+pg==", 4007 "integrity": "sha512-ovE9qUiZMOMgxQAESZsdBT+EXIfx/YUYAbwGUI6V03amFdOOxI9c6kitkgRvLkJaLusgMZ2xBhss+tQ0Y1HWxA==",
4067 "dev": true, 4008 "dev": true,
4068 "requires": { 4009 "requires": {
4069 "@types/json-schema": "^7.0.7", 4010 "@types/json-schema": "^7.0.9",
4070 "@typescript-eslint/scope-manager": "5.0.0", 4011 "@typescript-eslint/scope-manager": "5.1.0",
4071 "@typescript-eslint/types": "5.0.0", 4012 "@typescript-eslint/types": "5.1.0",
4072 "@typescript-eslint/typescript-estree": "5.0.0", 4013 "@typescript-eslint/typescript-estree": "5.1.0",
4073 "eslint-scope": "^5.1.1", 4014 "eslint-scope": "^5.1.1",
4074 "eslint-utils": "^3.0.0" 4015 "eslint-utils": "^3.0.0"
4075 } 4016 }
4076 }, 4017 },
4077 "@typescript-eslint/parser": { 4018 "@typescript-eslint/parser": {
4078 "version": "5.0.0", 4019 "version": "5.1.0",
4079 "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.0.0.tgz", 4020 "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.1.0.tgz",
4080 "integrity": "sha512-B6D5rmmQ14I1fdzs71eL3DAuvnPHTY/t7rQABrL9BLnx/H51Un8ox1xqYAchs0/V2trcoyxB1lMJLlrwrJCDgw==", 4021 "integrity": "sha512-vx1P+mhCtYw3+bRHmbalq/VKP2Y3gnzNgxGxfEWc6OFpuEL7iQdAeq11Ke3Rhy8NjgB+AHsIWEwni3e+Y7djKA==",
4081 "dev": true, 4022 "dev": true,
4082 "requires": { 4023 "requires": {
4083 "@typescript-eslint/scope-manager": "5.0.0", 4024 "@typescript-eslint/scope-manager": "5.1.0",
4084 "@typescript-eslint/types": "5.0.0", 4025 "@typescript-eslint/types": "5.1.0",
4085 "@typescript-eslint/typescript-estree": "5.0.0", 4026 "@typescript-eslint/typescript-estree": "5.1.0",
4086 "debug": "^4.3.1" 4027 "debug": "^4.3.2"
4087 } 4028 }
4088 }, 4029 },
4089 "@typescript-eslint/scope-manager": { 4030 "@typescript-eslint/scope-manager": {
4090 "version": "5.0.0", 4031 "version": "5.1.0",
4091 "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.0.0.tgz", 4032 "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.1.0.tgz",
4092 "integrity": "sha512-5RFjdA/ain/MDUHYXdF173btOKncIrLuBmA9s6FJhzDrRAyVSA+70BHg0/MW6TE+UiKVyRtX91XpVS0gVNwVDQ==", 4033 "integrity": "sha512-yYlyVjvn5lvwCL37i4hPsa1s0ORsjkauhTqbb8MnpvUs7xykmcjGqwlNZ2Q5QpoqkJ1odlM2bqHqJwa28qV6Tw==",
4093 "dev": true, 4034 "dev": true,
4094 "requires": { 4035 "requires": {
4095 "@typescript-eslint/types": "5.0.0", 4036 "@typescript-eslint/types": "5.1.0",
4096 "@typescript-eslint/visitor-keys": "5.0.0" 4037 "@typescript-eslint/visitor-keys": "5.1.0"
4097 } 4038 }
4098 }, 4039 },
4099 "@typescript-eslint/types": { 4040 "@typescript-eslint/types": {
4100 "version": "5.0.0", 4041 "version": "5.1.0",
4101 "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.0.0.tgz", 4042 "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.1.0.tgz",
4102 "integrity": "sha512-dU/pKBUpehdEqYuvkojmlv0FtHuZnLXFBn16zsDmlFF3LXkOpkAQ2vrKc3BidIIve9EMH2zfTlxqw9XM0fFN5w==", 4043 "integrity": "sha512-sEwNINVxcB4ZgC6Fe6rUyMlvsB2jvVdgxjZEjQUQVlaSPMNamDOwO6/TB98kFt4sYYfNhdhTPBEQqNQZjMMswA==",
4103 "dev": true 4044 "dev": true
4104 }, 4045 },
4105 "@typescript-eslint/typescript-estree": { 4046 "@typescript-eslint/typescript-estree": {
4106 "version": "5.0.0", 4047 "version": "5.1.0",
4107 "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.0.0.tgz", 4048 "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.1.0.tgz",
4108 "integrity": "sha512-V/6w+PPQMhinWKSn+fCiX5jwvd1vRBm7AX7SJQXEGQtwtBvjMPjaU3YTQ1ik2UF1u96X7tsB96HMnulG3eLi9Q==", 4049 "integrity": "sha512-SSz+l9YrIIsW4s0ZqaEfnjl156XQ4VRmJsbA0ZE1XkXrD3cRpzuZSVCyqeCMR3EBjF27IisWakbBDGhGNIOvfQ==",
4109 "dev": true, 4050 "dev": true,
4110 "requires": { 4051 "requires": {
4111 "@typescript-eslint/types": "5.0.0", 4052 "@typescript-eslint/types": "5.1.0",
4112 "@typescript-eslint/visitor-keys": "5.0.0", 4053 "@typescript-eslint/visitor-keys": "5.1.0",
4113 "debug": "^4.3.1", 4054 "debug": "^4.3.2",
4114 "globby": "^11.0.3", 4055 "globby": "^11.0.4",
4115 "is-glob": "^4.0.1", 4056 "is-glob": "^4.0.3",
4116 "semver": "^7.3.5", 4057 "semver": "^7.3.5",
4117 "tsutils": "^3.21.0" 4058 "tsutils": "^3.21.0"
4118 }, 4059 },
@@ -4129,12 +4070,12 @@
4129 } 4070 }
4130 }, 4071 },
4131 "@typescript-eslint/visitor-keys": { 4072 "@typescript-eslint/visitor-keys": {
4132 "version": "5.0.0", 4073 "version": "5.1.0",
4133 "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.0.0.tgz", 4074 "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.1.0.tgz",
4134 "integrity": "sha512-yRyd2++o/IrJdyHuYMxyFyBhU762MRHQ/bAGQeTnN3pGikfh+nEmM61XTqaDH1XDp53afZ+waXrk0ZvenoZ6xw==", 4075 "integrity": "sha512-uqNXepKBg81JVwjuqAxYrXa1Ql/YDzM+8g/pS+TCPxba0wZttl8m5DkrasbfnmJGHs4lQ2jTbcZ5azGhI7kK+w==",
4135 "dev": true, 4076 "dev": true,
4136 "requires": { 4077 "requires": {
4137 "@typescript-eslint/types": "5.0.0", 4078 "@typescript-eslint/types": "5.1.0",
4138 "eslint-visitor-keys": "^3.0.0" 4079 "eslint-visitor-keys": "^3.0.0"
4139 }, 4080 },
4140 "dependencies": { 4081 "dependencies": {
@@ -4445,16 +4386,6 @@
4445 "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 4386 "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
4446 "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" 4387 "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
4447 }, 4388 },
4448 "abstract-socket": {
4449 "version": "2.1.1",
4450 "resolved": "https://registry.npmjs.org/abstract-socket/-/abstract-socket-2.1.1.tgz",
4451 "integrity": "sha512-YZJizsvS1aBua5Gd01woe4zuyYBGgSMeqDOB6/ChwdTI904KP6QGtJswXl4hcqWxbz86hQBe++HWV0hF1aGUtA==",
4452 "optional": true,
4453 "requires": {
4454 "bindings": "^1.2.1",
4455 "nan": "^2.12.1"
4456 }
4457 },
4458 "accepts": { 4389 "accepts": {
4459 "version": "1.3.7", 4390 "version": "1.3.7",
4460 "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", 4391 "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
@@ -4640,6 +4571,12 @@
4640 "p-limit": "^2.2.0" 4571 "p-limit": "^2.2.0"
4641 } 4572 }
4642 }, 4573 },
4574 "path-exists": {
4575 "version": "4.0.0",
4576 "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
4577 "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
4578 "dev": true
4579 },
4643 "pify": { 4580 "pify": {
4644 "version": "5.0.0", 4581 "version": "5.0.0",
4645 "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", 4582 "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz",
@@ -5112,29 +5049,6 @@
5112 "sanitize-filename": "^1.6.3", 5049 "sanitize-filename": "^1.6.3",
5113 "semver": "^7.3.5", 5050 "semver": "^7.3.5",
5114 "temp-file": "^3.4.0" 5051 "temp-file": "^3.4.0"
5115 },
5116 "dependencies": {
5117 "builder-util-runtime": {
5118 "version": "8.9.1",
5119 "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.9.1.tgz",
5120 "integrity": "sha512-c8a8J3wK6BIVLW7ls+7TRK9igspTbzWmUqxFbgK0m40Ggm6efUbxtWVCGIjc+dtchyr5qAMAUL6iEGRdS/6vwg==",
5121 "dev": true,
5122 "requires": {
5123 "debug": "^4.3.2",
5124 "sax": "^1.2.4"
5125 }
5126 },
5127 "form-data": {
5128 "version": "4.0.0",
5129 "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
5130 "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
5131 "dev": true,
5132 "requires": {
5133 "asynckit": "^0.4.0",
5134 "combined-stream": "^1.0.8",
5135 "mime-types": "^2.1.12"
5136 }
5137 }
5138 } 5052 }
5139 }, 5053 },
5140 "app-root-path": { 5054 "app-root-path": {
@@ -5632,12 +5546,12 @@
5632 "dev": true 5546 "dev": true
5633 }, 5547 },
5634 "babel-jest": { 5548 "babel-jest": {
5635 "version": "27.2.5", 5549 "version": "27.3.1",
5636 "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.2.5.tgz", 5550 "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.3.1.tgz",
5637 "integrity": "sha512-GC9pWCcitBhSuF7H3zl0mftoKizlswaF0E3qi+rPL417wKkCB0d+Sjjb0OfXvxj7gWiBf497ldgRMii68Xz+2g==", 5551 "integrity": "sha512-SjIF8hh/ir0peae2D6S6ZKRhUy7q/DnpH7k/V6fT4Bgs/LXXUztOpX4G2tCgq8mLo5HA9mN6NmlFMeYtKmIsTQ==",
5638 "dev": true, 5552 "dev": true,
5639 "requires": { 5553 "requires": {
5640 "@jest/transform": "^27.2.5", 5554 "@jest/transform": "^27.3.1",
5641 "@jest/types": "^27.2.5", 5555 "@jest/types": "^27.2.5",
5642 "@types/babel__core": "^7.1.14", 5556 "@types/babel__core": "^7.1.14",
5643 "babel-plugin-istanbul": "^6.0.0", 5557 "babel-plugin-istanbul": "^6.0.0",
@@ -5708,9 +5622,9 @@
5708 } 5622 }
5709 }, 5623 },
5710 "babel-plugin-formatjs": { 5624 "babel-plugin-formatjs": {
5711 "version": "10.3.9", 5625 "version": "10.3.11",
5712 "resolved": "https://registry.npmjs.org/babel-plugin-formatjs/-/babel-plugin-formatjs-10.3.9.tgz", 5626 "resolved": "https://registry.npmjs.org/babel-plugin-formatjs/-/babel-plugin-formatjs-10.3.11.tgz",
5713 "integrity": "sha512-+LO2Sap2HLoFBEOGnx1E/s34gsgCUWWvoPZ8YSg4cGfveIh94btBdCaAOUcAjUJamLXyL0g7Lsqkp7GjcNq20Q==", 5627 "integrity": "sha512-NkV5+dajX+YvsBHEYcwlJm4Q9l7BoLBuhUMW8cCcOzx9c4ZGKcpmaRt7EObpT742iOsFE5QYUlfLwqOL0MVkTg==",
5714 "dev": true, 5628 "dev": true,
5715 "requires": { 5629 "requires": {
5716 "@babel/core": "^7.10.4", 5630 "@babel/core": "^7.10.4",
@@ -5718,134 +5632,45 @@
5718 "@babel/plugin-syntax-jsx": "7", 5632 "@babel/plugin-syntax-jsx": "7",
5719 "@babel/traverse": "7", 5633 "@babel/traverse": "7",
5720 "@babel/types": "^7.12.11", 5634 "@babel/types": "^7.12.11",
5721 "@formatjs/icu-messageformat-parser": "2.0.12", 5635 "@formatjs/icu-messageformat-parser": "2.0.14",
5722 "@formatjs/ts-transformer": "3.5.0", 5636 "@formatjs/ts-transformer": "3.6.0",
5723 "@types/babel__core": "^7.1.7", 5637 "@types/babel__core": "^7.1.7",
5724 "@types/babel__helper-plugin-utils": "^7.10.0", 5638 "@types/babel__helper-plugin-utils": "^7.10.0",
5725 "tslib": "^2.1.0" 5639 "tslib": "^2.1.0"
5726 },
5727 "dependencies": {
5728 "@formatjs/ecma402-abstract": {
5729 "version": "1.9.9",
5730 "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.9.9.tgz",
5731 "integrity": "sha512-w2HpUW17Ev8UN8G1fSvl0skCLP+HkhGZii0ALaBXYc7rd3osD2s8EF2ihSNkeEeC6aySX1IAkRm0f4lnE8Jeaw==",
5732 "dev": true,
5733 "requires": {
5734 "@formatjs/intl-localematcher": "0.2.21",
5735 "tslib": "^2.1.0"
5736 }
5737 },
5738 "@formatjs/icu-messageformat-parser": {
5739 "version": "2.0.12",
5740 "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.0.12.tgz",
5741 "integrity": "sha512-X/tdbKLfVBc2yJRX+xC3uqYxXkp9336FhSS1Hb6kU6pSOU+EseylS3a/vjFOKjol1qQ5BSIQd8YPWtOOt3KcWA==",
5742 "dev": true,
5743 "requires": {
5744 "@formatjs/ecma402-abstract": "1.9.9",
5745 "@formatjs/icu-skeleton-parser": "1.2.13",
5746 "tslib": "^2.1.0"
5747 }
5748 },
5749 "@formatjs/icu-skeleton-parser": {
5750 "version": "1.2.13",
5751 "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.2.13.tgz",
5752 "integrity": "sha512-PHK4kdIcNTI15ASyn6dCA2cxzUPHE+UK/FsBkPULNpKgPWEZIYAFO9PgG0a9SDcIIr7Ta3SPPbUZGKRXT3d+ng==",
5753 "dev": true,
5754 "requires": {
5755 "@formatjs/ecma402-abstract": "1.9.9",
5756 "tslib": "^2.1.0"
5757 }
5758 },
5759 "@formatjs/intl-localematcher": {
5760 "version": "0.2.21",
5761 "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.21.tgz",
5762 "integrity": "sha512-JTJeLiNwexN4Gy0cMxoUPvJbKhXdnSuo5jPrDafEZpnDWlJ5VDYta8zUVVozO/pwzEmFVHEUpgiEDj+39L4oMg==",
5763 "dev": true,
5764 "requires": {
5765 "tslib": "^2.1.0"
5766 }
5767 },
5768 "@formatjs/ts-transformer": {
5769 "version": "3.5.0",
5770 "resolved": "https://registry.npmjs.org/@formatjs/ts-transformer/-/ts-transformer-3.5.0.tgz",
5771 "integrity": "sha512-nmQqlSzY3ceNE9BoR0o/OsM+SFzbFwrQnopQL1K2I//K6wCwQn/fewh7MMcT6glkoMDBUx9PS7P9LeQfb+qgHQ==",
5772 "dev": true,
5773 "requires": {
5774 "@formatjs/icu-messageformat-parser": "2.0.12",
5775 "@types/node": "14 || 16",
5776 "chalk": "^4.0.0",
5777 "tslib": "^2.1.0",
5778 "typescript": "^4.3"
5779 }
5780 },
5781 "ansi-styles": {
5782 "version": "4.3.0",
5783 "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
5784 "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
5785 "dev": true,
5786 "requires": {
5787 "color-convert": "^2.0.1"
5788 }
5789 },
5790 "chalk": {
5791 "version": "4.1.2",
5792 "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
5793 "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
5794 "dev": true,
5795 "requires": {
5796 "ansi-styles": "^4.1.0",
5797 "supports-color": "^7.1.0"
5798 }
5799 },
5800 "color-convert": {
5801 "version": "2.0.1",
5802 "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
5803 "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
5804 "dev": true,
5805 "requires": {
5806 "color-name": "~1.1.4"
5807 }
5808 },
5809 "color-name": {
5810 "version": "1.1.4",
5811 "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
5812 "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
5813 "dev": true
5814 },
5815 "has-flag": {
5816 "version": "4.0.0",
5817 "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
5818 "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
5819 "dev": true
5820 },
5821 "supports-color": {
5822 "version": "7.2.0",
5823 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
5824 "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
5825 "dev": true,
5826 "requires": {
5827 "has-flag": "^4.0.0"
5828 }
5829 },
5830 "typescript": {
5831 "version": "4.4.4",
5832 "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz",
5833 "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==",
5834 "dev": true
5835 }
5836 } 5640 }
5837 }, 5641 },
5838 "babel-plugin-istanbul": { 5642 "babel-plugin-istanbul": {
5839 "version": "6.0.0", 5643 "version": "6.1.1",
5840 "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", 5644 "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
5841 "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", 5645 "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==",
5842 "dev": true, 5646 "dev": true,
5843 "requires": { 5647 "requires": {
5844 "@babel/helper-plugin-utils": "^7.0.0", 5648 "@babel/helper-plugin-utils": "^7.0.0",
5845 "@istanbuljs/load-nyc-config": "^1.0.0", 5649 "@istanbuljs/load-nyc-config": "^1.0.0",
5846 "@istanbuljs/schema": "^0.1.2", 5650 "@istanbuljs/schema": "^0.1.2",
5847 "istanbul-lib-instrument": "^4.0.0", 5651 "istanbul-lib-instrument": "^5.0.4",
5848 "test-exclude": "^6.0.0" 5652 "test-exclude": "^6.0.0"
5653 },
5654 "dependencies": {
5655 "istanbul-lib-instrument": {
5656 "version": "5.0.4",
5657 "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.0.4.tgz",
5658 "integrity": "sha512-W6jJF9rLGEISGoCyXRqa/JCGQGmmxPO10TMu7izaUTynxvBvTjqzAIIGCK9USBmIbQAaSWD6XJPrM9Pv5INknw==",
5659 "dev": true,
5660 "requires": {
5661 "@babel/core": "^7.12.3",
5662 "@babel/parser": "^7.14.7",
5663 "@istanbuljs/schema": "^0.1.2",
5664 "istanbul-lib-coverage": "^3.0.0",
5665 "semver": "^6.3.0"
5666 }
5667 },
5668 "semver": {
5669 "version": "6.3.0",
5670 "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
5671 "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
5672 "dev": true
5673 }
5849 } 5674 }
5850 }, 5675 },
5851 "babel-plugin-jest-hoist": { 5676 "babel-plugin-jest-hoist": {
@@ -6479,14 +6304,14 @@
6479 "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==" 6304 "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g=="
6480 }, 6305 },
6481 "buffer": { 6306 "buffer": {
6482 "version": "4.9.2", 6307 "version": "5.7.1",
6483 "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", 6308 "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
6484 "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", 6309 "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
6485 "dev": true, 6310 "dev": true,
6311 "optional": true,
6486 "requires": { 6312 "requires": {
6487 "base64-js": "^1.0.2", 6313 "base64-js": "^1.3.1",
6488 "ieee754": "^1.1.4", 6314 "ieee754": "^1.1.13"
6489 "isarray": "^1.0.0"
6490 } 6315 }
6491 }, 6316 },
6492 "buffer-alloc": { 6317 "buffer-alloc": {
@@ -6588,16 +6413,6 @@
6588 "color-convert": "^2.0.1" 6413 "color-convert": "^2.0.1"
6589 } 6414 }
6590 }, 6415 },
6591 "builder-util-runtime": {
6592 "version": "8.9.1",
6593 "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.9.1.tgz",
6594 "integrity": "sha512-c8a8J3wK6BIVLW7ls+7TRK9igspTbzWmUqxFbgK0m40Ggm6efUbxtWVCGIjc+dtchyr5qAMAUL6iEGRdS/6vwg==",
6595 "dev": true,
6596 "requires": {
6597 "debug": "^4.3.2",
6598 "sax": "^1.2.4"
6599 }
6600 },
6601 "chalk": { 6416 "chalk": {
6602 "version": "4.1.2", 6417 "version": "4.1.2",
6603 "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 6418 "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -6682,9 +6497,10 @@
6682 } 6497 }
6683 }, 6498 },
6684 "builder-util-runtime": { 6499 "builder-util-runtime": {
6685 "version": "8.7.5", 6500 "version": "8.9.1",
6686 "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.7.5.tgz", 6501 "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.9.1.tgz",
6687 "integrity": "sha512-fgUFHKtMNjdvH6PDRFntdIGUPgwZ69sXsAqEulCtoiqgWes5agrMq/Ud274zjJRTbckYh2PHh8/1CpFc6dpsbQ==", 6502 "integrity": "sha512-c8a8J3wK6BIVLW7ls+7TRK9igspTbzWmUqxFbgK0m40Ggm6efUbxtWVCGIjc+dtchyr5qAMAUL6iEGRdS/6vwg==",
6503 "dev": true,
6688 "requires": { 6504 "requires": {
6689 "debug": "^4.3.2", 6505 "debug": "^4.3.2",
6690 "sax": "^1.2.4" 6506 "sax": "^1.2.4"
@@ -6707,6 +6523,75 @@
6707 "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", 6523 "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
6708 "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" 6524 "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
6709 }, 6525 },
6526 "cacache": {
6527 "version": "12.0.4",
6528 "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz",
6529 "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==",
6530 "dev": true,
6531 "requires": {
6532 "bluebird": "^3.5.5",
6533 "chownr": "^1.1.1",
6534 "figgy-pudding": "^3.5.1",
6535 "glob": "^7.1.4",
6536 "graceful-fs": "^4.1.15",
6537 "infer-owner": "^1.0.3",
6538 "lru-cache": "^5.1.1",
6539 "mississippi": "^3.0.0",
6540 "mkdirp": "^0.5.1",
6541 "move-concurrently": "^1.0.1",
6542 "promise-inflight": "^1.0.1",
6543 "rimraf": "^2.6.3",
6544 "ssri": "^6.0.1",
6545 "unique-filename": "^1.1.1",
6546 "y18n": "^4.0.0"
6547 },
6548 "dependencies": {
6549 "glob": {
6550 "version": "7.2.0",
6551 "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
6552 "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
6553 "dev": true,
6554 "requires": {
6555 "fs.realpath": "^1.0.0",
6556 "inflight": "^1.0.4",
6557 "inherits": "2",
6558 "minimatch": "^3.0.4",
6559 "once": "^1.3.0",
6560 "path-is-absolute": "^1.0.0"
6561 }
6562 },
6563 "lru-cache": {
6564 "version": "5.1.1",
6565 "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
6566 "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
6567 "dev": true,
6568 "requires": {
6569 "yallist": "^3.0.2"
6570 }
6571 },
6572 "rimraf": {
6573 "version": "2.7.1",
6574 "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
6575 "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
6576 "dev": true,
6577 "requires": {
6578 "glob": "^7.1.3"
6579 }
6580 },
6581 "y18n": {
6582 "version": "4.0.3",
6583 "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
6584 "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
6585 "dev": true
6586 },
6587 "yallist": {
6588 "version": "3.1.1",
6589 "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
6590 "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
6591 "dev": true
6592 }
6593 }
6594 },
6710 "cache-base": { 6595 "cache-base": {
6711 "version": "1.0.1", 6596 "version": "1.0.1",
6712 "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", 6597 "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
@@ -6835,9 +6720,9 @@
6835 } 6720 }
6836 }, 6721 },
6837 "caniuse-lite": { 6722 "caniuse-lite": {
6838 "version": "1.0.30001269", 6723 "version": "1.0.30001271",
6839 "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001269.tgz", 6724 "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001271.tgz",
6840 "integrity": "sha512-UOy8okEVs48MyHYgV+RdW1Oiudl1H6KolybD6ZquD0VcrPSgj25omXO1S7rDydjpqaISCwA8Pyx+jUQKZwWO5w==", 6725 "integrity": "sha512-BBruZFWmt3HFdVPS8kceTBIguKxu4f99n5JNp06OlPD/luoAMIaIK5ieV5YjnBLH3Nysai9sxj9rpJj4ZisXOA==",
6841 "dev": true 6726 "dev": true
6842 }, 6727 },
6843 "caseless": { 6728 "caseless": {
@@ -7116,9 +7001,9 @@
7116 } 7001 }
7117 }, 7002 },
7118 "clean-css": { 7003 "clean-css": {
7119 "version": "4.2.3", 7004 "version": "4.2.4",
7120 "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", 7005 "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz",
7121 "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", 7006 "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==",
7122 "dev": true, 7007 "dev": true,
7123 "requires": { 7008 "requires": {
7124 "source-map": "~0.6.0" 7009 "source-map": "~0.6.0"
@@ -7426,21 +7311,21 @@
7426 "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" 7311 "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs="
7427 }, 7312 },
7428 "colorspace": { 7313 "colorspace": {
7429 "version": "1.1.2", 7314 "version": "1.1.4",
7430 "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", 7315 "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz",
7431 "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", 7316 "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==",
7432 "requires": { 7317 "requires": {
7433 "color": "3.0.x", 7318 "color": "^3.1.3",
7434 "text-hex": "1.0.x" 7319 "text-hex": "1.0.x"
7435 }, 7320 },
7436 "dependencies": { 7321 "dependencies": {
7437 "color": { 7322 "color": {
7438 "version": "3.0.0", 7323 "version": "3.2.1",
7439 "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", 7324 "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz",
7440 "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", 7325 "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==",
7441 "requires": { 7326 "requires": {
7442 "color-convert": "^1.9.1", 7327 "color-convert": "^1.9.3",
7443 "color-string": "^1.5.2" 7328 "color-string": "^1.6.0"
7444 } 7329 }
7445 } 7330 }
7446 } 7331 }
@@ -7621,12 +7506,6 @@
7621 "requires": { 7506 "requires": {
7622 "ansi-regex": "^4.1.0" 7507 "ansi-regex": "^4.1.0"
7623 } 7508 }
7624 },
7625 "strip-json-comments": {
7626 "version": "3.0.1",
7627 "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz",
7628 "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==",
7629 "dev": true
7630 } 7509 }
7631 } 7510 }
7632 }, 7511 },
@@ -7748,15 +7627,14 @@
7748 } 7627 }
7749 }, 7628 },
7750 "concurrently": { 7629 "concurrently": {
7751 "version": "6.2.1", 7630 "version": "6.3.0",
7752 "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.2.1.tgz", 7631 "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.3.0.tgz",
7753 "integrity": "sha512-emgwhH+ezkuYKSHZQ+AkgEpoUZZlbpPVYCVv7YZx0r+T7fny1H03r2nYRebpi2DudHR4n1Rgbo2YTxKOxVJ4+g==", 7632 "integrity": "sha512-k4k1jQGHHKsfbqzkUszVf29qECBrkvBKkcPJEUDTyVR7tZd1G/JOfnst4g1sYbFvJ4UjHZisj1aWQR8yLKpGPw==",
7754 "dev": true, 7633 "dev": true,
7755 "requires": { 7634 "requires": {
7756 "chalk": "^4.1.0", 7635 "chalk": "^4.1.0",
7757 "date-fns": "^2.16.1", 7636 "date-fns": "^2.16.1",
7758 "lodash": "^4.17.21", 7637 "lodash": "^4.17.21",
7759 "read-pkg": "^5.2.0",
7760 "rxjs": "^6.6.3", 7638 "rxjs": "^6.6.3",
7761 "spawn-command": "^0.0.2-1", 7639 "spawn-command": "^0.0.2-1",
7762 "supports-color": "^8.1.0", 7640 "supports-color": "^8.1.0",
@@ -8176,19 +8054,6 @@
8176 "optional": true, 8054 "optional": true,
8177 "requires": { 8055 "requires": {
8178 "buffer": "^5.1.0" 8056 "buffer": "^5.1.0"
8179 },
8180 "dependencies": {
8181 "buffer": {
8182 "version": "5.7.1",
8183 "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
8184 "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
8185 "dev": true,
8186 "optional": true,
8187 "requires": {
8188 "base64-js": "^1.3.1",
8189 "ieee754": "^1.1.13"
8190 }
8191 }
8192 } 8057 }
8193 }, 8058 },
8194 "create-ecdh": { 8059 "create-ecdh": {
@@ -8443,9 +8308,9 @@
8443 } 8308 }
8444 }, 8309 },
8445 "csstype": { 8310 "csstype": {
8446 "version": "3.0.8", 8311 "version": "3.0.9",
8447 "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz", 8312 "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.9.tgz",
8448 "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==" 8313 "integrity": "sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw=="
8449 }, 8314 },
8450 "currently-unhandled": { 8315 "currently-unhandled": {
8451 "version": "0.4.1", 8316 "version": "0.4.1",
@@ -8513,9 +8378,9 @@
8513 "dev": true 8378 "dev": true
8514 }, 8379 },
8515 "darkreader": { 8380 "darkreader": {
8516 "version": "4.9.34", 8381 "version": "4.9.39",
8517 "resolved": "https://registry.npmjs.org/darkreader/-/darkreader-4.9.34.tgz", 8382 "resolved": "https://registry.npmjs.org/darkreader/-/darkreader-4.9.39.tgz",
8518 "integrity": "sha512-Nq8rxXLUD/0TZ9qzvAkZDAbxRVrbPdwKPTqnx7sEk1RLTK6IyQNu2d1GdffPVEhXgK1SvSeETWDwo443tSf0fg==" 8383 "integrity": "sha512-OikzTzTDasjq+e+PXRWZRxMA+PZddz9cDLiZGVUI48w1FbBDfXwwQyyWiO7eavdAQ1cV9dYA21g6KtdK/0OefA=="
8519 }, 8384 },
8520 "dashdash": { 8385 "dashdash": {
8521 "version": "1.14.1", 8386 "version": "1.14.1",
@@ -8544,17 +8409,17 @@
8544 "dev": true 8409 "dev": true
8545 }, 8410 },
8546 "dbus-next": { 8411 "dbus-next": {
8547 "version": "0.9.2", 8412 "version": "0.10.2",
8548 "resolved": "https://registry.npmjs.org/dbus-next/-/dbus-next-0.9.2.tgz", 8413 "resolved": "https://registry.npmjs.org/dbus-next/-/dbus-next-0.10.2.tgz",
8549 "integrity": "sha512-tzQq/+wrTZ2yU+U5PoeXc97KABhX2v55C/T0finH3tSKYuI8H/SqppIFymBBrUHcK13LvEGY3vdj3ikPPenL5g==", 8414 "integrity": "sha512-kLNQoadPstLgKKGIXKrnRsMgtAK/o+ix3ZmcfTfvBHzghiO9yHXpoKImGnB50EXwnfSFaSAullW/7UrSkAISSQ==",
8550 "requires": { 8415 "requires": {
8551 "@nornagon/put": "0.0.8", 8416 "@nornagon/put": "0.0.8",
8552 "abstract-socket": "^2.0.0",
8553 "event-stream": "3.3.4", 8417 "event-stream": "3.3.4",
8554 "hexy": "^0.2.10", 8418 "hexy": "^0.2.10",
8555 "jsbi": "^2.0.5", 8419 "jsbi": "^2.0.5",
8556 "long": "^4.0.0", 8420 "long": "^4.0.0",
8557 "safe-buffer": "^5.1.1", 8421 "safe-buffer": "^5.1.1",
8422 "usocket": "^0.3.0",
8558 "xml2js": "^0.4.17" 8423 "xml2js": "^0.4.17"
8559 } 8424 }
8560 }, 8425 },
@@ -8801,12 +8666,6 @@
8801 } 8666 }
8802 } 8667 }
8803 }, 8668 },
8804 "p-map": {
8805 "version": "2.1.0",
8806 "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
8807 "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
8808 "dev": true
8809 },
8810 "rimraf": { 8669 "rimraf": {
8811 "version": "2.7.1", 8670 "version": "2.7.1",
8812 "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", 8671 "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
@@ -8960,16 +8819,6 @@
8960 "js-yaml": "^4.1.0" 8819 "js-yaml": "^4.1.0"
8961 }, 8820 },
8962 "dependencies": { 8821 "dependencies": {
8963 "builder-util-runtime": {
8964 "version": "8.9.1",
8965 "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.9.1.tgz",
8966 "integrity": "sha512-c8a8J3wK6BIVLW7ls+7TRK9igspTbzWmUqxFbgK0m40Ggm6efUbxtWVCGIjc+dtchyr5qAMAUL6iEGRdS/6vwg==",
8967 "dev": true,
8968 "requires": {
8969 "debug": "^4.3.2",
8970 "sax": "^1.2.4"
8971 }
8972 },
8973 "iconv-lite": { 8822 "iconv-lite": {
8974 "version": "0.6.3", 8823 "version": "0.6.3",
8975 "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", 8824 "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
@@ -9313,9 +9162,9 @@
9313 } 9162 }
9314 }, 9163 },
9315 "electron": { 9164 "electron": {
9316 "version": "15.2.0", 9165 "version": "15.3.0",
9317 "resolved": "https://registry.npmjs.org/electron/-/electron-15.2.0.tgz", 9166 "resolved": "https://registry.npmjs.org/electron/-/electron-15.3.0.tgz",
9318 "integrity": "sha512-kg0JdlsVbJgD/hO/A7o9VH8U44pQWkIsyt/sALxH6g8CiHQxMujLn2JfB2gyUfHXPT7m8vD4Z+CurS2KodEsWw==", 9167 "integrity": "sha512-YLzaKCFmSniNlz9+NUTNs7ssPyDc+bYOCYZ0b/D6DjVkOeIFz4SR8EYKqlOc8TcqlDNu18BbWqz6zbJPyAAURg==",
9319 "dev": true, 9168 "dev": true,
9320 "requires": { 9169 "requires": {
9321 "@electron/get": "^1.13.0", 9170 "@electron/get": "^1.13.0",
@@ -9352,16 +9201,6 @@
9352 "color-convert": "^2.0.1" 9201 "color-convert": "^2.0.1"
9353 } 9202 }
9354 }, 9203 },
9355 "builder-util-runtime": {
9356 "version": "8.9.1",
9357 "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.9.1.tgz",
9358 "integrity": "sha512-c8a8J3wK6BIVLW7ls+7TRK9igspTbzWmUqxFbgK0m40Ggm6efUbxtWVCGIjc+dtchyr5qAMAUL6iEGRdS/6vwg==",
9359 "dev": true,
9360 "requires": {
9361 "debug": "^4.3.2",
9362 "sax": "^1.2.4"
9363 }
9364 },
9365 "chalk": { 9204 "chalk": {
9366 "version": "4.1.2", 9205 "version": "4.1.2",
9367 "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 9206 "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -9428,9 +9267,9 @@
9428 "integrity": "sha512-C2FQJuk8567P2a2loBNwl5c8kwOTQVMB0capgHtPI7zKwZG16X0UxG+sNYZExQfnJ0PA+ecECA/4LcXxQa2TCA==" 9267 "integrity": "sha512-C2FQJuk8567P2a2loBNwl5c8kwOTQVMB0capgHtPI7zKwZG16X0UxG+sNYZExQfnJ0PA+ecECA/4LcXxQa2TCA=="
9429 }, 9268 },
9430 "electron-notarize": { 9269 "electron-notarize": {
9431 "version": "1.1.0", 9270 "version": "1.1.1",
9432 "resolved": "https://registry.npmjs.org/electron-notarize/-/electron-notarize-1.1.0.tgz", 9271 "resolved": "https://registry.npmjs.org/electron-notarize/-/electron-notarize-1.1.1.tgz",
9433 "integrity": "sha512-Dmp/jm2y3PTcjmjVe+jCT0sjsbBfbNuk7GOPtduZce2iae1hgAPnlNErk6x70TalsGIL5Ip3liSryqde/6eB5w==", 9272 "integrity": "sha512-kufsnqh86CTX89AYNG3NCPoboqnku/+32RxeJ2+7A4Rbm4bbOx0Nc7XTy3/gAlBfpj9xPAxHfhZLOHgfi6cJVw==",
9434 "dev": true, 9273 "dev": true,
9435 "requires": { 9274 "requires": {
9436 "debug": "^4.1.1", 9275 "debug": "^4.1.1",
@@ -9531,16 +9370,6 @@
9531 "color-convert": "^2.0.1" 9370 "color-convert": "^2.0.1"
9532 } 9371 }
9533 }, 9372 },
9534 "builder-util-runtime": {
9535 "version": "8.9.1",
9536 "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.9.1.tgz",
9537 "integrity": "sha512-c8a8J3wK6BIVLW7ls+7TRK9igspTbzWmUqxFbgK0m40Ggm6efUbxtWVCGIjc+dtchyr5qAMAUL6iEGRdS/6vwg==",
9538 "dev": true,
9539 "requires": {
9540 "debug": "^4.3.2",
9541 "sax": "^1.2.4"
9542 }
9543 },
9544 "chalk": { 9373 "chalk": {
9545 "version": "4.1.2", 9374 "version": "4.1.2",
9546 "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 9375 "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -9590,9 +9419,9 @@
9590 } 9419 }
9591 }, 9420 },
9592 "electron-react-titlebar": { 9421 "electron-react-titlebar": {
9593 "version": "1.0.0", 9422 "version": "1.1.0",
9594 "resolved": "https://registry.npmjs.org/electron-react-titlebar/-/electron-react-titlebar-1.0.0.tgz", 9423 "resolved": "https://registry.npmjs.org/electron-react-titlebar/-/electron-react-titlebar-1.1.0.tgz",
9595 "integrity": "sha512-/Ilv4kYPyJ1czijKtkQ1pXgvI/UeWaHjlNRnvuimWbrDzJJhsEtRHMdbnR1MaZEqRlT5pPlCIy3VflTP6ow3rg==", 9424 "integrity": "sha512-MS7RXQqXO1H7rKUPjCkd18LJmRt2Ime1WK/gnqMUNxUFrFbh8WA5Cim8/HRAW3EgwDRPrnNHSxxLjXzykKiT3Q==",
9596 "requires": { 9425 "requires": {
9597 "classnames": "^2.3.1", 9426 "classnames": "^2.3.1",
9598 "lodash": "^4.17.21", 9427 "lodash": "^4.17.21",
@@ -9600,9 +9429,9 @@
9600 } 9429 }
9601 }, 9430 },
9602 "electron-to-chromium": { 9431 "electron-to-chromium": {
9603 "version": "1.3.870", 9432 "version": "1.3.877",
9604 "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.870.tgz", 9433 "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.877.tgz",
9605 "integrity": "sha512-PiJMshfq6PL+i1V+nKLwhHbCKeD8eAz8rvO9Cwk/7cChOHJBtufmjajLyYLsSRHguRFiOCVx3XzJLeZsIAYfSA==", 9434 "integrity": "sha512-fT5mW5Giw5iyVukeHb2XvB4joBKvzHtl8Vs3QzE7APATpFMt/T7RWyUcIKSZzYkKQgpMbu+vDBTCHfQZvh8klA==",
9606 "dev": true 9435 "dev": true
9607 }, 9436 },
9608 "electron-updater": { 9437 "electron-updater": {
@@ -9618,6 +9447,17 @@
9618 "lodash.escaperegexp": "^4.1.2", 9447 "lodash.escaperegexp": "^4.1.2",
9619 "lodash.isequal": "^4.5.0", 9448 "lodash.isequal": "^4.5.0",
9620 "semver": "^7.3.5" 9449 "semver": "^7.3.5"
9450 },
9451 "dependencies": {
9452 "builder-util-runtime": {
9453 "version": "8.7.5",
9454 "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.7.5.tgz",
9455 "integrity": "sha512-fgUFHKtMNjdvH6PDRFntdIGUPgwZ69sXsAqEulCtoiqgWes5agrMq/Ud274zjJRTbckYh2PHh8/1CpFc6dpsbQ==",
9456 "requires": {
9457 "debug": "^4.3.2",
9458 "sax": "^1.2.4"
9459 }
9460 }
9621 } 9461 }
9622 }, 9462 },
9623 "electron-window-state": { 9463 "electron-window-state": {
@@ -9760,8 +9600,7 @@
9760 "env-paths": { 9600 "env-paths": {
9761 "version": "2.2.1", 9601 "version": "2.2.1",
9762 "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", 9602 "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
9763 "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", 9603 "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="
9764 "dev": true
9765 }, 9604 },
9766 "errno": { 9605 "errno": {
9767 "version": "0.1.8", 9606 "version": "0.1.8",
@@ -9982,9 +9821,9 @@
9982 } 9821 }
9983 }, 9822 },
9984 "eslint": { 9823 "eslint": {
9985 "version": "8.0.1", 9824 "version": "8.1.0",
9986 "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.0.1.tgz", 9825 "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.1.0.tgz",
9987 "integrity": "sha512-LsgcwZgQ72vZ+SMp4K6pAnk2yFDWL7Ti4pJaRvsZ0Hsw2h8ZjUIW38a9AFn2cZXdBMlScMFYYgsSp4ttFI/0bA==", 9826 "integrity": "sha512-JZvNneArGSUsluHWJ8g8MMs3CfIEzwaLx9KyH4tZ2i+R2/rPWzL8c0zg3rHdwYVpN/1sB9gqnjHwz9HoeJpGHw==",
9988 "dev": true, 9827 "dev": true,
9989 "requires": { 9828 "requires": {
9990 "@eslint/eslintrc": "^1.0.3", 9829 "@eslint/eslintrc": "^1.0.3",
@@ -10343,12 +10182,6 @@
10343 "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", 10182 "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
10344 "dev": true 10183 "dev": true
10345 }, 10184 },
10346 "path-exists": {
10347 "version": "3.0.0",
10348 "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
10349 "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
10350 "dev": true
10351 },
10352 "pkg-dir": { 10185 "pkg-dir": {
10353 "version": "2.0.0", 10186 "version": "2.0.0",
10354 "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", 10187 "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
@@ -10417,9 +10250,9 @@
10417 } 10250 }
10418 }, 10251 },
10419 "eslint-plugin-jest": { 10252 "eslint-plugin-jest": {
10420 "version": "25.2.1", 10253 "version": "25.2.2",
10421 "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.2.1.tgz", 10254 "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.2.2.tgz",
10422 "integrity": "sha512-fC6T95lqgWHsdVFd+f0kTHH32NxbIzIm1fJ/3kGaCFcQP1fJc5khV7DzUHjNQSTOHd5Toa7ccEBptab4uFqbNQ==", 10255 "integrity": "sha512-frn5yhOF60U4kcqozO3zKTNZQUk+mfx037XOy2iiYL8FhorEkuCuL3/flzKcY1ECDP2WYT9ydmvlO3fRW9o4mg==",
10423 "dev": true, 10256 "dev": true,
10424 "requires": { 10257 "requires": {
10425 "@typescript-eslint/experimental-utils": "^5.0.0" 10258 "@typescript-eslint/experimental-utils": "^5.0.0"
@@ -10744,18 +10577,19 @@
10744 } 10577 }
10745 }, 10578 },
10746 "execa": { 10579 "execa": {
10747 "version": "4.1.0", 10580 "version": "5.1.1",
10748 "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", 10581 "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
10749 "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", 10582 "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
10583 "dev": true,
10750 "requires": { 10584 "requires": {
10751 "cross-spawn": "^7.0.0", 10585 "cross-spawn": "^7.0.3",
10752 "get-stream": "^5.0.0", 10586 "get-stream": "^6.0.0",
10753 "human-signals": "^1.1.1", 10587 "human-signals": "^2.1.0",
10754 "is-stream": "^2.0.0", 10588 "is-stream": "^2.0.0",
10755 "merge-stream": "^2.0.0", 10589 "merge-stream": "^2.0.0",
10756 "npm-run-path": "^4.0.0", 10590 "npm-run-path": "^4.0.1",
10757 "onetime": "^5.1.0", 10591 "onetime": "^5.1.2",
10758 "signal-exit": "^3.0.2", 10592 "signal-exit": "^3.0.3",
10759 "strip-final-newline": "^2.0.0" 10593 "strip-final-newline": "^2.0.0"
10760 }, 10594 },
10761 "dependencies": { 10595 "dependencies": {
@@ -10763,6 +10597,7 @@
10763 "version": "7.0.3", 10597 "version": "7.0.3",
10764 "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 10598 "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
10765 "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 10599 "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
10600 "dev": true,
10766 "requires": { 10601 "requires": {
10767 "path-key": "^3.1.0", 10602 "path-key": "^3.1.0",
10768 "shebang-command": "^2.0.0", 10603 "shebang-command": "^2.0.0",
@@ -10770,22 +10605,22 @@
10770 } 10605 }
10771 }, 10606 },
10772 "get-stream": { 10607 "get-stream": {
10773 "version": "5.2.0", 10608 "version": "6.0.1",
10774 "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 10609 "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
10775 "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 10610 "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
10776 "requires": { 10611 "dev": true
10777 "pump": "^3.0.0"
10778 }
10779 }, 10612 },
10780 "path-key": { 10613 "path-key": {
10781 "version": "3.1.1", 10614 "version": "3.1.1",
10782 "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 10615 "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
10783 "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" 10616 "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
10617 "dev": true
10784 }, 10618 },
10785 "shebang-command": { 10619 "shebang-command": {
10786 "version": "2.0.0", 10620 "version": "2.0.0",
10787 "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 10621 "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
10788 "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 10622 "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
10623 "dev": true,
10789 "requires": { 10624 "requires": {
10790 "shebang-regex": "^3.0.0" 10625 "shebang-regex": "^3.0.0"
10791 } 10626 }
@@ -10793,12 +10628,14 @@
10793 "shebang-regex": { 10628 "shebang-regex": {
10794 "version": "3.0.0", 10629 "version": "3.0.0",
10795 "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 10630 "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
10796 "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" 10631 "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
10632 "dev": true
10797 }, 10633 },
10798 "which": { 10634 "which": {
10799 "version": "2.0.2", 10635 "version": "2.0.2",
10800 "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 10636 "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
10801 "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 10637 "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
10638 "dev": true,
10802 "requires": { 10639 "requires": {
10803 "isexe": "^2.0.0" 10640 "isexe": "^2.0.0"
10804 } 10641 }
@@ -10913,16 +10750,16 @@
10913 } 10750 }
10914 }, 10751 },
10915 "expect": { 10752 "expect": {
10916 "version": "27.2.5", 10753 "version": "27.3.1",
10917 "resolved": "https://registry.npmjs.org/expect/-/expect-27.2.5.tgz", 10754 "resolved": "https://registry.npmjs.org/expect/-/expect-27.3.1.tgz",
10918 "integrity": "sha512-ZrO0w7bo8BgGoP/bLz+HDCI+0Hfei9jUSZs5yI/Wyn9VkG9w8oJ7rHRgYj+MA7yqqFa0IwHA3flJzZtYugShJA==", 10755 "integrity": "sha512-MrNXV2sL9iDRebWPGOGFdPQRl2eDQNu/uhxIMShjjx74T6kC6jFIkmQ6OqXDtevjGUkyB2IT56RzDBqXf/QPCg==",
10919 "dev": true, 10756 "dev": true,
10920 "requires": { 10757 "requires": {
10921 "@jest/types": "^27.2.5", 10758 "@jest/types": "^27.2.5",
10922 "ansi-styles": "^5.0.0", 10759 "ansi-styles": "^5.0.0",
10923 "jest-get-type": "^27.0.6", 10760 "jest-get-type": "^27.3.1",
10924 "jest-matcher-utils": "^27.2.5", 10761 "jest-matcher-utils": "^27.3.1",
10925 "jest-message-util": "^27.2.5", 10762 "jest-message-util": "^27.3.1",
10926 "jest-regex-util": "^27.0.6" 10763 "jest-regex-util": "^27.0.6"
10927 }, 10764 },
10928 "dependencies": { 10765 "dependencies": {
@@ -11163,9 +11000,9 @@
11163 } 11000 }
11164 }, 11001 },
11165 "extsprintf": { 11002 "extsprintf": {
11166 "version": "1.3.0", 11003 "version": "1.4.0",
11167 "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 11004 "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.0.tgz",
11168 "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", 11005 "integrity": "sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=",
11169 "optional": true 11006 "optional": true
11170 }, 11007 },
11171 "fancy-log": { 11008 "fancy-log": {
@@ -11632,13 +11469,13 @@
11632 "dev": true 11469 "dev": true
11633 }, 11470 },
11634 "form-data": { 11471 "form-data": {
11635 "version": "2.3.3", 11472 "version": "4.0.0",
11636 "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", 11473 "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
11637 "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", 11474 "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
11638 "optional": true, 11475 "dev": true,
11639 "requires": { 11476 "requires": {
11640 "asynckit": "^0.4.0", 11477 "asynckit": "^0.4.0",
11641 "combined-stream": "^1.0.6", 11478 "combined-stream": "^1.0.8",
11642 "mime-types": "^2.1.12" 11479 "mime-types": "^2.1.12"
11643 } 11480 }
11644 }, 11481 },
@@ -13465,14 +13302,15 @@
13465 } 13302 }
13466 }, 13303 },
13467 "human-signals": { 13304 "human-signals": {
13468 "version": "1.1.1", 13305 "version": "2.1.0",
13469 "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", 13306 "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
13470 "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" 13307 "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
13308 "dev": true
13471 }, 13309 },
13472 "husky": { 13310 "husky": {
13473 "version": "7.0.2", 13311 "version": "7.0.4",
13474 "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.2.tgz", 13312 "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz",
13475 "integrity": "sha512-8yKEWNX4z2YsofXAMT7KvA1g8p+GxtB1ffV8XtpAEGuXNAbCV5wdNKH+qTpw8SM9fh4aMPDR+yQuKfgnreyZlg==", 13313 "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==",
13476 "dev": true 13314 "dev": true
13477 }, 13315 },
13478 "hyphenate-style-name": { 13316 "hyphenate-style-name": {
@@ -13596,6 +13434,12 @@
13596 "p-limit": "^2.2.0" 13434 "p-limit": "^2.2.0"
13597 } 13435 }
13598 }, 13436 },
13437 "path-exists": {
13438 "version": "4.0.0",
13439 "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
13440 "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
13441 "dev": true
13442 },
13599 "pkg-dir": { 13443 "pkg-dir": {
13600 "version": "4.2.0", 13444 "version": "4.2.0",
13601 "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", 13445 "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
@@ -13795,12 +13639,12 @@
13795 "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" 13639 "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA=="
13796 }, 13640 },
13797 "intl-messageformat": { 13641 "intl-messageformat": {
13798 "version": "9.9.1", 13642 "version": "9.9.4",
13799 "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-9.9.1.tgz", 13643 "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-9.9.4.tgz",
13800 "integrity": "sha512-cuzS/XKHn//hvKka77JKU2dseiVY2dofQjIOZv6ZFxFt4Z9sPXnZ7KQ9Ak2r+4XBCjI04MqJ1PhKs/3X22AkfA==", 13644 "integrity": "sha512-+Mz5LMTV+JCybFBym69z+XnE47wnIjHC31Jz7We6SE0yKyjf/neaWAFz8teuT6OUw/AW3Orr5LO4SHVNXl5keg==",
13801 "requires": { 13645 "requires": {
13802 "@formatjs/fast-memoize": "1.2.0", 13646 "@formatjs/fast-memoize": "1.2.0",
13803 "@formatjs/icu-messageformat-parser": "2.0.11", 13647 "@formatjs/icu-messageformat-parser": "2.0.14",
13804 "tslib": "^2.1.0" 13648 "tslib": "^2.1.0"
13805 } 13649 }
13806 }, 13650 },
@@ -14289,9 +14133,9 @@
14289 "optional": true 14133 "optional": true
14290 }, 14134 },
14291 "istanbul-lib-coverage": { 14135 "istanbul-lib-coverage": {
14292 "version": "3.0.2", 14136 "version": "3.2.0",
14293 "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.2.tgz", 14137 "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz",
14294 "integrity": "sha512-o5+eTUYzCJ11/+JhW5/FUCdfsdoYVdQ/8I/OveE2XsjehYn5DdeSnNQAbjYaO8gQ6hvGTN6GM6ddQqpTVG5j8g==", 14138 "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==",
14295 "dev": true 14139 "dev": true
14296 }, 14140 },
14297 "istanbul-lib-instrument": { 14141 "istanbul-lib-instrument": {
@@ -14418,14 +14262,14 @@
14418 } 14262 }
14419 }, 14263 },
14420 "jest": { 14264 "jest": {
14421 "version": "27.1.0", 14265 "version": "27.3.1",
14422 "resolved": "https://registry.npmjs.org/jest/-/jest-27.1.0.tgz", 14266 "resolved": "https://registry.npmjs.org/jest/-/jest-27.3.1.tgz",
14423 "integrity": "sha512-pSQDVwRSwb109Ss13lcMtdfS9r8/w2Zz8+mTUA9VORD66GflCdl8nUFCqM96geOD2EBwWCNURrNAfQsLIDNBdg==", 14267 "integrity": "sha512-U2AX0AgQGd5EzMsiZpYt8HyZ+nSVIh5ujQ9CPp9EQZJMjXIiSZpJNweZl0swatKRoqHWgGKM3zaSwm4Zaz87ng==",
14424 "dev": true, 14268 "dev": true,
14425 "requires": { 14269 "requires": {
14426 "@jest/core": "^27.1.0", 14270 "@jest/core": "^27.3.1",
14427 "import-local": "^3.0.2", 14271 "import-local": "^3.0.2",
14428 "jest-cli": "^27.1.0" 14272 "jest-cli": "^27.3.1"
14429 }, 14273 },
14430 "dependencies": { 14274 "dependencies": {
14431 "ansi-regex": { 14275 "ansi-regex": {
@@ -14481,21 +14325,21 @@
14481 "dev": true 14325 "dev": true
14482 }, 14326 },
14483 "jest-cli": { 14327 "jest-cli": {
14484 "version": "27.2.5", 14328 "version": "27.3.1",
14485 "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.2.5.tgz", 14329 "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.3.1.tgz",
14486 "integrity": "sha512-XzfcOXi5WQrXqFYsDxq5RDOKY4FNIgBgvgf3ZBz4e/j5/aWep5KnsAYH5OFPMdX/TP/LFsYQMRH7kzJUMh6JKg==", 14330 "integrity": "sha512-WHnCqpfK+6EvT62me6WVs8NhtbjAS4/6vZJnk7/2+oOr50cwAzG4Wxt6RXX0hu6m1169ZGMlhYYUNeKBXCph/Q==",
14487 "dev": true, 14331 "dev": true,
14488 "requires": { 14332 "requires": {
14489 "@jest/core": "^27.2.5", 14333 "@jest/core": "^27.3.1",
14490 "@jest/test-result": "^27.2.5", 14334 "@jest/test-result": "^27.3.1",
14491 "@jest/types": "^27.2.5", 14335 "@jest/types": "^27.2.5",
14492 "chalk": "^4.0.0", 14336 "chalk": "^4.0.0",
14493 "exit": "^0.1.2", 14337 "exit": "^0.1.2",
14494 "graceful-fs": "^4.2.4", 14338 "graceful-fs": "^4.2.4",
14495 "import-local": "^3.0.2", 14339 "import-local": "^3.0.2",
14496 "jest-config": "^27.2.5", 14340 "jest-config": "^27.3.1",
14497 "jest-util": "^27.2.5", 14341 "jest-util": "^27.3.1",
14498 "jest-validate": "^27.2.5", 14342 "jest-validate": "^27.3.1",
14499 "prompts": "^2.0.1", 14343 "prompts": "^2.0.1",
14500 "yargs": "^16.2.0" 14344 "yargs": "^16.2.0"
14501 } 14345 }
@@ -14547,110 +14391,38 @@
14547 } 14391 }
14548 }, 14392 },
14549 "jest-changed-files": { 14393 "jest-changed-files": {
14550 "version": "27.2.5", 14394 "version": "27.3.0",
14551 "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.2.5.tgz", 14395 "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.3.0.tgz",
14552 "integrity": "sha512-jfnNJzF89csUKRPKJ4MwZ1SH27wTmX2xiAIHUHrsb/OYd9Jbo4/SXxJ17/nnx6RIifpthk3Y+LEeOk+/dDeGdw==", 14396 "integrity": "sha512-9DJs9garMHv4RhylUMZgbdCJ3+jHSkpL9aaVKp13xtXAD80qLTLrqcDZL1PHA9dYA0bCI86Nv2BhkLpLhrBcPg==",
14553 "dev": true, 14397 "dev": true,
14554 "requires": { 14398 "requires": {
14555 "@jest/types": "^27.2.5", 14399 "@jest/types": "^27.2.5",
14556 "execa": "^5.0.0", 14400 "execa": "^5.0.0",
14557 "throat": "^6.0.1" 14401 "throat": "^6.0.1"
14558 },
14559 "dependencies": {
14560 "cross-spawn": {
14561 "version": "7.0.3",
14562 "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
14563 "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
14564 "dev": true,
14565 "requires": {
14566 "path-key": "^3.1.0",
14567 "shebang-command": "^2.0.0",
14568 "which": "^2.0.1"
14569 }
14570 },
14571 "execa": {
14572 "version": "5.1.1",
14573 "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
14574 "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
14575 "dev": true,
14576 "requires": {
14577 "cross-spawn": "^7.0.3",
14578 "get-stream": "^6.0.0",
14579 "human-signals": "^2.1.0",
14580 "is-stream": "^2.0.0",
14581 "merge-stream": "^2.0.0",
14582 "npm-run-path": "^4.0.1",
14583 "onetime": "^5.1.2",
14584 "signal-exit": "^3.0.3",
14585 "strip-final-newline": "^2.0.0"
14586 }
14587 },
14588 "get-stream": {
14589 "version": "6.0.1",
14590 "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
14591 "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
14592 "dev": true
14593 },
14594 "human-signals": {
14595 "version": "2.1.0",
14596 "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
14597 "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
14598 "dev": true
14599 },
14600 "path-key": {
14601 "version": "3.1.1",
14602 "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
14603 "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
14604 "dev": true
14605 },
14606 "shebang-command": {
14607 "version": "2.0.0",
14608 "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
14609 "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
14610 "dev": true,
14611 "requires": {
14612 "shebang-regex": "^3.0.0"
14613 }
14614 },
14615 "shebang-regex": {
14616 "version": "3.0.0",
14617 "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
14618 "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
14619 "dev": true
14620 },
14621 "which": {
14622 "version": "2.0.2",
14623 "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
14624 "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
14625 "dev": true,
14626 "requires": {
14627 "isexe": "^2.0.0"
14628 }
14629 }
14630 } 14402 }
14631 }, 14403 },
14632 "jest-circus": { 14404 "jest-circus": {
14633 "version": "27.2.5", 14405 "version": "27.3.1",
14634 "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.2.5.tgz", 14406 "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.3.1.tgz",
14635 "integrity": "sha512-eyL9IcrAxm3Saq3rmajFCwpaxaRMGJ1KJs+7hlTDinXpJmeR3P02bheM3CYohE7UfwOBmrFMJHjgo/WPcLTM+Q==", 14407 "integrity": "sha512-v1dsM9II6gvXokgqq6Yh2jHCpfg7ZqV4jWY66u7npz24JnhP3NHxI0sKT7+ZMQ7IrOWHYAaeEllOySbDbWsiXw==",
14636 "dev": true, 14408 "dev": true,
14637 "requires": { 14409 "requires": {
14638 "@jest/environment": "^27.2.5", 14410 "@jest/environment": "^27.3.1",
14639 "@jest/test-result": "^27.2.5", 14411 "@jest/test-result": "^27.3.1",
14640 "@jest/types": "^27.2.5", 14412 "@jest/types": "^27.2.5",
14641 "@types/node": "*", 14413 "@types/node": "*",
14642 "chalk": "^4.0.0", 14414 "chalk": "^4.0.0",
14643 "co": "^4.6.0", 14415 "co": "^4.6.0",
14644 "dedent": "^0.7.0", 14416 "dedent": "^0.7.0",
14645 "expect": "^27.2.5", 14417 "expect": "^27.3.1",
14646 "is-generator-fn": "^2.0.0", 14418 "is-generator-fn": "^2.0.0",
14647 "jest-each": "^27.2.5", 14419 "jest-each": "^27.3.1",
14648 "jest-matcher-utils": "^27.2.5", 14420 "jest-matcher-utils": "^27.3.1",
14649 "jest-message-util": "^27.2.5", 14421 "jest-message-util": "^27.3.1",
14650 "jest-runtime": "^27.2.5", 14422 "jest-runtime": "^27.3.1",
14651 "jest-snapshot": "^27.2.5", 14423 "jest-snapshot": "^27.3.1",
14652 "jest-util": "^27.2.5", 14424 "jest-util": "^27.3.1",
14653 "pretty-format": "^27.2.5", 14425 "pretty-format": "^27.3.1",
14654 "slash": "^3.0.0", 14426 "slash": "^3.0.0",
14655 "stack-utils": "^2.0.3", 14427 "stack-utils": "^2.0.3",
14656 "throat": "^6.0.1" 14428 "throat": "^6.0.1"
@@ -14708,32 +14480,32 @@
14708 } 14480 }
14709 }, 14481 },
14710 "jest-config": { 14482 "jest-config": {
14711 "version": "27.2.5", 14483 "version": "27.3.1",
14712 "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.2.5.tgz", 14484 "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.3.1.tgz",
14713 "integrity": "sha512-QdENtn9b5rIIYGlbDNEcgY9LDL5kcokJnXrp7x8AGjHob/XFqw1Z6p+gjfna2sUulQsQ3ce2Fvntnv+7fKYDhQ==", 14485 "integrity": "sha512-KY8xOIbIACZ/vdYCKSopL44I0xboxC751IX+DXL2+Wx6DKNycyEfV3rryC3BPm5Uq/BBqDoMrKuqLEUNJmMKKg==",
14714 "dev": true, 14486 "dev": true,
14715 "requires": { 14487 "requires": {
14716 "@babel/core": "^7.1.0", 14488 "@babel/core": "^7.1.0",
14717 "@jest/test-sequencer": "^27.2.5", 14489 "@jest/test-sequencer": "^27.3.1",
14718 "@jest/types": "^27.2.5", 14490 "@jest/types": "^27.2.5",
14719 "babel-jest": "^27.2.5", 14491 "babel-jest": "^27.3.1",
14720 "chalk": "^4.0.0", 14492 "chalk": "^4.0.0",
14493 "ci-info": "^3.2.0",
14721 "deepmerge": "^4.2.2", 14494 "deepmerge": "^4.2.2",
14722 "glob": "^7.1.1", 14495 "glob": "^7.1.1",
14723 "graceful-fs": "^4.2.4", 14496 "graceful-fs": "^4.2.4",
14724 "is-ci": "^3.0.0", 14497 "jest-circus": "^27.3.1",
14725 "jest-circus": "^27.2.5", 14498 "jest-environment-jsdom": "^27.3.1",
14726 "jest-environment-jsdom": "^27.2.5", 14499 "jest-environment-node": "^27.3.1",
14727 "jest-environment-node": "^27.2.5", 14500 "jest-get-type": "^27.3.1",
14728 "jest-get-type": "^27.0.6", 14501 "jest-jasmine2": "^27.3.1",
14729 "jest-jasmine2": "^27.2.5",
14730 "jest-regex-util": "^27.0.6", 14502 "jest-regex-util": "^27.0.6",
14731 "jest-resolve": "^27.2.5", 14503 "jest-resolve": "^27.3.1",
14732 "jest-runner": "^27.2.5", 14504 "jest-runner": "^27.3.1",
14733 "jest-util": "^27.2.5", 14505 "jest-util": "^27.3.1",
14734 "jest-validate": "^27.2.5", 14506 "jest-validate": "^27.3.1",
14735 "micromatch": "^4.0.4", 14507 "micromatch": "^4.0.4",
14736 "pretty-format": "^27.2.5" 14508 "pretty-format": "^27.3.1"
14737 }, 14509 },
14738 "dependencies": { 14510 "dependencies": {
14739 "ansi-styles": { 14511 "ansi-styles": {
@@ -14845,15 +14617,15 @@
14845 } 14617 }
14846 }, 14618 },
14847 "jest-diff": { 14619 "jest-diff": {
14848 "version": "27.2.5", 14620 "version": "27.3.1",
14849 "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.2.5.tgz", 14621 "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.3.1.tgz",
14850 "integrity": "sha512-7gfwwyYkeslOOVQY4tVq5TaQa92mWfC9COsVYMNVYyJTOYAqbIkoD3twi5A+h+tAPtAelRxkqY6/xu+jwTr0dA==", 14622 "integrity": "sha512-PCeuAH4AWUo2O5+ksW4pL9v5xJAcIKPUPfIhZBcG1RKv/0+dvaWTQK1Nrau8d67dp65fOqbeMdoil+6PedyEPQ==",
14851 "dev": true, 14623 "dev": true,
14852 "requires": { 14624 "requires": {
14853 "chalk": "^4.0.0", 14625 "chalk": "^4.0.0",
14854 "diff-sequences": "^27.0.6", 14626 "diff-sequences": "^27.0.6",
14855 "jest-get-type": "^27.0.6", 14627 "jest-get-type": "^27.3.1",
14856 "pretty-format": "^27.2.5" 14628 "pretty-format": "^27.3.1"
14857 }, 14629 },
14858 "dependencies": { 14630 "dependencies": {
14859 "ansi-styles": { 14631 "ansi-styles": {
@@ -14917,16 +14689,16 @@
14917 } 14689 }
14918 }, 14690 },
14919 "jest-each": { 14691 "jest-each": {
14920 "version": "27.2.5", 14692 "version": "27.3.1",
14921 "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.2.5.tgz", 14693 "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.3.1.tgz",
14922 "integrity": "sha512-HUPWIbJT0bXarRwKu/m7lYzqxR4GM5EhKOsu0z3t0SKtbFN6skQhpAUADM4qFShBXb9zoOuag5lcrR1x/WM+Ag==", 14694 "integrity": "sha512-E4SwfzKJWYcvOYCjOxhZcxwL+AY0uFMvdCOwvzgutJiaiodFjkxQQDxHm8FQBeTqDnSmKsQWn7ldMRzTn2zJaQ==",
14923 "dev": true, 14695 "dev": true,
14924 "requires": { 14696 "requires": {
14925 "@jest/types": "^27.2.5", 14697 "@jest/types": "^27.2.5",
14926 "chalk": "^4.0.0", 14698 "chalk": "^4.0.0",
14927 "jest-get-type": "^27.0.6", 14699 "jest-get-type": "^27.3.1",
14928 "jest-util": "^27.2.5", 14700 "jest-util": "^27.3.1",
14929 "pretty-format": "^27.2.5" 14701 "pretty-format": "^27.3.1"
14930 }, 14702 },
14931 "dependencies": { 14703 "dependencies": {
14932 "ansi-styles": { 14704 "ansi-styles": {
@@ -14981,44 +14753,44 @@
14981 } 14753 }
14982 }, 14754 },
14983 "jest-environment-jsdom": { 14755 "jest-environment-jsdom": {
14984 "version": "27.2.5", 14756 "version": "27.3.1",
14985 "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.2.5.tgz", 14757 "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.3.1.tgz",
14986 "integrity": "sha512-QtRpOh/RQKuXniaWcoFE2ElwP6tQcyxHu0hlk32880g0KczdonCs5P1sk5+weu/OVzh5V4Bt1rXuQthI01mBLg==", 14758 "integrity": "sha512-3MOy8qMzIkQlfb3W1TfrD7uZHj+xx8Olix5vMENkj5djPmRqndMaXtpnaZkxmxM+Qc3lo+yVzJjzuXbCcZjAlg==",
14987 "dev": true, 14759 "dev": true,
14988 "requires": { 14760 "requires": {
14989 "@jest/environment": "^27.2.5", 14761 "@jest/environment": "^27.3.1",
14990 "@jest/fake-timers": "^27.2.5", 14762 "@jest/fake-timers": "^27.3.1",
14991 "@jest/types": "^27.2.5", 14763 "@jest/types": "^27.2.5",
14992 "@types/node": "*", 14764 "@types/node": "*",
14993 "jest-mock": "^27.2.5", 14765 "jest-mock": "^27.3.0",
14994 "jest-util": "^27.2.5", 14766 "jest-util": "^27.3.1",
14995 "jsdom": "^16.6.0" 14767 "jsdom": "^16.6.0"
14996 } 14768 }
14997 }, 14769 },
14998 "jest-environment-node": { 14770 "jest-environment-node": {
14999 "version": "27.2.5", 14771 "version": "27.3.1",
15000 "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.2.5.tgz", 14772 "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.3.1.tgz",
15001 "integrity": "sha512-0o1LT4grm7iwrS8fIoLtwJxb/hoa3GsH7pP10P02Jpj7Mi4BXy65u46m89vEM2WfD1uFJQ2+dfDiWZNA2e6bJg==", 14773 "integrity": "sha512-T89F/FgkE8waqrTSA7/ydMkcc52uYPgZZ6q8OaZgyiZkJb5QNNCF6oPZjH9IfPFfcc9uBWh1574N0kY0pSvTXw==",
15002 "dev": true, 14774 "dev": true,
15003 "requires": { 14775 "requires": {
15004 "@jest/environment": "^27.2.5", 14776 "@jest/environment": "^27.3.1",
15005 "@jest/fake-timers": "^27.2.5", 14777 "@jest/fake-timers": "^27.3.1",
15006 "@jest/types": "^27.2.5", 14778 "@jest/types": "^27.2.5",
15007 "@types/node": "*", 14779 "@types/node": "*",
15008 "jest-mock": "^27.2.5", 14780 "jest-mock": "^27.3.0",
15009 "jest-util": "^27.2.5" 14781 "jest-util": "^27.3.1"
15010 } 14782 }
15011 }, 14783 },
15012 "jest-get-type": { 14784 "jest-get-type": {
15013 "version": "27.0.6", 14785 "version": "27.3.1",
15014 "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.6.tgz", 14786 "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.3.1.tgz",
15015 "integrity": "sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==", 14787 "integrity": "sha512-+Ilqi8hgHSAdhlQ3s12CAVNd8H96ZkQBfYoXmArzZnOfAtVAJEiPDBirjByEblvG/4LPJmkL+nBqPO3A1YJAEg==",
15016 "dev": true 14788 "dev": true
15017 }, 14789 },
15018 "jest-haste-map": { 14790 "jest-haste-map": {
15019 "version": "27.2.5", 14791 "version": "27.3.1",
15020 "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.2.5.tgz", 14792 "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.3.1.tgz",
15021 "integrity": "sha512-pzO+Gw2WLponaSi0ilpzYBE0kuVJstoXBX8YWyUebR8VaXuX4tzzn0Zp23c/WaETo7XYTGv2e8KdnpiskAFMhQ==", 14793 "integrity": "sha512-lYfNZIzwPccDJZIyk9Iz5iQMM/MH56NIIcGj7AFU1YyA4ewWFBl8z+YPJuSCRML/ee2cCt2y3W4K3VXPT6Nhzg==",
15022 "dev": true, 14794 "dev": true,
15023 "requires": { 14795 "requires": {
15024 "@jest/types": "^27.2.5", 14796 "@jest/types": "^27.2.5",
@@ -15030,8 +14802,8 @@
15030 "graceful-fs": "^4.2.4", 14802 "graceful-fs": "^4.2.4",
15031 "jest-regex-util": "^27.0.6", 14803 "jest-regex-util": "^27.0.6",
15032 "jest-serializer": "^27.0.6", 14804 "jest-serializer": "^27.0.6",
15033 "jest-util": "^27.2.5", 14805 "jest-util": "^27.3.1",
15034 "jest-worker": "^27.2.5", 14806 "jest-worker": "^27.3.1",
15035 "micromatch": "^4.0.4", 14807 "micromatch": "^4.0.4",
15036 "walker": "^1.0.7" 14808 "walker": "^1.0.7"
15037 }, 14809 },
@@ -15099,28 +14871,28 @@
15099 } 14871 }
15100 }, 14872 },
15101 "jest-jasmine2": { 14873 "jest-jasmine2": {
15102 "version": "27.2.5", 14874 "version": "27.3.1",
15103 "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.2.5.tgz", 14875 "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.3.1.tgz",
15104 "integrity": "sha512-hdxY9Cm/CjLqu2tXeAoQHPgA4vcqlweVXYOg1+S9FeFdznB9Rti+eEBKDDkmOy9iqr4Xfbq95OkC4NFbXXPCAQ==", 14876 "integrity": "sha512-WK11ZUetDQaC09w4/j7o4FZDUIp+4iYWH/Lik34Pv7ukL+DuXFGdnmmi7dT58J2ZYKFB5r13GyE0z3NPeyJmsg==",
15105 "dev": true, 14877 "dev": true,
15106 "requires": { 14878 "requires": {
15107 "@babel/traverse": "^7.1.0", 14879 "@babel/traverse": "^7.1.0",
15108 "@jest/environment": "^27.2.5", 14880 "@jest/environment": "^27.3.1",
15109 "@jest/source-map": "^27.0.6", 14881 "@jest/source-map": "^27.0.6",
15110 "@jest/test-result": "^27.2.5", 14882 "@jest/test-result": "^27.3.1",
15111 "@jest/types": "^27.2.5", 14883 "@jest/types": "^27.2.5",
15112 "@types/node": "*", 14884 "@types/node": "*",
15113 "chalk": "^4.0.0", 14885 "chalk": "^4.0.0",
15114 "co": "^4.6.0", 14886 "co": "^4.6.0",
15115 "expect": "^27.2.5", 14887 "expect": "^27.3.1",
15116 "is-generator-fn": "^2.0.0", 14888 "is-generator-fn": "^2.0.0",
15117 "jest-each": "^27.2.5", 14889 "jest-each": "^27.3.1",
15118 "jest-matcher-utils": "^27.2.5", 14890 "jest-matcher-utils": "^27.3.1",
15119 "jest-message-util": "^27.2.5", 14891 "jest-message-util": "^27.3.1",
15120 "jest-runtime": "^27.2.5", 14892 "jest-runtime": "^27.3.1",
15121 "jest-snapshot": "^27.2.5", 14893 "jest-snapshot": "^27.3.1",
15122 "jest-util": "^27.2.5", 14894 "jest-util": "^27.3.1",
15123 "pretty-format": "^27.2.5", 14895 "pretty-format": "^27.3.1",
15124 "throat": "^6.0.1" 14896 "throat": "^6.0.1"
15125 }, 14897 },
15126 "dependencies": { 14898 "dependencies": {
@@ -15176,25 +14948,25 @@
15176 } 14948 }
15177 }, 14949 },
15178 "jest-leak-detector": { 14950 "jest-leak-detector": {
15179 "version": "27.2.5", 14951 "version": "27.3.1",
15180 "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.2.5.tgz", 14952 "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.3.1.tgz",
15181 "integrity": "sha512-HYsi3GUR72bYhOGB5C5saF9sPdxGzSjX7soSQS+BqDRysc7sPeBwPbhbuT8DnOpijnKjgwWQ8JqvbmReYnt3aQ==", 14953 "integrity": "sha512-78QstU9tXbaHzwlRlKmTpjP9k4Pvre5l0r8Spo4SbFFVy/4Abg9I6ZjHwjg2QyKEAMg020XcjP+UgLZIY50yEg==",
15182 "dev": true, 14954 "dev": true,
15183 "requires": { 14955 "requires": {
15184 "jest-get-type": "^27.0.6", 14956 "jest-get-type": "^27.3.1",
15185 "pretty-format": "^27.2.5" 14957 "pretty-format": "^27.3.1"
15186 } 14958 }
15187 }, 14959 },
15188 "jest-matcher-utils": { 14960 "jest-matcher-utils": {
15189 "version": "27.2.5", 14961 "version": "27.3.1",
15190 "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.2.5.tgz", 14962 "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.3.1.tgz",
15191 "integrity": "sha512-qNR/kh6bz0Dyv3m68Ck2g1fLW5KlSOUNcFQh87VXHZwWc/gY6XwnKofx76Qytz3x5LDWT09/2+yXndTkaG4aWg==", 14963 "integrity": "sha512-hX8N7zXS4k+8bC1Aj0OWpGb7D3gIXxYvPNK1inP5xvE4ztbz3rc4AkI6jGVaerepBnfWB17FL5lWFJT3s7qo8w==",
15192 "dev": true, 14964 "dev": true,
15193 "requires": { 14965 "requires": {
15194 "chalk": "^4.0.0", 14966 "chalk": "^4.0.0",
15195 "jest-diff": "^27.2.5", 14967 "jest-diff": "^27.3.1",
15196 "jest-get-type": "^27.0.6", 14968 "jest-get-type": "^27.3.1",
15197 "pretty-format": "^27.2.5" 14969 "pretty-format": "^27.3.1"
15198 }, 14970 },
15199 "dependencies": { 14971 "dependencies": {
15200 "ansi-styles": { 14972 "ansi-styles": {
@@ -15249,9 +15021,9 @@
15249 } 15021 }
15250 }, 15022 },
15251 "jest-message-util": { 15023 "jest-message-util": {
15252 "version": "27.2.5", 15024 "version": "27.3.1",
15253 "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.2.5.tgz", 15025 "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.3.1.tgz",
15254 "integrity": "sha512-ggXSLoPfIYcbmZ8glgEJZ8b+e0Msw/iddRmgkoO7lDAr9SmI65IIfv7VnvTnV4FGnIIUIjzM+fHRHO5RBvyAbQ==", 15026 "integrity": "sha512-bh3JEmxsTZ/9rTm0jQrPElbY2+y48Rw2t47uMfByNyUVR+OfPh4anuyKsGqsNkXk/TI4JbLRZx+7p7Hdt6q1yg==",
15255 "dev": true, 15027 "dev": true,
15256 "requires": { 15028 "requires": {
15257 "@babel/code-frame": "^7.12.13", 15029 "@babel/code-frame": "^7.12.13",
@@ -15260,7 +15032,7 @@
15260 "chalk": "^4.0.0", 15032 "chalk": "^4.0.0",
15261 "graceful-fs": "^4.2.4", 15033 "graceful-fs": "^4.2.4",
15262 "micromatch": "^4.0.4", 15034 "micromatch": "^4.0.4",
15263 "pretty-format": "^27.2.5", 15035 "pretty-format": "^27.3.1",
15264 "slash": "^3.0.0", 15036 "slash": "^3.0.0",
15265 "stack-utils": "^2.0.3" 15037 "stack-utils": "^2.0.3"
15266 }, 15038 },
@@ -15360,9 +15132,9 @@
15360 } 15132 }
15361 }, 15133 },
15362 "jest-mock": { 15134 "jest-mock": {
15363 "version": "27.2.5", 15135 "version": "27.3.0",
15364 "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.2.5.tgz", 15136 "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.3.0.tgz",
15365 "integrity": "sha512-HiMB3LqE9RzmeMzZARi2Bz3NoymxyP0gCid4y42ca1djffNtYFKgI220aC1VP1mUZ8rbpqZbHZOJ15093bZV/Q==", 15137 "integrity": "sha512-ziZiLk0elZOQjD08bLkegBzv5hCABu/c8Ytx45nJKkysQwGaonvmTxwjLqEA4qGdasq9o2I8/HtdGMNnVsMTGw==",
15366 "dev": true, 15138 "dev": true,
15367 "requires": { 15139 "requires": {
15368 "@jest/types": "^27.2.5", 15140 "@jest/types": "^27.2.5",
@@ -15382,20 +15154,20 @@
15382 "dev": true 15154 "dev": true
15383 }, 15155 },
15384 "jest-resolve": { 15156 "jest-resolve": {
15385 "version": "27.2.5", 15157 "version": "27.3.1",
15386 "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.2.5.tgz", 15158 "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.3.1.tgz",
15387 "integrity": "sha512-q5irwS3oS73SKy3+FM/HL2T7WJftrk9BRzrXF92f7net5HMlS7lJMg/ZwxLB4YohKqjSsdksEw7n/jvMxV7EKg==", 15159 "integrity": "sha512-Dfzt25CFSPo3Y3GCbxynRBZzxq9AdyNN+x/v2IqYx6KVT5Z6me2Z/PsSGFSv3cOSUZqJ9pHxilao/I/m9FouLw==",
15388 "dev": true, 15160 "dev": true,
15389 "requires": { 15161 "requires": {
15390 "@jest/types": "^27.2.5", 15162 "@jest/types": "^27.2.5",
15391 "chalk": "^4.0.0", 15163 "chalk": "^4.0.0",
15392 "escalade": "^3.1.1",
15393 "graceful-fs": "^4.2.4", 15164 "graceful-fs": "^4.2.4",
15394 "jest-haste-map": "^27.2.5", 15165 "jest-haste-map": "^27.3.1",
15395 "jest-pnp-resolver": "^1.2.2", 15166 "jest-pnp-resolver": "^1.2.2",
15396 "jest-util": "^27.2.5", 15167 "jest-util": "^27.3.1",
15397 "jest-validate": "^27.2.5", 15168 "jest-validate": "^27.3.1",
15398 "resolve": "^1.20.0", 15169 "resolve": "^1.20.0",
15170 "resolve.exports": "^1.1.0",
15399 "slash": "^3.0.0" 15171 "slash": "^3.0.0"
15400 }, 15172 },
15401 "dependencies": { 15173 "dependencies": {
@@ -15451,26 +15223,26 @@
15451 } 15223 }
15452 }, 15224 },
15453 "jest-resolve-dependencies": { 15225 "jest-resolve-dependencies": {
15454 "version": "27.2.5", 15226 "version": "27.3.1",
15455 "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.2.5.tgz", 15227 "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.3.1.tgz",
15456 "integrity": "sha512-BSjefped31bcvvCh++/pN9ueqqN1n0+p8/58yScuWfklLm2tbPbS9d251vJhAy0ZI2pL/0IaGhOTJrs9Y4FJlg==", 15228 "integrity": "sha512-X7iLzY8pCiYOnvYo2YrK3P9oSE8/3N2f4pUZMJ8IUcZnT81vlSonya1KTO9ZfKGuC+svE6FHK/XOb8SsoRUV1A==",
15457 "dev": true, 15229 "dev": true,
15458 "requires": { 15230 "requires": {
15459 "@jest/types": "^27.2.5", 15231 "@jest/types": "^27.2.5",
15460 "jest-regex-util": "^27.0.6", 15232 "jest-regex-util": "^27.0.6",
15461 "jest-snapshot": "^27.2.5" 15233 "jest-snapshot": "^27.3.1"
15462 } 15234 }
15463 }, 15235 },
15464 "jest-runner": { 15236 "jest-runner": {
15465 "version": "27.2.5", 15237 "version": "27.3.1",
15466 "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.2.5.tgz", 15238 "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.3.1.tgz",
15467 "integrity": "sha512-n41vw9RLg5TKAnEeJK9d6pGOsBOpwE89XBniK+AD1k26oIIy3V7ogM1scbDjSheji8MUPC9pNgCrZ/FHLVDNgg==", 15239 "integrity": "sha512-r4W6kBn6sPr3TBwQNmqE94mPlYVn7fLBseeJfo4E2uCTmAyDFm2O5DYAQAFP7Q3YfiA/bMwg8TVsciP7k0xOww==",
15468 "dev": true, 15240 "dev": true,
15469 "requires": { 15241 "requires": {
15470 "@jest/console": "^27.2.5", 15242 "@jest/console": "^27.3.1",
15471 "@jest/environment": "^27.2.5", 15243 "@jest/environment": "^27.3.1",
15472 "@jest/test-result": "^27.2.5", 15244 "@jest/test-result": "^27.3.1",
15473 "@jest/transform": "^27.2.5", 15245 "@jest/transform": "^27.3.1",
15474 "@jest/types": "^27.2.5", 15246 "@jest/types": "^27.2.5",
15475 "@types/node": "*", 15247 "@types/node": "*",
15476 "chalk": "^4.0.0", 15248 "chalk": "^4.0.0",
@@ -15478,15 +15250,15 @@
15478 "exit": "^0.1.2", 15250 "exit": "^0.1.2",
15479 "graceful-fs": "^4.2.4", 15251 "graceful-fs": "^4.2.4",
15480 "jest-docblock": "^27.0.6", 15252 "jest-docblock": "^27.0.6",
15481 "jest-environment-jsdom": "^27.2.5", 15253 "jest-environment-jsdom": "^27.3.1",
15482 "jest-environment-node": "^27.2.5", 15254 "jest-environment-node": "^27.3.1",
15483 "jest-haste-map": "^27.2.5", 15255 "jest-haste-map": "^27.3.1",
15484 "jest-leak-detector": "^27.2.5", 15256 "jest-leak-detector": "^27.3.1",
15485 "jest-message-util": "^27.2.5", 15257 "jest-message-util": "^27.3.1",
15486 "jest-resolve": "^27.2.5", 15258 "jest-resolve": "^27.3.1",
15487 "jest-runtime": "^27.2.5", 15259 "jest-runtime": "^27.3.1",
15488 "jest-util": "^27.2.5", 15260 "jest-util": "^27.3.1",
15489 "jest-worker": "^27.2.5", 15261 "jest-worker": "^27.3.1",
15490 "source-map-support": "^0.5.6", 15262 "source-map-support": "^0.5.6",
15491 "throat": "^6.0.1" 15263 "throat": "^6.0.1"
15492 }, 15264 },
@@ -15543,18 +15315,17 @@
15543 } 15315 }
15544 }, 15316 },
15545 "jest-runtime": { 15317 "jest-runtime": {
15546 "version": "27.2.5", 15318 "version": "27.3.1",
15547 "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.2.5.tgz", 15319 "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.3.1.tgz",
15548 "integrity": "sha512-N0WRZ3QszKyZ3Dm27HTBbBuestsSd3Ud5ooVho47XZJ8aSKO/X1Ag8M1dNx9XzfGVRNdB/xCA3lz8MJwIzPLLA==", 15320 "integrity": "sha512-qtO6VxPbS8umqhEDpjA4pqTkKQ1Hy4ZSi9mDVeE9Za7LKBo2LdW2jmT+Iod3XFaJqINikZQsn2wEi0j9wPRbLg==",
15549 "dev": true, 15321 "dev": true,
15550 "requires": { 15322 "requires": {
15551 "@jest/console": "^27.2.5", 15323 "@jest/console": "^27.3.1",
15552 "@jest/environment": "^27.2.5", 15324 "@jest/environment": "^27.3.1",
15553 "@jest/fake-timers": "^27.2.5", 15325 "@jest/globals": "^27.3.1",
15554 "@jest/globals": "^27.2.5",
15555 "@jest/source-map": "^27.0.6", 15326 "@jest/source-map": "^27.0.6",
15556 "@jest/test-result": "^27.2.5", 15327 "@jest/test-result": "^27.3.1",
15557 "@jest/transform": "^27.2.5", 15328 "@jest/transform": "^27.3.1",
15558 "@jest/types": "^27.2.5", 15329 "@jest/types": "^27.2.5",
15559 "@types/yargs": "^16.0.0", 15330 "@types/yargs": "^16.0.0",
15560 "chalk": "^4.0.0", 15331 "chalk": "^4.0.0",
@@ -15564,14 +15335,14 @@
15564 "exit": "^0.1.2", 15335 "exit": "^0.1.2",
15565 "glob": "^7.1.3", 15336 "glob": "^7.1.3",
15566 "graceful-fs": "^4.2.4", 15337 "graceful-fs": "^4.2.4",
15567 "jest-haste-map": "^27.2.5", 15338 "jest-haste-map": "^27.3.1",
15568 "jest-message-util": "^27.2.5", 15339 "jest-message-util": "^27.3.1",
15569 "jest-mock": "^27.2.5", 15340 "jest-mock": "^27.3.0",
15570 "jest-regex-util": "^27.0.6", 15341 "jest-regex-util": "^27.0.6",
15571 "jest-resolve": "^27.2.5", 15342 "jest-resolve": "^27.3.1",
15572 "jest-snapshot": "^27.2.5", 15343 "jest-snapshot": "^27.3.1",
15573 "jest-util": "^27.2.5", 15344 "jest-util": "^27.3.1",
15574 "jest-validate": "^27.2.5", 15345 "jest-validate": "^27.3.1",
15575 "slash": "^3.0.0", 15346 "slash": "^3.0.0",
15576 "strip-bom": "^4.0.0", 15347 "strip-bom": "^4.0.0",
15577 "yargs": "^16.2.0" 15348 "yargs": "^16.2.0"
@@ -15626,40 +15397,6 @@
15626 "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 15397 "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
15627 "dev": true 15398 "dev": true
15628 }, 15399 },
15629 "cross-spawn": {
15630 "version": "7.0.3",
15631 "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
15632 "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
15633 "dev": true,
15634 "requires": {
15635 "path-key": "^3.1.0",
15636 "shebang-command": "^2.0.0",
15637 "which": "^2.0.1"
15638 }
15639 },
15640 "execa": {
15641 "version": "5.1.1",
15642 "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
15643 "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
15644 "dev": true,
15645 "requires": {
15646 "cross-spawn": "^7.0.3",
15647 "get-stream": "^6.0.0",
15648 "human-signals": "^2.1.0",
15649 "is-stream": "^2.0.0",
15650 "merge-stream": "^2.0.0",
15651 "npm-run-path": "^4.0.1",
15652 "onetime": "^5.1.2",
15653 "signal-exit": "^3.0.3",
15654 "strip-final-newline": "^2.0.0"
15655 }
15656 },
15657 "get-stream": {
15658 "version": "6.0.1",
15659 "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
15660 "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
15661 "dev": true
15662 },
15663 "glob": { 15400 "glob": {
15664 "version": "7.2.0", 15401 "version": "7.2.0",
15665 "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", 15402 "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
@@ -15680,39 +15417,12 @@
15680 "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 15417 "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
15681 "dev": true 15418 "dev": true
15682 }, 15419 },
15683 "human-signals": {
15684 "version": "2.1.0",
15685 "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
15686 "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
15687 "dev": true
15688 },
15689 "is-fullwidth-code-point": { 15420 "is-fullwidth-code-point": {
15690 "version": "3.0.0", 15421 "version": "3.0.0",
15691 "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 15422 "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
15692 "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 15423 "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
15693 "dev": true 15424 "dev": true
15694 }, 15425 },
15695 "path-key": {
15696 "version": "3.1.1",
15697 "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
15698 "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
15699 "dev": true
15700 },
15701 "shebang-command": {
15702 "version": "2.0.0",
15703 "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
15704 "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
15705 "dev": true,
15706 "requires": {
15707 "shebang-regex": "^3.0.0"
15708 }
15709 },
15710 "shebang-regex": {
15711 "version": "3.0.0",
15712 "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
15713 "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
15714 "dev": true
15715 },
15716 "string-width": { 15426 "string-width": {
15717 "version": "4.2.3", 15427 "version": "4.2.3",
15718 "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 15428 "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
@@ -15742,15 +15452,6 @@
15742 "has-flag": "^4.0.0" 15452 "has-flag": "^4.0.0"
15743 } 15453 }
15744 }, 15454 },
15745 "which": {
15746 "version": "2.0.2",
15747 "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
15748 "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
15749 "dev": true,
15750 "requires": {
15751 "isexe": "^2.0.0"
15752 }
15753 },
15754 "yargs": { 15455 "yargs": {
15755 "version": "16.2.0", 15456 "version": "16.2.0",
15756 "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", 15457 "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
@@ -15779,9 +15480,9 @@
15779 } 15480 }
15780 }, 15481 },
15781 "jest-snapshot": { 15482 "jest-snapshot": {
15782 "version": "27.2.5", 15483 "version": "27.3.1",
15783 "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.2.5.tgz", 15484 "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.3.1.tgz",
15784 "integrity": "sha512-2/Jkn+VN6Abwz0llBltZaiJMnL8b1j5Bp/gRIxe9YR3FCEh9qp0TXVV0dcpTGZ8AcJV1SZGQkczewkI9LP5yGw==", 15485 "integrity": "sha512-APZyBvSgQgOT0XumwfFu7X3G5elj6TGhCBLbBdn3R1IzYustPGPE38F51dBWMQ8hRXa9je0vAdeVDtqHLvB6lg==",
15785 "dev": true, 15486 "dev": true,
15786 "requires": { 15487 "requires": {
15787 "@babel/core": "^7.7.2", 15488 "@babel/core": "^7.7.2",
@@ -15790,23 +15491,23 @@
15790 "@babel/plugin-syntax-typescript": "^7.7.2", 15491 "@babel/plugin-syntax-typescript": "^7.7.2",
15791 "@babel/traverse": "^7.7.2", 15492 "@babel/traverse": "^7.7.2",
15792 "@babel/types": "^7.0.0", 15493 "@babel/types": "^7.0.0",
15793 "@jest/transform": "^27.2.5", 15494 "@jest/transform": "^27.3.1",
15794 "@jest/types": "^27.2.5", 15495 "@jest/types": "^27.2.5",
15795 "@types/babel__traverse": "^7.0.4", 15496 "@types/babel__traverse": "^7.0.4",
15796 "@types/prettier": "^2.1.5", 15497 "@types/prettier": "^2.1.5",
15797 "babel-preset-current-node-syntax": "^1.0.0", 15498 "babel-preset-current-node-syntax": "^1.0.0",
15798 "chalk": "^4.0.0", 15499 "chalk": "^4.0.0",
15799 "expect": "^27.2.5", 15500 "expect": "^27.3.1",
15800 "graceful-fs": "^4.2.4", 15501 "graceful-fs": "^4.2.4",
15801 "jest-diff": "^27.2.5", 15502 "jest-diff": "^27.3.1",
15802 "jest-get-type": "^27.0.6", 15503 "jest-get-type": "^27.3.1",
15803 "jest-haste-map": "^27.2.5", 15504 "jest-haste-map": "^27.3.1",
15804 "jest-matcher-utils": "^27.2.5", 15505 "jest-matcher-utils": "^27.3.1",
15805 "jest-message-util": "^27.2.5", 15506 "jest-message-util": "^27.3.1",
15806 "jest-resolve": "^27.2.5", 15507 "jest-resolve": "^27.3.1",
15807 "jest-util": "^27.2.5", 15508 "jest-util": "^27.3.1",
15808 "natural-compare": "^1.4.0", 15509 "natural-compare": "^1.4.0",
15809 "pretty-format": "^27.2.5", 15510 "pretty-format": "^27.3.1",
15810 "semver": "^7.3.2" 15511 "semver": "^7.3.2"
15811 }, 15512 },
15812 "dependencies": { 15513 "dependencies": {
@@ -15862,16 +15563,16 @@
15862 } 15563 }
15863 }, 15564 },
15864 "jest-util": { 15565 "jest-util": {
15865 "version": "27.2.5", 15566 "version": "27.3.1",
15866 "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.2.5.tgz", 15567 "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.3.1.tgz",
15867 "integrity": "sha512-QRhDC6XxISntMzFRd/OQ6TGsjbzA5ONO0tlAj2ElHs155x1aEr0rkYJBEysG6H/gZVH3oGFzCdAB/GA8leh8NQ==", 15568 "integrity": "sha512-8fg+ifEH3GDryLQf/eKZck1DEs2YuVPBCMOaHQxVVLmQwl/CDhWzrvChTX4efLZxGrw+AA0mSXv78cyytBt/uw==",
15868 "dev": true, 15569 "dev": true,
15869 "requires": { 15570 "requires": {
15870 "@jest/types": "^27.2.5", 15571 "@jest/types": "^27.2.5",
15871 "@types/node": "*", 15572 "@types/node": "*",
15872 "chalk": "^4.0.0", 15573 "chalk": "^4.0.0",
15574 "ci-info": "^3.2.0",
15873 "graceful-fs": "^4.2.4", 15575 "graceful-fs": "^4.2.4",
15874 "is-ci": "^3.0.0",
15875 "picomatch": "^2.2.3" 15576 "picomatch": "^2.2.3"
15876 }, 15577 },
15877 "dependencies": { 15578 "dependencies": {
@@ -15927,17 +15628,17 @@
15927 } 15628 }
15928 }, 15629 },
15929 "jest-validate": { 15630 "jest-validate": {
15930 "version": "27.2.5", 15631 "version": "27.3.1",
15931 "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.2.5.tgz", 15632 "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.3.1.tgz",
15932 "integrity": "sha512-XgYtjS89nhVe+UfkbLgcm+GgXKWgL80t9nTcNeejyO3t0Sj/yHE8BtIJqjZu9NXQksYbGImoQRXmQ1gP+Guffw==", 15633 "integrity": "sha512-3H0XCHDFLA9uDII67Bwi1Vy7AqwA5HqEEjyy934lgVhtJ3eisw6ShOF1MDmRPspyikef5MyExvIm0/TuLzZ86Q==",
15933 "dev": true, 15634 "dev": true,
15934 "requires": { 15635 "requires": {
15935 "@jest/types": "^27.2.5", 15636 "@jest/types": "^27.2.5",
15936 "camelcase": "^6.2.0", 15637 "camelcase": "^6.2.0",
15937 "chalk": "^4.0.0", 15638 "chalk": "^4.0.0",
15938 "jest-get-type": "^27.0.6", 15639 "jest-get-type": "^27.3.1",
15939 "leven": "^3.1.0", 15640 "leven": "^3.1.0",
15940 "pretty-format": "^27.2.5" 15641 "pretty-format": "^27.3.1"
15941 }, 15642 },
15942 "dependencies": { 15643 "dependencies": {
15943 "ansi-styles": { 15644 "ansi-styles": {
@@ -15998,17 +15699,17 @@
15998 } 15699 }
15999 }, 15700 },
16000 "jest-watcher": { 15701 "jest-watcher": {
16001 "version": "27.2.5", 15702 "version": "27.3.1",
16002 "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.2.5.tgz", 15703 "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.3.1.tgz",
16003 "integrity": "sha512-umV4qGozg2Dn6DTTtqAh9puPw+DGLK9AQas7+mWjiK8t0fWMpxKg8ZXReZw7L4C88DqorsGUiDgwHNZ+jkVrkQ==", 15704 "integrity": "sha512-9/xbV6chABsGHWh9yPaAGYVVKurWoP3ZMCv6h+O1v9/+pkOroigs6WzZ0e9gLP/njokUwM7yQhr01LKJVMkaZA==",
16004 "dev": true, 15705 "dev": true,
16005 "requires": { 15706 "requires": {
16006 "@jest/test-result": "^27.2.5", 15707 "@jest/test-result": "^27.3.1",
16007 "@jest/types": "^27.2.5", 15708 "@jest/types": "^27.2.5",
16008 "@types/node": "*", 15709 "@types/node": "*",
16009 "ansi-escapes": "^4.2.1", 15710 "ansi-escapes": "^4.2.1",
16010 "chalk": "^4.0.0", 15711 "chalk": "^4.0.0",
16011 "jest-util": "^27.2.5", 15712 "jest-util": "^27.3.1",
16012 "string-length": "^4.0.1" 15713 "string-length": "^4.0.1"
16013 }, 15714 },
16014 "dependencies": { 15715 "dependencies": {
@@ -16064,9 +15765,9 @@
16064 } 15765 }
16065 }, 15766 },
16066 "jest-worker": { 15767 "jest-worker": {
16067 "version": "27.2.5", 15768 "version": "27.3.1",
16068 "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.2.5.tgz", 15769 "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.3.1.tgz",
16069 "integrity": "sha512-HTjEPZtcNKZ4LnhSp02NEH4vE+5OpJ0EsOWYvGQpHgUMLngydESAAMH5Wd/asPf29+XUDQZszxpLg1BkIIA2aw==", 15770 "integrity": "sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g==",
16070 "dev": true, 15771 "dev": true,
16071 "requires": { 15772 "requires": {
16072 "@types/node": "*", 15773 "@types/node": "*",
@@ -16180,17 +15881,6 @@
16180 "mime-types": "^2.1.12" 15881 "mime-types": "^2.1.12"
16181 } 15882 }
16182 }, 15883 },
16183 "tough-cookie": {
16184 "version": "4.0.0",
16185 "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz",
16186 "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==",
16187 "dev": true,
16188 "requires": {
16189 "psl": "^1.1.33",
16190 "punycode": "^2.1.1",
16191 "universalify": "^0.1.2"
16192 }
16193 },
16194 "ws": { 15884 "ws": {
16195 "version": "7.5.5", 15885 "version": "7.5.5",
16196 "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", 15886 "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz",
@@ -16386,12 +16076,20 @@
16386 "extsprintf": "1.3.0", 16076 "extsprintf": "1.3.0",
16387 "json-schema": "0.2.3", 16077 "json-schema": "0.2.3",
16388 "verror": "1.10.0" 16078 "verror": "1.10.0"
16079 },
16080 "dependencies": {
16081 "extsprintf": {
16082 "version": "1.3.0",
16083 "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
16084 "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
16085 "optional": true
16086 }
16389 } 16087 }
16390 }, 16088 },
16391 "jss": { 16089 "jss": {
16392 "version": "10.7.1", 16090 "version": "10.8.1",
16393 "resolved": "https://registry.npmjs.org/jss/-/jss-10.7.1.tgz", 16091 "resolved": "https://registry.npmjs.org/jss/-/jss-10.8.1.tgz",
16394 "integrity": "sha512-5QN8JSVZR6cxpZNeGfzIjqPEP+ZJwJJfZbXmeABNdxiExyO+eJJDy6WDtqTf8SDKnbL5kZllEpAP71E/Lt7PXg==", 16092 "integrity": "sha512-P4wKxU+2m5ReGl0Mmbf9XYgVjFIVZJOZ9ylXBxdpanX+HHgj5XVaAIgYzYpKbBLPCdkAUsI/Iq1fhQPsMNu0YA==",
16395 "requires": { 16093 "requires": {
16396 "@babel/runtime": "^7.3.1", 16094 "@babel/runtime": "^7.3.1",
16397 "csstype": "^3.0.2", 16095 "csstype": "^3.0.2",
@@ -16834,14 +16532,6 @@
16834 "requires": { 16532 "requires": {
16835 "p-locate": "^3.0.0", 16533 "p-locate": "^3.0.0",
16836 "path-exists": "^3.0.0" 16534 "path-exists": "^3.0.0"
16837 },
16838 "dependencies": {
16839 "path-exists": {
16840 "version": "3.0.0",
16841 "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
16842 "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
16843 "dev": true
16844 }
16845 } 16535 }
16846 }, 16536 },
16847 "lodash": { 16537 "lodash": {
@@ -17439,11 +17129,18 @@
17439 "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==" 17129 "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA=="
17440 }, 17130 },
17441 "mime-types": { 17131 "mime-types": {
17442 "version": "2.1.32", 17132 "version": "2.1.33",
17443 "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", 17133 "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz",
17444 "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", 17134 "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==",
17445 "requires": { 17135 "requires": {
17446 "mime-db": "1.49.0" 17136 "mime-db": "1.50.0"
17137 },
17138 "dependencies": {
17139 "mime-db": {
17140 "version": "1.50.0",
17141 "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz",
17142 "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A=="
17143 }
17447 } 17144 }
17448 }, 17145 },
17449 "mimic-fn": { 17146 "mimic-fn": {
@@ -17869,6 +17566,12 @@
17869 "p-limit": "^3.0.2" 17566 "p-limit": "^3.0.2"
17870 } 17567 }
17871 }, 17568 },
17569 "path-exists": {
17570 "version": "4.0.0",
17571 "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
17572 "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
17573 "dev": true
17574 },
17872 "readdirp": { 17575 "readdirp": {
17873 "version": "3.6.0", 17576 "version": "3.6.0",
17874 "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 17577 "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
@@ -18353,6 +18056,17 @@
18353 "vm-browserify": "^1.0.1" 18056 "vm-browserify": "^1.0.1"
18354 }, 18057 },
18355 "dependencies": { 18058 "dependencies": {
18059 "buffer": {
18060 "version": "4.9.2",
18061 "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
18062 "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
18063 "dev": true,
18064 "requires": {
18065 "base64-js": "^1.0.2",
18066 "ieee754": "^1.1.4",
18067 "isarray": "^1.0.0"
18068 }
18069 },
18356 "punycode": { 18070 "punycode": {
18357 "version": "1.4.1", 18071 "version": "1.4.1",
18358 "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 18072 "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
@@ -18488,9 +18202,9 @@
18488 } 18202 }
18489 }, 18203 },
18490 "node-releases": { 18204 "node-releases": {
18491 "version": "2.0.0", 18205 "version": "2.0.1",
18492 "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.0.tgz", 18206 "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz",
18493 "integrity": "sha512-aA87l0flFYMzCHpTM3DERFSYxc6lv/BltdbRTOMZuxZ0cwZCD3mejE5n9vLhSJCN++/eOqr77G1IO5uXxlQYWA==", 18207 "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==",
18494 "dev": true 18208 "dev": true
18495 }, 18209 },
18496 "node-req": { 18210 "node-req": {
@@ -19034,6 +18748,12 @@
19034 "p-limit": "^2.0.0" 18748 "p-limit": "^2.0.0"
19035 } 18749 }
19036 }, 18750 },
18751 "p-map": {
18752 "version": "2.1.0",
18753 "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
18754 "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
18755 "dev": true
18756 },
19037 "p-retry": { 18757 "p-retry": {
19038 "version": "3.0.1", 18758 "version": "3.0.1",
19039 "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", 18759 "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz",
@@ -19244,9 +18964,10 @@
19244 "dev": true 18964 "dev": true
19245 }, 18965 },
19246 "path-exists": { 18966 "path-exists": {
19247 "version": "4.0.0", 18967 "version": "3.0.0",
19248 "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 18968 "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
19249 "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" 18969 "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
18970 "dev": true
19250 }, 18971 },
19251 "path-is-absolute": { 18972 "path-is-absolute": {
19252 "version": "1.0.1", 18973 "version": "1.0.1",
@@ -19499,22 +19220,14 @@
19499 "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" 19220 "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs="
19500 }, 19221 },
19501 "postcss": { 19222 "postcss": {
19502 "version": "8.3.9", 19223 "version": "8.3.11",
19503 "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.9.tgz", 19224 "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.11.tgz",
19504 "integrity": "sha512-f/ZFyAKh9Dnqytx5X62jgjhhzttjZS7hMsohcI7HEI5tjELX/HxCy3EFhsRxyzGvrzFF+82XPvCS8T9TFleVJw==", 19225 "integrity": "sha512-hCmlUAIlUiav8Xdqw3Io4LcpA1DOt7h3LSTAC4G6JGHFFaWzI6qvFt9oilvl8BmkbBRX1IhM90ZAmpk68zccQA==",
19505 "dev": true, 19226 "dev": true,
19506 "requires": { 19227 "requires": {
19507 "nanoid": "^3.1.28", 19228 "nanoid": "^3.1.30",
19508 "picocolors": "^0.2.1", 19229 "picocolors": "^1.0.0",
19509 "source-map-js": "^0.6.2" 19230 "source-map-js": "^0.6.2"
19510 },
19511 "dependencies": {
19512 "picocolors": {
19513 "version": "0.2.1",
19514 "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
19515 "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==",
19516 "dev": true
19517 }
19518 } 19231 }
19519 }, 19232 },
19520 "prelude-ls": { 19233 "prelude-ls": {
@@ -19530,9 +19243,9 @@
19530 "dev": true 19243 "dev": true
19531 }, 19244 },
19532 "prettier": { 19245 "prettier": {
19533 "version": "2.3.2", 19246 "version": "2.4.1",
19534 "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz", 19247 "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz",
19535 "integrity": "sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==", 19248 "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==",
19536 "dev": true 19249 "dev": true
19537 }, 19250 },
19538 "prettier-linter-helpers": { 19251 "prettier-linter-helpers": {
@@ -19560,9 +19273,9 @@
19560 } 19273 }
19561 }, 19274 },
19562 "pretty-format": { 19275 "pretty-format": {
19563 "version": "27.2.5", 19276 "version": "27.3.1",
19564 "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.2.5.tgz", 19277 "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.3.1.tgz",
19565 "integrity": "sha512-+nYn2z9GgicO9JiqmY25Xtq8SYfZ/5VCpEU3pppHHNAhd1y+ZXxmNPd1evmNcAd6Hz4iBV2kf0UpGth5A/VJ7g==", 19278 "integrity": "sha512-DR/c+pvFc52nLimLROYjnXPtolawm+uWDxr4FjuLDLUn+ktWnSN851KoHwHzzqq6rfCOjkzN8FLgDrSub6UDuA==",
19566 "dev": true, 19279 "dev": true,
19567 "requires": { 19280 "requires": {
19568 "@jest/types": "^27.2.5", 19281 "@jest/types": "^27.2.5",
@@ -20321,6 +20034,13 @@
20321 "ini": "~1.3.0", 20034 "ini": "~1.3.0",
20322 "minimist": "^1.2.0", 20035 "minimist": "^1.2.0",
20323 "strip-json-comments": "~2.0.1" 20036 "strip-json-comments": "~2.0.1"
20037 },
20038 "dependencies": {
20039 "strip-json-comments": {
20040 "version": "2.0.1",
20041 "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
20042 "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
20043 }
20324 } 20044 }
20325 }, 20045 },
20326 "react": { 20046 "react": {
@@ -20359,9 +20079,9 @@
20359 } 20079 }
20360 }, 20080 },
20361 "react-dropzone": { 20081 "react-dropzone": {
20362 "version": "11.3.4", 20082 "version": "11.4.2",
20363 "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-11.3.4.tgz", 20083 "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-11.4.2.tgz",
20364 "integrity": "sha512-B1nzNRZ4F1cnrfEC0T6KXeBN1mCPinu4JCoTrp7NjB+442KSPxqfDrw41QIA2kAwlYs1+wj/0BTedeM5hc2+xw==", 20084 "integrity": "sha512-ocYzYn7Qgp0tFc1gQtUTOaHHSzVTwhWHxxY+r7cj2jJTPfMTZB5GWSJHdIVoxsl+EQENpjJ/6Zvcw0BqKZQ+Eg==",
20365 "requires": { 20085 "requires": {
20366 "attr-accept": "^2.2.1", 20086 "attr-accept": "^2.2.1",
20367 "file-selector": "^0.2.2", 20087 "file-selector": "^0.2.2",
@@ -20377,32 +20097,20 @@
20377 } 20097 }
20378 }, 20098 },
20379 "react-intl": { 20099 "react-intl": {
20380 "version": "5.20.10", 20100 "version": "5.21.0",
20381 "resolved": "https://registry.npmjs.org/react-intl/-/react-intl-5.20.10.tgz", 20101 "resolved": "https://registry.npmjs.org/react-intl/-/react-intl-5.21.0.tgz",
20382 "integrity": "sha512-zy0ZQhpjkGsKcK1BFo2HbGM/q8GBVovzoXZGQ76DowR0yr6UzQuPLkrlIrObL2zxIYiDaxaz+hUJaoa2a1xqOQ==", 20102 "integrity": "sha512-tRXg0JrMFpHgOokj+gFXvEbm4ZEePnidfVWFh3fbYc2FlJGnwxLjsvzCvRVv2qyNMHCy8xX6frRGe52WDOiYOg==",
20383 "requires": { 20103 "requires": {
20384 "@formatjs/ecma402-abstract": "1.9.8", 20104 "@formatjs/ecma402-abstract": "1.10.0",
20385 "@formatjs/icu-messageformat-parser": "2.0.11", 20105 "@formatjs/icu-messageformat-parser": "2.0.14",
20386 "@formatjs/intl": "1.14.1", 20106 "@formatjs/intl": "1.15.0",
20387 "@formatjs/intl-displaynames": "5.2.3", 20107 "@formatjs/intl-displaynames": "5.2.5",
20388 "@formatjs/intl-listformat": "6.3.3", 20108 "@formatjs/intl-listformat": "6.3.5",
20389 "@types/hoist-non-react-statics": "^3.3.1", 20109 "@types/hoist-non-react-statics": "^3.3.1",
20390 "@types/react": "17", 20110 "@types/react": "16 || 17",
20391 "hoist-non-react-statics": "^3.3.2", 20111 "hoist-non-react-statics": "^3.3.2",
20392 "intl-messageformat": "9.9.1", 20112 "intl-messageformat": "9.9.4",
20393 "tslib": "^2.1.0" 20113 "tslib": "^2.1.0"
20394 },
20395 "dependencies": {
20396 "@types/react": {
20397 "version": "17.0.30",
20398 "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.30.tgz",
20399 "integrity": "sha512-3Dt/A8gd3TCXi2aRe84y7cK1K8G+N9CZRDG8kDGguOKa0kf/ZkSwTmVIDPsm/KbQOVMaDJXwhBtuOXxqwdpWVg==",
20400 "requires": {
20401 "@types/prop-types": "*",
20402 "@types/scheduler": "*",
20403 "csstype": "^3.0.2"
20404 }
20405 }
20406 } 20114 }
20407 }, 20115 },
20408 "react-is": { 20116 "react-is": {
@@ -20660,6 +20368,12 @@
20660 "p-limit": "^2.2.0" 20368 "p-limit": "^2.2.0"
20661 } 20369 }
20662 }, 20370 },
20371 "path-exists": {
20372 "version": "4.0.0",
20373 "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
20374 "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
20375 "dev": true
20376 },
20663 "type-fest": { 20377 "type-fest": {
20664 "version": "0.8.1", 20378 "version": "0.8.1",
20665 "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", 20379 "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
@@ -21081,12 +20795,33 @@
21081 "uuid": "^3.3.2" 20795 "uuid": "^3.3.2"
21082 }, 20796 },
21083 "dependencies": { 20797 "dependencies": {
20798 "form-data": {
20799 "version": "2.3.3",
20800 "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
20801 "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
20802 "optional": true,
20803 "requires": {
20804 "asynckit": "^0.4.0",
20805 "combined-stream": "^1.0.6",
20806 "mime-types": "^2.1.12"
20807 }
20808 },
21084 "qs": { 20809 "qs": {
21085 "version": "6.5.2", 20810 "version": "6.5.2",
21086 "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 20811 "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
21087 "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", 20812 "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
21088 "optional": true 20813 "optional": true
21089 }, 20814 },
20815 "tough-cookie": {
20816 "version": "2.5.0",
20817 "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
20818 "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
20819 "optional": true,
20820 "requires": {
20821 "psl": "^1.1.28",
20822 "punycode": "^2.1.1"
20823 }
20824 },
21090 "uuid": { 20825 "uuid": {
21091 "version": "3.4.0", 20826 "version": "3.4.0",
21092 "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", 20827 "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
@@ -21206,6 +20941,12 @@
21206 "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", 20941 "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
21207 "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" 20942 "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
21208 }, 20943 },
20944 "resolve.exports": {
20945 "version": "1.1.0",
20946 "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz",
20947 "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==",
20948 "dev": true
20949 },
21209 "responselike": { 20950 "responselike": {
21210 "version": "1.0.2", 20951 "version": "1.0.2",
21211 "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", 20952 "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
@@ -21246,7 +20987,6 @@
21246 "version": "3.0.2", 20987 "version": "3.0.2",
21247 "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 20988 "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
21248 "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 20989 "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
21249 "dev": true,
21250 "requires": { 20990 "requires": {
21251 "glob": "^7.1.3" 20991 "glob": "^7.1.3"
21252 }, 20992 },
@@ -21255,7 +20995,6 @@
21255 "version": "7.2.0", 20995 "version": "7.2.0",
21256 "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", 20996 "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
21257 "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 20997 "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
21258 "dev": true,
21259 "requires": { 20998 "requires": {
21260 "fs.realpath": "^1.0.0", 20999 "fs.realpath": "^1.0.0",
21261 "inflight": "^1.0.4", 21000 "inflight": "^1.0.4",
@@ -21382,9 +21121,9 @@
21382 } 21121 }
21383 }, 21122 },
21384 "sass": { 21123 "sass": {
21385 "version": "1.37.5", 21124 "version": "1.43.3",
21386 "resolved": "https://registry.npmjs.org/sass/-/sass-1.37.5.tgz", 21125 "resolved": "https://registry.npmjs.org/sass/-/sass-1.43.3.tgz",
21387 "integrity": "sha512-Cx3ewxz9QB/ErnVIiWg2cH0kiYZ0FPvheDTVC6BsiEGBTZKKZJ1Gq5Kq6jy3PKtL6+EJ8NIoaBW/RSd2R6cZOA==", 21126 "integrity": "sha512-BJnLngqWpMeS65UvlYYEuCb3/fLxDxhHtOB/gWPxs6NKrslTxGt3ZxwIvOe/0Jm4tWwM/+tIpE3wj4dLEhPDeQ==",
21388 "dev": true, 21127 "dev": true,
21389 "requires": { 21128 "requires": {
21390 "chokidar": ">=3.0.0 <4.0.0" 21129 "chokidar": ">=3.0.0 <4.0.0"
@@ -21917,14 +21656,14 @@
21917 } 21656 }
21918 }, 21657 },
21919 "simple-git": { 21658 "simple-git": {
21920 "version": "2.45.0", 21659 "version": "2.47.0",
21921 "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-2.45.0.tgz", 21660 "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-2.47.0.tgz",
21922 "integrity": "sha512-wu/Ujs9IXn0HuyYm4HyRvne+EKsjJSWKEMkB3wQa3gNHSMHt7y3oeNX9zRQ3UBPk7bRRMLLHAdIZCZfHT9ehPg==", 21661 "integrity": "sha512-+HfCpqPBEZTPWiW9fPdbiPJDslM22MLqrktfzNKyI2pWaJa6DhfNVx4Mds04KZzVv5vjC9/ksw3y5gVf8ECWDg==",
21923 "dev": true, 21662 "dev": true,
21924 "requires": { 21663 "requires": {
21925 "@kwsites/file-exists": "^1.1.1", 21664 "@kwsites/file-exists": "^1.1.1",
21926 "@kwsites/promise-deferred": "^1.1.1", 21665 "@kwsites/promise-deferred": "^1.1.1",
21927 "debug": "^4.3.1" 21666 "debug": "^4.3.2"
21928 } 21667 }
21929 }, 21668 },
21930 "simple-swizzle": { 21669 "simple-swizzle": {
@@ -22368,6 +22107,15 @@
22368 "tweetnacl": "~0.14.0" 22107 "tweetnacl": "~0.14.0"
22369 } 22108 }
22370 }, 22109 },
22110 "ssri": {
22111 "version": "6.0.2",
22112 "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz",
22113 "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==",
22114 "dev": true,
22115 "requires": {
22116 "figgy-pudding": "^3.5.1"
22117 }
22118 },
22371 "stack-trace": { 22119 "stack-trace": {
22372 "version": "0.0.10", 22120 "version": "0.0.10",
22373 "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", 22121 "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
@@ -22714,9 +22462,10 @@
22714 } 22462 }
22715 }, 22463 },
22716 "strip-json-comments": { 22464 "strip-json-comments": {
22717 "version": "2.0.1", 22465 "version": "3.0.1",
22718 "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 22466 "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz",
22719 "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" 22467 "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==",
22468 "dev": true
22720 }, 22469 },
22721 "success-symbol": { 22470 "success-symbol": {
22722 "version": "0.1.0", 22471 "version": "0.1.0",
@@ -22979,61 +22728,6 @@
22979 "worker-farm": "^1.7.0" 22728 "worker-farm": "^1.7.0"
22980 }, 22729 },
22981 "dependencies": { 22730 "dependencies": {
22982 "cacache": {
22983 "version": "12.0.4",
22984 "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz",
22985 "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==",
22986 "dev": true,
22987 "requires": {
22988 "bluebird": "^3.5.5",
22989 "chownr": "^1.1.1",
22990 "figgy-pudding": "^3.5.1",
22991 "glob": "^7.1.4",
22992 "graceful-fs": "^4.1.15",
22993 "infer-owner": "^1.0.3",
22994 "lru-cache": "^5.1.1",
22995 "mississippi": "^3.0.0",
22996 "mkdirp": "^0.5.1",
22997 "move-concurrently": "^1.0.1",
22998 "promise-inflight": "^1.0.1",
22999 "rimraf": "^2.6.3",
23000 "ssri": "^6.0.1",
23001 "unique-filename": "^1.1.1",
23002 "y18n": "^4.0.0"
23003 }
23004 },
23005 "glob": {
23006 "version": "7.2.0",
23007 "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
23008 "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
23009 "dev": true,
23010 "requires": {
23011 "fs.realpath": "^1.0.0",
23012 "inflight": "^1.0.4",
23013 "inherits": "2",
23014 "minimatch": "^3.0.4",
23015 "once": "^1.3.0",
23016 "path-is-absolute": "^1.0.0"
23017 }
23018 },
23019 "lru-cache": {
23020 "version": "5.1.1",
23021 "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
23022 "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
23023 "dev": true,
23024 "requires": {
23025 "yallist": "^3.0.2"
23026 }
23027 },
23028 "rimraf": {
23029 "version": "2.7.1",
23030 "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
23031 "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
23032 "dev": true,
23033 "requires": {
23034 "glob": "^7.1.3"
23035 }
23036 },
23037 "serialize-javascript": { 22731 "serialize-javascript": {
23038 "version": "4.0.0", 22732 "version": "4.0.0",
23039 "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", 22733 "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz",
@@ -23048,27 +22742,6 @@
23048 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 22742 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
23049 "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 22743 "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
23050 "dev": true 22744 "dev": true
23051 },
23052 "ssri": {
23053 "version": "6.0.2",
23054 "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz",
23055 "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==",
23056 "dev": true,
23057 "requires": {
23058 "figgy-pudding": "^3.5.1"
23059 }
23060 },
23061 "y18n": {
23062 "version": "4.0.3",
23063 "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
23064 "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
23065 "dev": true
23066 },
23067 "yallist": {
23068 "version": "3.1.1",
23069 "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
23070 "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
23071 "dev": true
23072 } 22745 }
23073 } 22746 }
23074 }, 22747 },
@@ -23438,13 +23111,14 @@
23438 "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" 23111 "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
23439 }, 23112 },
23440 "tough-cookie": { 23113 "tough-cookie": {
23441 "version": "2.5.0", 23114 "version": "4.0.0",
23442 "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", 23115 "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz",
23443 "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", 23116 "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==",
23444 "optional": true, 23117 "dev": true,
23445 "requires": { 23118 "requires": {
23446 "psl": "^1.1.28", 23119 "psl": "^1.1.33",
23447 "punycode": "^2.1.1" 23120 "punycode": "^2.1.1",
23121 "universalify": "^0.1.2"
23448 } 23122 }
23449 }, 23123 },
23450 "tr46": { 23124 "tr46": {
@@ -23972,6 +23646,13 @@
23972 "requires": { 23646 "requires": {
23973 "modify-filename": "^1.1.0", 23647 "modify-filename": "^1.1.0",
23974 "path-exists": "^4.0.0" 23648 "path-exists": "^4.0.0"
23649 },
23650 "dependencies": {
23651 "path-exists": {
23652 "version": "4.0.0",
23653 "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
23654 "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
23655 }
23975 } 23656 }
23976 }, 23657 },
23977 "unzipper": { 23658 "unzipper": {
@@ -24219,6 +23900,69 @@
24219 } 23900 }
24220 } 23901 }
24221 }, 23902 },
23903 "usocket": {
23904 "version": "0.3.0",
23905 "resolved": "https://registry.npmjs.org/usocket/-/usocket-0.3.0.tgz",
23906 "integrity": "sha512-V/H02RNiaOCJZuPoKont/y12VJaImC6C5xW7OzPFjYu9qnig0yv9hyp9E7Wqjm6d8yZuZouH3NAfDATVMgh2SQ==",
23907 "optional": true,
23908 "requires": {
23909 "bindings": "^1.5.0",
23910 "nan": "^2.14.2",
23911 "node-gyp": "^7.1.2"
23912 },
23913 "dependencies": {
23914 "glob": {
23915 "version": "7.2.0",
23916 "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
23917 "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
23918 "optional": true,
23919 "requires": {
23920 "fs.realpath": "^1.0.0",
23921 "inflight": "^1.0.4",
23922 "inherits": "2",
23923 "minimatch": "^3.0.4",
23924 "once": "^1.3.0",
23925 "path-is-absolute": "^1.0.0"
23926 }
23927 },
23928 "node-gyp": {
23929 "version": "7.1.2",
23930 "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz",
23931 "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==",
23932 "optional": true,
23933 "requires": {
23934 "env-paths": "^2.2.0",
23935 "glob": "^7.1.4",
23936 "graceful-fs": "^4.2.3",
23937 "nopt": "^5.0.0",
23938 "npmlog": "^4.1.2",
23939 "request": "^2.88.2",
23940 "rimraf": "^3.0.2",
23941 "semver": "^7.3.2",
23942 "tar": "^6.0.2",
23943 "which": "^2.0.2"
23944 }
23945 },
23946 "nopt": {
23947 "version": "5.0.0",
23948 "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
23949 "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
23950 "optional": true,
23951 "requires": {
23952 "abbrev": "1"
23953 }
23954 },
23955 "which": {
23956 "version": "2.0.2",
23957 "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
23958 "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
23959 "optional": true,
23960 "requires": {
23961 "isexe": "^2.0.0"
23962 }
23963 }
23964 }
23965 },
24222 "utf8-byte-length": { 23966 "utf8-byte-length": {
24223 "version": "1.0.4", 23967 "version": "1.0.4",
24224 "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", 23968 "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz",
@@ -25380,11 +25124,11 @@
25380 "dev": true 25124 "dev": true
25381 }, 25125 },
25382 "wide-align": { 25126 "wide-align": {
25383 "version": "1.1.3", 25127 "version": "1.1.5",
25384 "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", 25128 "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
25385 "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", 25129 "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
25386 "requires": { 25130 "requires": {
25387 "string-width": "^1.0.2 || 2" 25131 "string-width": "^1.0.2 || 2 || 3 || 4"
25388 } 25132 }
25389 }, 25133 },
25390 "widest-line": { 25134 "widest-line": {
@@ -25455,6 +25199,73 @@
25455 "integrity": "sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==", 25199 "integrity": "sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==",
25456 "requires": { 25200 "requires": {
25457 "execa": "^4.0.2" 25201 "execa": "^4.0.2"
25202 },
25203 "dependencies": {
25204 "cross-spawn": {
25205 "version": "7.0.3",
25206 "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
25207 "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
25208 "requires": {
25209 "path-key": "^3.1.0",
25210 "shebang-command": "^2.0.0",
25211 "which": "^2.0.1"
25212 }
25213 },
25214 "execa": {
25215 "version": "4.1.0",
25216 "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
25217 "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==",
25218 "requires": {
25219 "cross-spawn": "^7.0.0",
25220 "get-stream": "^5.0.0",
25221 "human-signals": "^1.1.1",
25222 "is-stream": "^2.0.0",
25223 "merge-stream": "^2.0.0",
25224 "npm-run-path": "^4.0.0",
25225 "onetime": "^5.1.0",
25226 "signal-exit": "^3.0.2",
25227 "strip-final-newline": "^2.0.0"
25228 }
25229 },
25230 "get-stream": {
25231 "version": "5.2.0",
25232 "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
25233 "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
25234 "requires": {
25235 "pump": "^3.0.0"
25236 }
25237 },
25238 "human-signals": {
25239 "version": "1.1.1",
25240 "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
25241 "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw=="
25242 },
25243 "path-key": {
25244 "version": "3.1.1",
25245 "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
25246 "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
25247 },
25248 "shebang-command": {
25249 "version": "2.0.0",
25250 "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
25251 "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
25252 "requires": {
25253 "shebang-regex": "^3.0.0"
25254 }
25255 },
25256 "shebang-regex": {
25257 "version": "3.0.0",
25258 "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
25259 "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
25260 },
25261 "which": {
25262 "version": "2.0.2",
25263 "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
25264 "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
25265 "requires": {
25266 "isexe": "^2.0.0"
25267 }
25268 }
25458 } 25269 }
25459 }, 25270 },
25460 "winreg": { 25271 "winreg": {
@@ -25619,9 +25430,9 @@
25619 } 25430 }
25620 }, 25431 },
25621 "ws": { 25432 "ws": {
25622 "version": "8.2.2", 25433 "version": "8.2.3",
25623 "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.2.tgz", 25434 "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz",
25624 "integrity": "sha512-Q6B6H2oc8QY3llc3cB8kVmQ6pnJWVQbP7Q5algTcIxx7YEpc0oU4NBVHlztA7Ekzfhw2r0rPducMUiCGWKQRzw==" 25435 "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA=="
25625 }, 25436 },
25626 "xdg-basedir": { 25437 "xdg-basedir": {
25627 "version": "4.0.0", 25438 "version": "4.0.0",
diff --git a/package.json b/package.json
index fdf0b269d..c9840c4ec 100644
--- a/package.json
+++ b/package.json
@@ -3,7 +3,7 @@
3 "productName": "Ferdi", 3 "productName": "Ferdi",
4 "desktopName": "ferdi.desktop", 4 "desktopName": "ferdi.desktop",
5 "appId": "com.kytwb.ferdi", 5 "appId": "com.kytwb.ferdi",
6 "version": "5.6.3-beta.2", 6 "version": "5.6.3-nightly.44",
7 "description": "Messaging app for WhatsApp, Slack, Telegram, HipChat, Hangouts and many many more.", 7 "description": "Messaging app for WhatsApp, Slack, Telegram, HipChat, Hangouts and many many more.",
8 "copyright": "kytwb", 8 "copyright": "kytwb",
9 "main": "index.js", 9 "main": "index.js",
@@ -60,33 +60,33 @@
60 "@adonisjs/shield": "1.0.8", 60 "@adonisjs/shield": "1.0.8",
61 "@adonisjs/validator": "5.0.6", 61 "@adonisjs/validator": "5.0.6",
62 "@electron/remote": "1.2.1", 62 "@electron/remote": "1.2.1",
63 "@mdi/font": "6.2.95", 63 "@mdi/font": "6.3.95",
64 "@mdi/js": "6.2.95", 64 "@mdi/js": "6.3.95",
65 "@mdi/react": "1.5.0", 65 "@mdi/react": "1.5.0",
66 "@sentry/electron": "2.5.3", 66 "@sentry/electron": "2.5.4",
67 "auto-launch": "5.0.5", 67 "auto-launch": "5.0.5",
68 "btoa": "1.2.1", 68 "btoa": "1.2.1",
69 "classnames": "2.3.1", 69 "classnames": "2.3.1",
70 "cld": "2.7.0", 70 "cld": "2.7.0",
71 "color": "4.0.1", 71 "color": "4.0.1",
72 "csstype": "3.0.8", 72 "csstype": "3.0.9",
73 "darkreader": "4.9.34", 73 "darkreader": "4.9.39",
74 "dbus-next": "0.9.2", 74 "dbus-next": "0.10.2",
75 "debug": "4.3.2", 75 "debug": "4.3.2",
76 "electron-dl": "3.2.1", 76 "electron-dl": "3.2.1",
77 "electron-fetch": "1.7.4", 77 "electron-fetch": "1.7.4",
78 "electron-find": "1.0.7", 78 "electron-find": "1.0.7",
79 "electron-react-titlebar": "1.0.0", 79 "electron-react-titlebar": "1.1.0",
80 "electron-updater": "4.3.9", 80 "electron-updater": "4.3.9",
81 "electron-window-state": "5.0.3", 81 "electron-window-state": "5.0.3",
82 "fast-folder-size": "1.5.0", 82 "fast-folder-size": "1.5.0",
83 "fs-extra": "10.0.0", 83 "fs-extra": "10.0.0",
84 "jsonwebtoken": "8.5.1", 84 "jsonwebtoken": "8.5.1",
85 "jss": "10.7.1", 85 "jss": "10.8.1",
86 "lodash": "4.17.21", 86 "lodash": "4.17.21",
87 "macos-notification-state": "1.3.6", 87 "macos-notification-state": "1.3.6",
88 "macos-version": "5.2.1", 88 "macos-version": "5.2.1",
89 "mime-types": "2.1.32", 89 "mime-types": "2.1.33",
90 "minimist": "1.2.5", 90 "minimist": "1.2.5",
91 "mobx": "5.15.0", 91 "mobx": "5.15.0",
92 "mobx-localstorage": "1.2.0", 92 "mobx-localstorage": "1.2.0",
@@ -105,9 +105,9 @@
105 "react-addons-css-transition-group": "15.6.2", 105 "react-addons-css-transition-group": "15.6.2",
106 "react-confetti": "6.0.1", 106 "react-confetti": "6.0.1",
107 "react-dom": "17.0.2", 107 "react-dom": "17.0.2",
108 "react-dropzone": "11.3.4", 108 "react-dropzone": "11.4.2",
109 "react-electron-web-view": "2.0.1", 109 "react-electron-web-view": "2.0.1",
110 "react-intl": "5.20.10", 110 "react-intl": "5.21.0",
111 "react-jss": "8.6.1", 111 "react-jss": "8.6.1",
112 "react-loader": "2.4.7", 112 "react-loader": "2.4.7",
113 "react-modal": "3.14.3", 113 "react-modal": "3.14.3",
@@ -122,50 +122,50 @@
122 "useragent-generator": "1.1.1-amkt-22079-finish.0", 122 "useragent-generator": "1.1.1-amkt-22079-finish.0",
123 "uuid": "8.3.2", 123 "uuid": "8.3.2",
124 "validator": "13.6.0", 124 "validator": "13.6.0",
125 "ws": "8.2.2" 125 "ws": "8.2.3"
126 }, 126 },
127 "devDependencies": { 127 "devDependencies": {
128 "@babel/eslint-parser": "7.15.8", 128 "@babel/eslint-parser": "7.15.8",
129 "@babel/plugin-proposal-class-properties": "7.14.5", 129 "@babel/plugin-proposal-class-properties": "7.14.5",
130 "@babel/plugin-proposal-decorators": "7.15.4", 130 "@babel/plugin-proposal-decorators": "7.15.8",
131 "@babel/preset-env": "7.15.6", 131 "@babel/preset-env": "7.15.8",
132 "@babel/preset-react": "7.14.5", 132 "@babel/preset-react": "7.14.5",
133 "@babel/register": "7.15.3", 133 "@babel/register": "7.15.3",
134 "@commitlint/cli": "13.1.0", 134 "@formatjs/cli": "4.4.0",
135 "@commitlint/config-conventional": "13.1.0", 135 "@commitlint/cli": "13.2.1",
136 "@formatjs/cli": "4.2.33", 136 "@commitlint/config-conventional": "13.2.0",
137 "@types/color": "3.0.2", 137 "@types/color": "3.0.2",
138 "@types/expect.js": "0.3.29", 138 "@types/expect.js": "0.3.29",
139 "@types/fs-extra": "9.0.12", 139 "@types/fs-extra": "9.0.13",
140 "@types/lodash": "4.14.172", 140 "@types/lodash": "4.14.176",
141 "@types/mime-types": "2.1.1", 141 "@types/mime-types": "2.1.1",
142 "@types/mocha": "9.0.0", 142 "@types/mocha": "9.0.0",
143 "@types/ms": "0.7.31", 143 "@types/ms": "0.7.31",
144 "@types/node": "14.17.27", 144 "@types/node": "14.17.27",
145 "@types/react": "17.0.27", 145 "@types/react": "17.0.31",
146 "@types/react-dom": "17.0.9", 146 "@types/react-dom": "17.0.10",
147 "@types/route-parser": "0.1.3", 147 "@types/route-parser": "0.1.3",
148 "@types/tar": "4.0.5", 148 "@types/tar": "4.0.5",
149 "@types/uuid": "8.3.1", 149 "@types/uuid": "8.3.1",
150 "@types/validator": "13.6.3", 150 "@types/validator": "13.6.4",
151 "@typescript-eslint/eslint-plugin": "5.0.0", 151 "@typescript-eslint/eslint-plugin": "5.1.0",
152 "@typescript-eslint/parser": "5.0.0", 152 "@typescript-eslint/parser": "5.1.0",
153 "all-contributors-cli": "6.20.0", 153 "all-contributors-cli": "6.20.0",
154 "babel-plugin-formatjs": "10.3.9", 154 "babel-plugin-formatjs": "10.3.11",
155 "commitizen": "4.2.4", 155 "commitizen": "4.2.4",
156 "concurrently": "6.2.1", 156 "concurrently": "6.3.0",
157 "cross-env": "7.0.3", 157 "cross-env": "7.0.3",
158 "cz-conventional-changelog": "3.3.0", 158 "cz-conventional-changelog": "3.3.0",
159 "dotenv": "10.0.0", 159 "dotenv": "10.0.0",
160 "electron": "15.2.0", 160 "electron": "15.3.0",
161 "electron-builder": "22.14.5", 161 "electron-builder": "22.14.5",
162 "electron-notarize": "1.1.0", 162 "electron-notarize": "1.1.1",
163 "eslint": "8.0.1", 163 "eslint": "8.1.0",
164 "eslint-config-airbnb": "18.2.1", 164 "eslint-config-airbnb": "18.2.1",
165 "eslint-config-airbnb-typescript": "14.0.1", 165 "eslint-config-airbnb-typescript": "14.0.1",
166 "eslint-config-prettier": "8.3.0", 166 "eslint-config-prettier": "8.3.0",
167 "eslint-plugin-import": "2.25.2", 167 "eslint-plugin-import": "2.25.2",
168 "eslint-plugin-jest": "25.2.1", 168 "eslint-plugin-jest": "25.2.2",
169 "eslint-plugin-jsx-a11y": "6.4.1", 169 "eslint-plugin-jsx-a11y": "6.4.1",
170 "eslint-plugin-prettier": "4.0.0", 170 "eslint-plugin-prettier": "4.0.0",
171 "eslint-plugin-react": "7.26.1", 171 "eslint-plugin-react": "7.26.1",
@@ -185,15 +185,15 @@
185 "gulp-uglify": "3.0.2", 185 "gulp-uglify": "3.0.2",
186 "hex-rgb": "4.3.0", 186 "hex-rgb": "4.3.0",
187 "html-webpack-plugin": "4.5.2", 187 "html-webpack-plugin": "4.5.2",
188 "husky": "7.0.2", 188 "husky": "7.0.4",
189 "jest": "27.1.0", 189 "jest": "27.3.1",
190 "kebab-case": "1.0.1", 190 "kebab-case": "1.0.1",
191 "mocha": "9.1.3", 191 "mocha": "9.1.3",
192 "prettier": "2.3.2", 192 "prettier": "2.4.1",
193 "preval-build-info": "1.0.3", 193 "preval-build-info": "1.0.3",
194 "rimraf": "3.0.2", 194 "rimraf": "3.0.2",
195 "sass": "1.37.5", 195 "sass": "1.43.3",
196 "simple-git": "2.45.0", 196 "simple-git": "2.47.0",
197 "terser": "4.8.0", 197 "terser": "4.8.0",
198 "ts-loader": "5.4.5", 198 "ts-loader": "5.4.5",
199 "ts-mocha": "8.0.0", 199 "ts-mocha": "8.0.0",
diff --git a/recipes b/recipes
Subproject 2dcc204502ecbbcac39b667a37ffe36c45f33d6 Subproject 87731bd4a54dc3c40e0188d790d0f430cacf1ef
diff --git a/src/I18n.js b/src/I18n.js
index 2a50050ee..b10c5a94b 100644
--- a/src/I18n.js
+++ b/src/I18n.js
@@ -12,7 +12,7 @@ import AppStore from './stores/AppStore';
12@observer 12@observer
13class I18N extends Component { 13class I18N extends Component {
14 componentDidUpdate() { 14 componentDidUpdate() {
15 window.ferdi.menu.rebuild(); 15 window['ferdi'].menu.rebuild();
16 } 16 }
17 17
18 render() { 18 render() {
@@ -22,7 +22,7 @@ class I18N extends Component {
22 <IntlProvider 22 <IntlProvider
23 {...{ locale, key: locale, messages: translations[locale] }} 23 {...{ locale, key: locale, messages: translations[locale] }}
24 ref={intlProvider => { 24 ref={intlProvider => {
25 window.ferdi.intl = intlProvider ? intlProvider.state.intl : null; 25 window['ferdi'].intl = intlProvider ? intlProvider.state.intl : null;
26 }} 26 }}
27 > 27 >
28 {children} 28 {children}
diff --git a/src/actions/service.ts b/src/actions/service.ts
index e56513f8f..aa02c860a 100644
--- a/src/actions/service.ts
+++ b/src/actions/service.ts
@@ -39,6 +39,10 @@ export default {
39 serviceId: PropTypes.string.isRequired, 39 serviceId: PropTypes.string.isRequired,
40 count: PropTypes.object.isRequired, 40 count: PropTypes.object.isRequired,
41 }, 41 },
42 setDialogTitle: {
43 serviceId: PropTypes.string.isRequired,
44 dialogTitle: PropTypes.string.isRequired,
45 },
42 setWebviewReference: { 46 setWebviewReference: {
43 serviceId: PropTypes.string.isRequired, 47 serviceId: PropTypes.string.isRequired,
44 webview: PropTypes.object.isRequired, 48 webview: PropTypes.object.isRequired,
diff --git a/src/app.js b/src/app.js
index aea57a673..f52ecdfdc 100644
--- a/src/app.js
+++ b/src/app.js
@@ -28,7 +28,7 @@ window.addEventListener('load', () => {
28 const menu = new MenuFactory(stores, actions); 28 const menu = new MenuFactory(stores, actions);
29 const touchBar = new TouchBarFactory(stores, actions); 29 const touchBar = new TouchBarFactory(stores, actions);
30 30
31 window.ferdi = { 31 window['ferdi'] = {
32 stores, 32 stores,
33 actions, 33 actions,
34 api, 34 api,
@@ -46,7 +46,7 @@ window.addEventListener('load', () => {
46 render(preparedApp, document.querySelector('#root')); 46 render(preparedApp, document.querySelector('#root'));
47 }, 47 },
48 }; 48 };
49 window.ferdi.render(); 49 window['ferdi'].render();
50}); 50});
51 51
52// Prevent drag and drop into window from redirecting 52// Prevent drag and drop into window from redirecting
diff --git a/src/components/auth/AuthLayout.js b/src/components/auth/AuthLayout.js
index 00eded728..047b10775 100644
--- a/src/components/auth/AuthLayout.js
+++ b/src/components/auth/AuthLayout.js
@@ -54,7 +54,7 @@ class AuthLayout extends Component {
54 <> 54 <>
55 {isWindows && !isFullScreen && ( 55 {isWindows && !isFullScreen && (
56 <TitleBar 56 <TitleBar
57 menu={window.ferdi.menu.template} 57 menu={window['ferdi'].menu.template}
58 icon="assets/images/logo.svg" 58 icon="assets/images/logo.svg"
59 /> 59 />
60 )} 60 )}
diff --git a/src/components/auth/Login.js b/src/components/auth/Login.js
index 9f3f636e3..6ed89afb6 100644
--- a/src/components/auth/Login.js
+++ b/src/components/auth/Login.js
@@ -168,12 +168,12 @@ class Login extends Component {
168 <p className="error-message center"> 168 <p className="error-message center">
169 {intl.formatMessage(messages.invalidCredentials)} 169 {intl.formatMessage(messages.invalidCredentials)}
170 </p> 170 </p>
171 {window.ferdi.stores.settings.all.app.server !== 171 {window['ferdi'].stores.settings.all.app.server !==
172 LIVE_FRANZ_API && ( 172 LIVE_FRANZ_API && (
173 <p className="error-message center"> 173 <p className="error-message center">
174 {intl.formatMessage(messages.customServerQuestion)}{' '} 174 {intl.formatMessage(messages.customServerQuestion)}{' '}
175 <Link 175 <Link
176 to={`${window.ferdi.stores.settings.all.app.server.replace( 176 to={`${window['ferdi'].stores.settings.all.app.server.replace(
177 API_VERSION, 177 API_VERSION,
178 '', 178 '',
179 )}/import`} 179 )}/import`}
diff --git a/src/components/layout/AppLayout.js b/src/components/layout/AppLayout.js
index 4bacc547b..af27e8854 100644
--- a/src/components/layout/AppLayout.js
+++ b/src/components/layout/AppLayout.js
@@ -4,6 +4,7 @@ import { observer } from 'mobx-react';
4import { defineMessages, injectIntl } from 'react-intl'; 4import { defineMessages, injectIntl } from 'react-intl';
5import { TitleBar } from 'electron-react-titlebar/renderer'; 5import { TitleBar } from 'electron-react-titlebar/renderer';
6import injectSheet from 'react-jss'; 6import injectSheet from 'react-jss';
7import { ipcRenderer } from 'electron';
7 8
8import InfoBar from '../ui/InfoBar'; 9import InfoBar from '../ui/InfoBar';
9import { Component as BasicAuth } from '../../features/basicAuth'; 10import { Component as BasicAuth } from '../../features/basicAuth';
@@ -14,7 +15,7 @@ import ErrorBoundary from '../util/ErrorBoundary';
14 15
15// import globalMessages from '../../i18n/globalMessages'; 16// import globalMessages from '../../i18n/globalMessages';
16 17
17import { isWindows } from '../../environment'; 18import { isWindows, isMac } from '../../environment';
18import WorkspaceSwitchingIndicator from '../../features/workspaces/components/WorkspaceSwitchingIndicator'; 19import WorkspaceSwitchingIndicator from '../../features/workspaces/components/WorkspaceSwitchingIndicator';
19import { workspaceStore } from '../../features/workspaces'; 20import { workspaceStore } from '../../features/workspaces';
20import AppUpdateInfoBar from '../AppUpdateInfoBar'; 21import AppUpdateInfoBar from '../AppUpdateInfoBar';
@@ -57,8 +58,20 @@ const styles = theme => ({
57 : `translateX(-${theme.workspaces.drawer.width}px)`; 58 : `translateX(-${theme.workspaces.drawer.width}px)`;
58 }, 59 },
59 }, 60 },
61 titleBar: {
62 display: 'block',
63 zIndex: 1,
64 width: '100%',
65 height: '23px',
66 position: 'absolute',
67 top: 0,
68 },
60}); 69});
61 70
71const toggleFullScreen = () => {
72 ipcRenderer.send('window.toolbar-double-clicked');
73};
74
62@injectSheet(styles) 75@injectSheet(styles)
63@observer 76@observer
64class AppLayout extends Component { 77class AppLayout extends Component {
@@ -115,10 +128,16 @@ class AppLayout extends Component {
115 <div className="app"> 128 <div className="app">
116 {isWindows && !isFullScreen && ( 129 {isWindows && !isFullScreen && (
117 <TitleBar 130 <TitleBar
118 menu={window.ferdi.menu.template} 131 menu={window['ferdi'].menu.template}
119 icon="assets/images/logo.svg" 132 icon="assets/images/logo.svg"
120 /> 133 />
121 )} 134 )}
135 {isMac && !isFullScreen && (
136 <span
137 onDoubleClick={toggleFullScreen}
138 className={classes.titleBar}
139 />
140 )}
122 <div className={`app__content ${classes.appContent}`}> 141 <div className={`app__content ${classes.appContent}`}>
123 {workspacesDrawer} 142 {workspacesDrawer}
124 {sidebar} 143 {sidebar}
diff --git a/src/components/layout/Sidebar.js b/src/components/layout/Sidebar.js
index fc33a3c58..18492be80 100644
--- a/src/components/layout/Sidebar.js
+++ b/src/components/layout/Sidebar.js
@@ -14,7 +14,6 @@ import {
14 addNewServiceShortcutKey, 14 addNewServiceShortcutKey,
15 muteFerdiShortcutKey, 15 muteFerdiShortcutKey,
16} from '../../environment'; 16} from '../../environment';
17import { workspaceStore } from '../../features/workspaces';
18import { todosStore } from '../../features/todos'; 17import { todosStore } from '../../features/todos';
19import { todoActions } from '../../features/todos/actions'; 18import { todoActions } from '../../features/todos/actions';
20import AppStore from '../../stores/AppStore'; 19import AppStore from '../../stores/AppStore';
@@ -69,6 +68,7 @@ class Sidebar extends Component {
69 toggleAudio: PropTypes.func.isRequired, 68 toggleAudio: PropTypes.func.isRequired,
70 toggleDarkMode: PropTypes.func.isRequired, 69 toggleDarkMode: PropTypes.func.isRequired,
71 showMessageBadgeWhenMutedSetting: PropTypes.bool.isRequired, 70 showMessageBadgeWhenMutedSetting: PropTypes.bool.isRequired,
71 showServiceNameSetting: PropTypes.bool.isRequired,
72 showMessageBadgesEvenWhenMuted: PropTypes.bool.isRequired, 72 showMessageBadgesEvenWhenMuted: PropTypes.bool.isRequired,
73 deleteService: PropTypes.func.isRequired, 73 deleteService: PropTypes.func.isRequired,
74 updateService: PropTypes.func.isRequired, 74 updateService: PropTypes.func.isRequired,
@@ -159,8 +159,7 @@ class Sidebar extends Component {
159 <i className="mdi mdi-lock" /> 159 <i className="mdi mdi-lock" />
160 </button> 160 </button>
161 ) : null} 161 ) : null}
162 {todosStore.isFeatureEnabled && 162 {todosStore.isFeatureEnabledByUser ? (
163 todosStore.isFeatureEnabledByUser ? (
164 <button 163 <button
165 type="button" 164 type="button"
166 onClick={() => { 165 onClick={() => {
@@ -178,23 +177,21 @@ class Sidebar extends Component {
178 <i className="mdi mdi-check-all" /> 177 <i className="mdi mdi-check-all" />
179 </button> 178 </button>
180 ) : null} 179 ) : null}
181 {workspaceStore.isFeatureEnabled ? ( 180 <button
182 <button 181 type="button"
183 type="button" 182 onClick={() => {
184 onClick={() => { 183 toggleWorkspaceDrawer();
185 toggleWorkspaceDrawer(); 184 this.updateToolTip();
186 this.updateToolTip(); 185 }}
187 }} 186 className={`sidebar__button sidebar__button--workspaces ${
188 className={`sidebar__button sidebar__button--workspaces ${ 187 isWorkspaceDrawerOpen ? 'is-active' : ''
189 isWorkspaceDrawerOpen ? 'is-active' : '' 188 }`}
190 }`} 189 data-tip={`${intl.formatMessage(
191 data-tip={`${intl.formatMessage( 190 workspaceToggleMessage,
192 workspaceToggleMessage, 191 )} (${workspaceToggleShortcutKey(false)})`}
193 )} (${workspaceToggleShortcutKey(false)})`} 192 >
194 > 193 <i className="mdi mdi-view-grid" />
195 <i className="mdi mdi-view-grid" /> 194 </button>
196 </button>
197 ) : null}
198 <button 195 <button
199 type="button" 196 type="button"
200 onClick={() => { 197 onClick={() => {
diff --git a/src/components/services/content/ServiceWebview.js b/src/components/services/content/ServiceWebview.js
index 185d41175..2562c09ce 100644
--- a/src/components/services/content/ServiceWebview.js
+++ b/src/components/services/content/ServiceWebview.js
@@ -30,9 +30,14 @@ class ServiceWebview extends Component {
30 this.webview.view.addEventListener('console-message', e => { 30 this.webview.view.addEventListener('console-message', e => {
31 debug('Service logged a message:', e.message); 31 debug('Service logged a message:', e.message);
32 }); 32 });
33 this.webview.view.addEventListener('did-navigate', () => {
34 document.title = `Ferdi - ${this.props.service.name} ${this.props.service.dialogTitle
35 ? ` - ${this.props.service.dialogTitle}`
36 : ''
37 } ${`- ${this.props.service._webview.getTitle()}`}`;
38 })
33 } 39 }
34 }, 40 })
35 );
36 } 41 }
37 42
38 componentWillUnmount() { 43 componentWillUnmount() {
@@ -47,6 +52,12 @@ class ServiceWebview extends Component {
47 if (this.props.service.isActive) { 52 if (this.props.service.isActive) {
48 webview.view.blur(); 53 webview.view.blur();
49 webview.view.focus(); 54 webview.view.focus();
55 window.setTimeout(() => {
56 document.title = `Ferdi - ${this.props.service.name} ${this.props.service.dialogTitle
57 ? ` - ${this.props.service.dialogTitle}`
58 : ''
59 } ${`- ${this.props.service._webview.getTitle()}`}`;
60 }, 100);
50 } else { 61 } else {
51 debug('Refocus not required - Not active service'); 62 debug('Refocus not required - Not active service');
52 } 63 }
@@ -92,9 +103,8 @@ class ServiceWebview extends Component {
92 } 103 }
93 allowpopups 104 allowpopups
94 nodeintegration 105 nodeintegration
95 webpreferences={`spellcheck=${ 106 webpreferences={`spellcheck=${isSpellcheckerEnabled ? 1 : 0
96 isSpellcheckerEnabled ? 1 : 0 107 }, contextIsolation=1, enableRemoteModule=1`}
97 }, contextIsolation=1, enableRemoteModule=1`}
98 /> 108 />
99 ); 109 );
100 } 110 }
diff --git a/src/components/services/tabs/TabBarSortableList.js b/src/components/services/tabs/TabBarSortableList.js
index 69a12e982..3049b6efa 100644
--- a/src/components/services/tabs/TabBarSortableList.js
+++ b/src/components/services/tabs/TabBarSortableList.js
@@ -21,6 +21,7 @@ class TabBarSortableList extends Component {
21 hibernateService: PropTypes.func.isRequired, 21 hibernateService: PropTypes.func.isRequired,
22 wakeUpService: PropTypes.func.isRequired, 22 wakeUpService: PropTypes.func.isRequired,
23 showMessageBadgeWhenMutedSetting: PropTypes.bool.isRequired, 23 showMessageBadgeWhenMutedSetting: PropTypes.bool.isRequired,
24 showServiceNameSetting: PropTypes.bool.isRequired,
24 showMessageBadgesEvenWhenMuted: PropTypes.bool.isRequired, 25 showMessageBadgesEvenWhenMuted: PropTypes.bool.isRequired,
25 }; 26 };
26 27
@@ -39,6 +40,7 @@ class TabBarSortableList extends Component {
39 wakeUpService, 40 wakeUpService,
40 openSettings, 41 openSettings,
41 showMessageBadgeWhenMutedSetting, 42 showMessageBadgeWhenMutedSetting,
43 showServiceNameSetting,
42 showMessageBadgesEvenWhenMuted, 44 showMessageBadgesEvenWhenMuted,
43 } = this.props; 45 } = this.props;
44 46
@@ -65,6 +67,7 @@ class TabBarSortableList extends Component {
65 openSettings={openSettings} 67 openSettings={openSettings}
66 showMessageBadgeWhenMutedSetting={showMessageBadgeWhenMutedSetting} 68 showMessageBadgeWhenMutedSetting={showMessageBadgeWhenMutedSetting}
67 showMessageBadgesEvenWhenMuted={showMessageBadgesEvenWhenMuted} 69 showMessageBadgesEvenWhenMuted={showMessageBadgesEvenWhenMuted}
70 showServiceNameSetting={showServiceNameSetting}
68 /> 71 />
69 ))} 72 ))}
70 </ul> 73 </ul>
diff --git a/src/components/services/tabs/TabItem.js b/src/components/services/tabs/TabItem.js
index ed8430b89..3ea6c5da2 100644
--- a/src/components/services/tabs/TabItem.js
+++ b/src/components/services/tabs/TabItem.js
@@ -132,6 +132,7 @@ class TabItem extends Component {
132 hibernateService: PropTypes.func.isRequired, 132 hibernateService: PropTypes.func.isRequired,
133 wakeUpService: PropTypes.func.isRequired, 133 wakeUpService: PropTypes.func.isRequired,
134 showMessageBadgeWhenMutedSetting: PropTypes.bool.isRequired, 134 showMessageBadgeWhenMutedSetting: PropTypes.bool.isRequired,
135 showServiceNameSetting: PropTypes.bool.isRequired,
135 showMessageBadgesEvenWhenMuted: PropTypes.bool.isRequired, 136 showMessageBadgesEvenWhenMuted: PropTypes.bool.isRequired,
136 stores: PropTypes.shape({ 137 stores: PropTypes.shape({
137 settings: PropTypes.instanceOf(SettingsStore).isRequired, 138 settings: PropTypes.instanceOf(SettingsStore).isRequired,
@@ -219,6 +220,7 @@ class TabItem extends Component {
219 wakeUpService, 220 wakeUpService,
220 openSettings, 221 openSettings,
221 showMessageBadgeWhenMutedSetting, 222 showMessageBadgeWhenMutedSetting,
223 showServiceNameSetting,
222 showMessageBadgesEvenWhenMuted, 224 showMessageBadgesEvenWhenMuted,
223 } = this.props; 225 } = this.props;
224 const { intl } = this.props; 226 const { intl } = this.props;
@@ -331,6 +333,13 @@ class TabItem extends Component {
331 ); 333 );
332 } 334 }
333 335
336 let errorBadge = null;
337 if ( service.isError ) {
338 errorBadge=(
339 <i className = " mdi mdi-exclamation tab-item__error-icon"/>
340 )
341 }
342
334 return ( 343 return (
335 <li 344 <li
336 className={classnames({ 345 className={classnames({
@@ -340,6 +349,7 @@ class TabItem extends Component {
340 'is-active': service.isActive, 349 'is-active': service.isActive,
341 'has-custom-icon': service.hasCustomIcon, 350 'has-custom-icon': service.hasCustomIcon,
342 'is-disabled': !service.isEnabled, 351 'is-disabled': !service.isEnabled,
352 'is-label-enabled': showServiceNameSetting,
343 })} 353 })}
344 onClick={clickHandler} 354 onClick={clickHandler}
345 onContextMenu={() => menu.popup()} 355 onContextMenu={() => menu.popup()}
@@ -349,8 +359,14 @@ class TabItem extends Component {
349 : '' 359 : ''
350 }`} 360 }`}
351 > 361 >
352 <img src={service.icon} className="tab-item__icon" alt="" /> 362
363 {showServiceNameSetting? <div>
364 <img src={service.icon} className="tab-item__icon" alt="" />
365 <span className="tab-item__label">{service.name}</span>
366 </div> : <img src={service.icon} className="tab-item__icon" alt="" />}
367
353 {notificationBadge} 368 {notificationBadge}
369 {errorBadge}
354 {IS_SERVICE_DEBUGGING_ENABLED && ( 370 {IS_SERVICE_DEBUGGING_ENABLED && (
355 <> 371 <>
356 <div 372 <div
diff --git a/src/components/services/tabs/Tabbar.js b/src/components/services/tabs/Tabbar.js
index 4ab0e8611..94d6f33c1 100644
--- a/src/components/services/tabs/Tabbar.js
+++ b/src/components/services/tabs/Tabbar.js
@@ -23,6 +23,7 @@ class TabBar extends Component {
23 wakeUpService: PropTypes.func.isRequired, 23 wakeUpService: PropTypes.func.isRequired,
24 useVerticalStyle: PropTypes.bool.isRequired, 24 useVerticalStyle: PropTypes.bool.isRequired,
25 showMessageBadgeWhenMutedSetting: PropTypes.bool.isRequired, 25 showMessageBadgeWhenMutedSetting: PropTypes.bool.isRequired,
26 showServiceNameSetting: PropTypes.bool.isRequired,
26 showMessageBadgesEvenWhenMuted: PropTypes.bool.isRequired, 27 showMessageBadgesEvenWhenMuted: PropTypes.bool.isRequired,
27 }; 28 };
28 29
@@ -82,6 +83,7 @@ class TabBar extends Component {
82 deleteService, 83 deleteService,
83 useVerticalStyle, 84 useVerticalStyle,
84 showMessageBadgeWhenMutedSetting, 85 showMessageBadgeWhenMutedSetting,
86 showServiceNameSetting,
85 showMessageBadgesEvenWhenMuted, 87 showMessageBadgesEvenWhenMuted,
86 } = this.props; 88 } = this.props;
87 89
@@ -110,6 +112,7 @@ class TabBar extends Component {
110 lockAxis={axis} 112 lockAxis={axis}
111 helperClass="is-reordering" 113 helperClass="is-reordering"
112 showMessageBadgeWhenMutedSetting={showMessageBadgeWhenMutedSetting} 114 showMessageBadgeWhenMutedSetting={showMessageBadgeWhenMutedSetting}
115 showServiceNameSetting={showServiceNameSetting}
113 showMessageBadgesEvenWhenMuted={showMessageBadgesEvenWhenMuted} 116 showMessageBadgesEvenWhenMuted={showMessageBadgesEvenWhenMuted}
114 /> 117 />
115 </div> 118 </div>
diff --git a/src/components/settings/navigation/SettingsNavigation.js b/src/components/settings/navigation/SettingsNavigation.js
index 18a71fdeb..dbb1365b0 100644
--- a/src/components/settings/navigation/SettingsNavigation.js
+++ b/src/components/settings/navigation/SettingsNavigation.js
@@ -6,7 +6,6 @@ import { RouterStore } from 'mobx-react-router';
6 6
7import { LOCAL_SERVER, LIVE_FERDI_API, LIVE_FRANZ_API } from '../../../config'; 7import { LOCAL_SERVER, LIVE_FERDI_API, LIVE_FRANZ_API } from '../../../config';
8import Link from '../../ui/Link'; 8import Link from '../../ui/Link';
9import { workspaceStore } from '../../../features/workspaces';
10import UIStore from '../../../stores/UIStore'; 9import UIStore from '../../../stores/UIStore';
11import SettingsStore from '../../../stores/SettingsStore'; 10import SettingsStore from '../../../stores/SettingsStore';
12import UserStore from '../../../stores/UserStore'; 11import UserStore from '../../../stores/UserStore';
@@ -117,17 +116,15 @@ class SettingsNavigation extends Component {
117 {intl.formatMessage(messages.yourServices)}{' '} 116 {intl.formatMessage(messages.yourServices)}{' '}
118 <span className="badge">{serviceCount}</span> 117 <span className="badge">{serviceCount}</span>
119 </Link> 118 </Link>
120 {workspaceStore.isFeatureEnabled ? ( 119 <Link
121 <Link 120 to="/settings/workspaces"
122 to="/settings/workspaces" 121 className="settings-navigation__link"
123 className="settings-navigation__link" 122 activeClassName="is-active"
124 activeClassName="is-active" 123 disabled={!isLoggedIn}
125 disabled={!isLoggedIn} 124 >
126 > 125 {intl.formatMessage(messages.yourWorkspaces)}{' '}
127 {intl.formatMessage(messages.yourWorkspaces)}{' '} 126 <span className="badge">{workspaceCount}</span>
128 <span className="badge">{workspaceCount}</span> 127 </Link>
129 </Link>
130 ) : null}
131 {!isUsingWithoutAccount && ( 128 {!isUsingWithoutAccount && (
132 <Link 129 <Link
133 to="/settings/user" 130 to="/settings/user"
diff --git a/src/components/settings/settings/EditSettingsForm.js b/src/components/settings/settings/EditSettingsForm.js
index 948e9ccd5..54f2025e5 100644
--- a/src/components/settings/settings/EditSettingsForm.js
+++ b/src/components/settings/settings/EditSettingsForm.js
@@ -194,9 +194,7 @@ class EditSettingsForm extends Component {
194 isClearingAllCache: PropTypes.bool.isRequired, 194 isClearingAllCache: PropTypes.bool.isRequired,
195 onClearAllCache: PropTypes.func.isRequired, 195 onClearAllCache: PropTypes.func.isRequired,
196 getCacheSize: PropTypes.func.isRequired, 196 getCacheSize: PropTypes.func.isRequired,
197 isTodosEnabled: PropTypes.bool.isRequired,
198 isTodosActivated: PropTypes.bool.isRequired, 197 isTodosActivated: PropTypes.bool.isRequired,
199 isWorkspaceEnabled: PropTypes.bool.isRequired,
200 automaticUpdates: PropTypes.bool.isRequired, 198 automaticUpdates: PropTypes.bool.isRequired,
201 isDarkmodeEnabled: PropTypes.bool.isRequired, 199 isDarkmodeEnabled: PropTypes.bool.isRequired,
202 isAdaptableDarkModeEnabled: PropTypes.bool.isRequired, 200 isAdaptableDarkModeEnabled: PropTypes.bool.isRequired,
@@ -244,8 +242,6 @@ class EditSettingsForm extends Component {
244 isClearingAllCache, 242 isClearingAllCache,
245 onClearAllCache, 243 onClearAllCache,
246 getCacheSize, 244 getCacheSize,
247 isTodosEnabled,
248 isWorkspaceEnabled,
249 automaticUpdates, 245 automaticUpdates,
250 isDarkmodeEnabled, 246 isDarkmodeEnabled,
251 isTodosActivated, 247 isTodosActivated,
@@ -265,7 +261,7 @@ class EditSettingsForm extends Component {
265 } 261 }
266 262
267 const { lockingFeatureEnabled, scheduledDNDEnabled } = 263 const { lockingFeatureEnabled, scheduledDNDEnabled } =
268 window.ferdi.stores.settings.all.app; 264 window['ferdi'].stores.settings.all.app;
269 265
270 let cacheSize; 266 let cacheSize;
271 let notCleared; 267 let notCleared;
@@ -414,14 +410,12 @@ class EditSettingsForm extends Component {
414 410
415 <Hr /> 411 <Hr />
416 412
417 {isWorkspaceEnabled && ( 413 <>
418 <> 414 <Toggle field={form.$('keepAllWorkspacesLoaded')} />
419 <Toggle field={form.$('keepAllWorkspacesLoaded')} /> 415 <Hr />
420 <Hr /> 416 </>
421 </>
422 )}
423 417
424 {isTodosEnabled && !hasAddedTodosAsService && ( 418 {!hasAddedTodosAsService && (
425 <> 419 <>
426 <Toggle field={form.$('enableTodos')} /> 420 <Toggle field={form.$('enableTodos')} />
427 {isTodosActivated && ( 421 {isTodosActivated && (
@@ -511,6 +505,7 @@ class EditSettingsForm extends Component {
511 {this.state.activeSetttingsTab === 'appearance' && ( 505 {this.state.activeSetttingsTab === 'appearance' && (
512 <div> 506 <div>
513 <Toggle field={form.$('showDisabledServices')} /> 507 <Toggle field={form.$('showDisabledServices')} />
508 <Toggle field={form.$('showServiceName')} />
514 <Toggle field={form.$('showMessageBadgeWhenMuted')} /> 509 <Toggle field={form.$('showMessageBadgeWhenMuted')} />
515 510
516 {isMac && <Toggle field={form.$('showDragArea')} />} 511 {isMac && <Toggle field={form.$('showDragArea')} />}
@@ -768,7 +763,7 @@ class EditSettingsForm extends Component {
768 name: 'Nightly builds', 763 name: 'Nightly builds',
769 }} 764 }}
770 onChange={ 765 onChange={
771 window.ferdi.features.nightlyBuilds.toggleFeature 766 window['ferdi'].features.nightlyBuilds.toggleFeature
772 } 767 }
773 /> 768 />
774 {updateIsReadyToInstall ? ( 769 {updateIsReadyToInstall ? (
diff --git a/src/components/ui/Button.js b/src/components/ui/Button.js
new file mode 100644
index 000000000..67c801d98
--- /dev/null
+++ b/src/components/ui/Button.js
@@ -0,0 +1,95 @@
1import { Component } from 'react';
2import PropTypes from 'prop-types';
3import { observer, inject } from 'mobx-react';
4import Loader from 'react-loader';
5import classnames from 'classnames';
6
7@inject('stores')
8@observer
9class Button extends Component {
10 static propTypes = {
11 className: PropTypes.string,
12 label: PropTypes.string.isRequired,
13 disabled: PropTypes.bool,
14 onClick: PropTypes.func,
15 type: PropTypes.string,
16 buttonType: PropTypes.string,
17 loaded: PropTypes.bool,
18 htmlForm: PropTypes.string,
19 stores: PropTypes.shape({
20 settings: PropTypes.shape({
21 app: PropTypes.shape({
22 accentColor: PropTypes.string.isRequired,
23 }).isRequired,
24 }).isRequired,
25 }).isRequired,
26 };
27
28 static defaultProps = {
29 className: null,
30 disabled: false,
31 onClick: () => {},
32 type: 'button',
33 buttonType: '',
34 loaded: true,
35 htmlForm: '',
36 };
37
38 element = null;
39
40 render() {
41 const {
42 label,
43 className,
44 disabled,
45 onClick,
46 type,
47 buttonType,
48 loaded,
49 htmlForm,
50 } = this.props;
51
52 const buttonProps = {
53 className: classnames({
54 'franz-form__button': true,
55 [`franz-form__button--${buttonType}`]: buttonType,
56 [`${className}`]: className,
57 }),
58 type,
59 };
60
61 if (disabled) {
62 buttonProps.disabled = true;
63 }
64
65 if (onClick) {
66 buttonProps.onClick = onClick;
67 }
68
69 if (htmlForm) {
70 buttonProps.form = htmlForm;
71 }
72
73 return (
74 // disabling rule as button has type defined in `buttonProps`
75 /* eslint-disable react/button-has-type */
76 <button {...buttonProps}>
77 <Loader
78 loaded={loaded}
79 lines={10}
80 scale={0.4}
81 color={
82 buttonType !== 'secondary'
83 ? '#FFF'
84 : this.props.stores.settings.app.accentColor
85 }
86 component="span"
87 />
88 {label}
89 </button>
90 /* eslint-enable react/button-has-type */
91 );
92 }
93}
94
95export default Button;
diff --git a/src/components/ui/Button.tsx b/src/components/ui/Button.tsx
deleted file mode 100644
index aac080fda..000000000
--- a/src/components/ui/Button.tsx
+++ /dev/null
@@ -1,73 +0,0 @@
1import { Component } from 'react';
2import { observer, inject } from 'mobx-react';
3import Loader from 'react-loader';
4import classnames from 'classnames';
5import { FerdiStores } from '../../stores.types';
6
7type Props = {
8 className: string;
9 label: string;
10 disabled: boolean;
11 onClick: () => void;
12 type: 'button' | 'submit' | 'reset';
13 buttonType: string;
14 loaded: boolean;
15 htmlForm: string;
16 stores: FerdiStores;
17};
18
19@inject('stores')
20@observer
21class Button extends Component<Props> {
22 static defaultProps = {
23 className: null,
24 disabled: false,
25 onClick: () => {},
26 type: 'button',
27 buttonType: '',
28 loaded: true,
29 htmlForm: '',
30 };
31
32 render() {
33 const {
34 label,
35 className,
36 disabled,
37 onClick,
38 type,
39 buttonType,
40 loaded,
41 htmlForm,
42 } = this.props;
43
44 return (
45 <button
46 className={classnames({
47 'franz-form__button': true,
48 [`franz-form__button--${buttonType}`]: buttonType,
49 [`${className}`]: className,
50 })}
51 disabled={disabled}
52 type={type}
53 onClick={onClick}
54 form={htmlForm}
55 >
56 <Loader
57 loaded={loaded}
58 lines={10}
59 scale={0.4}
60 color={
61 buttonType !== 'secondary'
62 ? '#FFF'
63 : this.props.stores.settings.app.accentColor
64 }
65 component="span"
66 />
67 {label}
68 </button>
69 );
70 }
71}
72
73export default Button;
diff --git a/src/config.ts b/src/config.ts
index dfedbe6f5..fb073c062 100644
--- a/src/config.ts
+++ b/src/config.ts
@@ -140,13 +140,6 @@ export const ICON_SIZES = {
140// The bias should always be the "Normal icons" value 140// The bias should always be the "Normal icons" value
141export const iconSizeBias = 20; 141export const iconSizeBias = 20;
142 142
143export const DEFAULT_FEATURES_CONFIG = {
144 isServiceProxyEnabled: true,
145 isWorkspaceEnabled: true,
146 isTodosEnabled: true,
147 isSettingsWSEnabled: false,
148};
149
150export const DEFAULT_WINDOW_OPTIONS = { 143export const DEFAULT_WINDOW_OPTIONS = {
151 width: 800, 144 width: 800,
152 height: 600, 145 height: 600,
@@ -193,6 +186,7 @@ export const DEFAULT_APP_SETTINGS = {
193 clipboardNotifications: true, 186 clipboardNotifications: true,
194 notifyTaskBarOnMessage: false, 187 notifyTaskBarOnMessage: false,
195 showDisabledServices: true, 188 showDisabledServices: true,
189 showServiceName: false,
196 showMessageBadgeWhenMuted: true, 190 showMessageBadgeWhenMuted: true,
197 showDragArea: false, 191 showDragArea: false,
198 enableSpellchecking: true, 192 enableSpellchecking: true,
@@ -236,7 +230,7 @@ export const DEFAULT_APP_SETTINGS = {
236 liftSingleInstanceLock: false, 230 liftSingleInstanceLock: false,
237 enableLongPressServiceHint: false, 231 enableLongPressServiceHint: false,
238 proxyFeatureEnabled: false, 232 proxyFeatureEnabled: false,
239 onlyShowFavoritesInUnreadCount: false 233 onlyShowFavoritesInUnreadCount: false,
240}; 234};
241 235
242export const DEFAULT_SERVICE_SETTINGS = { 236export const DEFAULT_SERVICE_SETTINGS = {
diff --git a/src/containers/layout/AppLayoutContainer.js b/src/containers/layout/AppLayoutContainer.js
index 0d566525d..6b6f97e46 100644
--- a/src/containers/layout/AppLayoutContainer.js
+++ b/src/containers/layout/AppLayoutContainer.js
@@ -122,6 +122,9 @@ class AppLayoutContainer extends Component {
122 showMessageBadgeWhenMutedSetting={ 122 showMessageBadgeWhenMutedSetting={
123 settings.all.app.showMessageBadgeWhenMuted 123 settings.all.app.showMessageBadgeWhenMuted
124 } 124 }
125 showServiceNameSetting={
126 settings.all.app.showServiceName
127 }
125 showMessageBadgesEvenWhenMuted={ui.showMessageBadgesEvenWhenMuted} 128 showMessageBadgesEvenWhenMuted={ui.showMessageBadgesEvenWhenMuted}
126 isTodosServiceActive={services.isTodosServiceActive || false} 129 isTodosServiceActive={services.isTodosServiceActive || false}
127 /> 130 />
diff --git a/src/containers/settings/EditServiceScreen.js b/src/containers/settings/EditServiceScreen.js
index b84c0d5bb..ddf7fab36 100644
--- a/src/containers/settings/EditServiceScreen.js
+++ b/src/containers/settings/EditServiceScreen.js
@@ -8,7 +8,6 @@ import UserStore from '../../stores/UserStore';
8import RecipesStore from '../../stores/RecipesStore'; 8import RecipesStore from '../../stores/RecipesStore';
9import ServicesStore from '../../stores/ServicesStore'; 9import ServicesStore from '../../stores/ServicesStore';
10import SettingsStore from '../../stores/SettingsStore'; 10import SettingsStore from '../../stores/SettingsStore';
11import FeaturesStore from '../../stores/FeaturesStore';
12import Form from '../../lib/Form'; 11import Form from '../../lib/Form';
13 12
14import ServiceError from '../../components/settings/services/ServiceError'; 13import ServiceError from '../../components/settings/services/ServiceError';
@@ -267,7 +266,7 @@ class EditServiceScreen extends Component {
267 Object.assign(config.fields, { 266 Object.assign(config.fields, {
268 customUrl: { 267 customUrl: {
269 label: intl.formatMessage(messages.customUrl), 268 label: intl.formatMessage(messages.customUrl),
270 placeholder: 'https://', 269 placeholder: "'http://' or 'https://' or 'file:///'",
271 value: service.customUrl || recipe.serviceURL, 270 value: service.customUrl || recipe.serviceURL,
272 validators: [required, url], 271 validators: [required, url],
273 }, 272 },
@@ -445,7 +444,6 @@ EditServiceScreen.wrappedComponent.propTypes = {
445 recipes: PropTypes.instanceOf(RecipesStore).isRequired, 444 recipes: PropTypes.instanceOf(RecipesStore).isRequired,
446 services: PropTypes.instanceOf(ServicesStore).isRequired, 445 services: PropTypes.instanceOf(ServicesStore).isRequired,
447 settings: PropTypes.instanceOf(SettingsStore).isRequired, 446 settings: PropTypes.instanceOf(SettingsStore).isRequired,
448 features: PropTypes.instanceOf(FeaturesStore).isRequired,
449 }).isRequired, 447 }).isRequired,
450 router: PropTypes.instanceOf(RouterStore).isRequired, 448 router: PropTypes.instanceOf(RouterStore).isRequired,
451 actions: PropTypes.shape({ 449 actions: PropTypes.shape({
diff --git a/src/containers/settings/EditSettingsScreen.js b/src/containers/settings/EditSettingsScreen.js
index de0714870..64f5b2e01 100644
--- a/src/containers/settings/EditSettingsScreen.js
+++ b/src/containers/settings/EditSettingsScreen.js
@@ -197,6 +197,10 @@ const messages = defineMessages({
197 id: 'settings.app.form.showDisabledServices', 197 id: 'settings.app.form.showDisabledServices',
198 defaultMessage: 'Display disabled services tabs', 198 defaultMessage: 'Display disabled services tabs',
199 }, 199 },
200 showServiceName: {
201 id: 'settings.app.form.showServiceName',
202 defaultMessage: 'Display service name under the icon',
203 },
200 showMessageBadgeWhenMuted: { 204 showMessageBadgeWhenMuted: {
201 id: 'settings.app.form.showMessagesBadgesWhenMuted', 205 id: 'settings.app.form.showMessagesBadgesWhenMuted',
202 defaultMessage: 'Show unread message badge when notifications are disabled', 206 defaultMessage: 'Show unread message badge when notifications are disabled',
@@ -301,6 +305,7 @@ class EditSettingsScreen extends Component {
301 settingsData.enableGlobalHideShortcut, 305 settingsData.enableGlobalHideShortcut,
302 ), 306 ),
303 showDisabledServices: Boolean(settingsData.showDisabledServices), 307 showDisabledServices: Boolean(settingsData.showDisabledServices),
308 showServiceName: Boolean(settingsData.showServiceName),
304 darkMode: Boolean(settingsData.darkMode), 309 darkMode: Boolean(settingsData.darkMode),
305 adaptableDarkMode: Boolean(settingsData.adaptableDarkMode), 310 adaptableDarkMode: Boolean(settingsData.adaptableDarkMode),
306 universalDarkMode: Boolean(settingsData.universalDarkMode), 311 universalDarkMode: Boolean(settingsData.universalDarkMode),
@@ -334,14 +339,12 @@ class EditSettingsScreen extends Component {
334 }, 339 },
335 }); 340 });
336 341
337 if (workspaces.isFeatureActive) { 342 const { keepAllWorkspacesLoaded } = workspaces.settings;
338 const { keepAllWorkspacesLoaded } = workspaces.settings; 343 if (
339 if ( 344 Boolean(keepAllWorkspacesLoaded) !==
340 Boolean(keepAllWorkspacesLoaded) !== 345 Boolean(settingsData.keepAllWorkspacesLoaded)
341 Boolean(settingsData.keepAllWorkspacesLoaded) 346 ) {
342 ) { 347 workspaceActions.toggleKeepAllWorkspacesLoadedSetting();
343 workspaceActions.toggleKeepAllWorkspacesLoadedSetting();
344 }
345 } 348 }
346 349
347 if (todos.isFeatureActive) { 350 if (todos.isFeatureActive) {
@@ -558,6 +561,11 @@ class EditSettingsScreen extends Component {
558 value: settings.all.app.showDisabledServices, 561 value: settings.all.app.showDisabledServices,
559 default: DEFAULT_APP_SETTINGS.showDisabledServices, 562 default: DEFAULT_APP_SETTINGS.showDisabledServices,
560 }, 563 },
564 showServiceName: {
565 label: intl.formatMessage(messages.showServiceName),
566 value: settings.all.app.showServiceName,
567 default: DEFAULT_APP_SETTINGS.showServiceName,
568 },
561 showMessageBadgeWhenMuted: { 569 showMessageBadgeWhenMuted: {
562 label: intl.formatMessage(messages.showMessageBadgeWhenMuted), 570 label: intl.formatMessage(messages.showMessageBadgeWhenMuted),
563 value: settings.all.app.showMessageBadgeWhenMuted, 571 value: settings.all.app.showMessageBadgeWhenMuted,
@@ -686,7 +694,7 @@ class EditSettingsScreen extends Component {
686 } 694 }
687 695
688 render() { 696 render() {
689 const { app, todos, workspaces, services } = this.props.stores; 697 const { app, services } = this.props.stores;
690 const { 698 const {
691 updateStatus, 699 updateStatus,
692 updateStatusTypes, 700 updateStatusTypes,
@@ -711,8 +719,6 @@ class EditSettingsScreen extends Component {
711 getCacheSize={() => app.cacheSize} 719 getCacheSize={() => app.cacheSize}
712 isClearingAllCache={isClearingAllCache} 720 isClearingAllCache={isClearingAllCache}
713 onClearAllCache={clearAllCache} 721 onClearAllCache={clearAllCache}
714 isTodosEnabled={todos.isFeatureActive}
715 isWorkspaceEnabled={workspaces.isFeatureActive}
716 lockingFeatureEnabled={lockingFeatureEnabled} 722 lockingFeatureEnabled={lockingFeatureEnabled}
717 automaticUpdates={this.props.stores.settings.app.automaticUpdates} 723 automaticUpdates={this.props.stores.settings.app.automaticUpdates}
718 isDarkmodeEnabled={this.props.stores.settings.app.darkMode} 724 isDarkmodeEnabled={this.props.stores.settings.app.darkMode}
diff --git a/src/features/publishDebugInfo/index.js b/src/features/publishDebugInfo/index.js
index 51780a34e..43841b530 100644
--- a/src/features/publishDebugInfo/index.js
+++ b/src/features/publishDebugInfo/index.js
@@ -12,7 +12,7 @@ export default function initialize() {
12 state.isModalVisible = true; 12 state.isModalVisible = true;
13 } 13 }
14 14
15 window.ferdi.features.publishDebugInfo = { 15 window['ferdi'].features.publishDebugInfo = {
16 state, 16 state,
17 showModal, 17 showModal,
18 }; 18 };
diff --git a/src/features/settingsWS/actions.ts b/src/features/settingsWS/actions.ts
deleted file mode 100755
index 03a398eb5..000000000
--- a/src/features/settingsWS/actions.ts
+++ /dev/null
@@ -1,13 +0,0 @@
1import PropTypes from 'prop-types';
2import { createActionsFromDefinitions } from '../../actions/lib/actions';
3
4export const settingsWSActions = createActionsFromDefinitions(
5 {
6 greet: {
7 name: PropTypes.string.isRequired,
8 },
9 },
10 PropTypes.checkPropTypes,
11);
12
13export default settingsWSActions;
diff --git a/src/features/settingsWS/index.ts b/src/features/settingsWS/index.ts
deleted file mode 100755
index 9bb206d82..000000000
--- a/src/features/settingsWS/index.ts
+++ /dev/null
@@ -1,28 +0,0 @@
1import { reaction } from 'mobx';
2import { SettingsWSStore } from './store';
3
4const debug = require('debug')('Ferdi:feature:settingsWS');
5
6export const settingsStore = new SettingsWSStore();
7
8export default function initSettingsWebSocket(
9 stores: { features: any },
10 actions: any,
11) {
12 const { features } = stores;
13
14 // Toggle SettingsWebSocket feature
15 reaction(
16 () => features.features.isSettingsWSEnabled,
17 isEnabled => {
18 if (isEnabled) {
19 debug('Initializing `settingsWS` feature');
20 settingsStore.start(stores, actions);
21 } else if (settingsStore) {
22 debug('Disabling `settingsWS` feature');
23 settingsStore.stop();
24 }
25 },
26 { fireImmediately: true },
27 );
28}
diff --git a/src/features/settingsWS/state.ts b/src/features/settingsWS/state.ts
deleted file mode 100755
index 7b16b2b6e..000000000
--- a/src/features/settingsWS/state.ts
+++ /dev/null
@@ -1,13 +0,0 @@
1import { observable } from 'mobx';
2
3const defaultState = {
4 isFeatureActive: false,
5};
6
7export const settingsWSState = observable(defaultState);
8
9export function resetState() {
10 Object.assign(settingsWSState, defaultState);
11}
12
13export default settingsWSState;
diff --git a/src/features/settingsWS/store.js b/src/features/settingsWS/store.js
deleted file mode 100755
index 3b9e10825..000000000
--- a/src/features/settingsWS/store.js
+++ /dev/null
@@ -1,132 +0,0 @@
1import { observable } from 'mobx';
2import WebSocket from 'ws';
3import ms from 'ms';
4
5import { FeatureStore } from '../utils/FeatureStore';
6import { createReactions } from '../../stores/lib/Reaction';
7import { WS_API } from '../../environment-remote';
8
9const debug = require('debug')('Ferdi:feature:settingsWS:store');
10
11export class SettingsWSStore extends FeatureStore {
12 stores = null;
13
14 actions = null;
15
16 ws = null;
17
18 pingTimeout = null;
19
20 reconnectTimeout = null;
21
22 @observable connected = false;
23
24 start(stores, actions) {
25 this.stores = stores;
26 this.actions = actions;
27
28 this._registerReactions(
29 createReactions([
30 this._initialize.bind(this),
31 this._reconnect.bind(this),
32 this._close.bind(this),
33 ]),
34 );
35 }
36
37 connect() {
38 try {
39 const wsURL = `${WS_API}/ws/${this.stores.user.data.id}`;
40 debug('Setting up WebSocket to', wsURL);
41
42 this.ws = new WebSocket(wsURL);
43
44 this.ws.on('open', () => {
45 debug('Opened WebSocket');
46 this.send({
47 action: 'authorize',
48 token: this.stores.user.authToken,
49 });
50
51 this.connected = true;
52
53 this.heartbeat();
54 });
55
56 this.ws.on('message', data => {
57 const resp = JSON.parse(data);
58 debug('Received message', resp);
59
60 if (resp.id) {
61 this.stores.user.getUserInfoRequest.patch(result => {
62 if (!result) return;
63
64 debug('Patching user object with new values');
65 Object.assign(result, resp);
66 });
67 }
68 });
69
70 this.ws.on('ping', this.heartbeat.bind(this));
71 } catch (error) {
72 console.error(error);
73 }
74 }
75
76 heartbeat() {
77 debug('Heartbeat');
78 clearTimeout(this.pingTimeout);
79
80 this.pingTimeout = setTimeout(() => {
81 debug('Terminating connection, reconnecting in 35');
82 this.ws.terminate();
83
84 this.connected = false;
85 }, ms('35s'));
86 }
87
88 send(data) {
89 if (this.ws && this.ws.readyState === 1) {
90 this.ws.send(JSON.stringify(data));
91 debug('Sending data', data);
92 } else {
93 debug('WebSocket is not initialized');
94 }
95 }
96
97 // Reactions
98
99 _initialize() {
100 if (this.stores.user.data.id && !this.ws) {
101 this.connect();
102 }
103 }
104
105 _reconnect() {
106 if (!this.connected) {
107 debug('Trying to reconnect in 30s');
108 this.reconnectTimeout = setInterval(() => {
109 debug('Trying to reconnect');
110 this.connect();
111 }, ms('30s'));
112 } else {
113 debug('Clearing reconnect interval');
114 clearInterval(this.reconnectTimeout);
115 }
116 }
117
118 _close() {
119 if (!this.stores.user.isLoggedIn) {
120 debug('Stopping reactions');
121 this._stopReactions();
122
123 if (this.ws) {
124 debug('Terminating connection');
125 this.ws.terminate();
126 this.ws = null;
127 }
128 }
129 }
130}
131
132export default SettingsWSStore;
diff --git a/src/features/todos/index.ts b/src/features/todos/index.ts
index 3665812e6..2fa8c3130 100644
--- a/src/features/todos/index.ts
+++ b/src/features/todos/index.ts
@@ -1,29 +1,8 @@
1import { reaction } from 'mobx';
2import TodoStore from './store'; 1import TodoStore from './store';
3 2
4const debug = require('debug')('Ferdi:feature:todos');
5
6export const todosStore = new TodoStore(); 3export const todosStore = new TodoStore();
7 4
8export default function initTodos( 5export default function initTodos(stores: { todos?: any }, actions: any) {
9 stores: { todos?: any; features?: any },
10 actions: any,
11) {
12 stores.todos = todosStore; 6 stores.todos = todosStore;
13 const { features } = stores; 7 todosStore.start(stores, actions);
14
15 // Toggle todos feature
16 reaction(
17 () => features.features.isTodosEnabled,
18 isEnabled => {
19 if (isEnabled) {
20 debug('Initializing `todos` feature');
21 todosStore.start(stores, actions);
22 } else if (todosStore.isFeatureActive) {
23 debug('Disabling `todos` feature');
24 todosStore.stop();
25 }
26 },
27 { fireImmediately: true },
28 );
29} 8}
diff --git a/src/features/todos/store.js b/src/features/todos/store.js
index 010a029ff..d158ed480 100644
--- a/src/features/todos/store.js
+++ b/src/features/todos/store.js
@@ -23,8 +23,6 @@ const debug = require('debug')('Ferdi:feature:todos:store');
23export default class TodoStore extends FeatureStore { 23export default class TodoStore extends FeatureStore {
24 @observable stores = null; 24 @observable stores = null;
25 25
26 @observable isFeatureEnabled = false;
27
28 @observable isFeatureActive = false; 26 @observable isFeatureActive = false;
29 27
30 @observable webview = null; 28 @observable webview = null;
@@ -123,7 +121,6 @@ export default class TodoStore extends FeatureStore {
123 // REACTIONS 121 // REACTIONS
124 122
125 this._allReactions = createReactions([ 123 this._allReactions = createReactions([
126 this._setFeatureEnabledReaction,
127 this._updateTodosConfig, 124 this._updateTodosConfig,
128 this._firstLaunchReaction, 125 this._firstLaunchReaction,
129 this._routeCheckReaction, 126 this._routeCheckReaction,
@@ -262,12 +259,6 @@ export default class TodoStore extends FeatureStore {
262 259
263 // Reactions 260 // Reactions
264 261
265 _setFeatureEnabledReaction = () => {
266 const { isTodosEnabled } = this.stores.features.features;
267
268 this.isFeatureEnabled = isTodosEnabled;
269 };
270
271 _updateTodosConfig = () => { 262 _updateTodosConfig = () => {
272 // Resend the config if any part changes in Franz: 263 // Resend the config if any part changes in Franz:
273 this._onTodosClientInitialized(); 264 this._onTodosClientInitialized();
diff --git a/src/features/workspaces/index.ts b/src/features/workspaces/index.ts
index ecca64b41..25975936a 100644
--- a/src/features/workspaces/index.ts
+++ b/src/features/workspaces/index.ts
@@ -1,28 +1,8 @@
1import { reaction } from 'mobx';
2import WorkspacesStore from './store'; 1import WorkspacesStore from './store';
3import { resetApiRequests } from './api';
4
5const debug = require('debug')('Ferdi:feature:workspaces');
6 2
7export const workspaceStore = new WorkspacesStore(); 3export const workspaceStore = new WorkspacesStore();
8 4
9export default function initWorkspaces(stores, actions) { 5export default function initWorkspaces(stores, actions) {
10 stores.workspaces = workspaceStore; 6 stores.workspaces = workspaceStore;
11 const { features } = stores; 7 workspaceStore.start(stores, actions);
12
13 // Toggle workspace feature
14 reaction(
15 () => features.features.isWorkspaceEnabled,
16 isEnabled => {
17 if (isEnabled && !workspaceStore.isFeatureActive) {
18 debug('Initializing `workspaces` feature');
19 workspaceStore.start(stores, actions);
20 } else if (workspaceStore.isFeatureActive) {
21 debug('Disabling `workspaces` feature');
22 workspaceStore.stop();
23 resetApiRequests();
24 }
25 },
26 { fireImmediately: true },
27 );
28} 8}
diff --git a/src/features/workspaces/store.js b/src/features/workspaces/store.js
index 0fa43b723..17ec17b3a 100644
--- a/src/features/workspaces/store.js
+++ b/src/features/workspaces/store.js
@@ -18,8 +18,6 @@ import { KEEP_WS_LOADED_USID } from '../../config';
18const debug = require('debug')('Ferdi:feature:workspaces:store'); 18const debug = require('debug')('Ferdi:feature:workspaces:store');
19 19
20export default class WorkspacesStore extends FeatureStore { 20export default class WorkspacesStore extends FeatureStore {
21 @observable isFeatureEnabled = true;
22
23 @observable isFeatureActive = false; 21 @observable isFeatureActive = false;
24 22
25 @observable activeWorkspace = null; 23 @observable activeWorkspace = null;
@@ -97,7 +95,6 @@ export default class WorkspacesStore extends FeatureStore {
97 95
98 this._allReactions = createReactions([ 96 this._allReactions = createReactions([
99 this._openDrawerWithSettingsReaction, 97 this._openDrawerWithSettingsReaction,
100 this._setFeatureEnabledReaction,
101 this._cleanupInvalidServiceReferences, 98 this._cleanupInvalidServiceReferences,
102 this._setActiveServiceOnWorkspaceSwitchReaction, 99 this._setActiveServiceOnWorkspaceSwitchReaction,
103 this._activateLastUsedWorkspaceReaction, 100 this._activateLastUsedWorkspaceReaction,
@@ -251,11 +248,6 @@ export default class WorkspacesStore extends FeatureStore {
251 248
252 // Reactions 249 // Reactions
253 250
254 _setFeatureEnabledReaction = () => {
255 const { isWorkspaceEnabled } = this.stores.features.features;
256 this.isFeatureEnabled = isWorkspaceEnabled;
257 };
258
259 _setWorkspaceBeingEditedReaction = () => { 251 _setWorkspaceBeingEditedReaction = () => {
260 const { pathname } = this.stores.router.location; 252 const { pathname } = this.stores.router.location;
261 const match = matchRoute('/settings/workspaces/edit/:id', pathname); 253 const match = matchRoute('/settings/workspaces/edit/:id', pathname);
diff --git a/src/helpers/url-helpers.ts b/src/helpers/url-helpers.ts
index 135f06cbf..c1ca3ab25 100644
--- a/src/helpers/url-helpers.ts
+++ b/src/helpers/url-helpers.ts
@@ -1,7 +1,7 @@
1// This is taken from: https://benjamin-altpeter.de/shell-openexternal-dangers/ 1// This is taken from: https://benjamin-altpeter.de/shell-openexternal-dangers/
2 2
3import { URL } from 'url'; 3import { URL } from 'url';
4import { ensureDirSync } from 'fs-extra'; 4import { ensureDirSync, existsSync } from 'fs-extra';
5import { shell } from 'electron'; 5import { shell } from 'electron';
6 6
7import { ALLOWED_PROTOCOLS } from '../config'; 7import { ALLOWED_PROTOCOLS } from '../config';
@@ -23,6 +23,10 @@ export function isValidExternalURL(url: string | URL) {
23 return isAllowed; 23 return isAllowed;
24} 24}
25 25
26export function isValidFileUrl(path: string) {
27 return path.startsWith('file') && existsSync(new URL(path));
28}
29
26export async function openPath(folderName: string) { 30export async function openPath(folderName: string) {
27 ensureDirSync(folderName); 31 ensureDirSync(folderName);
28 shell.openPath(folderName); 32 shell.openPath(folderName);
diff --git a/src/helpers/validation-helpers.ts b/src/helpers/validation-helpers.ts
index 23c297443..dfaf199ee 100644
--- a/src/helpers/validation-helpers.ts
+++ b/src/helpers/validation-helpers.ts
@@ -1,5 +1,6 @@
1import { defineMessages } from 'react-intl'; 1import { defineMessages } from 'react-intl';
2import isEmail from 'validator/lib/isEmail'; 2import isEmail from 'validator/lib/isEmail';
3import { isValidExternalURL, isValidFileUrl } from './url-helpers';
3 4
4const messages = defineMessages({ 5const messages = defineMessages({
5 required: { 6 required: {
@@ -47,17 +48,17 @@ export function email({ field }) {
47 48
48export function url({ field }) { 49export function url({ field }) {
49 const value = field.value.trim(); 50 const value = field.value.trim();
50 let isValid = false; 51 let isValid = true;
51 52
52 isValid = 53 if (value !== '') {
53 value !== '' 54 if (value.startsWith('http')) {
54 ? Boolean( 55 isValid = isValidExternalURL(value);
55 // eslint-disable-next-line unicorn/better-regex 56 } else if (value.startsWith('file')) {
56 /(^|[\s.:;?\-\]<(])(https?:\/\/[-\w;/?:@&=+$|_.!~*|'()[\]%#,☺]+[\w/#](\(\))?)(?=$|[\s',|().:;?\-[\]>)])/i.test( 57 isValid = isValidFileUrl(value);
57 value, 58 } else {
58 ), 59 isValid = false;
59 ) 60 }
60 : true; 61 }
61 62
62 return [ 63 return [
63 isValid, 64 isValid,
diff --git a/src/i18n/locales/af.json b/src/i18n/locales/af.json
index ff10978c4..4ec106205 100644
--- a/src/i18n/locales/af.json
+++ b/src/i18n/locales/af.json
@@ -241,6 +241,7 @@
241 "settings.app.form.showDisabledServices": "Display disabled services tabs", 241 "settings.app.form.showDisabledServices": "Display disabled services tabs",
242 "settings.app.form.showDragArea": "Show draggable area on window", 242 "settings.app.form.showDragArea": "Show draggable area on window",
243 "settings.app.form.showMessagesBadgesWhenMuted": "Show unread message badge when notifications are disabled", 243 "settings.app.form.showMessagesBadgesWhenMuted": "Show unread message badge when notifications are disabled",
244 "settings.app.form.showServiceName": "Display service name under the icon",
244 "settings.app.form.splitMode": "Enable Split View Mode", 245 "settings.app.form.splitMode": "Enable Split View Mode",
245 "settings.app.form.startMinimized": "Start minimized", 246 "settings.app.form.startMinimized": "Start minimized",
246 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 247 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
diff --git a/src/i18n/locales/ar.json b/src/i18n/locales/ar.json
index 8183d193f..7cbb47907 100644
--- a/src/i18n/locales/ar.json
+++ b/src/i18n/locales/ar.json
@@ -241,6 +241,7 @@
241 "settings.app.form.showDisabledServices": "عرض تبويبات الخدمات المعطلة", 241 "settings.app.form.showDisabledServices": "عرض تبويبات الخدمات المعطلة",
242 "settings.app.form.showDragArea": "إظهار المنطقة القابلة للسحب على النافذة", 242 "settings.app.form.showDragArea": "إظهار المنطقة القابلة للسحب على النافذة",
243 "settings.app.form.showMessagesBadgesWhenMuted": "إظهار شارة رسالة غير مقروءة عند تعطيل الإشعارات", 243 "settings.app.form.showMessagesBadgesWhenMuted": "إظهار شارة رسالة غير مقروءة عند تعطيل الإشعارات",
244 "settings.app.form.showServiceName": "Display service name under the icon",
244 "settings.app.form.splitMode": "Enable Split View Mode", 245 "settings.app.form.splitMode": "Enable Split View Mode",
245 "settings.app.form.startMinimized": "البدء بنافذة مصغرة", 246 "settings.app.form.startMinimized": "البدء بنافذة مصغرة",
246 "settings.app.form.universalDarkMode": "تمكين الوضع المظلم الكامل", 247 "settings.app.form.universalDarkMode": "تمكين الوضع المظلم الكامل",
diff --git a/src/i18n/locales/be.json b/src/i18n/locales/be.json
index 5e5b594fe..a3e1e83a7 100644
--- a/src/i18n/locales/be.json
+++ b/src/i18n/locales/be.json
@@ -241,6 +241,7 @@
241 "settings.app.form.showDisabledServices": "Display disabled services tabs", 241 "settings.app.form.showDisabledServices": "Display disabled services tabs",
242 "settings.app.form.showDragArea": "Show draggable area on window", 242 "settings.app.form.showDragArea": "Show draggable area on window",
243 "settings.app.form.showMessagesBadgesWhenMuted": "Show unread message badge when notifications are disabled", 243 "settings.app.form.showMessagesBadgesWhenMuted": "Show unread message badge when notifications are disabled",
244 "settings.app.form.showServiceName": "Display service name under the icon",
244 "settings.app.form.splitMode": "Enable Split View Mode", 245 "settings.app.form.splitMode": "Enable Split View Mode",
245 "settings.app.form.startMinimized": "Start minimized", 246 "settings.app.form.startMinimized": "Start minimized",
246 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 247 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
diff --git a/src/i18n/locales/bs.json b/src/i18n/locales/bs.json
index ff10978c4..4ec106205 100644
--- a/src/i18n/locales/bs.json
+++ b/src/i18n/locales/bs.json
@@ -241,6 +241,7 @@
241 "settings.app.form.showDisabledServices": "Display disabled services tabs", 241 "settings.app.form.showDisabledServices": "Display disabled services tabs",
242 "settings.app.form.showDragArea": "Show draggable area on window", 242 "settings.app.form.showDragArea": "Show draggable area on window",
243 "settings.app.form.showMessagesBadgesWhenMuted": "Show unread message badge when notifications are disabled", 243 "settings.app.form.showMessagesBadgesWhenMuted": "Show unread message badge when notifications are disabled",
244 "settings.app.form.showServiceName": "Display service name under the icon",
244 "settings.app.form.splitMode": "Enable Split View Mode", 245 "settings.app.form.splitMode": "Enable Split View Mode",
245 "settings.app.form.startMinimized": "Start minimized", 246 "settings.app.form.startMinimized": "Start minimized",
246 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 247 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
diff --git a/src/i18n/locales/ca.json b/src/i18n/locales/ca.json
index b04591bee..734289614 100644
--- a/src/i18n/locales/ca.json
+++ b/src/i18n/locales/ca.json
@@ -241,6 +241,7 @@
241 "settings.app.form.showDisabledServices": "Mostra les pestanyes dels serveis desactivats", 241 "settings.app.form.showDisabledServices": "Mostra les pestanyes dels serveis desactivats",
242 "settings.app.form.showDragArea": "Show draggable area on window", 242 "settings.app.form.showDragArea": "Show draggable area on window",
243 "settings.app.form.showMessagesBadgesWhenMuted": "Mostra la insígnia de missatges no llegits quan les notificacions estiguin desactivades", 243 "settings.app.form.showMessagesBadgesWhenMuted": "Mostra la insígnia de missatges no llegits quan les notificacions estiguin desactivades",
244 "settings.app.form.showServiceName": "Display service name under the icon",
244 "settings.app.form.splitMode": "Enable Split View Mode", 245 "settings.app.form.splitMode": "Enable Split View Mode",
245 "settings.app.form.startMinimized": "Start minimized", 246 "settings.app.form.startMinimized": "Start minimized",
246 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 247 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
diff --git a/src/i18n/locales/cs.json b/src/i18n/locales/cs.json
index edb840722..8a5f7037e 100644
--- a/src/i18n/locales/cs.json
+++ b/src/i18n/locales/cs.json
@@ -241,6 +241,7 @@
241 "settings.app.form.showDisabledServices": "Zobrazit záložky vypnutých služeb", 241 "settings.app.form.showDisabledServices": "Zobrazit záložky vypnutých služeb",
242 "settings.app.form.showDragArea": "Show draggable area on window", 242 "settings.app.form.showDragArea": "Show draggable area on window",
243 "settings.app.form.showMessagesBadgesWhenMuted": "Zobrazit odznak pro nepřečtené zprávy když jsou upozornění vypnutá", 243 "settings.app.form.showMessagesBadgesWhenMuted": "Zobrazit odznak pro nepřečtené zprávy když jsou upozornění vypnutá",
244 "settings.app.form.showServiceName": "Display service name under the icon",
244 "settings.app.form.splitMode": "Enable Split View Mode", 245 "settings.app.form.splitMode": "Enable Split View Mode",
245 "settings.app.form.startMinimized": "Start minimized", 246 "settings.app.form.startMinimized": "Start minimized",
246 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 247 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
diff --git a/src/i18n/locales/da.json b/src/i18n/locales/da.json
index fbe907f10..ef78a2269 100644
--- a/src/i18n/locales/da.json
+++ b/src/i18n/locales/da.json
@@ -241,6 +241,7 @@
241 "settings.app.form.showDisabledServices": "Vis faneblade for deaktiverede tjenester", 241 "settings.app.form.showDisabledServices": "Vis faneblade for deaktiverede tjenester",
242 "settings.app.form.showDragArea": "Vis trækområde i vinduet", 242 "settings.app.form.showDragArea": "Vis trækområde i vinduet",
243 "settings.app.form.showMessagesBadgesWhenMuted": "Vis ulæst beskedikon når notifikationer er deaktiveret", 243 "settings.app.form.showMessagesBadgesWhenMuted": "Vis ulæst beskedikon når notifikationer er deaktiveret",
244 "settings.app.form.showServiceName": "Display service name under the icon",
244 "settings.app.form.splitMode": "Enable Split View Mode", 245 "settings.app.form.splitMode": "Enable Split View Mode",
245 "settings.app.form.startMinimized": "Start minimeret", 246 "settings.app.form.startMinimized": "Start minimeret",
246 "settings.app.form.universalDarkMode": "Aktiver universel mørk tilstand", 247 "settings.app.form.universalDarkMode": "Aktiver universel mørk tilstand",
diff --git a/src/i18n/locales/de.json b/src/i18n/locales/de.json
index a5498fcc9..91c7495a9 100644
--- a/src/i18n/locales/de.json
+++ b/src/i18n/locales/de.json
@@ -241,6 +241,7 @@
241 "settings.app.form.showDisabledServices": "Deaktivierte Services-Tabs anzeigen", 241 "settings.app.form.showDisabledServices": "Deaktivierte Services-Tabs anzeigen",
242 "settings.app.form.showDragArea": "Zeige ziehbare Fläche im Fenster", 242 "settings.app.form.showDragArea": "Zeige ziehbare Fläche im Fenster",
243 "settings.app.form.showMessagesBadgesWhenMuted": "Ungelesene Nachrichten zeigen, wenn die Benachrichtigungen deaktiviert sind", 243 "settings.app.form.showMessagesBadgesWhenMuted": "Ungelesene Nachrichten zeigen, wenn die Benachrichtigungen deaktiviert sind",
244 "settings.app.form.showServiceName": "Display service name under the icon",
244 "settings.app.form.splitMode": "Enable Split View Mode", 245 "settings.app.form.splitMode": "Enable Split View Mode",
245 "settings.app.form.startMinimized": "Minimiert starten", 246 "settings.app.form.startMinimized": "Minimiert starten",
246 "settings.app.form.universalDarkMode": "Universellen Dark Mode aktivieren", 247 "settings.app.form.universalDarkMode": "Universellen Dark Mode aktivieren",
diff --git a/src/i18n/locales/el.json b/src/i18n/locales/el.json
index 22a3a0bc5..b42188fbf 100644
--- a/src/i18n/locales/el.json
+++ b/src/i18n/locales/el.json
@@ -241,6 +241,7 @@
241 "settings.app.form.showDisabledServices": "Προβολή καρτελών των απενεργοποιημένων υπηρεσιών", 241 "settings.app.form.showDisabledServices": "Προβολή καρτελών των απενεργοποιημένων υπηρεσιών",
242 "settings.app.form.showDragArea": "Show draggable area on window", 242 "settings.app.form.showDragArea": "Show draggable area on window",
243 "settings.app.form.showMessagesBadgesWhenMuted": "Προβολή του εικονιδίου μη αναγνωσμένου μηνύματος όταν οι ειδοποιήσεις είναι απενεργοποιημένες", 243 "settings.app.form.showMessagesBadgesWhenMuted": "Προβολή του εικονιδίου μη αναγνωσμένου μηνύματος όταν οι ειδοποιήσεις είναι απενεργοποιημένες",
244 "settings.app.form.showServiceName": "Display service name under the icon",
244 "settings.app.form.splitMode": "Enable Split View Mode", 245 "settings.app.form.splitMode": "Enable Split View Mode",
245 "settings.app.form.startMinimized": "Start minimized", 246 "settings.app.form.startMinimized": "Start minimized",
246 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 247 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json
index d5cf072f6..2544d2a00 100644
--- a/src/i18n/locales/en-US.json
+++ b/src/i18n/locales/en-US.json
@@ -241,6 +241,7 @@
241 "settings.app.form.showDisabledServices": "Display disabled services tabs", 241 "settings.app.form.showDisabledServices": "Display disabled services tabs",
242 "settings.app.form.showDragArea": "Show draggable area on window", 242 "settings.app.form.showDragArea": "Show draggable area on window",
243 "settings.app.form.showMessagesBadgesWhenMuted": "Show unread message badge when notifications are disabled", 243 "settings.app.form.showMessagesBadgesWhenMuted": "Show unread message badge when notifications are disabled",
244 "settings.app.form.showServiceName": "Display service name under the icon",
244 "settings.app.form.splitMode": "Enable Split View Mode", 245 "settings.app.form.splitMode": "Enable Split View Mode",
245 "settings.app.form.startMinimized": "Start minimized", 246 "settings.app.form.startMinimized": "Start minimized",
246 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 247 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
diff --git a/src/i18n/locales/es.json b/src/i18n/locales/es.json
index 8f3f05c2c..e85ebf772 100644
--- a/src/i18n/locales/es.json
+++ b/src/i18n/locales/es.json
@@ -241,6 +241,7 @@
241 "settings.app.form.showDisabledServices": "Mostrar pestañas de servicios desactivados", 241 "settings.app.form.showDisabledServices": "Mostrar pestañas de servicios desactivados",
242 "settings.app.form.showDragArea": "Mostrar área arrastrable en la ventana", 242 "settings.app.form.showDragArea": "Mostrar área arrastrable en la ventana",
243 "settings.app.form.showMessagesBadgesWhenMuted": "Mostrar la insignia de mensajes sin leer cuando las notificaciones están desactivadas", 243 "settings.app.form.showMessagesBadgesWhenMuted": "Mostrar la insignia de mensajes sin leer cuando las notificaciones están desactivadas",
244 "settings.app.form.showServiceName": "Display service name under the icon",
244 "settings.app.form.splitMode": "Activar el modo de vista separada", 245 "settings.app.form.splitMode": "Activar el modo de vista separada",
245 "settings.app.form.startMinimized": "Iniciar minimizado", 246 "settings.app.form.startMinimized": "Iniciar minimizado",
246 "settings.app.form.universalDarkMode": "Activar modo oscuro universal", 247 "settings.app.form.universalDarkMode": "Activar modo oscuro universal",
diff --git a/src/i18n/locales/fi.json b/src/i18n/locales/fi.json
index dbac3aa59..0238a262e 100644
--- a/src/i18n/locales/fi.json
+++ b/src/i18n/locales/fi.json
@@ -241,6 +241,7 @@
241 "settings.app.form.showDisabledServices": "Näytä Estetyt palvelut -välilehdet", 241 "settings.app.form.showDisabledServices": "Näytä Estetyt palvelut -välilehdet",
242 "settings.app.form.showDragArea": "Näytä ikkunassa siirrettävä alue", 242 "settings.app.form.showDragArea": "Näytä ikkunassa siirrettävä alue",
243 "settings.app.form.showMessagesBadgesWhenMuted": "Näytä merkki lukemattomasta viestistä kun ilmoitukset on poistettu käytöstä", 243 "settings.app.form.showMessagesBadgesWhenMuted": "Näytä merkki lukemattomasta viestistä kun ilmoitukset on poistettu käytöstä",
244 "settings.app.form.showServiceName": "Display service name under the icon",
244 "settings.app.form.splitMode": "Enable Split View Mode", 245 "settings.app.form.splitMode": "Enable Split View Mode",
245 "settings.app.form.startMinimized": "Käynnistä pienennettynä", 246 "settings.app.form.startMinimized": "Käynnistä pienennettynä",
246 "settings.app.form.universalDarkMode": "Ota käyttöön yleinen tumma tila", 247 "settings.app.form.universalDarkMode": "Ota käyttöön yleinen tumma tila",
diff --git a/src/i18n/locales/fr.json b/src/i18n/locales/fr.json
index 7e2c591e2..52069c127 100644
--- a/src/i18n/locales/fr.json
+++ b/src/i18n/locales/fr.json
@@ -129,7 +129,7 @@
129 "menu.view.openQuickSwitch": "Ouvrir le changement rapide", 129 "menu.view.openQuickSwitch": "Ouvrir le changement rapide",
130 "menu.view.reloadFerdi": "Recharger Ferdi", 130 "menu.view.reloadFerdi": "Recharger Ferdi",
131 "menu.view.reloadService": "Redémarrer le service", 131 "menu.view.reloadService": "Redémarrer le service",
132 "menu.view.reloadTodos": "Recharger les Todos", 132 "menu.view.reloadTodos": "Recharger les tâches à accomplir",
133 "menu.view.resetZoom": "Taille actuelle", 133 "menu.view.resetZoom": "Taille actuelle",
134 "menu.view.toggleDarkMode": "Activer le mode sombre", 134 "menu.view.toggleDarkMode": "Activer le mode sombre",
135 "menu.view.toggleDevTools": "Activer les outils de développeur", 135 "menu.view.toggleDevTools": "Activer les outils de développeur",
@@ -207,7 +207,7 @@
207 "settings.app.form.clipboardNotifications": "Ne pas afficher les notifications pour les événements du presse-papiers", 207 "settings.app.form.clipboardNotifications": "Ne pas afficher les notifications pour les événements du presse-papiers",
208 "settings.app.form.closeToSystemTray": "Lors de la fermeture, laisser Ferdi actif dans la barre d'état système", 208 "settings.app.form.closeToSystemTray": "Lors de la fermeture, laisser Ferdi actif dans la barre d'état système",
209 "settings.app.form.confirmOnQuit": "Confirmer lorsque vous quittez Ferdi", 209 "settings.app.form.confirmOnQuit": "Confirmer lorsque vous quittez Ferdi",
210 "settings.app.form.customTodoServer": "Serveur Todo personnalisé", 210 "settings.app.form.customTodoServer": "Serveur des tâches à accomplir personnalisé",
211 "settings.app.form.darkMode": "Activer le mode sombre", 211 "settings.app.form.darkMode": "Activer le mode sombre",
212 "settings.app.form.enableGPUAcceleration": "Activer l'accélération GPU", 212 "settings.app.form.enableGPUAcceleration": "Activer l'accélération GPU",
213 "settings.app.form.enableGlobalHideShortcut": "Activer le raccourci global pour masquer Ferdi", 213 "settings.app.form.enableGlobalHideShortcut": "Activer le raccourci global pour masquer Ferdi",
@@ -241,6 +241,7 @@
241 "settings.app.form.showDisabledServices": "Afficher les onglets des services désactivés", 241 "settings.app.form.showDisabledServices": "Afficher les onglets des services désactivés",
242 "settings.app.form.showDragArea": "Afficher les zones de glisser-déposer dans la fenêtre", 242 "settings.app.form.showDragArea": "Afficher les zones de glisser-déposer dans la fenêtre",
243 "settings.app.form.showMessagesBadgesWhenMuted": "Afficher les badges de messages non lus quand les notifications sont désactivées", 243 "settings.app.form.showMessagesBadgesWhenMuted": "Afficher les badges de messages non lus quand les notifications sont désactivées",
244 "settings.app.form.showServiceName": "Display service name under the icon",
244 "settings.app.form.splitMode": "Activer le Mode Vue Divisée", 245 "settings.app.form.splitMode": "Activer le Mode Vue Divisée",
245 "settings.app.form.startMinimized": "Démarrage minimisé", 246 "settings.app.form.startMinimized": "Démarrage minimisé",
246 "settings.app.form.universalDarkMode": "Activer le mode sombre universel", 247 "settings.app.form.universalDarkMode": "Activer le mode sombre universel",
@@ -266,7 +267,7 @@
266 "settings.app.spellCheckerLanguageInfo": "Ferdi utilise le correcteur orthographique intégré de votre Mac pour vérifier les fautes de frappe. Si vous voulez changer les langues pour lesquelles le correcteur vérifie l'orthographe, vous pouvez le faire dans les préférences système de votre Mac.", 267 "settings.app.spellCheckerLanguageInfo": "Ferdi utilise le correcteur orthographique intégré de votre Mac pour vérifier les fautes de frappe. Si vous voulez changer les langues pour lesquelles le correcteur vérifie l'orthographe, vous pouvez le faire dans les préférences système de votre Mac.",
267 "settings.app.subheadlineCache": "Cache", 268 "settings.app.subheadlineCache": "Cache",
268 "settings.app.subheadlineFerdiProfile": "Profil Ferdi", 269 "settings.app.subheadlineFerdiProfile": "Profil Ferdi",
269 "settings.app.todoServerInfo": "Ce serveur sera utilisé pour la fonctionnalité \"Ferdi Todo\".", 270 "settings.app.todoServerInfo": "Ce serveur sera utilisé pour la fonctionnalité des tâches à accomplir de Ferdi.",
270 "settings.app.translationHelp": "Aidez-nous à traduire Ferdi dans votre langue.", 271 "settings.app.translationHelp": "Aidez-nous à traduire Ferdi dans votre langue.",
271 "settings.app.universalDarkModeInfo": "Le mode sombre universel tente de générer dynamiquement des styles de mode sombre pour les services qui ne sont pas encore supportés.", 272 "settings.app.universalDarkModeInfo": "Le mode sombre universel tente de générer dynamiquement des styles de mode sombre pour les services qui ne sont pas encore supportés.",
272 "settings.app.updateStatusAvailable": "Mise à jour disponible, téléchargement en cours...", 273 "settings.app.updateStatusAvailable": "Mise à jour disponible, téléchargement en cours...",
@@ -311,7 +312,7 @@
311 "settings.service.form.enableHibernation": "Activer la veille prolongée", 312 "settings.service.form.enableHibernation": "Activer la veille prolongée",
312 "settings.service.form.enableNotification": "Activer les notifications", 313 "settings.service.form.enableNotification": "Activer les notifications",
313 "settings.service.form.enableService": "Activer le service", 314 "settings.service.form.enableService": "Activer le service",
314 "settings.service.form.enableWakeUp": "Enable wake up", 315 "settings.service.form.enableWakeUp": "Activer le réveil",
315 "settings.service.form.headlineBadges": "Badge des messages non lus", 316 "settings.service.form.headlineBadges": "Badge des messages non lus",
316 "settings.service.form.headlineDarkReaderSettings": "Paramètre de Dark Reader", 317 "settings.service.form.headlineDarkReaderSettings": "Paramètre de Dark Reader",
317 "settings.service.form.headlineGeneral": "Général", 318 "settings.service.form.headlineGeneral": "Général",
diff --git a/src/i18n/locales/ga.json b/src/i18n/locales/ga.json
index ed893c943..1d9596a79 100644
--- a/src/i18n/locales/ga.json
+++ b/src/i18n/locales/ga.json
@@ -241,6 +241,7 @@
241 "settings.app.form.showDisabledServices": "Taispeáin tabanna do sheirbhísí dhíchumasaithe", 241 "settings.app.form.showDisabledServices": "Taispeáin tabanna do sheirbhísí dhíchumasaithe",
242 "settings.app.form.showDragArea": "Show draggable area on window", 242 "settings.app.form.showDragArea": "Show draggable area on window",
243 "settings.app.form.showMessagesBadgesWhenMuted": "Taispeáin teachtaireachtaí neamhléite, nuair a dhíchumasaítear fógraí", 243 "settings.app.form.showMessagesBadgesWhenMuted": "Taispeáin teachtaireachtaí neamhléite, nuair a dhíchumasaítear fógraí",
244 "settings.app.form.showServiceName": "Display service name under the icon",
244 "settings.app.form.splitMode": "Enable Split View Mode", 245 "settings.app.form.splitMode": "Enable Split View Mode",
245 "settings.app.form.startMinimized": "Start minimized", 246 "settings.app.form.startMinimized": "Start minimized",
246 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 247 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
diff --git a/src/i18n/locales/he.json b/src/i18n/locales/he.json
index 1ba7c5ada..226c66943 100644
--- a/src/i18n/locales/he.json
+++ b/src/i18n/locales/he.json
@@ -241,6 +241,7 @@
241 "settings.app.form.showDisabledServices": "Display disabled services tabs", 241 "settings.app.form.showDisabledServices": "Display disabled services tabs",
242 "settings.app.form.showDragArea": "Show draggable area on window", 242 "settings.app.form.showDragArea": "Show draggable area on window",
243 "settings.app.form.showMessagesBadgesWhenMuted": "Show unread message badge when notifications are disabled", 243 "settings.app.form.showMessagesBadgesWhenMuted": "Show unread message badge when notifications are disabled",
244 "settings.app.form.showServiceName": "Display service name under the icon",
244 "settings.app.form.splitMode": "Enable Split View Mode", 245 "settings.app.form.splitMode": "Enable Split View Mode",
245 "settings.app.form.startMinimized": "התחלה במצב ממוזער", 246 "settings.app.form.startMinimized": "התחלה במצב ממוזער",
246 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 247 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
diff --git a/src/i18n/locales/hi.json b/src/i18n/locales/hi.json
index d5cf072f6..2544d2a00 100644
--- a/src/i18n/locales/hi.json
+++ b/src/i18n/locales/hi.json
@@ -241,6 +241,7 @@
241 "settings.app.form.showDisabledServices": "Display disabled services tabs", 241 "settings.app.form.showDisabledServices": "Display disabled services tabs",
242 "settings.app.form.showDragArea": "Show draggable area on window", 242 "settings.app.form.showDragArea": "Show draggable area on window",
243 "settings.app.form.showMessagesBadgesWhenMuted": "Show unread message badge when notifications are disabled", 243 "settings.app.form.showMessagesBadgesWhenMuted": "Show unread message badge when notifications are disabled",
244 "settings.app.form.showServiceName": "Display service name under the icon",
244 "settings.app.form.splitMode": "Enable Split View Mode", 245 "settings.app.form.splitMode": "Enable Split View Mode",
245 "settings.app.form.startMinimized": "Start minimized", 246 "settings.app.form.startMinimized": "Start minimized",
246 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 247 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
diff --git a/src/i18n/locales/hr.json b/src/i18n/locales/hr.json
index 6f0677e16..81e76fc9f 100644
--- a/src/i18n/locales/hr.json
+++ b/src/i18n/locales/hr.json
@@ -241,6 +241,7 @@
241 "settings.app.form.showDisabledServices": "Prikaži ploče s onemogućenim servisima", 241 "settings.app.form.showDisabledServices": "Prikaži ploče s onemogućenim servisima",
242 "settings.app.form.showDragArea": "Show draggable area on window", 242 "settings.app.form.showDragArea": "Show draggable area on window",
243 "settings.app.form.showMessagesBadgesWhenMuted": "Pokaži nepročitane značke poruka kad se obavještenja onemoguće", 243 "settings.app.form.showMessagesBadgesWhenMuted": "Pokaži nepročitane značke poruka kad se obavještenja onemoguće",
244 "settings.app.form.showServiceName": "Display service name under the icon",
244 "settings.app.form.splitMode": "Enable Split View Mode", 245 "settings.app.form.splitMode": "Enable Split View Mode",
245 "settings.app.form.startMinimized": "Start minimized", 246 "settings.app.form.startMinimized": "Start minimized",
246 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 247 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
diff --git a/src/i18n/locales/hu.json b/src/i18n/locales/hu.json
index 8a9c1a441..628fa91cd 100644
--- a/src/i18n/locales/hu.json
+++ b/src/i18n/locales/hu.json
@@ -241,6 +241,7 @@
241 "settings.app.form.showDisabledServices": "Letiltott szolgáltatások megjelenítése", 241 "settings.app.form.showDisabledServices": "Letiltott szolgáltatások megjelenítése",
242 "settings.app.form.showDragArea": "Show draggable area on window", 242 "settings.app.form.showDragArea": "Show draggable area on window",
243 "settings.app.form.showMessagesBadgesWhenMuted": "Mutassa az 'olvasatlan üzenet' jelzést, amikor az értesítések le vannak tiltva", 243 "settings.app.form.showMessagesBadgesWhenMuted": "Mutassa az 'olvasatlan üzenet' jelzést, amikor az értesítések le vannak tiltva",
244 "settings.app.form.showServiceName": "Display service name under the icon",
244 "settings.app.form.splitMode": "Enable Split View Mode", 245 "settings.app.form.splitMode": "Enable Split View Mode",
245 "settings.app.form.startMinimized": "Indítás minimalizálva", 246 "settings.app.form.startMinimized": "Indítás minimalizálva",
246 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 247 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
diff --git a/src/i18n/locales/id.json b/src/i18n/locales/id.json
index a57b60247..d0a3dd482 100644
--- a/src/i18n/locales/id.json
+++ b/src/i18n/locales/id.json
@@ -241,6 +241,7 @@
241 "settings.app.form.showDisabledServices": "Tampilkan tab layanan yang dinonaktifkan", 241 "settings.app.form.showDisabledServices": "Tampilkan tab layanan yang dinonaktifkan",
242 "settings.app.form.showDragArea": "Show draggable area on window", 242 "settings.app.form.showDragArea": "Show draggable area on window",
243 "settings.app.form.showMessagesBadgesWhenMuted": "Tampilkan lencana pesan belum dibaca saat pemberitahuan dinonaktifkan", 243 "settings.app.form.showMessagesBadgesWhenMuted": "Tampilkan lencana pesan belum dibaca saat pemberitahuan dinonaktifkan",
244 "settings.app.form.showServiceName": "Display service name under the icon",
244 "settings.app.form.splitMode": "Enable Split View Mode", 245 "settings.app.form.splitMode": "Enable Split View Mode",
245 "settings.app.form.startMinimized": "Start minimized", 246 "settings.app.form.startMinimized": "Start minimized",
246 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 247 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
diff --git a/src/i18n/locales/it.json b/src/i18n/locales/it.json
index 09cfaaf25..340ad936d 100644
--- a/src/i18n/locales/it.json
+++ b/src/i18n/locales/it.json
@@ -241,7 +241,8 @@
241 "settings.app.form.showDisabledServices": "Mostra schede servizi disattivati", 241 "settings.app.form.showDisabledServices": "Mostra schede servizi disattivati",
242 "settings.app.form.showDragArea": "Mostra area trascinabile nella finestra", 242 "settings.app.form.showDragArea": "Mostra area trascinabile nella finestra",
243 "settings.app.form.showMessagesBadgesWhenMuted": "Mostra l'etichetta dei messaggi non letti quando le notifiche sono disattivate", 243 "settings.app.form.showMessagesBadgesWhenMuted": "Mostra l'etichetta dei messaggi non letti quando le notifiche sono disattivate",
244 "settings.app.form.splitMode": "Enable Split View Mode", 244 "settings.app.form.showServiceName": "Mostra il nome del servizio sotto all'icona",
245 "settings.app.form.splitMode": "Abilità la modalità split view",
245 "settings.app.form.startMinimized": "Avvio ridotto a icona", 246 "settings.app.form.startMinimized": "Avvio ridotto a icona",
246 "settings.app.form.universalDarkMode": "Abilita la modalità scura universale", 247 "settings.app.form.universalDarkMode": "Abilita la modalità scura universale",
247 "settings.app.form.useTouchIdToUnlock": "Consenti l'utilizzo di TouchID per sbloccare Ferdi", 248 "settings.app.form.useTouchIdToUnlock": "Consenti l'utilizzo di TouchID per sbloccare Ferdi",
@@ -324,7 +325,7 @@
324 "settings.service.form.isHibernatedEnabledInfo": "Quando abilitato, un servizio verrà disattivato dopo un lasso di tempo per preservare le risorse del sistema.", 325 "settings.service.form.isHibernatedEnabledInfo": "Quando abilitato, un servizio verrà disattivato dopo un lasso di tempo per preservare le risorse del sistema.",
325 "settings.service.form.isMutedInfo": "Se disattivato, tutte le notifiche sonore e le riproduzioni audio saranno mutate", 326 "settings.service.form.isMutedInfo": "Se disattivato, tutte le notifiche sonore e le riproduzioni audio saranno mutate",
326 "settings.service.form.name": "Nome", 327 "settings.service.form.name": "Nome",
327 "settings.service.form.onlyShowFavoritesInUnreadCount": "Only show Favorites in unread count", 328 "settings.service.form.onlyShowFavoritesInUnreadCount": "Mostra solo i favoriti nel conteggio dei non letti",
328 "settings.service.form.openDarkmodeCss": "Apri 'darkmode.css'", 329 "settings.service.form.openDarkmodeCss": "Apri 'darkmode.css'",
329 "settings.service.form.openUserCss": "Apri user.css", 330 "settings.service.form.openUserCss": "Apri user.css",
330 "settings.service.form.openUserJs": "Apri il file 'user.js'", 331 "settings.service.form.openUserJs": "Apri il file 'user.js'",
@@ -359,7 +360,7 @@
359 "settings.supportFerdi.openSurvey": "Apri sondaggio", 360 "settings.supportFerdi.openSurvey": "Apri sondaggio",
360 "settings.supportFerdi.textDonation": "Se vuoi aiutare lo sviluppo di Ferdi con una donazione, puoi farlo", 361 "settings.supportFerdi.textDonation": "Se vuoi aiutare lo sviluppo di Ferdi con una donazione, puoi farlo",
361 "settings.supportFerdi.textDonationAnd": "e", 362 "settings.supportFerdi.textDonationAnd": "e",
362 "settings.supportFerdi.textExpenses": "Nonostante la maggior parte del lavoro sia svolto da volontari è comunque necessario pagare per la gestione di server e certificati. Essendo una comunità vogliamo essere completamente trasparenti rispetto a come raccogliamo e spendiamo fondi", 363 "settings.supportFerdi.textExpenses": "Nonostante la maggior parte del lavoro sia svolto da volontari è comunque necessario pagare per la gestione di server e certificati. Essendo una comunità vogliamo essere completamente trasparenti rispetto a come raccogliamo e spendiamo fondi. Maggiori informazioni su",
363 "settings.supportFerdi.textGitHubSponsors": "Sponsor GitHub", 364 "settings.supportFerdi.textGitHubSponsors": "Sponsor GitHub",
364 "settings.supportFerdi.textListContributors": "Elenco completo dei contributori", 365 "settings.supportFerdi.textListContributors": "Elenco completo dei contributori",
365 "settings.supportFerdi.textListContributorsHere": "qui", 366 "settings.supportFerdi.textListContributorsHere": "qui",
diff --git a/src/i18n/locales/ja.json b/src/i18n/locales/ja.json
index 54257c599..26e1f3606 100644
--- a/src/i18n/locales/ja.json
+++ b/src/i18n/locales/ja.json
@@ -241,6 +241,7 @@
241 "settings.app.form.showDisabledServices": "無効化されたサービスのタブを表示する", 241 "settings.app.form.showDisabledServices": "無効化されたサービスのタブを表示する",
242 "settings.app.form.showDragArea": "ドラッグ可能な領域をウィンドウに表示", 242 "settings.app.form.showDragArea": "ドラッグ可能な領域をウィンドウに表示",
243 "settings.app.form.showMessagesBadgesWhenMuted": "通知の無効時に未読メッセージ件数を表示する", 243 "settings.app.form.showMessagesBadgesWhenMuted": "通知の無効時に未読メッセージ件数を表示する",
244 "settings.app.form.showServiceName": "Display service name under the icon",
244 "settings.app.form.splitMode": "分割表示モードを有効にする", 245 "settings.app.form.splitMode": "分割表示モードを有効にする",
245 "settings.app.form.startMinimized": "最小化して起動", 246 "settings.app.form.startMinimized": "最小化して起動",
246 "settings.app.form.universalDarkMode": "ユニバーサルダークモードを有効にする", 247 "settings.app.form.universalDarkMode": "ユニバーサルダークモードを有効にする",
diff --git a/src/i18n/locales/ka.json b/src/i18n/locales/ka.json
index fee1f6668..a5e9bab9c 100644
--- a/src/i18n/locales/ka.json
+++ b/src/i18n/locales/ka.json
@@ -241,6 +241,7 @@
241 "settings.app.form.showDisabledServices": "Display disabled services tabs", 241 "settings.app.form.showDisabledServices": "Display disabled services tabs",
242 "settings.app.form.showDragArea": "Show draggable area on window", 242 "settings.app.form.showDragArea": "Show draggable area on window",
243 "settings.app.form.showMessagesBadgesWhenMuted": "Show unread message badge when notifications are disabled", 243 "settings.app.form.showMessagesBadgesWhenMuted": "Show unread message badge when notifications are disabled",
244 "settings.app.form.showServiceName": "Display service name under the icon",
244 "settings.app.form.splitMode": "Enable Split View Mode", 245 "settings.app.form.splitMode": "Enable Split View Mode",
245 "settings.app.form.startMinimized": "Start minimized", 246 "settings.app.form.startMinimized": "Start minimized",
246 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 247 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
diff --git a/src/i18n/locales/ko.json b/src/i18n/locales/ko.json
index c66313751..12307159a 100644
--- a/src/i18n/locales/ko.json
+++ b/src/i18n/locales/ko.json
@@ -241,6 +241,7 @@
241 "settings.app.form.showDisabledServices": "사용하지 않는 서비스 출력", 241 "settings.app.form.showDisabledServices": "사용하지 않는 서비스 출력",
242 "settings.app.form.showDragArea": "드래그 가능 영역 보기", 242 "settings.app.form.showDragArea": "드래그 가능 영역 보기",
243 "settings.app.form.showMessagesBadgesWhenMuted": "알림이 비활성화잉ㄹ 때 읽지 않은 메세지 배지 표시", 243 "settings.app.form.showMessagesBadgesWhenMuted": "알림이 비활성화잉ㄹ 때 읽지 않은 메세지 배지 표시",
244 "settings.app.form.showServiceName": "Display service name under the icon",
244 "settings.app.form.splitMode": "Enable Split View Mode", 245 "settings.app.form.splitMode": "Enable Split View Mode",
245 "settings.app.form.startMinimized": "최소화 된 상태로 시작", 246 "settings.app.form.startMinimized": "최소화 된 상태로 시작",
246 "settings.app.form.universalDarkMode": "전체 다크 모드 활성화", 247 "settings.app.form.universalDarkMode": "전체 다크 모드 활성화",
diff --git a/src/i18n/locales/nl-BE.json b/src/i18n/locales/nl-BE.json
index 1cd2cdc42..44f48ee9b 100644
--- a/src/i18n/locales/nl-BE.json
+++ b/src/i18n/locales/nl-BE.json
@@ -241,6 +241,7 @@
241 "settings.app.form.showDisabledServices": "Toon uitgeschakelde services", 241 "settings.app.form.showDisabledServices": "Toon uitgeschakelde services",
242 "settings.app.form.showDragArea": "Show draggable area on window", 242 "settings.app.form.showDragArea": "Show draggable area on window",
243 "settings.app.form.showMessagesBadgesWhenMuted": "Toon badge met ongelezen berichten wanneer meldingen zijn uitgeschakeld", 243 "settings.app.form.showMessagesBadgesWhenMuted": "Toon badge met ongelezen berichten wanneer meldingen zijn uitgeschakeld",
244 "settings.app.form.showServiceName": "Display service name under the icon",
244 "settings.app.form.splitMode": "Enable Split View Mode", 245 "settings.app.form.splitMode": "Enable Split View Mode",
245 "settings.app.form.startMinimized": "Start minimized", 246 "settings.app.form.startMinimized": "Start minimized",
246 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 247 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
diff --git a/src/i18n/locales/nl.json b/src/i18n/locales/nl.json
index 4d58e5611..69c99b37f 100644
--- a/src/i18n/locales/nl.json
+++ b/src/i18n/locales/nl.json
@@ -6,9 +6,9 @@
6 "changeserver.label": "Server", 6 "changeserver.label": "Server",
7 "changeserver.urlError": "Vul een geldige URL in", 7 "changeserver.urlError": "Vul een geldige URL in",
8 "changeserver.warning": "Extra instellingen van Ferdi worden niet opgeslagen", 8 "changeserver.warning": "Extra instellingen van Ferdi worden niet opgeslagen",
9 "connectionLostBanner.cta": "Een service opnieuw laden", 9 "connectionLostBanner.cta": "Service opnieuw laden",
10 "connectionLostBanner.informationLink": "Wat gebeurde er?", 10 "connectionLostBanner.informationLink": "Wat gebeurde er?",
11 "connectionLostBanner.message": "Oh nee! Ferdi heeft de verbinding met {name} verloren.", 11 "connectionLostBanner.message": "O nee! Ferdi heeft de verbinding met {name} verloren.",
12 "feature.basicAuth.signIn": "Log in", 12 "feature.basicAuth.signIn": "Log in",
13 "feature.nightlyBuilds.activate": "Activeren", 13 "feature.nightlyBuilds.activate": "Activeren",
14 "feature.nightlyBuilds.info": "Nachtelijke builds zijn zeer experimentele versies van Ferdi die ongepolijste of onvoltooide functies kunnen bevatten. Deze nightly builds worden voornamelijk gebruikt door ontwikkelaars om hun nieuwe functies te testen en hoe ze zullen presteren in de finale build. Als je niet weet wat je aan het doen bent, raden we aan om nachtelijke versies niet te activeren.", 14 "feature.nightlyBuilds.info": "Nachtelijke builds zijn zeer experimentele versies van Ferdi die ongepolijste of onvoltooide functies kunnen bevatten. Deze nightly builds worden voornamelijk gebruikt door ontwikkelaars om hun nieuwe functies te testen en hoe ze zullen presteren in de finale build. Als je niet weet wat je aan het doen bent, raden we aan om nachtelijke versies niet te activeren.",
@@ -24,30 +24,30 @@
24 "feature.quickSwitch.search": "Zoeken...", 24 "feature.quickSwitch.search": "Zoeken...",
25 "feature.quickSwitch.title": "Quickswitch", 25 "feature.quickSwitch.title": "Quickswitch",
26 "global.api.unhealthy": "Kan geen verbinding maken met de Ferdi-services", 26 "global.api.unhealthy": "Kan geen verbinding maken met de Ferdi-services",
27 "global.cancel": "Annuleer", 27 "global.cancel": "Annuleren",
28 "global.edit": "Bewerk", 28 "global.edit": "Bewerken",
29 "global.no": "Nee", 29 "global.no": "Nee",
30 "global.notConnectedToTheInternet": "U bent niet verbonden met het internet.", 30 "global.notConnectedToTheInternet": "Je bent niet verbonden met het internet.",
31 "global.ok": "O", 31 "global.ok": "OK",
32 "global.quit": "Afsluiten", 32 "global.quit": "Afsluiten",
33 "global.quitConfirmation": "Wil je echt stoppen?", 33 "global.quitConfirmation": "Wil je echt stoppen?",
34 "global.save": "Opslaan", 34 "global.save": "Opslaan",
35 "global.settings": "Instellingen", 35 "global.settings": "Instellingen",
36 "global.spellchecker.useDefault": "Gebruik systeemstandaard ({default})", 36 "global.spellchecker.useDefault": "Systeemstandaard gebruiken ({default})",
37 "global.spellchecking.autodetect": "Taal automatisch herkennen", 37 "global.spellchecking.autodetect": "Taal automatisch herkennen",
38 "global.spellchecking.autodetect.short": "Automatisch", 38 "global.spellchecking.autodetect.short": "Automatisch",
39 "global.spellchecking.language": "Taal voor spellingcontrole", 39 "global.spellchecking.language": "Taal voor spellingcontrole",
40 "global.submit": "Verzenden", 40 "global.submit": "Verzenden",
41 "global.userAgentHelp": "Gebruik 'https://whatmyuseragent.com/' om te ontdekken of 'https://developers.whatismybrowser.com/useragents/explore/' om je gewenste user-agent te kiezen en het hier te kopiëren en plakken.", 41 "global.userAgentHelp": "Gebruik 'https://whatmyuseragent.com/' om te ontdekken of 'https://developers.whatismybrowser.com/useragents/explore/' om je gewenste user-agent te kiezen en het hier te kopiëren en plakken.",
42 "global.userAgentPref": "User Agent", 42 "global.userAgentPref": "Gebruikersagent",
43 "global.yes": "Ja", 43 "global.yes": "Ja",
44 "import.headline": "Importeer uw Ferdi 4-services", 44 "import.headline": "Importeer uw Ferdi 4-services",
45 "import.notSupportedHeadline": "Services die (nog) niet ondersteund worden in Ferdi 5", 45 "import.notSupportedHeadline": "Services die (nog) niet ondersteund worden in Ferdi 5",
46 "import.skip.label": "Ik wil diensten handmatig toevoegen", 46 "import.skip.label": "Ik wil services handmatig toevoegen",
47 "import.submit.label": "Importeer {count} diensten", 47 "import.submit.label": "{count} services importeren",
48 "infobar.authRequestFailed": "Er zijn fouten opgetreden tijdens het uitvoeren van een geverifieerd verzoek. Probeer opnieuw in te loggen als deze fout zich blijft voordoen.", 48 "infobar.authRequestFailed": "Er zijn fouten opgetreden tijdens het uitvoeren van een geverifieerd verzoek. Probeer opnieuw in te loggen als deze fout zich blijft voordoen.",
49 "infobar.buttonChangelog": "Wat is er nieuw?", 49 "infobar.buttonChangelog": "Wat is er nieuw?",
50 "infobar.buttonInstallUpdate": "Opnieuw opstarten & update installeren", 50 "infobar.buttonInstallUpdate": "Opnieuw opstarten en update installeren",
51 "infobar.buttonReloadServices": "Services opnieuw laden", 51 "infobar.buttonReloadServices": "Services opnieuw laden",
52 "infobar.hide": "Verbergen", 52 "infobar.hide": "Verbergen",
53 "infobar.requiredRequestsFailed": "Kan de services en gebruikersinformatie niet laden", 53 "infobar.requiredRequestsFailed": "Kan de services en gebruikersinformatie niet laden",
@@ -55,7 +55,7 @@
55 "infobar.updateAvailable": "Een nieuwe update voor Ferdi is beschikbaar.", 55 "infobar.updateAvailable": "Een nieuwe update voor Ferdi is beschikbaar.",
56 "infobox.dismiss": "Negeren", 56 "infobox.dismiss": "Negeren",
57 "invite.email.label": "E-mailadres", 57 "invite.email.label": "E-mailadres",
58 "invite.headline.friends": "Nodig 3 vrienden of collega's uit", 58 "invite.headline.friends": "Nodig drie vrienden of collega's uit",
59 "invite.name.label": "Naam", 59 "invite.name.label": "Naam",
60 "invite.skip.label": "Ik wil dit later doen", 60 "invite.skip.label": "Ik wil dit later doen",
61 "invite.submit.label": "Uitnodigingen verzenden", 61 "invite.submit.label": "Uitnodigingen verzenden",
@@ -65,12 +65,12 @@
65 "locked.invalidCredentials": "Verkeerd wachtwoord", 65 "locked.invalidCredentials": "Verkeerd wachtwoord",
66 "locked.password.label": "Wachtwoord", 66 "locked.password.label": "Wachtwoord",
67 "locked.submit.label": "Ontgrendelen", 67 "locked.submit.label": "Ontgrendelen",
68 "locked.touchId": "Ontgrendel met Touch ID", 68 "locked.touchId": "Ontgrendelen met Touch ID",
69 "locked.touchIdPrompt": "ontgrendel met Touch ID", 69 "locked.touchIdPrompt": "ontgrendelen met Touch ID",
70 "locked.unlockWithPassword": "Ontgrendelen met wachtwoord", 70 "locked.unlockWithPassword": "Ontgrendelen met wachtwoord",
71 "login.changeServer": "Server wijzigen", 71 "login.changeServer": "Server wijzigen",
72 "login.customServerQuestion": "Using a custom Ferdi server?", 72 "login.customServerQuestion": "Gebruik je een Franz-account om in te loggen?",
73 "login.customServerSuggestion": "Try importing your Franz account", 73 "login.customServerSuggestion": "Probeer je Franz-account te importeren in Ferdi",
74 "login.email.label": "E-mailadres", 74 "login.email.label": "E-mailadres",
75 "login.headline": "Inloggen", 75 "login.headline": "Inloggen",
76 "login.invalidCredentials": "E-mailadres of wachtwoord ongeldig", 76 "login.invalidCredentials": "E-mailadres of wachtwoord ongeldig",
@@ -88,7 +88,7 @@
88 "menu.app.hide": "Verbergen", 88 "menu.app.hide": "Verbergen",
89 "menu.app.hideOthers": "Verberg overigen", 89 "menu.app.hideOthers": "Verberg overigen",
90 "menu.app.unhide": "Weergeven", 90 "menu.app.unhide": "Weergeven",
91 "menu.edit": "Bewerk", 91 "menu.edit": "Bewerken",
92 "menu.edit.copy": "Kopiëren", 92 "menu.edit.copy": "Kopiëren",
93 "menu.edit.cut": "Knippen", 93 "menu.edit.cut": "Knippen",
94 "menu.edit.delete": "Verwijderen", 94 "menu.edit.delete": "Verwijderen",
@@ -128,21 +128,21 @@
128 "menu.view.lockFerdi": "Ferdi vergrendelen", 128 "menu.view.lockFerdi": "Ferdi vergrendelen",
129 "menu.view.openQuickSwitch": "Open Quick Switch", 129 "menu.view.openQuickSwitch": "Open Quick Switch",
130 "menu.view.reloadFerdi": "Ferdi opnieuw laden", 130 "menu.view.reloadFerdi": "Ferdi opnieuw laden",
131 "menu.view.reloadService": "Een service opnieuw laden", 131 "menu.view.reloadService": "Service opnieuw laden",
132 "menu.view.reloadTodos": "ToDos opnieuw laden", 132 "menu.view.reloadTodos": "ToDos opnieuw laden",
133 "menu.view.resetZoom": "Werkelijke grootte", 133 "menu.view.resetZoom": "Werkelijke grootte",
134 "menu.view.toggleDarkMode": "Donkere modus aan/uit", 134 "menu.view.toggleDarkMode": "Donkere modus aan/uit",
135 "menu.view.toggleDevTools": "Ontwikkelaarstools aan/uit", 135 "menu.view.toggleDevTools": "Ontwikkelaarstools aan/uit",
136 "menu.view.toggleFullScreen": "Volledig scherm in-/uitschakelen", 136 "menu.view.toggleFullScreen": "Volledig scherm aan/uit",
137 "menu.view.toggleServiceDevTools": "Service ontwikkelaarstools aan/uit", 137 "menu.view.toggleServiceDevTools": "Ontwikkelaarstools voor service aan/uit",
138 "menu.view.toggleTodosDevTools": "Todos Developer Tools in-/uitschakelen", 138 "menu.view.toggleTodosDevTools": "Ontwikkelaarstools voor Todos aan/uit",
139 "menu.view.zoomIn": "Inzoomen", 139 "menu.view.zoomIn": "Inzoomen",
140 "menu.view.zoomOut": "Uitzoomen", 140 "menu.view.zoomOut": "Uitzoomen",
141 "menu.window": "Venster", 141 "menu.window": "Venster",
142 "menu.window.close": "Sluiten", 142 "menu.window.close": "Sluiten",
143 "menu.window.minimize": "Minimaliseren", 143 "menu.window.minimize": "Minimaliseren",
144 "menu.workspaces": "Werkruimtes", 144 "menu.workspaces": "Werkruimtes",
145 "menu.workspaces.addNewWorkspace": "Voeg nieuwe werkruimte toe...", 145 "menu.workspaces.addNewWorkspace": "Nieuwe werkruimte toevoegen...",
146 "menu.workspaces.closeWorkspaceDrawer": "Werkruimtepagina sluiten", 146 "menu.workspaces.closeWorkspaceDrawer": "Werkruimtepagina sluiten",
147 "menu.workspaces.defaultWorkspace": "Alle services", 147 "menu.workspaces.defaultWorkspace": "Alle services",
148 "menu.workspaces.openWorkspaceDrawer": "Werkruimtepagina openen", 148 "menu.workspaces.openWorkspaceDrawer": "Werkruimtepagina openen",
@@ -151,37 +151,37 @@
151 "password.link.login": "Log in op je account", 151 "password.link.login": "Log in op je account",
152 "password.link.signup": "Maak een gratis account aan", 152 "password.link.signup": "Maak een gratis account aan",
153 "password.noUser": "Er is geen gebruiker met dit e-mailadres gevonden", 153 "password.noUser": "Er is geen gebruiker met dit e-mailadres gevonden",
154 "password.successInfo": "Uw nieuwe wachtwoord is verzonden naar uw e-mailadres", 154 "password.successInfo": "Je nieuwe wachtwoord is verzonden naar je e-mailadres",
155 "service.crashHandler.action": "Laad {name} opnieuw", 155 "service.crashHandler.action": "{name} opnieuw laden",
156 "service.crashHandler.autoReload": "Bezig om {name} te herstellen over {seconds} seconden", 156 "service.crashHandler.autoReload": "Bezig om {name} te herstellen over {seconds} seconden",
157 "service.crashHandler.headline": "Oh nee!", 157 "service.crashHandler.headline": "O nee!",
158 "service.crashHandler.text": "{name} heeft een fout veroorzaakt.", 158 "service.crashHandler.text": "{name} heeft een fout veroorzaakt.",
159 "service.disabledHandler.action": "Activeer {name}", 159 "service.disabledHandler.action": "Activeer {name}",
160 "service.disabledHandler.headline": "{name} is uitgeschakeld", 160 "service.disabledHandler.headline": "{name} is uitgeschakeld",
161 "service.errorHandler.action": "Laad {name} opnieuw", 161 "service.errorHandler.action": "{name} opnieuw laden",
162 "service.errorHandler.editAction": "Bewerk {name}", 162 "service.errorHandler.editAction": "{name} bewerken",
163 "service.errorHandler.headline": "Oh nee!", 163 "service.errorHandler.headline": "O nee!",
164 "service.errorHandler.message": "Fout", 164 "service.errorHandler.message": "Fout",
165 "service.errorHandler.text": "{name} kon niet geladen worden.", 165 "service.errorHandler.text": "{name} kon niet geladen worden.",
166 "service.webviewLoader.loading": "{service} wordt geladen", 166 "service.webviewLoader.loading": "{service} wordt geladen",
167 "services.getStarted": "Begin", 167 "services.getStarted": "Aan de slag",
168 "services.login": "Log alstublieft in om Ferdi te gebruiken.", 168 "services.login": "Log in om Ferdi te gebruiken.",
169 "services.serverInfo": "U kunt ook uw Ferdi server veranderen door op het tandwieltje in de linker onderhoek te klikken. Als u overschakelt (van een van de gehoste servers) naar Ferdi zonder account wees u ervan bewust dat u uw gegevens van de server kunt exporteren en deze vervolgens kunt importeren via het Help-menu om al uw werkruimtes en geconfigureerde diensten weer te genereren!", 169 "services.serverInfo": "Je kunt je Ferdi-server ook veranderen door op het tandwieltje in de linkeronderhoek te klikken. Als je van een van de gehoste servers wisselt naar Ferdi zonder account, dien je je ervan bewust te zijn dat je je gegevens van die server kunt exporteren en deze vervolgens kunt importeren via het Help-menu om al je werkruimtes en geconfigureerde diensten weer te genereren!",
170 "services.serverless": "Gebruik Ferdi zonder account", 170 "services.serverless": "Ferdi zonder account gebruiken",
171 "services.welcome": "Welkom bij Ferdi", 171 "services.welcome": "Welkom bij Ferdi",
172 "settings.account.account.editButton": "Account bewerken", 172 "settings.account.account.editButton": "Account bewerken",
173 "settings.account.accountUnavailable": "Account is niet beschikbaar", 173 "settings.account.accountUnavailable": "Account is niet beschikbaar",
174 "settings.account.accountUnavailableInfo": "U gebruikt Ferdi zonder account. Als u Ferdi wilt gebruiken met een account en uw services gesynchroniseerd wilt houden tussen installaties, selecteer een server in het tabblad Instellingen en log in.", 174 "settings.account.accountUnavailableInfo": "U gebruikt Ferdi zonder account. Als u Ferdi wilt gebruiken met een account en uw services gesynchroniseerd wilt houden tussen installaties, selecteer een server in het tabblad Instellingen en log in.",
175 "settings.account.buttonSave": "Update profiel", 175 "settings.account.buttonSave": "Profiel bijwerken",
176 "settings.account.deleteAccount": "Verwijder account", 176 "settings.account.deleteAccount": "Account verwijderen",
177 "settings.account.deleteEmailSent": "Je hebt een e-mail ontvangen met een link om het verwijderen van je account te bevestigen. Je accountgegevens en -data kunnen na verwijderen niet meer worden teruggehaald!", 177 "settings.account.deleteEmailSent": "Je hebt een e-mail ontvangen met een link om het verwijderen van je account te bevestigen. Je accountgegevens en -data kunnen na verwijderen niet meer worden teruggehaald!",
178 "settings.account.deleteInfo": "Wanneer je je Ferdi-account niet langer wilt gebruiken, kun je je account en alle gerelateerde data verwijderen.", 178 "settings.account.deleteInfo": "Wanneer je je Ferdi-account niet langer wilt gebruiken, kun je je account en alle gerelateerde data verwijderen.",
179 "settings.account.headline": "Account", 179 "settings.account.headline": "Account",
180 "settings.account.headlineAccount": "Account informatie", 180 "settings.account.headlineAccount": "Accountgegevens",
181 "settings.account.headlineDangerZone": "Gevarenzone", 181 "settings.account.headlineDangerZone": "Gevarenzone",
182 "settings.account.headlineInvoices": "Facturen", 182 "settings.account.headlineInvoices": "Facturen",
183 "settings.account.headlinePassword": "Wachtwoord wijzigen", 183 "settings.account.headlinePassword": "Wachtwoord wijzigen",
184 "settings.account.headlineProfile": "Update profiel", 184 "settings.account.headlineProfile": "Profiel bijwerken",
185 "settings.account.successInfo": "Je wijzigingen zijn opgeslagen", 185 "settings.account.successInfo": "Je wijzigingen zijn opgeslagen",
186 "settings.account.tryReloadServices": "Probeer opnieuw", 186 "settings.account.tryReloadServices": "Probeer opnieuw",
187 "settings.account.tryReloadUserInfoRequest": "Probeer opnieuw", 187 "settings.account.tryReloadUserInfoRequest": "Probeer opnieuw",
@@ -189,7 +189,7 @@
189 "settings.account.yourLicense": "Uw Ferdi licentie:", 189 "settings.account.yourLicense": "Uw Ferdi licentie:",
190 "settings.app.accentColorInfo": "Schrijf uw accentkleur in een CSS-compatibel formaat (standaard: {defaultAccentColor})", 190 "settings.app.accentColorInfo": "Schrijf uw accentkleur in een CSS-compatibel formaat (standaard: {defaultAccentColor})",
191 "settings.app.buttonClearAllCache": "Cache legen", 191 "settings.app.buttonClearAllCache": "Cache legen",
192 "settings.app.buttonInstallUpdate": "Opnieuw opstarten & update installeren", 192 "settings.app.buttonInstallUpdate": "Opnieuw opstarten en update installeren",
193 "settings.app.buttonOpenFerdiProfileFolder": "Profielmap openen", 193 "settings.app.buttonOpenFerdiProfileFolder": "Profielmap openen",
194 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open de map servicerecepten", 194 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open de map servicerecepten",
195 "settings.app.buttonSearchForUpdate": "Controleer op updates", 195 "settings.app.buttonSearchForUpdate": "Controleer op updates",
@@ -199,7 +199,7 @@
199 "settings.app.currentVersion": "Huidige versie:", 199 "settings.app.currentVersion": "Huidige versie:",
200 "settings.app.form.accentColor": "Accent kleur", 200 "settings.app.form.accentColor": "Accent kleur",
201 "settings.app.form.adaptableDarkMode": "Donkere modus synchroniseren met de instelling van mijn OS", 201 "settings.app.form.adaptableDarkMode": "Donkere modus synchroniseren met de instelling van mijn OS",
202 "settings.app.form.alwaysShowWorkspaces": "Werkruimte lade altijd weergeven", 202 "settings.app.form.alwaysShowWorkspaces": "Werkruimtepagina altijd weergeven",
203 "settings.app.form.autoLaunchInBackground": "Open op de achtergrond", 203 "settings.app.form.autoLaunchInBackground": "Open op de achtergrond",
204 "settings.app.form.autoLaunchOnStart": "Open Ferdi bij opstarten", 204 "settings.app.form.autoLaunchOnStart": "Open Ferdi bij opstarten",
205 "settings.app.form.automaticUpdates": "Updates inschakelen", 205 "settings.app.form.automaticUpdates": "Updates inschakelen",
@@ -208,7 +208,7 @@
208 "settings.app.form.closeToSystemTray": "Minimaliseer Ferdi naar systeemvak", 208 "settings.app.form.closeToSystemTray": "Minimaliseer Ferdi naar systeemvak",
209 "settings.app.form.confirmOnQuit": "Bevestigen bij het sluiten van Ferdi", 209 "settings.app.form.confirmOnQuit": "Bevestigen bij het sluiten van Ferdi",
210 "settings.app.form.customTodoServer": "Aangepaste Todo Server", 210 "settings.app.form.customTodoServer": "Aangepaste Todo Server",
211 "settings.app.form.darkMode": "Dark mode aanzetten", 211 "settings.app.form.darkMode": "Donkere modus inschakelen",
212 "settings.app.form.enableGPUAcceleration": "Schakel videokaart-acceleratie in ", 212 "settings.app.form.enableGPUAcceleration": "Schakel videokaart-acceleratie in ",
213 "settings.app.form.enableGlobalHideShortcut": "Enable Global shortcut to hide Ferdi", 213 "settings.app.form.enableGlobalHideShortcut": "Enable Global shortcut to hide Ferdi",
214 "settings.app.form.enableLock": "Wachtwoordvergrendeling inschakelen", 214 "settings.app.form.enableLock": "Wachtwoordvergrendeling inschakelen",
@@ -217,11 +217,11 @@
217 "settings.app.form.enableSpellchecking": "Zet spellingcontrole aan", 217 "settings.app.form.enableSpellchecking": "Zet spellingcontrole aan",
218 "settings.app.form.enableSystemTray": "Laat Ferdi altijd in systeembalk zien", 218 "settings.app.form.enableSystemTray": "Laat Ferdi altijd in systeembalk zien",
219 "settings.app.form.enableTodos": "Ferdi Todos inschakelen", 219 "settings.app.form.enableTodos": "Ferdi Todos inschakelen",
220 "settings.app.form.hibernateOnStartup": "Diensten in slaapstand houden bij opstarten", 220 "settings.app.form.hibernateOnStartup": "Services in slaapstand houden bij opstarten",
221 "settings.app.form.hibernationStrategy": "Slaapstand strategie", 221 "settings.app.form.hibernationStrategy": "Slaapstand strategie",
222 "settings.app.form.iconSize": "Service icoongrootte", 222 "settings.app.form.iconSize": "Service icoongrootte",
223 "settings.app.form.inactivityLock": "Vergrendel na inactiviteit", 223 "settings.app.form.inactivityLock": "Vergrendel na inactiviteit",
224 "settings.app.form.keepAllWorkspacesLoaded": "Houd alle werkruimtes geladen", 224 "settings.app.form.keepAllWorkspacesLoaded": "Alle werkruimtes geladen houden",
225 "settings.app.form.language": "Taal", 225 "settings.app.form.language": "Taal",
226 "settings.app.form.lockPassword": "Wachtwoord", 226 "settings.app.form.lockPassword": "Wachtwoord",
227 "settings.app.form.minimizeToSystemTray": "Minimaliseer Ferdi naar systeemvak", 227 "settings.app.form.minimizeToSystemTray": "Minimaliseer Ferdi naar systeemvak",
@@ -233,19 +233,20 @@
233 "settings.app.form.reloadAfterResume": "Herlaad Ferdi na systeem hervatten", 233 "settings.app.form.reloadAfterResume": "Herlaad Ferdi na systeem hervatten",
234 "settings.app.form.runInBackground": "Houd Ferdi open op de achtergrond wanneer het venster gesloten wordt", 234 "settings.app.form.runInBackground": "Houd Ferdi open op de achtergrond wanneer het venster gesloten wordt",
235 "settings.app.form.scheduledDNDEnabled": "Activeer geplande niet-storen modus", 235 "settings.app.form.scheduledDNDEnabled": "Activeer geplande niet-storen modus",
236 "settings.app.form.scheduledDNDEnd": "To", 236 "settings.app.form.scheduledDNDEnd": "Tot",
237 "settings.app.form.scheduledDNDStart": "Van", 237 "settings.app.form.scheduledDNDStart": "Van",
238 "settings.app.form.searchEngine": "Zoekmachine", 238 "settings.app.form.searchEngine": "Zoekmachine",
239 "settings.app.form.sentry": "Verzend telemetrie gegevens", 239 "settings.app.form.sentry": "Telemetriegegevens verzenden",
240 "settings.app.form.serviceRibbonWidth": "Sidebar width", 240 "settings.app.form.serviceRibbonWidth": "Breedte van de zijbalk",
241 "settings.app.form.showDisabledServices": "Toon uitgeschakelde services", 241 "settings.app.form.showDisabledServices": "Toon uitgeschakelde services",
242 "settings.app.form.showDragArea": "Show draggable area on window", 242 "settings.app.form.showDragArea": "Show draggable area on window",
243 "settings.app.form.showMessagesBadgesWhenMuted": "Toon badge met ongelezen berichten wanneer meldingen zijn uitgeschakeld", 243 "settings.app.form.showMessagesBadgesWhenMuted": "Toon badge met ongelezen berichten wanneer meldingen zijn uitgeschakeld",
244 "settings.app.form.showServiceName": "Display service name under the icon",
244 "settings.app.form.splitMode": "Enable Split View Mode", 245 "settings.app.form.splitMode": "Enable Split View Mode",
245 "settings.app.form.startMinimized": "Start minimized", 246 "settings.app.form.startMinimized": "Start minimized",
246 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 247 "settings.app.form.universalDarkMode": "Universele donkere modus inschakelen",
247 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", 248 "settings.app.form.useTouchIdToUnlock": "Gebruik van Touch ID toestaan om Ferdi te ontgrendelen",
248 "settings.app.form.useVerticalStyle": "Use horizontal style", 249 "settings.app.form.useVerticalStyle": "Horizontale stijl gebruiken",
249 "settings.app.form.wakeUpStrategy": "Wake up strategy", 250 "settings.app.form.wakeUpStrategy": "Wake up strategy",
250 "settings.app.headlineAdvanced": "Geavanceerd", 251 "settings.app.headlineAdvanced": "Geavanceerd",
251 "settings.app.headlineAppearance": "Weergave", 252 "settings.app.headlineAppearance": "Weergave",
@@ -260,60 +261,60 @@
260 "settings.app.lockedPassword": "Wachtwoord", 261 "settings.app.lockedPassword": "Wachtwoord",
261 "settings.app.lockedPasswordInfo": "Please make sure to set a password you'll remember.\nIf you loose this password, you will have to reinstall Ferdi.", 262 "settings.app.lockedPasswordInfo": "Please make sure to set a password you'll remember.\nIf you loose this password, you will have to reinstall Ferdi.",
262 "settings.app.restartRequired": "Deze wijziging heeft een herstart nodig", 263 "settings.app.restartRequired": "Deze wijziging heeft een herstart nodig",
263 "settings.app.scheduledDNDInfo": "Scheduled Do-not-Disturb allows you to define a period of time in which you do not want to get Notifications from Ferdi.", 264 "settings.app.scheduledDNDInfo": "Geplande niet-storen modus laat je een tijdsperiode instellen waarin je geen notificaties van Ferdi wilt ontvangen.",
264 "settings.app.scheduledDNDTimeInfo": "Times in 24-Hour-Format. End time can be before start time (e.g. start 17:00, end 09:00) to enable Do-not-Disturb overnight.", 265 "settings.app.scheduledDNDTimeInfo": "Tijden in 24-uur-formaat. De eindtijd kan voor de starttijd zijn (bijvoorbeeld begin 17:00, eind 09:00) om de niet-storen modus 's nachts in te schakelen.",
265 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 266 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!",
266 "settings.app.spellCheckerLanguageInfo": "Ferdi uses your Mac's build-in spellchecker to check for typos. If you want to change the languages the spellchecker checks for, you can do so in your Mac's System Preferences.", 267 "settings.app.spellCheckerLanguageInfo": "Ferdi uses your Mac's build-in spellchecker to check for typos. If you want to change the languages the spellchecker checks for, you can do so in your Mac's System Preferences.",
267 "settings.app.subheadlineCache": "Cache", 268 "settings.app.subheadlineCache": "Cache",
268 "settings.app.subheadlineFerdiProfile": "Ferdi Profile", 269 "settings.app.subheadlineFerdiProfile": "Ferdi-profiel",
269 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", 270 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.",
270 "settings.app.translationHelp": "Help ons om Ferdi uw taal te laten spreken.", 271 "settings.app.translationHelp": "Help ons om Ferdi uw taal te laten spreken.",
271 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.", 272 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.",
272 "settings.app.updateStatusAvailable": "Update beschikbaar, downloaden...", 273 "settings.app.updateStatusAvailable": "Update beschikbaar, downloaden...",
273 "settings.app.updateStatusSearching": "Zoekt naar updates", 274 "settings.app.updateStatusSearching": "Zoekt naar updates",
274 "settings.app.updateStatusUpToDate": "Je gebruikt de laatste versie van Ferdi", 275 "settings.app.updateStatusUpToDate": "Je gebruikt de laatste versie van Ferdi",
275 "settings.invite.headline": "Nodig vrienden uit", 276 "settings.invite.headline": "Vrienden uitnodigen",
276 "settings.navigation.account": "Account", 277 "settings.navigation.account": "Account",
277 "settings.navigation.availableServices": "Beschikbare services", 278 "settings.navigation.availableServices": "Beschikbare services",
278 "settings.navigation.logout": "Uitloggen", 279 "settings.navigation.logout": "Uitloggen",
279 "settings.navigation.supportFerdi": "Over Ferdi", 280 "settings.navigation.supportFerdi": "Over Ferdi",
280 "settings.navigation.team": "Beheer Team", 281 "settings.navigation.team": "Team beheren",
281 "settings.navigation.yourServices": "Jouw services", 282 "settings.navigation.yourServices": "Jouw services",
282 "settings.navigation.yourWorkspaces": "Jouw werkruimtes", 283 "settings.navigation.yourWorkspaces": "Jouw werkruimtes",
283 "settings.recipes.all": "Alle services", 284 "settings.recipes.all": "Alle services",
284 "settings.recipes.custom": "Custom Services", 285 "settings.recipes.custom": "Aangepaste services",
285 "settings.recipes.customService.headline.communityRecipes": "Community 3rd Party Recipes", 286 "settings.recipes.customService.headline.communityRecipes": "Community 3rd Party Recipes",
286 "settings.recipes.customService.headline.customRecipes": "Custom 3rd Party Recipes", 287 "settings.recipes.customService.headline.customRecipes": "Custom 3rd Party Recipes",
287 "settings.recipes.customService.headline.devRecipes": "Your Development Service Recipes", 288 "settings.recipes.customService.headline.devRecipes": "Your Development Service Recipes",
288 "settings.recipes.customService.intro": "To add a custom service, copy the service recipe to:", 289 "settings.recipes.customService.intro": "To add a custom service, copy the service recipe to:",
289 "settings.recipes.customService.openDevDocs": "Developer Documentation", 290 "settings.recipes.customService.openDevDocs": "Documentatie voor ontwikkelaars",
290 "settings.recipes.customService.openFolder": "Open folder", 291 "settings.recipes.customService.openFolder": "Map openen",
291 "settings.recipes.headline": "Beschikbare services", 292 "settings.recipes.headline": "Beschikbare services",
292 "settings.recipes.missingService": "Mis je een service?", 293 "settings.recipes.missingService": "Mis je een service?",
293 "settings.recipes.nothingFound": "Sorry, but no service matched your search term - but you can still probably add it using the \"Custom Website\" option. Please note that the website might show more services that have been added to Ferdi since the version that you are currently on. To get those new services, please consider upgrading to a newer version of Ferdi.", 294 "settings.recipes.nothingFound": "Sorry, but no service matched your search term - but you can still probably add it using the \"Custom Website\" option. Please note that the website might show more services that have been added to Ferdi since the version that you are currently on. To get those new services, please consider upgrading to a newer version of Ferdi.",
294 "settings.recipes.servicesSuccessfulAddedInfo": "Service succesvol toegevoegd", 295 "settings.recipes.servicesSuccessfulAddedInfo": "Service succesvol toegevoegd",
295 "settings.searchService": "Zoek service", 296 "settings.searchService": "Service zoeken",
296 "settings.service.error.goBack": "Terug naar services", 297 "settings.service.error.goBack": "Terug naar services",
297 "settings.service.error.headline": "Fout", 298 "settings.service.error.headline": "Fout",
298 "settings.service.error.message": "Kon servicerecept niet laden.", 299 "settings.service.error.message": "Kon servicerecept niet laden.",
299 "settings.service.form.addServiceHeadline": "Toevoegen {name}", 300 "settings.service.form.addServiceHeadline": "{name} toevoegen",
300 "settings.service.form.availableServices": "Beschikbare services", 301 "settings.service.form.availableServices": "Beschikbare services",
301 "settings.service.form.customUrl": "Aangepaste server", 302 "settings.service.form.customUrl": "Aangepaste server",
302 "settings.service.form.customUrlValidationError": "Kon aangepaste server {name} niet valideren.", 303 "settings.service.form.customUrlValidationError": "Kon aangepaste server {name} niet valideren.",
303 "settings.service.form.darkReaderBrightness": "Dark Reader Brightness", 304 "settings.service.form.darkReaderBrightness": "Dark Reader Brightness",
304 "settings.service.form.darkReaderContrast": "Dark Reader Contrast", 305 "settings.service.form.darkReaderContrast": "Dark Reader Contrast",
305 "settings.service.form.darkReaderSepia": "Dark Reader Sepia", 306 "settings.service.form.darkReaderSepia": "Dark Reader Sepia",
306 "settings.service.form.deleteButton": "Delete service", 307 "settings.service.form.deleteButton": "Service verwijderen",
307 "settings.service.form.editServiceHeadline": "Bewerk {name}", 308 "settings.service.form.editServiceHeadline": "{name} bewerken",
308 "settings.service.form.enableAudio": "Audio inschakelen", 309 "settings.service.form.enableAudio": "Audio inschakelen",
309 "settings.service.form.enableBadge": "Toon badges met ongelezen berichten", 310 "settings.service.form.enableBadge": "Toon badges met ongelezen berichten",
310 "settings.service.form.enableDarkMode": "Dark mode aanzetten", 311 "settings.service.form.enableDarkMode": "Donkere modus inschakelen",
311 "settings.service.form.enableHibernation": "Enable hibernation", 312 "settings.service.form.enableHibernation": "Enable hibernation",
312 "settings.service.form.enableNotification": "Meldingen inschakelen", 313 "settings.service.form.enableNotification": "Meldingen inschakelen",
313 "settings.service.form.enableService": "Service inschakelen", 314 "settings.service.form.enableService": "Service inschakelen",
314 "settings.service.form.enableWakeUp": "Enable wake up", 315 "settings.service.form.enableWakeUp": "Enable wake up",
315 "settings.service.form.headlineBadges": "Ongelezen berichten badges", 316 "settings.service.form.headlineBadges": "Ongelezen berichten badges",
316 "settings.service.form.headlineDarkReaderSettings": "Dark Reader Settings", 317 "settings.service.form.headlineDarkReaderSettings": "Instellingen voor Dark Reader",
317 "settings.service.form.headlineGeneral": "Algemeen", 318 "settings.service.form.headlineGeneral": "Algemeen",
318 "settings.service.form.headlineNotifications": "Meldingen", 319 "settings.service.form.headlineNotifications": "Meldingen",
319 "settings.service.form.icon": "Aangepast icoon", 320 "settings.service.form.icon": "Aangepast icoon",
@@ -325,18 +326,18 @@
325 "settings.service.form.isMutedInfo": "Indien uitgeschakeld, worden meldingen en audio niet afgespeeld", 326 "settings.service.form.isMutedInfo": "Indien uitgeschakeld, worden meldingen en audio niet afgespeeld",
326 "settings.service.form.name": "Naam", 327 "settings.service.form.name": "Naam",
327 "settings.service.form.onlyShowFavoritesInUnreadCount": "Only show Favorites in unread count", 328 "settings.service.form.onlyShowFavoritesInUnreadCount": "Only show Favorites in unread count",
328 "settings.service.form.openDarkmodeCss": "Open darkmode.css", 329 "settings.service.form.openDarkmodeCss": "Darkmode.css openen",
329 "settings.service.form.openUserCss": "Open user.css", 330 "settings.service.form.openUserCss": "User.css openen",
330 "settings.service.form.openUserJs": "Open user.js", 331 "settings.service.form.openUserJs": "User.js openen",
331 "settings.service.form.proxy.headline": "HTTP/HTTPS Proxy instellingen", 332 "settings.service.form.proxy.headline": "HTTP/HTTPS-proxyinstellingen",
332 "settings.service.form.proxy.host": "Proxy Host/IP", 333 "settings.service.form.proxy.host": "Proxy Host/IP",
333 "settings.service.form.proxy.info": "Proxy instellingen worden niet gesynchroniseerd met de Ferdi servers.", 334 "settings.service.form.proxy.info": "Proxy instellingen worden niet gesynchroniseerd met de Ferdi servers.",
334 "settings.service.form.proxy.isEnabled": "Proxy gebruiken", 335 "settings.service.form.proxy.isEnabled": "Proxy gebruiken",
335 "settings.service.form.proxy.password": "Wachtwoord (optioneel)", 336 "settings.service.form.proxy.password": "Wachtwoord (optioneel)",
336 "settings.service.form.proxy.port": "Poort", 337 "settings.service.form.proxy.port": "Poort",
337 "settings.service.form.proxy.restartInfo": "Start Ferdi opnieuw na het aanpassen van proxy instellingen.", 338 "settings.service.form.proxy.restartInfo": "Start Ferdi opnieuw na het aanpassen van de proxyinstellingen.",
338 "settings.service.form.proxy.user": "Gebruiker (optioneel)", 339 "settings.service.form.proxy.user": "Gebruiker (optioneel)",
339 "settings.service.form.recipeFileInfo": "Je gebruikersbestanden worden op de webpagina ingevoegd zodat je diensten op elke manier kunt aanpassen. Gebruikersbestanden worden alleen lokaal opgeslagen en worden niet overgebracht naar andere computers met hetzelfde account.", 340 "settings.service.form.recipeFileInfo": "Je gebruikersbestanden worden op de webpagina ingevoegd zodat je services op elke manier kunt aanpassen. Gebruikersbestanden worden alleen lokaal opgeslagen en worden niet overgebracht naar andere computers met hetzelfde account.",
340 "settings.service.form.saveButton": "Service opslaan", 341 "settings.service.form.saveButton": "Service opslaan",
341 "settings.service.form.tabHosted": "Gehost", 342 "settings.service.form.tabHosted": "Gehost",
342 "settings.service.form.tabOnPremise": "Zelf-gehost ⭐️", 343 "settings.service.form.tabOnPremise": "Zelf-gehost ⭐️",
@@ -354,20 +355,20 @@
354 "settings.services.tooltip.notificationsDisabled": "Meldingen zijn uitgeschakeld", 355 "settings.services.tooltip.notificationsDisabled": "Meldingen zijn uitgeschakeld",
355 "settings.services.updatedInfo": "Je wijzigingen zijn opgeslagen", 356 "settings.services.updatedInfo": "Je wijzigingen zijn opgeslagen",
356 "settings.supportFerdi.aboutIntro": "<p>Ferdi is an open-source and a community-lead application.</p><p>Thanks to the people who make this possbile:</p>", 357 "settings.supportFerdi.aboutIntro": "<p>Ferdi is an open-source and a community-lead application.</p><p>Thanks to the people who make this possbile:</p>",
357 "settings.supportFerdi.bannerText": "Do you want to help us improve Ferdi?", 358 "settings.supportFerdi.bannerText": "Wil je ons helpen Ferdi te verbeteren?",
358 "settings.supportFerdi.headline": "Over Ferdi", 359 "settings.supportFerdi.headline": "Over Ferdi",
359 "settings.supportFerdi.openSurvey": "Open survey", 360 "settings.supportFerdi.openSurvey": "Vragenlijst openen",
360 "settings.supportFerdi.textDonation": "If you feel like supporting Ferdi development with a donation, you can do so on both,", 361 "settings.supportFerdi.textDonation": "If you feel like supporting Ferdi development with a donation, you can do so on both,",
361 "settings.supportFerdi.textDonationAnd": "and", 362 "settings.supportFerdi.textDonationAnd": "en",
362 "settings.supportFerdi.textExpenses": "While volunteers do most of the work, we still need to pay for servers and certificates. As a community, we are fully transparent on funds we collect and spend - see our", 363 "settings.supportFerdi.textExpenses": "While volunteers do most of the work, we still need to pay for servers and certificates. As a community, we are fully transparent on funds we collect and spend - see our",
363 "settings.supportFerdi.textGitHubSponsors": "GitHub Sponsors", 364 "settings.supportFerdi.textGitHubSponsors": "GitHub-sponsors",
364 "settings.supportFerdi.textListContributors": "Full list of contributors", 365 "settings.supportFerdi.textListContributors": "Volledige lijst met bijdragers",
365 "settings.supportFerdi.textListContributorsHere": "here", 366 "settings.supportFerdi.textListContributorsHere": "hier",
366 "settings.supportFerdi.textOpenCollective": "Open Collective", 367 "settings.supportFerdi.textOpenCollective": "Open Collective",
367 "settings.supportFerdi.textSupportWelcome": "Support is always welcome. You can find a list of the help we need", 368 "settings.supportFerdi.textSupportWelcome": "Support is always welcome. You can find a list of the help we need",
368 "settings.supportFerdi.textSupportWelcomeHere": "here", 369 "settings.supportFerdi.textSupportWelcomeHere": "hier",
369 "settings.supportFerdi.textVolunteers": "The development of Ferdi is done by volunteers. People who use Ferdi like you. They maintain, fix, and improve Ferdi in their spare time.", 370 "settings.supportFerdi.textVolunteers": "The development of Ferdi is done by volunteers. People who use Ferdi like you. They maintain, fix, and improve Ferdi in their spare time.",
370 "settings.supportFerdi.title": "Do you like Ferdi?", 371 "settings.supportFerdi.title": "Gebruik je Ferdi graag?",
371 "settings.team.contentHeadline": "Franz Team Management", 372 "settings.team.contentHeadline": "Franz Team Management",
372 "settings.team.copy": "Franz's Team Management allows you to manage Franz Subscriptions for multiple users. Please keep in mind that having a Franz Premium subscription will give you no advantages in using Ferdi: The only reason you still have access to Team Management is so you can manage your legacy Franz Teams and so that you don't loose any functionality in managing your account.", 373 "settings.team.copy": "Franz's Team Management allows you to manage Franz Subscriptions for multiple users. Please keep in mind that having a Franz Premium subscription will give you no advantages in using Ferdi: The only reason you still have access to Team Management is so you can manage your legacy Franz Teams and so that you don't loose any functionality in managing your account.",
373 "settings.team.headline": "Team", 374 "settings.team.headline": "Team",
@@ -385,17 +386,17 @@
385 "settings.user.form.lastname": "Achternaam", 386 "settings.user.form.lastname": "Achternaam",
386 "settings.user.form.newPassword": "Nieuw wachtwoord", 387 "settings.user.form.newPassword": "Nieuw wachtwoord",
387 "settings.workspace.add.form.name": "Naam", 388 "settings.workspace.add.form.name": "Naam",
388 "settings.workspace.add.form.submitButton": "Maak werkruimte aan", 389 "settings.workspace.add.form.submitButton": "Werkruimte maken",
389 "settings.workspace.form.buttonDelete": "Verwijder werkruimte", 390 "settings.workspace.form.buttonDelete": "Werkruimte verwijderen",
390 "settings.workspace.form.buttonSave": "Sla werkruimte op", 391 "settings.workspace.form.buttonSave": "Werkruimte opslaan",
391 "settings.workspace.form.keepLoaded": "Keep this workspace loaded*", 392 "settings.workspace.form.keepLoaded": "Deze werkruimte geladen houden*",
392 "settings.workspace.form.keepLoadedInfo": "*This option will be overwritten by the global \"Keep all workspaces loaded\" option.", 393 "settings.workspace.form.keepLoadedInfo": "*This option will be overwritten by the global \"Keep all workspaces loaded\" option.",
393 "settings.workspace.form.name": "Naam", 394 "settings.workspace.form.name": "Naam",
394 "settings.workspace.form.servicesInWorkspaceHeadline": "Services in deze werkruimte", 395 "settings.workspace.form.servicesInWorkspaceHeadline": "Services in deze werkruimte",
395 "settings.workspace.form.yourWorkspaces": "Jouw werkruimtes", 396 "settings.workspace.form.yourWorkspaces": "Jouw werkruimtes",
396 "settings.workspaces.deletedInfo": "Werkruimte is verwijderd", 397 "settings.workspaces.deletedInfo": "Werkruimte is verwijderd",
397 "settings.workspaces.headline": "Jouw werkruimtes", 398 "settings.workspaces.headline": "Jouw werkruimtes",
398 "settings.workspaces.noWorkspacesAdded": "You haven't created any workspaces yet.", 399 "settings.workspaces.noWorkspacesAdded": "Je hebt nog geen werkruimtes gemaakt.",
399 "settings.workspaces.tryReloadWorkspaces": "Probeer opnieuw", 400 "settings.workspaces.tryReloadWorkspaces": "Probeer opnieuw",
400 "settings.workspaces.updatedInfo": "Je wijzigingen zijn opgeslagen", 401 "settings.workspaces.updatedInfo": "Je wijzigingen zijn opgeslagen",
401 "settings.workspaces.workspaceFeatureHeadline": "Less is More: Zie hier Ferdi Werkruimtes", 402 "settings.workspaces.workspaceFeatureHeadline": "Less is More: Zie hier Ferdi Werkruimtes",
@@ -424,9 +425,9 @@
424 "signup.password.label": "Wachtwoord", 425 "signup.password.label": "Wachtwoord",
425 "signup.submit.label": "Account aanmaken", 426 "signup.submit.label": "Account aanmaken",
426 "tabs.item.confirmDeleteService": "Do you really want to delete the {serviceName} service?", 427 "tabs.item.confirmDeleteService": "Do you really want to delete the {serviceName} service?",
427 "tabs.item.deleteService": "Delete service", 428 "tabs.item.deleteService": "Service verwijderen",
428 "tabs.item.disableAudio": "Audio uitschakelen", 429 "tabs.item.disableAudio": "Audio uitschakelen",
429 "tabs.item.disableDarkMode": "Disable Dark mode", 430 "tabs.item.disableDarkMode": "Donkere modus uitschakelen",
430 "tabs.item.disableNotifications": "Meldingen uitschakelen", 431 "tabs.item.disableNotifications": "Meldingen uitschakelen",
431 "tabs.item.disableService": "Service uitschakelen", 432 "tabs.item.disableService": "Service uitschakelen",
432 "tabs.item.enableAudio": "Audio inschakelen", 433 "tabs.item.enableAudio": "Audio inschakelen",
@@ -435,11 +436,11 @@
435 "tabs.item.enableService": "Service inschakelen", 436 "tabs.item.enableService": "Service inschakelen",
436 "tabs.item.hibernateService": "Hibernate service", 437 "tabs.item.hibernateService": "Hibernate service",
437 "tabs.item.reload": "Herladen", 438 "tabs.item.reload": "Herladen",
438 "tabs.item.wakeUpService": "Wake up service", 439 "tabs.item.wakeUpService": "Service ontwaken",
439 "validation.email": "{field} is not valid", 440 "validation.email": "{field} is ongeldig",
440 "validation.minLength": "{field} should be at least {length} characters long", 441 "validation.minLength": "{field} moet minstens {length} tekens lang zijn",
441 "validation.oneRequired": "Minstens één vereist", 442 "validation.oneRequired": "Minstens één vereist",
442 "validation.required": "{field} is required", 443 "validation.required": "{field} is vereist",
443 "validation.url": "{field} is geen geldige URL", 444 "validation.url": "{field} is geen geldige URL",
444 "webControls.back": "Terug", 445 "webControls.back": "Terug",
445 "webControls.forward": "Doorsturen", 446 "webControls.forward": "Doorsturen",
@@ -448,12 +449,12 @@
448 "webControls.reload": "Herladen", 449 "webControls.reload": "Herladen",
449 "welcome.loginButton": "Log in op je account", 450 "welcome.loginButton": "Log in op je account",
450 "welcome.signupButton": "Maak een gratis account aan", 451 "welcome.signupButton": "Maak een gratis account aan",
451 "workspaceDrawer.addNewWorkspaceLabel": "Add new workspace", 452 "workspaceDrawer.addNewWorkspaceLabel": "Nieuwe werkruimte toevoegen",
452 "workspaceDrawer.allServices": "Alle services", 453 "workspaceDrawer.allServices": "Alle services",
453 "workspaceDrawer.headline": "Werkruimtes", 454 "workspaceDrawer.headline": "Werkruimtes",
454 "workspaceDrawer.item.contextMenuEdit": "bewerken", 455 "workspaceDrawer.item.contextMenuEdit": "bewerken",
455 "workspaceDrawer.item.noServicesAddedYet": "Nog geen services toegevoegd", 456 "workspaceDrawer.item.noServicesAddedYet": "Nog geen services toegevoegd",
456 "workspaceDrawer.workspaceFeatureInfo": "<p>Ferdi Workspaces let you focus on what’s important right now. Set up different sets of services and easily switch between them at any time.</p><p>You decide which services you need when and where, so we can help you stay on top of your game - or easily switch off from work whenever you want.</p>", 457 "workspaceDrawer.workspaceFeatureInfo": "<p>Ferdi Workspaces let you focus on what’s important right now. Set up different sets of services and easily switch between them at any time.</p><p>You decide which services you need when and where, so we can help you stay on top of your game - or easily switch off from work whenever you want.</p>",
457 "workspaceDrawer.workspacesSettingsTooltip": "Edit workspaces settings", 458 "workspaceDrawer.workspacesSettingsTooltip": "Werkruimte-instellingen aanpassen",
458 "workspaces.switchingIndicator.switchingTo": "Overschakelen naar" 459 "workspaces.switchingIndicator.switchingTo": "Overschakelen naar"
459} 460}
diff --git a/src/i18n/locales/no.json b/src/i18n/locales/no.json
index 0d927a6cd..0e9dec5ee 100644
--- a/src/i18n/locales/no.json
+++ b/src/i18n/locales/no.json
@@ -241,6 +241,7 @@
241 "settings.app.form.showDisabledServices": "Vis deaktiverte tjenestefaner", 241 "settings.app.form.showDisabledServices": "Vis deaktiverte tjenestefaner",
242 "settings.app.form.showDragArea": "Vis flyttbart område i vinduet", 242 "settings.app.form.showDragArea": "Vis flyttbart område i vinduet",
243 "settings.app.form.showMessagesBadgesWhenMuted": "Vis uleste meldingsetiketter når varsler er deaktivert", 243 "settings.app.form.showMessagesBadgesWhenMuted": "Vis uleste meldingsetiketter når varsler er deaktivert",
244 "settings.app.form.showServiceName": "Display service name under the icon",
244 "settings.app.form.splitMode": "Enable Split View Mode", 245 "settings.app.form.splitMode": "Enable Split View Mode",
245 "settings.app.form.startMinimized": "Start minimert", 246 "settings.app.form.startMinimized": "Start minimert",
246 "settings.app.form.universalDarkMode": "Aktiver universelt mørkt tema", 247 "settings.app.form.universalDarkMode": "Aktiver universelt mørkt tema",
diff --git a/src/i18n/locales/pl.json b/src/i18n/locales/pl.json
index b6c3bc98c..0accdac07 100644
--- a/src/i18n/locales/pl.json
+++ b/src/i18n/locales/pl.json
@@ -241,6 +241,7 @@
241 "settings.app.form.showDisabledServices": "Wyświetlaj karty wyłączonych usług", 241 "settings.app.form.showDisabledServices": "Wyświetlaj karty wyłączonych usług",
242 "settings.app.form.showDragArea": "Show draggable area on window", 242 "settings.app.form.showDragArea": "Show draggable area on window",
243 "settings.app.form.showMessagesBadgesWhenMuted": "Pokaż licznik nieprzeczytanych wiadomości gdy powiadomienia są wyłączone", 243 "settings.app.form.showMessagesBadgesWhenMuted": "Pokaż licznik nieprzeczytanych wiadomości gdy powiadomienia są wyłączone",
244 "settings.app.form.showServiceName": "Display service name under the icon",
244 "settings.app.form.splitMode": "Enable Split View Mode", 245 "settings.app.form.splitMode": "Enable Split View Mode",
245 "settings.app.form.startMinimized": "Uruchom zminimalizowany", 246 "settings.app.form.startMinimized": "Uruchom zminimalizowany",
246 "settings.app.form.universalDarkMode": "Włącz uniwersalny tryb ciemny", 247 "settings.app.form.universalDarkMode": "Włącz uniwersalny tryb ciemny",
diff --git a/src/i18n/locales/pt-BR.json b/src/i18n/locales/pt-BR.json
index 08a631c9a..5e7287530 100644
--- a/src/i18n/locales/pt-BR.json
+++ b/src/i18n/locales/pt-BR.json
@@ -241,6 +241,7 @@
241 "settings.app.form.showDisabledServices": "Apresentar separadores de serviços desativados", 241 "settings.app.form.showDisabledServices": "Apresentar separadores de serviços desativados",
242 "settings.app.form.showDragArea": "Mostrar área arrastável na janela", 242 "settings.app.form.showDragArea": "Mostrar área arrastável na janela",
243 "settings.app.form.showMessagesBadgesWhenMuted": "Apresentar emblema com o número de mensagens não lidas quando as notificações estão desativadas", 243 "settings.app.form.showMessagesBadgesWhenMuted": "Apresentar emblema com o número de mensagens não lidas quando as notificações estão desativadas",
244 "settings.app.form.showServiceName": "Display service name under the icon",
244 "settings.app.form.splitMode": "Ativar modo de visualização dividida", 245 "settings.app.form.splitMode": "Ativar modo de visualização dividida",
245 "settings.app.form.startMinimized": "Iniciar minimizado", 246 "settings.app.form.startMinimized": "Iniciar minimizado",
246 "settings.app.form.universalDarkMode": "Habilitar modo noturno universal", 247 "settings.app.form.universalDarkMode": "Habilitar modo noturno universal",
diff --git a/src/i18n/locales/pt.json b/src/i18n/locales/pt.json
index b0411578b..cd113996d 100644
--- a/src/i18n/locales/pt.json
+++ b/src/i18n/locales/pt.json
@@ -241,6 +241,7 @@
241 "settings.app.form.showDisabledServices": "Mostrar separadores de serviços desativados", 241 "settings.app.form.showDisabledServices": "Mostrar separadores de serviços desativados",
242 "settings.app.form.showDragArea": "Mostrar área arrastável na janela", 242 "settings.app.form.showDragArea": "Mostrar área arrastável na janela",
243 "settings.app.form.showMessagesBadgesWhenMuted": "Mostrar ícone de mensagem não lida quando as notificações estiverem desativadas", 243 "settings.app.form.showMessagesBadgesWhenMuted": "Mostrar ícone de mensagem não lida quando as notificações estiverem desativadas",
244 "settings.app.form.showServiceName": "Display service name under the icon",
244 "settings.app.form.splitMode": "Enable Split View Mode", 245 "settings.app.form.splitMode": "Enable Split View Mode",
245 "settings.app.form.startMinimized": "Iniciar minimizado", 246 "settings.app.form.startMinimized": "Iniciar minimizado",
246 "settings.app.form.universalDarkMode": "Ativar o Modo Noturno Universal", 247 "settings.app.form.universalDarkMode": "Ativar o Modo Noturno Universal",
diff --git a/src/i18n/locales/ro.json b/src/i18n/locales/ro.json
index e6c8f6262..d858313ac 100644
--- a/src/i18n/locales/ro.json
+++ b/src/i18n/locales/ro.json
@@ -241,6 +241,7 @@
241 "settings.app.form.showDisabledServices": "Display disabled services tabs", 241 "settings.app.form.showDisabledServices": "Display disabled services tabs",
242 "settings.app.form.showDragArea": "Show draggable area on window", 242 "settings.app.form.showDragArea": "Show draggable area on window",
243 "settings.app.form.showMessagesBadgesWhenMuted": "Show unread message badge when notifications are disabled", 243 "settings.app.form.showMessagesBadgesWhenMuted": "Show unread message badge when notifications are disabled",
244 "settings.app.form.showServiceName": "Display service name under the icon",
244 "settings.app.form.splitMode": "Enable Split View Mode", 245 "settings.app.form.splitMode": "Enable Split View Mode",
245 "settings.app.form.startMinimized": "Start minimized", 246 "settings.app.form.startMinimized": "Start minimized",
246 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 247 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
diff --git a/src/i18n/locales/ru.json b/src/i18n/locales/ru.json
index 3d9bd13b1..48bc83ac5 100644
--- a/src/i18n/locales/ru.json
+++ b/src/i18n/locales/ru.json
@@ -241,6 +241,7 @@
241 "settings.app.form.showDisabledServices": "Показывать вкладки отключённых служб", 241 "settings.app.form.showDisabledServices": "Показывать вкладки отключённых служб",
242 "settings.app.form.showDragArea": "Show draggable area on window", 242 "settings.app.form.showDragArea": "Show draggable area on window",
243 "settings.app.form.showMessagesBadgesWhenMuted": "Показывать значок непрочитанного сообщения при отключённых уведомлениях", 243 "settings.app.form.showMessagesBadgesWhenMuted": "Показывать значок непрочитанного сообщения при отключённых уведомлениях",
244 "settings.app.form.showServiceName": "Display service name under the icon",
244 "settings.app.form.splitMode": "Enable Split View Mode", 245 "settings.app.form.splitMode": "Enable Split View Mode",
245 "settings.app.form.startMinimized": "Запускать свернутым", 246 "settings.app.form.startMinimized": "Запускать свернутым",
246 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 247 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
diff --git a/src/i18n/locales/sk.json b/src/i18n/locales/sk.json
index 08fb905cf..80bd1c69d 100644
--- a/src/i18n/locales/sk.json
+++ b/src/i18n/locales/sk.json
@@ -241,6 +241,7 @@
241 "settings.app.form.showDisabledServices": "Zobraziť záložky vypnutých služieb", 241 "settings.app.form.showDisabledServices": "Zobraziť záložky vypnutých služieb",
242 "settings.app.form.showDragArea": "Show draggable area on window", 242 "settings.app.form.showDragArea": "Show draggable area on window",
243 "settings.app.form.showMessagesBadgesWhenMuted": "Zobraziť symbol pre neprečítané správy, keď sú vypnuté upozornenia", 243 "settings.app.form.showMessagesBadgesWhenMuted": "Zobraziť symbol pre neprečítané správy, keď sú vypnuté upozornenia",
244 "settings.app.form.showServiceName": "Display service name under the icon",
244 "settings.app.form.splitMode": "Enable Split View Mode", 245 "settings.app.form.splitMode": "Enable Split View Mode",
245 "settings.app.form.startMinimized": "Start minimized", 246 "settings.app.form.startMinimized": "Start minimized",
246 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 247 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
diff --git a/src/i18n/locales/sl.json b/src/i18n/locales/sl.json
index ff10978c4..4ec106205 100644
--- a/src/i18n/locales/sl.json
+++ b/src/i18n/locales/sl.json
@@ -241,6 +241,7 @@
241 "settings.app.form.showDisabledServices": "Display disabled services tabs", 241 "settings.app.form.showDisabledServices": "Display disabled services tabs",
242 "settings.app.form.showDragArea": "Show draggable area on window", 242 "settings.app.form.showDragArea": "Show draggable area on window",
243 "settings.app.form.showMessagesBadgesWhenMuted": "Show unread message badge when notifications are disabled", 243 "settings.app.form.showMessagesBadgesWhenMuted": "Show unread message badge when notifications are disabled",
244 "settings.app.form.showServiceName": "Display service name under the icon",
244 "settings.app.form.splitMode": "Enable Split View Mode", 245 "settings.app.form.splitMode": "Enable Split View Mode",
245 "settings.app.form.startMinimized": "Start minimized", 246 "settings.app.form.startMinimized": "Start minimized",
246 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 247 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
diff --git a/src/i18n/locales/sr.json b/src/i18n/locales/sr.json
index a058a81ed..8b26d6548 100644
--- a/src/i18n/locales/sr.json
+++ b/src/i18n/locales/sr.json
@@ -241,6 +241,7 @@
241 "settings.app.form.showDisabledServices": "Prikaži ploče s onemogućenim servisima", 241 "settings.app.form.showDisabledServices": "Prikaži ploče s onemogućenim servisima",
242 "settings.app.form.showDragArea": "Show draggable area on window", 242 "settings.app.form.showDragArea": "Show draggable area on window",
243 "settings.app.form.showMessagesBadgesWhenMuted": "Покажи беџ за непрочитане поруке када су обавештења онемогућена", 243 "settings.app.form.showMessagesBadgesWhenMuted": "Покажи беџ за непрочитане поруке када су обавештења онемогућена",
244 "settings.app.form.showServiceName": "Display service name under the icon",
244 "settings.app.form.splitMode": "Enable Split View Mode", 245 "settings.app.form.splitMode": "Enable Split View Mode",
245 "settings.app.form.startMinimized": "Start minimized", 246 "settings.app.form.startMinimized": "Start minimized",
246 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 247 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
diff --git a/src/i18n/locales/sv.json b/src/i18n/locales/sv.json
index c3491f720..ca21dc442 100644
--- a/src/i18n/locales/sv.json
+++ b/src/i18n/locales/sv.json
@@ -241,6 +241,7 @@
241 "settings.app.form.showDisabledServices": "Visa flikar för inaktiverade tjänster", 241 "settings.app.form.showDisabledServices": "Visa flikar för inaktiverade tjänster",
242 "settings.app.form.showDragArea": "Visa dragbart område i fönstret", 242 "settings.app.form.showDragArea": "Visa dragbart område i fönstret",
243 "settings.app.form.showMessagesBadgesWhenMuted": "Visa antal olästa meddelanden när aviseringar är inaktiverade", 243 "settings.app.form.showMessagesBadgesWhenMuted": "Visa antal olästa meddelanden när aviseringar är inaktiverade",
244 "settings.app.form.showServiceName": "Display service name under the icon",
244 "settings.app.form.splitMode": "Aktivera delat visningsläge", 245 "settings.app.form.splitMode": "Aktivera delat visningsläge",
245 "settings.app.form.startMinimized": "Starta i minimerat läge", 246 "settings.app.form.startMinimized": "Starta i minimerat läge",
246 "settings.app.form.universalDarkMode": "Aktivera globalt mörkt läge", 247 "settings.app.form.universalDarkMode": "Aktivera globalt mörkt läge",
diff --git a/src/i18n/locales/te.json b/src/i18n/locales/te.json
index d5cf072f6..2544d2a00 100644
--- a/src/i18n/locales/te.json
+++ b/src/i18n/locales/te.json
@@ -241,6 +241,7 @@
241 "settings.app.form.showDisabledServices": "Display disabled services tabs", 241 "settings.app.form.showDisabledServices": "Display disabled services tabs",
242 "settings.app.form.showDragArea": "Show draggable area on window", 242 "settings.app.form.showDragArea": "Show draggable area on window",
243 "settings.app.form.showMessagesBadgesWhenMuted": "Show unread message badge when notifications are disabled", 243 "settings.app.form.showMessagesBadgesWhenMuted": "Show unread message badge when notifications are disabled",
244 "settings.app.form.showServiceName": "Display service name under the icon",
244 "settings.app.form.splitMode": "Enable Split View Mode", 245 "settings.app.form.splitMode": "Enable Split View Mode",
245 "settings.app.form.startMinimized": "Start minimized", 246 "settings.app.form.startMinimized": "Start minimized",
246 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 247 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
diff --git a/src/i18n/locales/tr.json b/src/i18n/locales/tr.json
index 99e4d4358..eae1bccc5 100644
--- a/src/i18n/locales/tr.json
+++ b/src/i18n/locales/tr.json
@@ -241,6 +241,7 @@
241 "settings.app.form.showDisabledServices": "Devre dışı bırakılan servis sekmelerini göster", 241 "settings.app.form.showDisabledServices": "Devre dışı bırakılan servis sekmelerini göster",
242 "settings.app.form.showDragArea": "Show draggable area on window", 242 "settings.app.form.showDragArea": "Show draggable area on window",
243 "settings.app.form.showMessagesBadgesWhenMuted": "Bildirimler kapalı iken okunmamış mesaj sayısını göster", 243 "settings.app.form.showMessagesBadgesWhenMuted": "Bildirimler kapalı iken okunmamış mesaj sayısını göster",
244 "settings.app.form.showServiceName": "Display service name under the icon",
244 "settings.app.form.splitMode": "Enable Split View Mode", 245 "settings.app.form.splitMode": "Enable Split View Mode",
245 "settings.app.form.startMinimized": "Start minimized", 246 "settings.app.form.startMinimized": "Start minimized",
246 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 247 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
diff --git a/src/i18n/locales/uk.json b/src/i18n/locales/uk.json
index d1cf6f9c7..39cfeb604 100644
--- a/src/i18n/locales/uk.json
+++ b/src/i18n/locales/uk.json
@@ -241,6 +241,7 @@
241 "settings.app.form.showDisabledServices": "Показати вкладку вимкнених сервісів", 241 "settings.app.form.showDisabledServices": "Показати вкладку вимкнених сервісів",
242 "settings.app.form.showDragArea": "Show draggable area on window", 242 "settings.app.form.showDragArea": "Show draggable area on window",
243 "settings.app.form.showMessagesBadgesWhenMuted": "Показувати значок непрочитаних повідомлень коли сповіщення вимкнені", 243 "settings.app.form.showMessagesBadgesWhenMuted": "Показувати значок непрочитаних повідомлень коли сповіщення вимкнені",
244 "settings.app.form.showServiceName": "Display service name under the icon",
244 "settings.app.form.splitMode": "Enable Split View Mode", 245 "settings.app.form.splitMode": "Enable Split View Mode",
245 "settings.app.form.startMinimized": "Запускати згорнутим", 246 "settings.app.form.startMinimized": "Запускати згорнутим",
246 "settings.app.form.universalDarkMode": "Увімкнути універсальний темний режим", 247 "settings.app.form.universalDarkMode": "Увімкнути універсальний темний режим",
diff --git a/src/i18n/locales/vi.json b/src/i18n/locales/vi.json
index e658b959c..e168c3cc3 100644
--- a/src/i18n/locales/vi.json
+++ b/src/i18n/locales/vi.json
@@ -241,6 +241,7 @@
241 "settings.app.form.showDisabledServices": "Hiển thị các tab dịch vụ bị vô hiệu hóa", 241 "settings.app.form.showDisabledServices": "Hiển thị các tab dịch vụ bị vô hiệu hóa",
242 "settings.app.form.showDragArea": "Hiển thị khu vực có thể kéo trên cửa sổ", 242 "settings.app.form.showDragArea": "Hiển thị khu vực có thể kéo trên cửa sổ",
243 "settings.app.form.showMessagesBadgesWhenMuted": "Hiển thị huy hiệu tin nhắn chưa đọc khi tắt thông báo", 243 "settings.app.form.showMessagesBadgesWhenMuted": "Hiển thị huy hiệu tin nhắn chưa đọc khi tắt thông báo",
244 "settings.app.form.showServiceName": "Display service name under the icon",
244 "settings.app.form.splitMode": "Enable Split View Mode", 245 "settings.app.form.splitMode": "Enable Split View Mode",
245 "settings.app.form.startMinimized": "Bắt đầu thu nhỏ", 246 "settings.app.form.startMinimized": "Bắt đầu thu nhỏ",
246 "settings.app.form.universalDarkMode": "Bật Chế độ tối chung", 247 "settings.app.form.universalDarkMode": "Bật Chế độ tối chung",
diff --git a/src/i18n/locales/zh-HANT.json b/src/i18n/locales/zh-HANT.json
index 30c81436d..37ac383e1 100644
--- a/src/i18n/locales/zh-HANT.json
+++ b/src/i18n/locales/zh-HANT.json
@@ -241,6 +241,7 @@
241 "settings.app.form.showDisabledServices": "Display disabled services tabs", 241 "settings.app.form.showDisabledServices": "Display disabled services tabs",
242 "settings.app.form.showDragArea": "Show draggable area on window", 242 "settings.app.form.showDragArea": "Show draggable area on window",
243 "settings.app.form.showMessagesBadgesWhenMuted": "Show unread message badge when notifications are disabled", 243 "settings.app.form.showMessagesBadgesWhenMuted": "Show unread message badge when notifications are disabled",
244 "settings.app.form.showServiceName": "Display service name under the icon",
244 "settings.app.form.splitMode": "Enable Split View Mode", 245 "settings.app.form.splitMode": "Enable Split View Mode",
245 "settings.app.form.startMinimized": "Start minimized", 246 "settings.app.form.startMinimized": "Start minimized",
246 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 247 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
diff --git a/src/i18n/locales/zh.json b/src/i18n/locales/zh.json
index 836a067f5..7c26a7ff7 100644
--- a/src/i18n/locales/zh.json
+++ b/src/i18n/locales/zh.json
@@ -241,6 +241,7 @@
241 "settings.app.form.showDisabledServices": "显示禁用的服务标签", 241 "settings.app.form.showDisabledServices": "显示禁用的服务标签",
242 "settings.app.form.showDragArea": "在窗口上显示可拖动区域", 242 "settings.app.form.showDragArea": "在窗口上显示可拖动区域",
243 "settings.app.form.showMessagesBadgesWhenMuted": "禁用通知时显示未读消息徽章", 243 "settings.app.form.showMessagesBadgesWhenMuted": "禁用通知时显示未读消息徽章",
244 "settings.app.form.showServiceName": "Display service name under the icon",
244 "settings.app.form.splitMode": "启用分割视图模式", 245 "settings.app.form.splitMode": "启用分割视图模式",
245 "settings.app.form.startMinimized": "启动时最小化", 246 "settings.app.form.startMinimized": "启动时最小化",
246 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 247 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
diff --git a/src/index.ts b/src/index.ts
index b4a754289..89903a669 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -627,6 +627,10 @@ ipcMain.on('set-spellchecker-locales', (_e, { locale, serviceId }) => {
627 serviceSession.setSpellCheckerLanguages(locales); 627 serviceSession.setSpellCheckerLanguages(locales);
628}); 628});
629 629
630ipcMain.on('window.toolbar-double-clicked', () => {
631 mainWindow?.isMaximized() ? mainWindow.unmaximize() : mainWindow?.maximize();
632});
633
630// Quit when all windows are closed. 634// Quit when all windows are closed.
631app.on('window-all-closed', () => { 635app.on('window-all-closed', () => {
632 // On OS X it is common for applications and their menu bar 636 // On OS X it is common for applications and their menu bar
diff --git a/src/internal-server/app/Controllers/Http/ServiceController.js b/src/internal-server/app/Controllers/Http/ServiceController.js
index dedb5a12b..c4ca5a113 100644
--- a/src/internal-server/app/Controllers/Http/ServiceController.js
+++ b/src/internal-server/app/Controllers/Http/ServiceController.js
@@ -6,7 +6,7 @@ const { v4: uuid } = require('uuid');
6const path = require('path'); 6const path = require('path');
7const fs = require('fs-extra'); 7const fs = require('fs-extra');
8const { LOCAL_HOSTNAME, DEFAULT_SERVICE_ORDER } = require('../../../../config'); 8const { LOCAL_HOSTNAME, DEFAULT_SERVICE_ORDER } = require('../../../../config');
9const { API_VERSION } = require('../../../../environment'); 9const { API_VERSION } = require('../../../../environment-remote');
10 10
11const hostname = LOCAL_HOSTNAME; 11const hostname = LOCAL_HOSTNAME;
12const port = Env.get('PORT'); 12const port = Env.get('PORT');
diff --git a/src/internal-server/app/Controllers/Http/StaticController.js b/src/internal-server/app/Controllers/Http/StaticController.js
deleted file mode 100644
index 33e0e52d9..000000000
--- a/src/internal-server/app/Controllers/Http/StaticController.js
+++ /dev/null
@@ -1,20 +0,0 @@
1/**
2 * Controller for routes with static responses
3 */
4
5import { DEFAULT_FEATURES_CONFIG } from '../../../../config';
6
7// TODO: This endpoint and associated code needs to be remoeved as cleanup
8class StaticController {
9 // Enable all features
10 features({ response }) {
11 return response.send(DEFAULT_FEATURES_CONFIG);
12 }
13
14 // Return an empty array
15 emptyArray({ response }) {
16 return response.send([]);
17 }
18}
19
20export default StaticController;
diff --git a/src/internal-server/start/routes.js b/src/internal-server/start/routes.js
index 50b9448cf..177035dac 100644
--- a/src/internal-server/start/routes.js
+++ b/src/internal-server/start/routes.js
@@ -55,17 +55,12 @@ Route.group(() => {
55 Route.get('recipes', 'RecipeController.list'); 55 Route.get('recipes', 'RecipeController.list');
56 Route.get('recipes/download/:recipe', 'RecipeController.download'); 56 Route.get('recipes/download/:recipe', 'RecipeController.download');
57 Route.get('recipes/search', 'RecipeController.search'); 57 Route.get('recipes/search', 'RecipeController.search');
58 Route.get('recipes/update', 'StaticController.emptyArray');
59 58
60 // Workspaces 59 // Workspaces
61 Route.put('workspace/:id', 'WorkspaceController.edit'); 60 Route.put('workspace/:id', 'WorkspaceController.edit');
62 Route.delete('workspace/:id', 'WorkspaceController.delete'); 61 Route.delete('workspace/:id', 'WorkspaceController.delete');
63 Route.post('workspace', 'WorkspaceController.create'); 62 Route.post('workspace', 'WorkspaceController.create');
64 Route.get('workspace', 'WorkspaceController.list'); 63 Route.get('workspace', 'WorkspaceController.list');
65
66 // Static responses
67 Route.get('features/:mode?', 'StaticController.features');
68 Route.get('services', 'StaticController.emptyArray');
69}) 64})
70 .prefix(API_VERSION) 65 .prefix(API_VERSION)
71 .middleware(OnlyAllowFerdi); 66 .middleware(OnlyAllowFerdi);
diff --git a/src/lib/Menu.js b/src/lib/Menu.js
index b1cbaf992..7d4c228f5 100644
--- a/src/lib/Menu.js
+++ b/src/lib/Menu.js
@@ -21,7 +21,6 @@ import {
21 muteFerdiShortcutKey, 21 muteFerdiShortcutKey,
22} from '../environment'; 22} from '../environment';
23import { aboutAppDetails, ferdiVersion } from '../environment-remote'; 23import { aboutAppDetails, ferdiVersion } from '../environment-remote';
24import { todosStore } from '../features/todos';
25import { todoActions } from '../features/todos/actions'; 24import { todoActions } from '../features/todos/actions';
26import { workspaceActions } from '../features/workspaces/actions'; 25import { workspaceActions } from '../features/workspaces/actions';
27import { workspaceStore } from '../features/workspaces/index'; 26import { workspaceStore } from '../features/workspaces/index';
@@ -313,7 +312,7 @@ const menuItems = defineMessages({
313}); 312});
314 313
315function getActiveService() { 314function getActiveService() {
316 return window.ferdi.stores.services.active; 315 return window['ferdi'].stores.services.active;
317} 316}
318 317
319const _titleBarTemplateFactory = (intl, locked) => [ 318const _titleBarTemplateFactory = (intl, locked) => [
@@ -375,7 +374,7 @@ const _titleBarTemplateFactory = (intl, locked) => [
375 label: intl.formatMessage(menuItems.openQuickSwitch), 374 label: intl.formatMessage(menuItems.openQuickSwitch),
376 accelerator: `${cmdOrCtrlShortcutKey()}+S`, 375 accelerator: `${cmdOrCtrlShortcutKey()}+S`,
377 click() { 376 click() {
378 window.ferdi.features.quickSwitch.state.isModalVisible = true; 377 window['ferdi'].features.quickSwitch.state.isModalVisible = true;
379 }, 378 },
380 }, 379 },
381 { 380 {
@@ -391,7 +390,7 @@ const _titleBarTemplateFactory = (intl, locked) => [
391 // Focus webview so find in page popup gets focused 390 // Focus webview so find in page popup gets focused
392 service.webview.focus(); 391 service.webview.focus();
393 392
394 window.ferdi.actions.service.sendIPCMessage({ 393 window['ferdi'].actions.service.sendIPCMessage({
395 serviceId: service.id, 394 serviceId: service.id,
396 channel: 'find-in-page', 395 channel: 'find-in-page',
397 args: {}, 396 args: {},
@@ -457,12 +456,12 @@ const _titleBarTemplateFactory = (intl, locked) => [
457 label: intl.formatMessage(menuItems.toggleDarkMode), 456 label: intl.formatMessage(menuItems.toggleDarkMode),
458 type: 'checkbox', 457 type: 'checkbox',
459 accelerator: `${cmdOrCtrlShortcutKey()}+${shiftKey()}+D`, 458 accelerator: `${cmdOrCtrlShortcutKey()}+${shiftKey()}+D`,
460 checked: window.ferdi.stores.settings.app.darkMode, 459 checked: window['ferdi'].stores.settings.app.darkMode,
461 click: () => { 460 click: () => {
462 window.ferdi.actions.settings.update({ 461 window['ferdi'].actions.settings.update({
463 type: 'app', 462 type: 'app',
464 data: { 463 data: {
465 darkMode: !window.ferdi.stores.settings.app.darkMode, 464 darkMode: !window['ferdi'].stores.settings.app.darkMode,
466 }, 465 },
467 }); 466 });
468 }, 467 },
@@ -479,12 +478,12 @@ const _titleBarTemplateFactory = (intl, locked) => [
479 label: intl.formatMessage(menuItems.workspaces), 478 label: intl.formatMessage(menuItems.workspaces),
480 accelerator: `${altKey()}+W`, 479 accelerator: `${altKey()}+W`,
481 submenu: [], 480 submenu: [],
482 visible: !locked && workspaceStore.isFeatureEnabled, 481 visible: !locked,
483 }, 482 },
484 { 483 {
485 label: intl.formatMessage(menuItems.todos), 484 label: intl.formatMessage(menuItems.todos),
486 submenu: [], 485 submenu: [],
487 visible: !locked && todosStore.isFeatureEnabled, 486 visible: !locked,
488 }, 487 },
489 { 488 {
490 label: intl.formatMessage(menuItems.window), 489 label: intl.formatMessage(menuItems.window),
@@ -579,13 +578,13 @@ class FranzMenu {
579 // need to clone object so we don't modify computed (cached) object 578 // need to clone object so we don't modify computed (cached) object
580 const serviceTpl = Object.assign([], this.serviceTpl()); 579 const serviceTpl = Object.assign([], this.serviceTpl());
581 580
582 // Don't initialize when window.ferdi is undefined 581 // Don't initialize when window['ferdi'] is undefined
583 if (window.ferdi === undefined) { 582 if (window['ferdi'] === undefined) {
584 console.log('skipping menu init'); 583 console.log('skipping menu init');
585 return; 584 return;
586 } 585 }
587 586
588 const { intl } = window.ferdi; 587 const { intl } = window['ferdi'];
589 const tpl = _titleBarTemplateFactory(intl, this.stores.settings.app.locked); 588 const tpl = _titleBarTemplateFactory(intl, this.stores.settings.app.locked);
590 const { actions } = this; 589 const { actions } = this;
591 590
@@ -593,13 +592,13 @@ class FranzMenu {
593 tpl[1].submenu.push({ 592 tpl[1].submenu.push({
594 label: intl.formatMessage(menuItems.autohideMenuBar), 593 label: intl.formatMessage(menuItems.autohideMenuBar),
595 type: 'checkbox', 594 type: 'checkbox',
596 checked: window.ferdi.stores.settings.app.autohideMenuBar, 595 checked: window['ferdi'].stores.settings.app.autohideMenuBar,
597 click: () => { 596 click: () => {
598 window.ferdi.actions.settings.update({ 597 window['ferdi'].actions.settings.update({
599 type: 'app', 598 type: 'app',
600 data: { 599 data: {
601 autohideMenuBar: 600 autohideMenuBar:
602 !window.ferdi.stores.settings.app.autohideMenuBar, 601 !window['ferdi'].stores.settings.app.autohideMenuBar,
603 }, 602 },
604 }); 603 });
605 }, 604 },
@@ -698,13 +697,9 @@ class FranzMenu {
698 tpl[2].submenu = serviceTpl; 697 tpl[2].submenu = serviceTpl;
699 } 698 }
700 699
701 if (workspaceStore.isFeatureEnabled) { 700 tpl[3].submenu = this.workspacesMenu();
702 tpl[3].submenu = this.workspacesMenu();
703 }
704 701
705 if (todosStore.isFeatureEnabled) { 702 tpl[4].submenu = this.todosMenu();
706 tpl[4].submenu = this.todosMenu();
707 }
708 } else { 703 } else {
709 const touchIdEnabled = isMac 704 const touchIdEnabled = isMac
710 ? this.stores.settings.app.useTouchIdToUnlock && 705 ? this.stores.settings.app.useTouchIdToUnlock &&
@@ -872,13 +867,9 @@ class FranzMenu {
872 tpl[3].submenu = serviceTpl; 867 tpl[3].submenu = serviceTpl;
873 } 868 }
874 869
875 if (workspaceStore.isFeatureEnabled) { 870 tpl[4].submenu = this.workspacesMenu();
876 tpl[4].submenu = this.workspacesMenu();
877 }
878 871
879 if (todosStore.isFeatureEnabled) { 872 tpl[5].submenu = this.todosMenu();
880 tpl[5].submenu = this.todosMenu();
881 }
882 873
883 tpl[tpl.length - 1].submenu.push( 874 tpl[tpl.length - 1].submenu.push(
884 { 875 {
@@ -893,7 +884,7 @@ class FranzMenu {
893 } 884 }
894 885
895 serviceTpl() { 886 serviceTpl() {
896 const { intl } = window.ferdi; 887 const { intl } = window['ferdi'];
897 const { user, services, settings } = this.stores; 888 const { user, services, settings } = this.stores;
898 if (!user.isLoggedIn) return []; 889 if (!user.isLoggedIn) return [];
899 const menu = []; 890 const menu = [];
@@ -988,7 +979,7 @@ class FranzMenu {
988 workspacesMenu() { 979 workspacesMenu() {
989 const { workspaces, activeWorkspace, isWorkspaceDrawerOpen } = 980 const { workspaces, activeWorkspace, isWorkspaceDrawerOpen } =
990 workspaceStore; 981 workspaceStore;
991 const { intl } = window.ferdi; 982 const { intl } = window['ferdi'];
992 const menu = []; 983 const menu = [];
993 984
994 // Add new workspace item: 985 // Add new workspace item:
@@ -1050,7 +1041,7 @@ class FranzMenu {
1050 1041
1051 todosMenu() { 1042 todosMenu() {
1052 const { isTodosPanelVisible, isFeatureEnabledByUser } = this.stores.todos; 1043 const { isTodosPanelVisible, isFeatureEnabledByUser } = this.stores.todos;
1053 const { intl } = window.ferdi; 1044 const { intl } = window['ferdi'];
1054 const menu = []; 1045 const menu = [];
1055 1046
1056 const drawerLabel = isTodosPanelVisible 1047 const drawerLabel = isTodosPanelVisible
@@ -1084,7 +1075,7 @@ class FranzMenu {
1084 } 1075 }
1085 1076
1086 debugMenu() { 1077 debugMenu() {
1087 const { intl } = window.ferdi; 1078 const { intl } = window['ferdi'];
1088 1079
1089 return [ 1080 return [
1090 { 1081 {
@@ -1107,7 +1098,7 @@ class FranzMenu {
1107 { 1098 {
1108 label: intl.formatMessage(menuItems.publishDebugInfo), 1099 label: intl.formatMessage(menuItems.publishDebugInfo),
1109 click: () => { 1100 click: () => {
1110 window.ferdi.features.publishDebugInfo.state.isModalVisible = true; 1101 window['ferdi'].features.publishDebugInfo.state.isModalVisible = true;
1111 }, 1102 },
1112 }, 1103 },
1113 ]; 1104 ];
diff --git a/src/models/Service.js b/src/models/Service.js
index 12109fb0a..3cf0523c3 100644
--- a/src/models/Service.js
+++ b/src/models/Service.js
@@ -37,6 +37,8 @@ export default class Service {
37 37
38 @observable unreadIndirectMessageCount = 0; 38 @observable unreadIndirectMessageCount = 0;
39 39
40 @observable dialogTitle = '';
41
40 @observable order = DEFAULT_SERVICE_ORDER; 42 @observable order = DEFAULT_SERVICE_ORDER;
41 43
42 @observable isEnabled = true; 44 @observable isEnabled = true;
@@ -171,7 +173,7 @@ export default class Service {
171 ); 173 );
172 174
173 // Check if "Hibernate on Startup" is enabled and hibernate all services except active one 175 // Check if "Hibernate on Startup" is enabled and hibernate all services except active one
174 const { hibernateOnStartup } = window.ferdi.stores.settings.app; 176 const { hibernateOnStartup } = window['ferdi'].stores.settings.app;
175 // The service store is probably not loaded yet so we need to use localStorage data to get active service 177 // The service store is probably not loaded yet so we need to use localStorage data to get active service
176 const isActive = 178 const isActive =
177 window.localStorage.service && 179 window.localStorage.service &&
diff --git a/src/models/UserAgent.js b/src/models/UserAgent.js
index 02ff97db1..f971fb08a 100644
--- a/src/models/UserAgent.js
+++ b/src/models/UserAgent.js
@@ -37,7 +37,7 @@ export default class UserAgent {
37 if (typeof this.getUserAgent === 'function') { 37 if (typeof this.getUserAgent === 'function') {
38 return this.getUserAgent(); 38 return this.getUserAgent();
39 } 39 }
40 const globalPref = window.ferdi.stores.settings.all.app.userAgentPref; 40 const globalPref = window['ferdi'].stores.settings.all.app.userAgentPref;
41 if (typeof globalPref === 'string') { 41 if (typeof globalPref === 'string') {
42 const trimmed = globalPref.trim(); 42 const trimmed = globalPref.trim();
43 if (trimmed !== '') { 43 if (trimmed !== '') {
diff --git a/src/stores.types.ts b/src/stores.types.ts
index e5978a392..c63cdd4b8 100644
--- a/src/stores.types.ts
+++ b/src/stores.types.ts
@@ -231,7 +231,6 @@ interface TodosStore {
231 actions: Actions; 231 actions: Actions;
232 api: Api; 232 api: Api;
233 isFeatureActive: () => void; 233 isFeatureActive: () => void;
234 isFeatureEnabled: () => void;
235 isInitialized: true; 234 isInitialized: true;
236 stores: Stores; 235 stores: Stores;
237 userAgentModel: () => void; 236 userAgentModel: () => void;
@@ -246,7 +245,6 @@ interface TodosStore {
246 _reactions: any[]; 245 _reactions: any[];
247 _reload: () => void; 246 _reload: () => void;
248 _routeCheckReaction: () => void; 247 _routeCheckReaction: () => void;
249 _setFeatureEnabledReaction: () => void;
250 _updateSettings: () => void; 248 _updateSettings: () => void;
251 _updateTodosConfig: () => void; 249 _updateTodosConfig: () => void;
252 isFeatureEnabledByUser: () => void; 250 isFeatureEnabledByUser: () => void;
@@ -343,7 +341,6 @@ export interface WorkspacesStore {
343 saving: boolean; 341 saving: boolean;
344 filterServicesByActiveWorkspace: () => void; 342 filterServicesByActiveWorkspace: () => void;
345 isFeatureActive: () => void; 343 isFeatureActive: () => void;
346 isFeatureEnabled: () => void;
347 isSettingsRouteActive: () => void; 344 isSettingsRouteActive: () => void;
348 isSwitchingWorkspace: () => void; 345 isSwitchingWorkspace: () => void;
349 isWorkspaceDrawerOpen: () => void; 346 isWorkspaceDrawerOpen: () => void;
@@ -359,7 +356,6 @@ export interface WorkspacesStore {
359 _openDrawerWithSettingsReaction: () => void; 356 _openDrawerWithSettingsReaction: () => void;
360 _reactions: any[]; 357 _reactions: any[];
361 _setActiveServiceOnWorkspaceSwitchReaction: () => void; 358 _setActiveServiceOnWorkspaceSwitchReaction: () => void;
362 _setFeatureEnabledReaction: () => void;
363 _setWorkspaceBeingEditedReaction: () => void; 359 _setWorkspaceBeingEditedReaction: () => void;
364 _toggleKeepAllWorkspacesLoadedSetting: () => void; 360 _toggleKeepAllWorkspacesLoadedSetting: () => void;
365 _updateSettings: () => void; 361 _updateSettings: () => void;
diff --git a/src/stores/FeaturesStore.js b/src/stores/FeaturesStore.js
index 8e0134d7f..fdb502b6b 100644
--- a/src/stores/FeaturesStore.js
+++ b/src/stores/FeaturesStore.js
@@ -9,13 +9,10 @@ import workspaces from '../features/workspaces';
9import quickSwitch from '../features/quickSwitch'; 9import quickSwitch from '../features/quickSwitch';
10import nightlyBuilds from '../features/nightlyBuilds'; 10import nightlyBuilds from '../features/nightlyBuilds';
11import publishDebugInfo from '../features/publishDebugInfo'; 11import publishDebugInfo from '../features/publishDebugInfo';
12import settingsWS from '../features/settingsWS';
13import communityRecipes from '../features/communityRecipes'; 12import communityRecipes from '../features/communityRecipes';
14import todos from '../features/todos'; 13import todos from '../features/todos';
15import appearance from '../features/appearance'; 14import appearance from '../features/appearance';
16 15
17import { DEFAULT_FEATURES_CONFIG } from '../config';
18
19export default class FeaturesStore extends Store { 16export default class FeaturesStore extends Store {
20 @observable defaultFeaturesRequest = new CachedRequest( 17 @observable defaultFeaturesRequest = new CachedRequest(
21 this.api.features, 18 this.api.features,
@@ -27,7 +24,7 @@ export default class FeaturesStore extends Store {
27 'features', 24 'features',
28 ); 25 );
29 26
30 @observable features = { ...DEFAULT_FEATURES_CONFIG }; 27 @observable features = { };
31 28
32 async setup() { 29 async setup() {
33 this.registerReactions([ 30 this.registerReactions([
@@ -41,12 +38,12 @@ export default class FeaturesStore extends Store {
41 38
42 @computed get anonymousFeatures() { 39 @computed get anonymousFeatures() {
43 return ( 40 return (
44 this.defaultFeaturesRequest.execute().result || DEFAULT_FEATURES_CONFIG 41 this.defaultFeaturesRequest.execute().result || {}
45 ); 42 );
46 } 43 }
47 44
48 _updateFeatures = () => { 45 _updateFeatures = () => {
49 const features = { ...DEFAULT_FEATURES_CONFIG }; 46 const features = { };
50 if (this.stores.user.isLoggedIn) { 47 if (this.stores.user.isLoggedIn) {
51 let requestResult = {}; 48 let requestResult = {};
52 try { 49 try {
@@ -77,7 +74,6 @@ export default class FeaturesStore extends Store {
77 quickSwitch(); 74 quickSwitch();
78 nightlyBuilds(); 75 nightlyBuilds();
79 publishDebugInfo(); 76 publishDebugInfo();
80 settingsWS(this.stores, this.actions);
81 communityRecipes(this.stores, this.actions); 77 communityRecipes(this.stores, this.actions);
82 todos(this.stores, this.actions); 78 todos(this.stores, this.actions);
83 appearance(this.stores); 79 appearance(this.stores);
diff --git a/src/stores/GlobalErrorStore.js b/src/stores/GlobalErrorStore.js
index 7cbfdc608..9c851d6f2 100644
--- a/src/stores/GlobalErrorStore.js
+++ b/src/stores/GlobalErrorStore.js
@@ -64,7 +64,7 @@ export default class GlobalErrorStore extends Store {
64 this.response = {}; 64 this.response = {};
65 } 65 }
66 if (this.error.status === 401) { 66 if (this.error.status === 401) {
67 window.ferdi.stores.app.authRequestFailed = true; 67 window['ferdi'].stores.app.authRequestFailed = true;
68 // this.actions.user.logout({ serverLogout: true }); 68 // this.actions.user.logout({ serverLogout: true });
69 } 69 }
70 } 70 }
@@ -78,10 +78,10 @@ export default class GlobalErrorStore extends Store {
78 }, 78 },
79 error: this.error, 79 error: this.error,
80 response: this.response, 80 response: this.response,
81 server: window.ferdi.stores.settings.app.server, 81 server: window['ferdi'].stores.settings.app.server,
82 }); 82 });
83 } else { 83 } else {
84 window.ferdi.stores.app.authRequestFailed = false; 84 window['ferdi'].stores.app.authRequestFailed = false;
85 } 85 }
86 }); 86 });
87} 87}
diff --git a/src/stores/ServicesStore.js b/src/stores/ServicesStore.js
index 4f7ad7442..926ee36f0 100644
--- a/src/stores/ServicesStore.js
+++ b/src/stores/ServicesStore.js
@@ -82,6 +82,7 @@ export default class ServicesStore extends Store {
82 this.actions.service.setUnreadMessageCount.listen( 82 this.actions.service.setUnreadMessageCount.listen(
83 this._setUnreadMessageCount.bind(this), 83 this._setUnreadMessageCount.bind(this),
84 ); 84 );
85 this.actions.service.setDialogTitle.listen(this._setDialogTitle.bind(this));
85 this.actions.service.openWindow.listen(this._openWindow.bind(this)); 86 this.actions.service.openWindow.listen(this._openWindow.bind(this));
86 this.actions.service.filter.listen(this._filter.bind(this)); 87 this.actions.service.filter.listen(this._filter.bind(this));
87 this.actions.service.resetFilter.listen(this._resetFilter.bind(this)); 88 this.actions.service.resetFilter.listen(this._resetFilter.bind(this));
@@ -646,6 +647,12 @@ export default class ServicesStore extends Store {
646 service.unreadIndirectMessageCount = count.indirect; 647 service.unreadIndirectMessageCount = count.indirect;
647 } 648 }
648 649
650 @action _setDialogTitle({ serviceId, dialogTitle }) {
651 const service = this.one(serviceId);
652
653 service.dialogTitle = dialogTitle;
654 }
655
649 @action _setWebviewReference({ serviceId, webview }) { 656 @action _setWebviewReference({ serviceId, webview }) {
650 const service = this.one(serviceId); 657 const service = this.one(serviceId);
651 658
@@ -683,6 +690,9 @@ export default class ServicesStore extends Store {
683 // TODO: add checks to not focus service when router path is /settings or /auth 690 // TODO: add checks to not focus service when router path is /settings or /auth
684 const service = this.active; 691 const service = this.active;
685 if (service) { 692 if (service) {
693 document.title = `Ferdi - ${service.name} ${
694 service.dialogTitle ? ` - ${service.dialogTitle}` : ''
695 } ${service._webview ? `- ${service._webview.getTitle()}` : ''}`;
686 this._focusService({ serviceId: service.id }); 696 this._focusService({ serviceId: service.id });
687 if (this.stores.settings.app.splitMode && !focusEvent) { 697 if (this.stores.settings.app.splitMode && !focusEvent) {
688 setTimeout(() => { 698 setTimeout(() => {
@@ -741,6 +751,16 @@ export default class ServicesStore extends Store {
741 751
742 break; 752 break;
743 } 753 }
754 case 'active-dialog-title': {
755 debug(`Received active dialog title from '${serviceId}'`, args[0]);
756
757 this.actions.service.setDialogTitle({
758 serviceId,
759 dialogTitle: args[0],
760 });
761
762 break;
763 }
744 case 'notification': { 764 case 'notification': {
745 const { options } = args[0]; 765 const { options } = args[0];
746 766
@@ -1063,7 +1083,9 @@ export default class ServicesStore extends Store {
1063 const service = this.active; 1083 const service = this.active;
1064 if (service) { 1084 if (service) {
1065 this.actions.service.focusService({ serviceId: service.id }); 1085 this.actions.service.focusService({ serviceId: service.id });
1066 document.title = `Ferdi - ${service.name}`; 1086 document.title = `Ferdi - ${service.name} ${
1087 service.dialogTitle ? ` - ${service.dialogTitle}` : ''
1088 } ${service._webview ? `- ${service._webview.getTitle()}` : ''}`;
1067 } else { 1089 } else {
1068 debug('No service is active'); 1090 debug('No service is active');
1069 } 1091 }
diff --git a/src/styles/tabs.scss b/src/styles/tabs.scss
index 16318b9f6..ab7cee08d 100644
--- a/src/styles/tabs.scss
+++ b/src/styles/tabs.scss
@@ -1,6 +1,8 @@
1@import './config.scss'; 1@import './config.scss';
2 2
3.theme__dark .tab-item { 3.theme__dark .tab-item {
4 color: $dark-theme-text-color;
5
4 &.is-active { 6 &.is-active {
5 background: $dark-theme-gray; 7 background: $dark-theme-gray;
6 8
@@ -54,6 +56,22 @@
54 } 56 }
55 } 57 }
56 58
59 &.is-label-enabled{
60 height: min-content;
61 overflow: hidden;
62 padding-top: 8px;
63 padding-bottom: 8px;
64 }
65
66 .tab-item__label {
67 display: block;
68 margin-top: 6px;
69 font-size: 11px;
70 padding-left: 4px;
71 padding-right: 4px;
72 line-height: 13px;
73 }
74
57 &.is-disabled .tab-item__icon { 75 &.is-disabled .tab-item__icon {
58 filter: grayscale(100%) opacity(0.2); 76 filter: grayscale(100%) opacity(0.2);
59 } 77 }
@@ -136,4 +154,13 @@
136 &.is-reordering { 154 &.is-reordering {
137 z-index: 99999; 155 z-index: 99999;
138 } 156 }
157
158 .tab-item__error-icon{
159 font-size: 1.9em;
160 color: red;
161 position: absolute;
162 top: 6px;
163 right: 0px;
164 transform: scaleX(1.5);
165 }
139} 166}
diff --git a/src/webview/badge.ts b/src/webview/badge.ts
index fb696723d..02bd3fb15 100644
--- a/src/webview/badge.ts
+++ b/src/webview/badge.ts
@@ -3,15 +3,6 @@ import { ipcRenderer } from 'electron';
3const debug = require('debug')('Ferdi:Plugin:BadgeHandler'); 3const debug = require('debug')('Ferdi:Plugin:BadgeHandler');
4 4
5export class BadgeHandler { 5export class BadgeHandler {
6 countCache: { direct: number; indirect: number };
7
8 constructor() {
9 this.countCache = {
10 direct: 0,
11 indirect: 0,
12 };
13 }
14
15 // TODO: Need to extract this into a utility class and reuse outside of the recipes 6 // TODO: Need to extract this into a utility class and reuse outside of the recipes
16 safeParseInt(text: string | number | undefined | null) { 7 safeParseInt(text: string | number | undefined | null) {
17 if (text === undefined || text === null) { 8 if (text === undefined || text === null) {
@@ -35,16 +26,7 @@ export class BadgeHandler {
35 indirect: this.safeParseInt(indirect), 26 indirect: this.safeParseInt(indirect),
36 }; 27 };
37 28
38 if ( 29 debug('Sending badge count to host: %j', count);
39 this.countCache.direct.toString() === count.direct.toString() &&
40 this.countCache.indirect.toString() === count.indirect.toString()
41 ) {
42 return;
43 }
44
45 debug('Sending badge count to host', count);
46 ipcRenderer.sendToHost('message-counts', count); 30 ipcRenderer.sendToHost('message-counts', count);
47
48 Object.assign(this.countCache, count);
49 } 31 }
50} 32}
diff --git a/src/webview/dialogTitle.ts b/src/webview/dialogTitle.ts
new file mode 100644
index 000000000..f9a1aac6f
--- /dev/null
+++ b/src/webview/dialogTitle.ts
@@ -0,0 +1,33 @@
1import { ipcRenderer } from 'electron';
2
3const debug = require('debug')('Ferdi:Plugin:DialogTitleHandler');
4
5export class DialogTitleHandler {
6 titleCache: { title: string };
7
8 constructor() {
9 this.titleCache = {
10 title: '',
11 };
12 }
13
14 safeGetTitle(title: string | undefined | null) {
15 if (!title) {
16 return '';
17 }
18
19 return title;
20 }
21
22 setDialogTitle(title: string | undefined | null) {
23 const newTitle = this.safeGetTitle(title);
24 if (this.titleCache.title === newTitle) {
25 return;
26 }
27
28 debug('Sending active dialog title to host %s', newTitle);
29 ipcRenderer.sendToHost('active-dialog-title', newTitle);
30
31 this.titleCache.title = newTitle;
32 }
33}
diff --git a/src/webview/lib/RecipeWebview.js b/src/webview/lib/RecipeWebview.js
index f1d493e7c..ebe88ed85 100644
--- a/src/webview/lib/RecipeWebview.js
+++ b/src/webview/lib/RecipeWebview.js
@@ -5,8 +5,14 @@ import { pathExistsSync, readFileSync, existsSync } from 'fs-extra';
5const debug = require('debug')('Ferdi:Plugin:RecipeWebview'); 5const debug = require('debug')('Ferdi:Plugin:RecipeWebview');
6 6
7class RecipeWebview { 7class RecipeWebview {
8 constructor(badgeHandler, notificationsHandler, sessionHandler) { 8 constructor(
9 badgeHandler,
10 dialogTitleHandler,
11 notificationsHandler,
12 sessionHandler,
13 ) {
9 this.badgeHandler = badgeHandler; 14 this.badgeHandler = badgeHandler;
15 this.dialogTitleHandler = dialogTitleHandler;
10 this.notificationsHandler = notificationsHandler; 16 this.notificationsHandler = notificationsHandler;
11 this.sessionHandler = sessionHandler; 17 this.sessionHandler = sessionHandler;
12 18
@@ -59,6 +65,17 @@ class RecipeWebview {
59 } 65 }
60 66
61 /** 67 /**
68 * Set the active dialog title to the app title
69 *
70 * @param {string | undefined | null} title Set the active dialog title
71 * to the app title
72 * eg. WhatsApp contact name
73 */
74 setDialogTitle(title) {
75 this.dialogTitleHandler.setDialogTitle(title);
76 }
77
78 /**
62 * Safely parse the given text into an integer 79 * Safely parse the given text into an integer
63 * 80 *
64 * @param {string | number | undefined | null} text to be parsed 81 * @param {string | number | undefined | null} text to be parsed
@@ -127,7 +144,10 @@ class RecipeWebview {
127 } 144 }
128 145
129 clearStorageData(serviceId, targetsToClear) { 146 clearStorageData(serviceId, targetsToClear) {
130 ipcRenderer.send('clear-storage-data', { serviceId, targetsToClear }); 147 ipcRenderer.send('clear-storage-data', {
148 serviceId,
149 targetsToClear,
150 });
131 } 151 }
132 152
133 releaseServiceWorkers() { 153 releaseServiceWorkers() {
diff --git a/src/webview/lib/Userscript.js b/src/webview/lib/Userscript.js
index bed2b1ff8..f7bb99206 100644
--- a/src/webview/lib/Userscript.js
+++ b/src/webview/lib/Userscript.js
@@ -60,6 +60,16 @@ export default class Userscript {
60 } 60 }
61 61
62 /** 62 /**
63 * Set active dialog title to the app title
64 * @param {*} title Dialog title
65 */
66 setDialogTitle(title) {
67 if (this.recipe && this.recipe.setDialogTitle) {
68 this.recipe.setDialogTitle(title);
69 }
70 }
71
72 /**
63 * Inject CSS files into the current page 73 * Inject CSS files into the current page
64 * 74 *
65 * @param {...string} files 75 * @param {...string} files
diff --git a/src/webview/recipe.js b/src/webview/recipe.js
index 5cab28c09..92c1ee2f0 100644
--- a/src/webview/recipe.js
+++ b/src/webview/recipe.js
@@ -23,6 +23,7 @@ import RecipeWebview from './lib/RecipeWebview';
23import Userscript from './lib/Userscript'; 23import Userscript from './lib/Userscript';
24 24
25import { BadgeHandler } from './badge'; 25import { BadgeHandler } from './badge';
26import { DialogTitleHandler } from './dialogTitle';
26import { SessionHandler } from './sessionHandler'; 27import { SessionHandler } from './sessionHandler';
27import contextMenu from './contextMenu'; 28import contextMenu from './contextMenu';
28import { 29import {
@@ -51,6 +52,8 @@ const debug = require('debug')('Ferdi:Plugin');
51 52
52const badgeHandler = new BadgeHandler(); 53const badgeHandler = new BadgeHandler();
53 54
55const dialogTitleHandler = new DialogTitleHandler();
56
54const sessionHandler = new SessionHandler(); 57const sessionHandler = new SessionHandler();
55 58
56const notificationsHandler = new NotificationsHandler(); 59const notificationsHandler = new NotificationsHandler();
@@ -106,6 +109,7 @@ contextBridge.exposeInMainWorld('ferdi', {
106 open: window.open, 109 open: window.open,
107 setBadge: (direct, indirect) => badgeHandler.setBadge(direct, indirect), 110 setBadge: (direct, indirect) => badgeHandler.setBadge(direct, indirect),
108 safeParseInt: text => badgeHandler.safeParseInt(text), 111 safeParseInt: text => badgeHandler.safeParseInt(text),
112 setDialogTitle: title => dialogTitleHandler.setDialogTitle(title),
109 displayNotification: (title, options) => 113 displayNotification: (title, options) =>
110 notificationsHandler.displayNotification(title, options), 114 notificationsHandler.displayNotification(title, options),
111 getDisplayMediaSelector, 115 getDisplayMediaSelector,
@@ -200,6 +204,7 @@ class RecipeController {
200 try { 204 try {
201 this.recipe = new RecipeWebview( 205 this.recipe = new RecipeWebview(
202 badgeHandler, 206 badgeHandler,
207 dialogTitleHandler,
203 notificationsHandler, 208 notificationsHandler,
204 sessionHandler, 209 sessionHandler,
205 ); 210 );
diff --git a/tsconfig.json b/tsconfig.json
index c1c2fded2..58bd1e837 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -34,5 +34,6 @@
34 "noFallthroughCasesInSwitch": true, 34 "noFallthroughCasesInSwitch": true,
35 "resolveJsonModule": true, 35 "resolveJsonModule": true,
36 "forceConsistentCasingInFileNames": true 36 "forceConsistentCasingInFileNames": true
37 } 37 },
38 "exclude": ["node_modules", "build"]
38} 39}