aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Vijay A <avijayr@protonmail.com>2021-08-24 10:22:22 +0530
committerLibravatar Vijay A <avijayr@protonmail.com>2021-08-24 10:22:22 +0530
commit2dc7b2fd3976853f3dc2f182f12cfe11c3b83688 (patch)
tree22fc7a9e4d3ddd2be16821c871259fb067c7df30
parentdocs: upgraded version to 5.6.1-beta.1 (diff)
parent5.6.1-nightly.37 [skip ci] (diff)
downloadferdium-app-2dc7b2fd3976853f3dc2f182f12cfe11c3b83688.tar.gz
ferdium-app-2dc7b2fd3976853f3dc2f182f12cfe11c3b83688.tar.zst
ferdium-app-2dc7b2fd3976853f3dc2f182f12cfe11c3b83688.zip
Merge remote-tracking branch 'origin/develop' into release
-rw-r--r--.github/workflows/ferdi-builds.yml14
-rw-r--r--.gitignore334
-rwxr-xr-x.husky/prepare-commit-msg2
-rw-r--r--CHANGELOG.md117
-rw-r--r--README.md14
-rw-r--r--build-helpers/entitlements.mas.inherit.plist4
-rw-r--r--build-helpers/entitlements.mas.plist4
-rw-r--r--docs/example-feature/index.js4
-rw-r--r--docs/example-feature/store.js8
-rw-r--r--electron-builder.yml4
-rw-r--r--gulpfile.babel.js90
-rw-r--r--package-lock.json1264
-rw-r--r--package.json51
m---------recipes0
-rw-r--r--scripts/add-crowdin-contributors.js (renamed from src/scripts/add-crowdin-contributors.js)2
-rw-r--r--scripts/build-theme-info.js (renamed from src/scripts/build-theme-info.js)0
-rw-r--r--scripts/link-readme.js (renamed from src/scripts/link-readme.js)0
-rw-r--r--scripts/theme/default/legacy.js (renamed from src/theme/default/legacy.js)2
-rw-r--r--src/api/apiBase.js1
-rw-r--r--src/api/server/LocalApi.ts (renamed from src/api/server/LocalApi.js)10
-rw-r--r--src/api/server/ServerApi.js22
-rw-r--r--src/api/utils/auth.js6
-rw-r--r--src/app.js5
-rw-r--r--src/components/layout/AppLayout.js2
-rw-r--r--src/components/layout/Sidebar.js3
-rw-r--r--src/components/services/content/ServiceWebview.js4
-rw-r--r--src/components/services/tabs/TabItem.js6
-rw-r--r--src/components/settings/settings/EditSettingsForm.js51
-rw-r--r--src/components/ui/AppLoader/index.js1
-rw-r--r--src/components/ui/Link.js10
-rw-r--r--src/config.ts (renamed from src/config.js)3
-rw-r--r--src/containers/settings/RecipesScreen.js28
-rw-r--r--src/electron/ipc-api/dnd.js9
-rw-r--r--src/electron/ipc-api/focusState.js9
-rw-r--r--src/electron/ipc-api/index.js2
-rw-r--r--src/environment.js19
-rw-r--r--src/features/announcements/api.js4
-rw-r--r--src/features/announcements/index.js4
-rw-r--r--src/features/appearance/index.js4
-rw-r--r--src/features/nightlyBuilds/Component.js4
-rw-r--r--src/features/quickSwitch/Component.js8
-rwxr-xr-xsrc/features/settingsWS/index.js4
-rw-r--r--src/features/shareFranz/Component.js159
-rw-r--r--src/features/shareFranz/index.js35
-rw-r--r--src/features/shareFranz/store.js8
-rw-r--r--src/features/todos/index.js8
-rw-r--r--src/features/workspaces/components/WorkspaceDrawerItem.js4
-rw-r--r--src/features/workspaces/index.js8
-rw-r--r--src/helpers/array-helpers.ts (renamed from src/helpers/array-helpers.js)2
-rw-r--r--src/helpers/asar-helpers.ts (renamed from src/helpers/asar-helpers.js)2
-rw-r--r--src/helpers/async-helpers.ts (renamed from src/helpers/async-helpers.js)2
-rw-r--r--src/helpers/i18n-helpers.ts (renamed from src/helpers/i18n-helpers.js)4
-rw-r--r--src/helpers/password-helpers.ts (renamed from src/helpers/password-helpers.js)6
-rw-r--r--src/helpers/recipe-helpers.ts (renamed from src/helpers/recipe-helpers.js)6
-rw-r--r--src/helpers/routing-helpers.js4
-rw-r--r--src/helpers/routing-helpers.ts3
-rw-r--r--src/helpers/schedule-helpers.ts (renamed from src/helpers/schedule-helpers.js)2
-rw-r--r--src/helpers/url-helpers.js20
-rw-r--r--src/helpers/url-helpers.ts37
-rw-r--r--src/helpers/userAgent-helpers.ts (renamed from src/helpers/userAgent-helpers.js)2
-rw-r--r--src/helpers/visibility-helper.js27
-rw-r--r--src/i18n/locales/af.json10
-rw-r--r--src/i18n/locales/ar.json10
-rw-r--r--src/i18n/locales/be.json10
-rw-r--r--src/i18n/locales/bs.json10
-rw-r--r--src/i18n/locales/ca.json10
-rw-r--r--src/i18n/locales/cs.json10
-rw-r--r--src/i18n/locales/da.json10
-rw-r--r--src/i18n/locales/de.json10
-rw-r--r--src/i18n/locales/defaultMessages.json571
-rw-r--r--src/i18n/locales/el.json10
-rw-r--r--src/i18n/locales/en-US.json10
-rw-r--r--src/i18n/locales/es.json10
-rw-r--r--src/i18n/locales/fi.json10
-rw-r--r--src/i18n/locales/fr.json10
-rw-r--r--src/i18n/locales/ga.json10
-rw-r--r--src/i18n/locales/he.json10
-rw-r--r--src/i18n/locales/hr.json10
-rw-r--r--src/i18n/locales/hu.json152
-rw-r--r--src/i18n/locales/id.json10
-rw-r--r--src/i18n/locales/it.json10
-rw-r--r--src/i18n/locales/ja.json76
-rw-r--r--src/i18n/locales/ka.json10
-rw-r--r--src/i18n/locales/ko.json10
-rw-r--r--src/i18n/locales/nl-BE.json10
-rw-r--r--src/i18n/locales/nl.json10
-rw-r--r--src/i18n/locales/no.json10
-rw-r--r--src/i18n/locales/pl.json10
-rw-r--r--src/i18n/locales/pt-BR.json36
-rw-r--r--src/i18n/locales/pt.json10
-rw-r--r--src/i18n/locales/ro.json10
-rw-r--r--src/i18n/locales/ru.json10
-rw-r--r--src/i18n/locales/sk.json10
-rw-r--r--src/i18n/locales/sl.json10
-rw-r--r--src/i18n/locales/sr.json10
-rw-r--r--src/i18n/locales/sv.json10
-rw-r--r--src/i18n/locales/tr.json84
-rw-r--r--src/i18n/locales/uk.json10
-rw-r--r--src/i18n/locales/vi.json10
-rw-r--r--src/i18n/locales/zh-HANT.json10
-rw-r--r--src/i18n/locales/zh.json84
-rw-r--r--src/i18n/messages/src/components/layout/AppLayout.json16
-rw-r--r--src/i18n/messages/src/components/settings/settings/EditSettingsForm.json167
-rw-r--r--src/i18n/messages/src/features/shareFranz/Component.json93
-rw-r--r--src/i18n/messages/src/lib/Menu.json292
-rw-r--r--src/index.js24
-rw-r--r--src/internal-server/app/Controllers/Http/RecipeController.js10
-rw-r--r--src/internal-server/app/Controllers/Http/ServiceController.js17
-rw-r--r--src/internal-server/app/Controllers/Http/UserController.js25
-rw-r--r--src/internal-server/start/routes.js5
-rw-r--r--src/lib/Menu.js91
-rw-r--r--src/models/News.ts (renamed from src/models/News.js)17
-rw-r--r--src/models/Order.js22
-rw-r--r--src/models/Recipe.ts (renamed from src/models/Recipe.js)74
-rw-r--r--src/models/RecipePreview.ts (renamed from src/models/RecipePreview.js)12
-rw-r--r--src/models/Service.js11
-rw-r--r--src/models/User.ts (renamed from src/models/User.js)44
-rw-r--r--src/prop-types.ts (renamed from src/prop-types.js)0
-rw-r--r--src/sentry.ts (renamed from src/sentry.js)0
-rw-r--r--src/stores/AppStore.js23
-rw-r--r--src/stores/FeaturesStore.js2
-rw-r--r--src/stores/ServicesStore.js144
-rw-r--r--src/stores/SettingsStore.js12
-rw-r--r--src/stores/UIStore.js8
-rw-r--r--src/stores/index.ts (renamed from src/stores/index.js)5
-rw-r--r--src/styles/settings.scss4
-rw-r--r--src/webview/badge.ts (renamed from src/webview/badge.js)29
-rw-r--r--src/webview/contextMenuBuilder.js27
-rw-r--r--src/webview/darkmode.ts (renamed from src/webview/darkmode.js)6
-rw-r--r--src/webview/recipe.js2
-rw-r--r--src/webview/spellchecker.ts (renamed from src/webview/spellchecker.js)14
-rw-r--r--src/webview/zoom.ts (renamed from src/webview/zoom.js)6
-rw-r--r--tsconfig.json4
-rw-r--r--tsconfig.settings.json18
-rw-r--r--uidev/src/app.tsx2
135 files changed, 2246 insertions, 2795 deletions
diff --git a/.github/workflows/ferdi-builds.yml b/.github/workflows/ferdi-builds.yml
index d9627c816..7a701758e 100644
--- a/.github/workflows/ferdi-builds.yml
+++ b/.github/workflows/ferdi-builds.yml
@@ -190,7 +190,6 @@ jobs:
190 echo "ELECTRON_BUILDER_CACHE=$HOME/.cache/electron-builder" >> $GITHUB_ENV 190 echo "ELECTRON_BUILDER_CACHE=$HOME/.cache/electron-builder" >> $GITHUB_ENV
191 echo "MANUAL_REBUILD_ON_NIGHTLY=${{ github.event_name == 'workflow_dispatch' && contains(github.event.inputs.message, '[nightly branch]') }}" >> $GITHUB_ENV 191 echo "MANUAL_REBUILD_ON_NIGHTLY=${{ github.event_name == 'workflow_dispatch' && contains(github.event.inputs.message, '[nightly branch]') }}" >> $GITHUB_ENV
192 echo "SKIP_NOTARIZATION=${{ !contains(github.repository_owner, 'getferdi') }}" >> $GITHUB_ENV 192 echo "SKIP_NOTARIZATION=${{ !contains(github.repository_owner, 'getferdi') }}" >> $GITHUB_ENV
193 echo "PACKAGE_VERSION=$(node -p "require('./package.json').version")" >> $GITHUB_ENV
194 - name: Checkout code along with submodules for the 'nightly' branch if the trigger event is 'scheduled' or this is a forced rebuild on the nightly branch 193 - name: Checkout code along with submodules for the 'nightly' branch if the trigger event is 'scheduled' or this is a forced rebuild on the nightly branch
195 uses: actions/checkout@v2 194 uses: actions/checkout@v2
196 if: ${{ github.event_name == 'schedule' || env.MANUAL_REBUILD_ON_NIGHTLY == 'true' }} 195 if: ${{ github.event_name == 'schedule' || env.MANUAL_REBUILD_ON_NIGHTLY == 'true' }}
@@ -242,6 +241,9 @@ jobs:
242 run: npm cache clean --force 241 run: npm cache clean --force
243 - name: Install node dependencies recursively 242 - name: Install node dependencies recursively
244 run: npx lerna bootstrap 243 run: npx lerna bootstrap
244 - name: Figure out used package.json version
245 run: echo "PACKAGE_VERSION=$(node -p 'require("./package.json").version')" >> $GITHUB_ENV
246 shell: bash
245 - name: Package recipes 247 - name: Package recipes
246 run: npm i && npm run package 248 run: npm i && npm run package
247 working-directory: ./recipes 249 working-directory: ./recipes
@@ -260,10 +262,10 @@ jobs:
260 run: | 262 run: |
261 sudo snap install snapcraft --classic 263 sudo snap install snapcraft --classic
262 echo "$SNAPCRAFT_LOGIN" | snapcraft login --with - 264 echo "$SNAPCRAFT_LOGIN" | snapcraft login --with -
263 npm run build -- --publish always -c.publish.provider=github -c.publish.owner=${{ github.repository_owner }} -c.publish.repo=nightlies 265 npm run build -- --publish always -c.publish.provider=github -c.publish.owner=${{ github.repository_owner }} -c.publish.repo=nightlies -c.snap.publish.provider=snapStore -c.snap.publish.repo=nightlies -c.snap.publish.channels=edge
264 snapcraft logout 266 snapcraft logout
265 shell: bash 267 shell: bash
266 - name: Build Ferdi with publish for 'release' branch 268 - name: Build Ferdi with publish for 'release' beta branch
267 if: ${{ env.GIT_BRANCH_NAME == 'release' && contains(env.PACKAGE_VERSION, 'beta') }} 269 if: ${{ env.GIT_BRANCH_NAME == 'release' && contains(env.PACKAGE_VERSION, 'beta') }}
268 env: 270 env:
269 GH_TOKEN: ${{ secrets.FERDI_PUBLISH_TOKEN }} 271 GH_TOKEN: ${{ secrets.FERDI_PUBLISH_TOKEN }}
@@ -272,10 +274,10 @@ jobs:
272 run: | 274 run: |
273 sudo snap install snapcraft --classic 275 sudo snap install snapcraft --classic
274 echo "$SNAPCRAFT_LOGIN" | snapcraft login --with - 276 echo "$SNAPCRAFT_LOGIN" | snapcraft login --with -
275 npm run build -- --publish always -c.publish.provider=github -c.publish.owner=${{ github.repository_owner }} -c.publish.repo=ferdi -c.snap.publish.channels=beta 277 npm run build -- --publish always -c.publish.provider=github -c.publish.owner=${{ github.repository_owner }} -c.publish.repo=ferdi -c.snap.publish.provider=snapStore -c.snap.publish.repo=ferdi -c.snap.publish.channels=beta
276 snapcraft logout 278 snapcraft logout
277 shell: bash 279 shell: bash
278 - name: Build Ferdi with publish for 'release' branch 280 - name: Build Ferdi with publish for 'release' stable branch
279 if: ${{ env.GIT_BRANCH_NAME == 'release' && !contains(env.PACKAGE_VERSION, 'beta') }} 281 if: ${{ env.GIT_BRANCH_NAME == 'release' && !contains(env.PACKAGE_VERSION, 'beta') }}
280 env: 282 env:
281 GH_TOKEN: ${{ secrets.FERDI_PUBLISH_TOKEN }} 283 GH_TOKEN: ${{ secrets.FERDI_PUBLISH_TOKEN }}
@@ -284,7 +286,7 @@ jobs:
284 run: | 286 run: |
285 sudo snap install snapcraft --classic 287 sudo snap install snapcraft --classic
286 echo "$SNAPCRAFT_LOGIN" | snapcraft login --with - 288 echo "$SNAPCRAFT_LOGIN" | snapcraft login --with -
287 npm run build -- --publish always -c.publish.provider=github -c.publish.owner=${{ github.repository_owner }} -c.publish.repo=ferdi -c.snap.publish.channels=stable 289 npm run build -- --publish always -c.publish.provider=github -c.publish.owner=${{ github.repository_owner }} -c.publish.repo=ferdi -c.snap.publish.provider=snapStore -c.snap.publish.repo=ferdi -c.snap.publish.channels=stable
288 snapcraft logout 290 snapcraft logout
289 shell: bash 291 shell: bash
290 292
diff --git a/.gitignore b/.gitignore
index f05e9220c..a10427aad 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,17 +1,336 @@
1.idea 1# Created by https://www.toptal.com/developers/gitignore/api/vim,node,yarn,react,macos,visualstudiocode,intellij
2# Edit at https://www.toptal.com/developers/gitignore?templates=vim,node,yarn,react,macos,visualstudiocode,intellij
3
4### Intellij ###
5# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
6# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
7
8# User-specific stuff
9/**/workspace.xml
10.idea/**/tasks.xml
11.idea/**/usage.statistics.xml
12.idea/**/dictionaries
13.idea/**/shelf
14
15# AWS User-specific
16.idea/**/aws.xml
17
18# Generated files
19.idea/**/contentModel.xml
20
21# Sensitive or high-churn files
22.idea/**/dataSources/
23.idea/**/dataSources.ids
24.idea/**/dataSources.local.xml
25.idea/**/sqlDataSources.xml
26.idea/**/dynamic.xml
27.idea/**/uiDesigner.xml
28.idea/**/dbnavigator.xml
29
30# Gradle
31.idea/**/gradle.xml
32.idea/**/libraries
33
34# Gradle and Maven with auto-import
35# When using Gradle or Maven with auto-import, you should exclude module files,
36# since they will be recreated, and may cause churn. Uncomment if using
37# auto-import.
38# .idea/artifacts
39# .idea/compiler.xml
40# .idea/jarRepositories.xml
41# .idea/modules.xml
42# .idea/*.iml
43# .idea/modules
44# *.iml
45# *.ipr
46
47# CMake
48cmake-build-*/
49
50# Mongo Explorer plugin
51.idea/**/mongoSettings.xml
52
53# File-based project format
54*.iws
55
56# IntelliJ
57out/
58
59# mpeltonen/sbt-idea plugin
60.idea_modules/
61
62# JIRA plugin
63atlassian-ide-plugin.xml
64
65# Cursive Clojure plugin
66.idea/replstate.xml
67
68# Crashlytics plugin (for Android Studio and IntelliJ)
69com_crashlytics_export_strings.xml
70crashlytics.properties
71crashlytics-build.properties
72fabric.properties
73
74# Editor-based Rest Client
75.idea/httpRequests
76
77# Android studio 3.1+ serialized cache file
78.idea/caches/build_file_checksums.ser
79
80### Intellij Patch ###
81# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721
82
83# *.iml
84# modules.xml
85# .idea/misc.xml
86# *.ipr
87
88# Sonarlint plugin
89# https://plugins.jetbrains.com/plugin/7973-sonarlint
90.idea/**/sonarlint/
91
92# SonarQube Plugin
93# https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin
94.idea/**/sonarIssues.xml
95
96# Markdown Navigator plugin
97# https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced
98.idea/**/markdown-navigator.xml
99.idea/**/markdown-navigator-enh.xml
100.idea/**/markdown-navigator/
101
102# Cache file creation bug
103# See https://youtrack.jetbrains.com/issue/JBR-2257
104.idea/$CACHE_FILE$
105
106# CodeStream plugin
107# https://plugins.jetbrains.com/plugin/12206-codestream
108.idea/codestream.xml
109
110### macOS ###
111# General
112.DS_Store
113.AppleDouble
114.LSOverride
115
116# Icon must end with two \r
117Icon
118
119
120# Thumbnails
121._*
122
123# Files that might appear in the root of a volume
124.DocumentRevisions-V100
125.fseventsd
126.Spotlight-V100
127.TemporaryItems
128.Trashes
129.VolumeIcon.icns
130.com.apple.timemachine.donotpresent
131
132# Directories potentially created on remote AFP share
133.AppleDB
134.AppleDesktop
135Network Trash Folder
136Temporary Items
137.apdisk
138
139### Node ###
140# Logs
141logs
142*.log
143npm-debug.log*
144yarn-debug.log*
145yarn-error.log*
146lerna-debug.log*
147.pnpm-debug.log*
148
149# Diagnostic reports (https://nodejs.org/api/report.html)
150report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
151
152# Runtime data
153pids
154*.pid
155*.seed
156*.pid.lock
157
158# Directory for instrumented libs generated by jscoverage/JSCover
159lib-cov
160
161# Coverage directory used by tools like istanbul
162coverage
163*.lcov
164
165# nyc test coverage
166.nyc_output
167
168# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
169.grunt
170
171# Bower dependency directory (https://bower.io/)
172bower_components
173
174# node-waf configuration
175.lock-wscript
176
177# Compiled binary addons (https://nodejs.org/api/addons.html)
178build/Release
179
180# Dependency directories
181node_modules/
182jspm_packages/
183
184# Snowpack dependency directory (https://snowpack.dev/)
185web_modules/
186
187# TypeScript cache
188*.tsbuildinfo
189
190# Optional npm cache directory
191.npm
192
193# Optional eslint cache
194.eslintcache
195
196# Microbundle cache
197.rpt2_cache/
198.rts2_cache_cjs/
199.rts2_cache_es/
200.rts2_cache_umd/
201
202# Optional REPL history
203.node_repl_history
204
205# Output of 'npm pack'
206*.tgz
207
208# Yarn Integrity file
209.yarn-integrity
210
211# dotenv environment variables file
212.env
213.env.test
214.env.production
215
216# parcel-bundler cache (https://parceljs.org/)
217.cache
218.parcel-cache
219
220# Next.js build output
221.next
222out
223
224# Nuxt.js build / generate output
225.nuxt
226dist
227
228# Gatsby files
229.cache/
230# Comment in the public line in if your project uses Gatsby and not Next.js
231# https://nextjs.org/blog/next-9-1#public-directory-support
232# public
233
234# vuepress build output
235.vuepress/dist
236
237# Serverless directories
238.serverless/
239
240# FuseBox cache
241.fusebox/
242
243# DynamoDB Local files
244.dynamodb/
245
246# TernJS port file
247.tern-port
248
249# Stores VSCode versions used for testing VSCode extensions
250.vscode-test
251
252# yarn v2
253.yarn/cache
254.yarn/unplugged
255.yarn/build-state.yml
256.yarn/install-state.gz
257.pnp.*
258
259### react ###
260.DS_*
261**/*.backup.*
262**/*.back.*
263
2node_modules 264node_modules
265
266*.sublime*
267
268psd
269thumb
270sketch
271
272### Vim ###
273# Swap
274[._]*.s[a-v][a-z]
275!*.svg # comment out if you don't need vector files
276[._]*.sw[a-p]
277[._]s[a-rt-v][a-z]
278[._]ss[a-gi-z]
279[._]sw[a-p]
280
281# Session
282Session.vim
283Sessionx.vim
284
285# Temporary
286.netrwhist
287*~
288# Auto-generated tag files
289tags
290# Persistent undo
291[._]*.un~
292
293### VisualStudioCode ###
294.vscode/*
295!.vscode/settings.json
296!.vscode/tasks.json
297!.vscode/launch.json
298!.vscode/extensions.json
299*.code-workspace
300
301# Local History for Visual Studio Code
302.history/
303
304### VisualStudioCode Patch ###
305# Ignore all local history of files
306.history
307.ionide
308
309### yarn ###
310# https://yarnpkg.com/advanced/qa#which-files-should-be-gitignored
311
312.yarn/*
313!.yarn/releases
314!.yarn/plugins
315!.yarn/sdks
316!.yarn/versions
317
318# if you are NOT using Zero-installs, then:
319# comment the following lines
320!.yarn/cache
321
322# and uncomment the following lines
323# .pnp.*
324
325# End of https://www.toptal.com/developers/gitignore/api/vim,node,yarn,react,macos,visualstudiocode,intellij
326
3flow-typed 327flow-typed
4out 328out
5.DS_Store
6build 329build
7.tmp 330.tmp
8.stage 331.stage
9.env
10yarn-error.log
11npm-debug.log*
12lerna-debug.log 332lerna-debug.log
13uidev/lib 333uidev/lib
14*.tsbuildinfo
15server*.log 334server*.log
16 335
17# These entries have been merged from the git submodule repo 'internal-server' 336# These entries have been merged from the git submodule repo 'internal-server'
@@ -19,9 +338,6 @@ server*.log
19# Adonis directory for storing tmp files 338# Adonis directory for storing tmp files
20/src/internal-server/tmp 339/src/internal-server/tmp
21 340
22# Environment variables, never commit this file
23/src/internal-server/.env
24
25# The development sqlite file 341# The development sqlite file
26/src/internal-server/database/development.sqlite 342/src/internal-server/database/development.sqlite
27/src/internal-server/database/adonis.sqlite 343/src/internal-server/database/adonis.sqlite
diff --git a/.husky/prepare-commit-msg b/.husky/prepare-commit-msg
index 1c2c393cd..0c2aa2281 100755
--- a/.husky/prepare-commit-msg
+++ b/.husky/prepare-commit-msg
@@ -6,5 +6,5 @@ FILE_NAME="$(dirname "$0")/_/husky.sh"
6if [ -f $FILE_NAME ]; then 6if [ -f $FILE_NAME ]; then
7 . $FILE_NAME 7 . $FILE_NAME
8 8
9 exec < /dev/tty && git cz --hook || true 9 ( exec < /dev/tty && git cz --hook ) || true
10fi 10fi
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e043ac1af..8719e3387 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,120 @@
1# [v5.6.1-nightly.37](https://github.com/getferdi/ferdi/compare/v5.6.1-nightly.36...v5.6.1-nightly.37) (2021-08-24)
2
3- Upgraded to [electron 13.2.2](https://github.com/electron/electron/releases/tag/v13.2.2) 💖 @vraravam
4
5### Bug Fixes
6
7- Fixing bug where the service-defaults are not merged when creating a service 💖 @vraravam
8
9# [v5.6.1-nightly.36](https://github.com/getferdi/ferdi/compare/v5.6.1-nightly.35...v5.6.1-nightly.36) (2021-08-23)
10
11### Bug Fixes
12
13- Audio toggle is now decoupled from notification toggle (#1691) 💖 @vraravam
14
15### Internal
16
17- [Perf] Removed double nested looping while deactivating service (#1824) 💖 @vraravam
18- Upgraded `electron-builder` to `22.12.1` which will allow converion from `npm` to `pnpm` 💖 @mhatvan
19
20# [v5.6.1-nightly.35](https://github.com/getferdi/ferdi/compare/v5.6.1-nightly.34...v5.6.1-nightly.35) (2021-08-22)
21
22- Remove checks that refers to paid subscription since Ferdi is always free 💖 @vraravam
23- Remove 'shareFranz' feature since its always turned off for Ferdi 💖 @vraravam
24
25### Bug Fixes
26
27- Incorrect position while adding a new service when there were pre-existing services (#1820) 💖 @vraravam
28
29### Internal
30
31- Typescript conversion 💖 @vraravam
32- Set stricter rules for typescript conversion 💖 @vraravam
33- Move build-time js files out of 'src' and into 'scripts' 💖 @vraravam
34
35# [v5.6.1-nightly.34](https://github.com/getferdi/ferdi/compare/v5.6.1-nightly.33...v5.6.1-nightly.34) (2021-08-21)
36
37### Bug Fixes
38
39- Check if default app protocol is different before overriding it (#1818) 💖 @ayxos, @vraravam
40
41# [v5.6.1-nightly.33](https://github.com/getferdi/ferdi/compare/v5.6.1-nightly.32...v5.6.1-nightly.33) (2021-08-19)
42
43### Bug Fixes
44
45- Reverted back to `moment.js` from `day.js` due to bug #1811 💖 @vraravam
46
47# [v5.6.1-nightly.32](https://github.com/getferdi/ferdi/compare/v5.6.1-nightly.30...v5.6.1-nightly.32) (2021-08-18)
48
49- Sorted the recipes according to their service name in the 'Add new Service' screen 💖 @vraravam
50- Upgraded to [electron 13.2.1](https://github.com/electron/electron/releases/tag/v13.2.1) 💖 @vraravam
51
52# [v5.6.1-nightly.30](https://github.com/getferdi/ferdi/compare/v5.6.1-nightly.29...v5.6.1-nightly.30) (2021-08-17)
53
54### Bug Fixes
55
56- Fix snap assets capturing on GitHub (#1802) 💖 @mhatvan
57
58### Internal
59
60- Minor cleanup of 'NaN' logic when loading recipe badges 💖 @vraravam
61
62# [v5.6.1-nightly.29](https://github.com/getferdi/ferdi/compare/v5.6.1-nightly.28...v5.6.1-nightly.29) (2021-08-17)
63
64### Bug Fixes
65
66- Fix issue with left-clicking regression that was accidentally introduced in the previous nightly 💖 @vraravam
67- Fix snap assets capturing on GitHub (#1802) 💖 @mhatvan
68
69### Internal
70
71- Replace deprecated `moment.js` with `day.js` (#1804) 💖 @mhatvan
72
73# [v5.6.1-nightly.28](https://github.com/getferdi/ferdi/compare/v5.6.1-nightly.27...v5.6.1-nightly.28) (2021-08-16)
74
75- Moved some npm dependencies that were incorrectly classified as runtime deps. This has saved 11MB from the installed file (on macos) 💖 @vraravam
76- Removed unused npm dependencies (shaved anothe 5MB from the installed file on macos) 💖 @vraravam, @mhatvan
77
78### Bug Fixes
79
80- Fixed the 'Changelog' menu item to point to the correct branch 💖 @vraravam
81- Fixed issue with some shortcuts not working on macos (those that either used `alt` or `shift` keys) 💖 @vraravam
82
83### Internal
84
85- Completed plumbing required for conversion from javascript to typescript 💖 @vraravam
86- npm upgrades 💖 @vraravam
87- Started typescript conversion of some simple scripts 💖 @vraravam
88- Added animations step in gulp to transpile scss and copy to build 💖 @mhatvan
89
90# [v5.6.1-nightly.27](https://github.com/getferdi/ferdi/compare/v5.6.1-nightly.26...v5.6.1-nightly.27) (2021-08-15)
91
92- Add buttons in the 'Advanced' section of preferences to allow users to quickly open the ferdi profile in their file explorer 💖 @vraravam
93- [Security] Refactored Url helpers to ensure that there's a single place for vetting and opening external urls as recommended by [this article](https://benjamin-altpeter.de/shell-openexternal-dangers/) (#1789) 💖 @vraravam
94
95### Internal
96
97- Generated '.gitignore' from gitignore.io 💖 @vraravam
98- Setting some config rules for typescript (in preparation for external contributors during hacktoberfest) 💖 @vraravam
99- Moved 'gulp'-related packages to 'devDependencies' resulting in slimming down the installation file considerably (8MB on macos) 💖 @vraravam
100
101# [v5.6.1-nightly.26](https://github.com/getferdi/ferdi/compare/v5.6.1-nightly.24...v5.6.1-nightly.26) (2021-08-14)
102
103- Catch up with minor changes in Franz 5.7.0
104- Add entitlements for screen-capture-permissions 💖 @vraravam
105
106### Bug Fixes
107
108- Fix app focus detection 💖 @vraravam
109- Fix beta channel release for snap 💖 @mhatvan
110
111### Internal
112
113- Use destructured 'import' 💖 @vraravam
114- Refactor to reuse already defined constants 💖 @vraravam
115- Use exported default object 💖 @vraravam
116- Replace old '@meetfranz/electron-notification-state' with 'mac… … 💖 @vraravam
117
1# [v5.6.1-nightly.24](https://github.com/getferdi/ferdi/compare/v5.6.1-nightly.23...v5.6.1-nightly.24) (2021-08-13) 118# [v5.6.1-nightly.24](https://github.com/getferdi/ferdi/compare/v5.6.1-nightly.23...v5.6.1-nightly.24) (2021-08-13)
2 119
3- Added new recipe for Proton Calendar (getferdi/recipes#606) 💖 @cereum 120- Added new recipe for Proton Calendar (getferdi/recipes#606) 💖 @cereum
diff --git a/README.md b/README.md
index d8e622ee6..f23c0cb30 100644
--- a/README.md
+++ b/README.md
@@ -39,6 +39,7 @@
39 - [Or use Chocolatey (Windows only)](#or-use-chocolatey-windows-only) 39 - [Or use Chocolatey (Windows only)](#or-use-chocolatey-windows-only)
40 - [Or use Windows Package Manager (Windows only)](#or-use-windows-package-manager-windows-only) 40 - [Or use Windows Package Manager (Windows only)](#or-use-windows-package-manager-windows-only)
41 - [Or use homebrew (macOS or Linux)](#or-use-homebrew-macos-or-linux) 41 - [Or use homebrew (macOS or Linux)](#or-use-homebrew-macos-or-linux)
42 - [Or use snap (Linux only)](#or-use-snap-linux-only)
42 - [Or use AUR (Arch Linux)](#or-use-aur-arch-linux) 43 - [Or use AUR (Arch Linux)](#or-use-aur-arch-linux)
43 - [What makes Ferdi different from Franz?](#what-makes-ferdi-different-from-franz) 44 - [What makes Ferdi different from Franz?](#what-makes-ferdi-different-from-franz)
44 - [Removes unproductive paywalls and other other interruptions](#removes-unproductive-paywalls-and-other-other-interruptions) 45 - [Removes unproductive paywalls and other other interruptions](#removes-unproductive-paywalls-and-other-other-interruptions)
@@ -55,7 +56,7 @@
55 - [Backers via OpenCollective](#backers-via-opencollective) 56 - [Backers via OpenCollective](#backers-via-opencollective)
56 - [Sponsors via OpenCollective](#sponsors-via-opencollective) 57 - [Sponsors via OpenCollective](#sponsors-via-opencollective)
57 - [Other Sponsors](#other-sponsors) 58 - [Other Sponsors](#other-sponsors)
58</details> 59 </details>
59 60
60## What is Ferdi? 61## What is Ferdi?
61 62
@@ -118,6 +119,14 @@ You can download Ferdi for Windows, Mac and Linux on [Ferdi's download page](htt
118 119
119(Don't know homebrew? [brew.sh](https://brew.sh/)) 120(Don't know homebrew? [brew.sh](https://brew.sh/))
120 121
122### Or use snap (Linux only)
123
124`$ snap install ferdi`
125
126You can find published releases as `stable`, `beta` and `nightly` channels on [snapcraft.io](https://snapcraft.io/ferdi).
127
128(Don't know snap? [snapcraft.io](https://snapcraft.io/))
129
121### Or use AUR (Arch Linux) 130### Or use AUR (Arch Linux)
122 131
123Ferdi has three separate AUR packages you can use: 132Ferdi has three separate AUR packages you can use:
@@ -217,7 +226,7 @@ If you use an AUR Helper e.g. yay, simply install it via `yay -S ferdi`.
217 226
218### Adds internal changes 227### Adds internal changes
219 228
220- [x] Upgrades to Electron 13.1.9 229- [x] Upgrades to Electron 13.2.2
221- [x] Switches to [`electron-spellchecker`](https://github.com/electron-userland/electron-spellchecker) to improve application size 230- [x] Switches to [`electron-spellchecker`](https://github.com/electron-userland/electron-spellchecker) to improve application size
222- [x] Minifies build files to improve app size 231- [x] Minifies build files to improve app size
223- [x] Adds "npm run prepare-code" command for development to lint and beautify code 232- [x] Adds "npm run prepare-code" command for development to lint and beautify code
@@ -262,6 +271,7 @@ Since we (the contributors to Ferdi) also eat our own dog food, we use Ferdi as
262## Contributors ✨ 271## Contributors ✨
263 272
264Thanks goes to these awesome people: 273Thanks goes to these awesome people:
274
265<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --> 275<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
266<!-- prettier-ignore-start --> 276<!-- prettier-ignore-start -->
267<!-- markdownlint-disable --> 277<!-- markdownlint-disable -->
diff --git a/build-helpers/entitlements.mas.inherit.plist b/build-helpers/entitlements.mas.inherit.plist
index 202e6f431..78c1f8d83 100644
--- a/build-helpers/entitlements.mas.inherit.plist
+++ b/build-helpers/entitlements.mas.inherit.plist
@@ -16,5 +16,7 @@
16 <true/> 16 <true/>
17 <key>com.apple.security.network.client</key> 17 <key>com.apple.security.network.client</key>
18 <true/> 18 <true/>
19 <key>com.apple.security.automation.apple-events</key>
20 <true/>
19 </dict> 21 </dict>
20</plist> \ No newline at end of file 22</plist>
diff --git a/build-helpers/entitlements.mas.plist b/build-helpers/entitlements.mas.plist
index 202e6f431..78c1f8d83 100644
--- a/build-helpers/entitlements.mas.plist
+++ b/build-helpers/entitlements.mas.plist
@@ -16,5 +16,7 @@
16 <true/> 16 <true/>
17 <key>com.apple.security.network.client</key> 17 <key>com.apple.security.network.client</key>
18 <true/> 18 <true/>
19 <key>com.apple.security.automation.apple-events</key>
20 <true/>
19 </dict> 21 </dict>
20</plist> \ No newline at end of file 22</plist>
diff --git a/docs/example-feature/index.js b/docs/example-feature/index.js
index 84ee84b5e..0ce068e26 100644
--- a/docs/example-feature/index.js
+++ b/docs/example-feature/index.js
@@ -29,8 +29,6 @@ export default function initAnnouncements(stores, actions) {
29 resetState(); // Reset state to default 29 resetState(); // Reset state to default
30 } 30 }
31 }, 31 },
32 { 32 { fireImmediately: true },
33 fireImmediately: true,
34 },
35 ); 33 );
36} 34}
diff --git a/docs/example-feature/store.js b/docs/example-feature/store.js
index de27eae86..9fc86de36 100644
--- a/docs/example-feature/store.js
+++ b/docs/example-feature/store.js
@@ -18,8 +18,12 @@ export class ExampleFeatureStore extends Store {
18 18
19 // Update the name on the state when the request resolved 19 // Update the name on the state when the request resolved
20 reaction( 20 reaction(
21 () => this.getNameRequest.result, 21 () => (
22 name => this._setName(name), 22 this.getNameRequest.result
23 ),
24 (name) => {
25 this._setName(name);
26 },
23 ); 27 );
24 } 28 }
25 29
diff --git a/electron-builder.yml b/electron-builder.yml
index bf3b25ac1..893fa4701 100644
--- a/electron-builder.yml
+++ b/electron-builder.yml
@@ -61,10 +61,6 @@ linux:
61 - target: freebsd 61 - target: freebsd
62 - target: snap 62 - target: snap
63 63
64snap:
65 publish:
66 provider: "snapStore"
67
68nsis: 64nsis:
69 perMachine: false 65 perMachine: false
70 oneClick: true 66 oneClick: true
diff --git a/gulpfile.babel.js b/gulpfile.babel.js
index 08cc34b63..f87958a77 100644
--- a/gulpfile.babel.js
+++ b/gulpfile.babel.js
@@ -14,11 +14,12 @@ import sassVariables from 'gulp-sass-variables';
14import { removeSync, outputJson } from 'fs-extra'; 14import { removeSync, outputJson } from 'fs-extra';
15import kebabCase from 'kebab-case'; 15import kebabCase from 'kebab-case';
16import hexRgb from 'hex-rgb'; 16import hexRgb from 'hex-rgb';
17import ts from 'gulp-typescript';
17 18
18import * as buildInfo from 'preval-build-info'; 19import * as buildInfo from 'preval-build-info';
19import config from './package.json'; 20import config from './package.json';
20 21
21import * as rawStyleConfig from './src/theme/default/legacy'; 22import * as rawStyleConfig from './scripts/theme/default/legacy';
22 23
23dotenv.config(); 24dotenv.config();
24 25
@@ -29,6 +30,8 @@ const isDevBuild = process.env.NODE_ENV === 'development';
29 30
30const getTargetEnv = isDevBuild ? 'development' : 'production'; 31const getTargetEnv = isDevBuild ? 'development' : 'production';
31 32
33const tsProject = ts.createProject('tsconfig.json');
34
32const styleConfig = Object.keys(rawStyleConfig).map(key => { 35const styleConfig = Object.keys(rawStyleConfig).map(key => {
33 const isHex = /^#[0-9A-F]{6}$/i.test(rawStyleConfig[key]); 36 const isHex = /^#[0-9A-F]{6}$/i.test(rawStyleConfig[key]);
34 return { 37 return {
@@ -59,28 +62,36 @@ const paths = {
59 watch: 'src/**/*.html', 62 watch: 'src/**/*.html',
60 }, 63 },
61 styles: { 64 styles: {
62 src: 'src/styles/main.scss', 65 src: [
66 'src/styles/main.scss',
67 'src/styles/vertical.scss',
68 'src/styles/animations.scss',
69 ],
63 dest: 'build/styles', 70 dest: 'build/styles',
64 watch: 'src/styles/**/*.scss', 71 watch: 'src/styles/**/*.scss',
65 }, 72 },
66 verticalStyle: { 73 javascripts: {
67 src: 'src/styles/vertical.scss',
68 dest: 'build/styles',
69 },
70 scripts: {
71 src: 'src/**/*.js', 74 src: 'src/**/*.js',
72 dest: 'build/', 75 dest: 'build/',
73 watch: [ 76 watch: [
74 // 'packages/**/*.js',
75 'src/**/*.js', 77 'src/**/*.js',
78 // 'packages/**/*.js',
79 ],
80 },
81 typescripts: {
82 src: 'src/**/*.ts',
83 dest: 'build/',
84 watch: [
85 'src/**/*.ts',
86 // 'packages/**/*.ts',
76 ], 87 ],
77 }, 88 },
78 packages: { 89 packages: {
79 watch: 'packages/**/*', 90 watch: 'packages/**/*',
80 // dest: 'build/', 91 // dest: 'build/',
81 // watch: [ 92 // watch: [
82 // // 'packages/**/*.js',
83 // 'src/**/*.js', 93 // 'src/**/*.js',
94 // // 'packages/**/*.js',
84 // ], 95 // ],
85 }, 96 },
86}; 97};
@@ -121,9 +132,9 @@ export function mvSrc() {
121 [ 132 [
122 `${paths.src}/*`, 133 `${paths.src}/*`,
123 `${paths.src}/*/**`, 134 `${paths.src}/*/**`,
124 `!${paths.scripts.watch[1]}`, 135 `!${paths.javascripts.watch[0]}`,
136 `!${paths.typescripts.watch[0]}`,
125 `!${paths.src}/styles/**`, 137 `!${paths.src}/styles/**`,
126 `!${paths.src}/**/*.js`,
127 ], 138 ],
128 { since: gulp.lastRun(mvSrc) }, 139 { since: gulp.lastRun(mvSrc) },
129 ) 140 )
@@ -195,58 +206,52 @@ export function styles() {
195 .pipe(connect.reload()); 206 .pipe(connect.reload());
196} 207}
197 208
198export function verticalStyle() { 209export function processJavascripts() {
199 return gulp 210 return gulp
200 .src(paths.verticalStyle.src) 211 .src(
201 .pipe( 212 [
202 sassVariables( 213 paths.javascripts.src,
203 Object.assign( 214 ],
204 { 215 { since: gulp.lastRun(processJavascripts) },
205 $env: getTargetEnv,
206 },
207 ...styleConfig,
208 ),
209 ),
210 )
211 .pipe(
212 sass({
213 includePaths: ['./node_modules', '../node_modules'],
214 }).on('error', sass.logError),
215 ) 216 )
216 .pipe( 217 .pipe(
217 gulpIf( 218 babel({
218 !isDevBuild, 219 comments: false,
219 csso({ 220 }),
220 // Only minify in production to speed up dev builds
221 restructure: false, // Don't restructure CSS, otherwise it will break the styles
222 }),
223 ),
224 ) 221 )
225 .pipe(gulp.dest(paths.verticalStyle.dest)) 222 .pipe(gulpIf(!isDevBuild, uglify())) // Only uglify in production to speed up dev builds
223 .pipe(gulp.dest(paths.javascripts.dest))
226 .pipe(connect.reload()); 224 .pipe(connect.reload());
227} 225}
228 226
229export function scripts() { 227export function processTypescripts() {
230 return gulp 228 return gulp
231 .src(paths.scripts.src, { since: gulp.lastRun(scripts) }) 229 .src(
230 [
231 paths.typescripts.src,
232 ],
233 { since: gulp.lastRun(processTypescripts) },
234 )
235 .pipe(tsProject())
236 .js
232 .pipe( 237 .pipe(
233 babel({ 238 babel({
234 comments: false, 239 comments: false,
235 }), 240 }),
236 ) 241 )
237 .pipe(gulpIf(!isDevBuild, uglify())) // Only uglify in production to speed up dev builds 242 .pipe(gulpIf(!isDevBuild, uglify())) // Only uglify in production to speed up dev builds
238 .pipe(gulp.dest(paths.scripts.dest)) 243 .pipe(gulp.dest(paths.typescripts.dest))
239 .pipe(connect.reload()); 244 .pipe(connect.reload());
240} 245}
241 246
242export function watch() { 247export function watch() {
243 gulp.watch(paths.packages.watch, mvLernaPackages); 248 gulp.watch(paths.packages.watch, mvLernaPackages);
244 gulp.watch(paths.styles.watch, styles); 249 gulp.watch(paths.styles.watch, styles);
245 gulp.watch(paths.verticalStyle.src, verticalStyle);
246 250
247 gulp.watch([paths.src, `${paths.scripts.src}`, `${paths.styles.src}`], mvSrc); 251 gulp.watch([paths.src], mvSrc);
248 252
249 gulp.watch(paths.scripts.watch, scripts); 253 gulp.watch(paths.javascripts.watch, processJavascripts);
254 gulp.watch(paths.typescripts.watch, processTypescripts);
250} 255}
251 256
252export function webserver() { 257export function webserver() {
@@ -261,6 +266,7 @@ export function recipes() {
261 .src(paths.recipes.src, { since: gulp.lastRun(recipes) }) 266 .src(paths.recipes.src, { since: gulp.lastRun(recipes) })
262 .pipe(gulp.dest(paths.recipes.dest)); 267 .pipe(gulp.dest(paths.recipes.dest));
263} 268}
269
264export function recipeInfo() { 270export function recipeInfo() {
265 return gulp 271 return gulp
266 .src(paths.recipeInfo.src, { since: gulp.lastRun(recipeInfo) }) 272 .src(paths.recipeInfo.src, { since: gulp.lastRun(recipeInfo) })
@@ -270,7 +276,7 @@ export function recipeInfo() {
270const build = gulp.series( 276const build = gulp.series(
271 clean, 277 clean,
272 gulp.parallel(mvSrc, mvPackageJson, mvLernaPackages, exportBuildInfo), 278 gulp.parallel(mvSrc, mvPackageJson, mvLernaPackages, exportBuildInfo),
273 gulp.parallel(html, scripts, styles, verticalStyle, recipes, recipeInfo), 279 gulp.parallel(html, processJavascripts, processTypescripts, styles, recipes, recipeInfo),
274); 280);
275export { build }; 281export { build };
276 282
diff --git a/package-lock.json b/package-lock.json
index 2b064cec3..43491797d 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.1-beta.1", 3 "version": "5.6.1-nightly.37",
4 "lockfileVersion": 1, 4 "lockfileVersion": 1,
5 "requires": true, 5 "requires": true,
6 "dependencies": { 6 "dependencies": {
@@ -1685,9 +1685,9 @@
1685 } 1685 }
1686 }, 1686 },
1687 "@babel/register": { 1687 "@babel/register": {
1688 "version": "7.14.5", 1688 "version": "7.15.3",
1689 "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.14.5.tgz", 1689 "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.15.3.tgz",
1690 "integrity": "sha512-TjJpGz/aDjFGWsItRBQMOFTrmTI9tr79CHOK+KIvLeCkbxuOAk2M5QHjvruIMGoo9OuccMh5euplPzc5FjAKGg==", 1690 "integrity": "sha512-mj4IY1ZJkorClxKTImccn4T81+UKTo4Ux0+OFSV9hME1ooqS9UV+pJ6BjD0qXPK4T3XW/KNa79XByjeEMZz+fw==",
1691 "dev": true, 1691 "dev": true,
1692 "requires": { 1692 "requires": {
1693 "clone-deep": "^4.0.1", 1693 "clone-deep": "^4.0.1",
@@ -2387,9 +2387,9 @@
2387 } 2387 }
2388 }, 2388 },
2389 "@electron/get": { 2389 "@electron/get": {
2390 "version": "1.12.4", 2390 "version": "1.13.0",
2391 "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.12.4.tgz", 2391 "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.13.0.tgz",
2392 "integrity": "sha512-6nr9DbJPUR9Xujw6zD3y+rS95TyItEVM0NVjt1EehY2vUWfIgPiIPVHxCvaTS0xr2B+DRxovYVKbuOWqC35kjg==", 2392 "integrity": "sha512-+SjZhRuRo+STTO1Fdhzqnv9D2ZhjxXP6egsJ9kiO8dtP68cDx7dFCwWi64dlMQV7sWcfW1OYCW4wviEBzmRsfQ==",
2393 "dev": true, 2393 "dev": true,
2394 "requires": { 2394 "requires": {
2395 "debug": "^4.1.1", 2395 "debug": "^4.1.1",
@@ -5697,16 +5697,6 @@
5697 "resolved": "https://registry.npmjs.org/@mdi/react/-/react-1.5.0.tgz", 5697 "resolved": "https://registry.npmjs.org/@mdi/react/-/react-1.5.0.tgz",
5698 "integrity": "sha512-NztRgUxSYD+ImaKN94Tg66VVVqXj4SmlDGzZoz48H9riJ+Awha56sfXH2fegw819NWo7KI3oeS1Es0lNQqwr0w==" 5698 "integrity": "sha512-NztRgUxSYD+ImaKN94Tg66VVVqXj4SmlDGzZoz48H9riJ+Awha56sfXH2fegw819NWo7KI3oeS1Es0lNQqwr0w=="
5699 }, 5699 },
5700 "@meetfranz/electron-notification-state": {
5701 "version": "1.0.0",
5702 "resolved": "https://registry.npmjs.org/@meetfranz/electron-notification-state/-/electron-notification-state-1.0.0.tgz",
5703 "integrity": "sha512-0gCEV7DfoasuMA9uY9sN1ufrzSFg/fXB0gHbxagid8EilAjGsbkSSLSl2rweZcIBz+ZgR35Yp7DlAVw/I3cIfA==",
5704 "requires": {
5705 "macos-notification-state": "^1.1.0",
5706 "windows-notification-state": "^1.3.0",
5707 "windows-quiet-hours": "^1.2.2"
5708 }
5709 },
5710 "@meetfranz/forms": { 5700 "@meetfranz/forms": {
5711 "version": "file:packages/forms", 5701 "version": "file:packages/forms",
5712 "requires": { 5702 "requires": {
@@ -6431,6 +6421,12 @@
6431 "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", 6421 "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
6432 "dev": true 6422 "dev": true
6433 }, 6423 },
6424 "@tsconfig/node14": {
6425 "version": "1.0.1",
6426 "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz",
6427 "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==",
6428 "dev": true
6429 },
6434 "@types/babel__core": { 6430 "@types/babel__core": {
6435 "version": "7.1.15", 6431 "version": "7.1.15",
6436 "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.15.tgz", 6432 "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.15.tgz",
@@ -6472,18 +6468,6 @@
6472 "@babel/types": "^7.3.0" 6468 "@babel/types": "^7.3.0"
6473 } 6469 }
6474 }, 6470 },
6475 "@types/cacheable-request": {
6476 "version": "6.0.2",
6477 "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz",
6478 "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==",
6479 "dev": true,
6480 "requires": {
6481 "@types/http-cache-semantics": "*",
6482 "@types/keyv": "*",
6483 "@types/node": "*",
6484 "@types/responselike": "*"
6485 }
6486 },
6487 "@types/color": { 6471 "@types/color": {
6488 "version": "3.0.2", 6472 "version": "3.0.2",
6489 "resolved": "https://registry.npmjs.org/@types/color/-/color-3.0.2.tgz", 6473 "resolved": "https://registry.npmjs.org/@types/color/-/color-3.0.2.tgz",
@@ -6517,6 +6501,12 @@
6517 "@types/ms": "*" 6501 "@types/ms": "*"
6518 } 6502 }
6519 }, 6503 },
6504 "@types/du": {
6505 "version": "1.0.0",
6506 "resolved": "https://registry.npmjs.org/@types/du/-/du-1.0.0.tgz",
6507 "integrity": "sha512-gyG+2sBzYwIcwaj2zyRZ75qOwvhFeD6XytT16jBTyqiS9nH9tYy39Ln1oRcECxBfDCJmUmOEyjQoTHJeMFM91w==",
6508 "dev": true
6509 },
6520 "@types/fs-extra": { 6510 "@types/fs-extra": {
6521 "version": "9.0.12", 6511 "version": "9.0.12",
6522 "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.12.tgz", 6512 "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.12.tgz",
@@ -6551,12 +6541,6 @@
6551 "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", 6541 "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==",
6552 "dev": true 6542 "dev": true
6553 }, 6543 },
6554 "@types/http-cache-semantics": {
6555 "version": "4.0.1",
6556 "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz",
6557 "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==",
6558 "dev": true
6559 },
6560 "@types/istanbul-lib-coverage": { 6544 "@types/istanbul-lib-coverage": {
6561 "version": "2.0.3", 6545 "version": "2.0.3",
6562 "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", 6546 "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz",
@@ -6587,15 +6571,6 @@
6587 "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", 6571 "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==",
6588 "dev": true 6572 "dev": true
6589 }, 6573 },
6590 "@types/keyv": {
6591 "version": "3.1.2",
6592 "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.2.tgz",
6593 "integrity": "sha512-/FvAK2p4jQOaJ6CGDHJTqZcUtbZe820qIeTg7o0Shg7drB4JHeL+V/dhSaly7NXx6u8eSee+r7coT+yuJEvDLg==",
6594 "dev": true,
6595 "requires": {
6596 "@types/node": "*"
6597 }
6598 },
6599 "@types/lodash": { 6574 "@types/lodash": {
6600 "version": "4.14.172", 6575 "version": "4.14.172",
6601 "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.172.tgz", 6576 "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.172.tgz",
@@ -6614,6 +6589,15 @@
6614 "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", 6589 "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==",
6615 "dev": true 6590 "dev": true
6616 }, 6591 },
6592 "@types/minipass": {
6593 "version": "3.1.0",
6594 "resolved": "https://registry.npmjs.org/@types/minipass/-/minipass-3.1.0.tgz",
6595 "integrity": "sha512-b2yPKwCrB8x9SB65kcCistMoe3wrYnxxt5rJSZ1kprw0uOXvhuKi9kTQ746Y+Pbqoh+9C0N4zt0ztmTnG9yg7A==",
6596 "dev": true,
6597 "requires": {
6598 "@types/node": "*"
6599 }
6600 },
6617 "@types/ms": { 6601 "@types/ms": {
6618 "version": "0.7.31", 6602 "version": "0.7.31",
6619 "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", 6603 "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz",
@@ -6681,14 +6665,11 @@
6681 "@types/react": "^16" 6665 "@types/react": "^16"
6682 } 6666 }
6683 }, 6667 },
6684 "@types/responselike": { 6668 "@types/route-parser": {
6685 "version": "1.0.0", 6669 "version": "0.1.3",
6686 "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", 6670 "resolved": "https://registry.npmjs.org/@types/route-parser/-/route-parser-0.1.3.tgz",
6687 "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", 6671 "integrity": "sha512-1AQYpsMbxangSnApsyIHzck5TP8cfas8fzmemljLi2APssJvlZiHkTar/ZtcZwOtK/Ory/xwLg2X8dwhkbnM+g==",
6688 "dev": true, 6672 "dev": true
6689 "requires": {
6690 "@types/node": "*"
6691 }
6692 }, 6673 },
6693 "@types/scheduler": { 6674 "@types/scheduler": {
6694 "version": "0.16.2", 6675 "version": "0.16.2",
@@ -6724,6 +6705,16 @@
6724 "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==", 6705 "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==",
6725 "dev": true 6706 "dev": true
6726 }, 6707 },
6708 "@types/tar": {
6709 "version": "4.0.5",
6710 "resolved": "https://registry.npmjs.org/@types/tar/-/tar-4.0.5.tgz",
6711 "integrity": "sha512-cgwPhNEabHaZcYIy5xeMtux2EmYBitfqEceBUi2t5+ETy4dW6kswt6WX4+HqLeiiKOo42EXbGiDmVJ2x+vi37Q==",
6712 "dev": true,
6713 "requires": {
6714 "@types/minipass": "*",
6715 "@types/node": "*"
6716 }
6717 },
6727 "@types/uglify-js": { 6718 "@types/uglify-js": {
6728 "version": "3.13.1", 6719 "version": "3.13.1",
6729 "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.13.1.tgz", 6720 "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.13.1.tgz",
@@ -6821,13 +6812,13 @@
6821 "dev": true 6812 "dev": true
6822 }, 6813 },
6823 "@typescript-eslint/eslint-plugin": { 6814 "@typescript-eslint/eslint-plugin": {
6824 "version": "4.29.0", 6815 "version": "4.29.1",
6825 "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.29.0.tgz", 6816 "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.29.1.tgz",
6826 "integrity": "sha512-eiREtqWRZ8aVJcNru7cT/AMVnYd9a2UHsfZT8MR1dW3UUEg6jDv9EQ9Cq4CUPZesyQ58YUpoAADGv71jY8RwgA==", 6817 "integrity": "sha512-AHqIU+SqZZgBEiWOrtN94ldR3ZUABV5dUG94j8Nms9rQnHFc8fvDOue/58K4CFz6r8OtDDc35Pw9NQPWo0Ayrw==",
6827 "dev": true, 6818 "dev": true,
6828 "requires": { 6819 "requires": {
6829 "@typescript-eslint/experimental-utils": "4.29.0", 6820 "@typescript-eslint/experimental-utils": "4.29.1",
6830 "@typescript-eslint/scope-manager": "4.29.0", 6821 "@typescript-eslint/scope-manager": "4.29.1",
6831 "debug": "^4.3.1", 6822 "debug": "^4.3.1",
6832 "functional-red-black-tree": "^1.0.1", 6823 "functional-red-black-tree": "^1.0.1",
6833 "regexpp": "^3.1.0", 6824 "regexpp": "^3.1.0",
@@ -6836,43 +6827,43 @@
6836 }, 6827 },
6837 "dependencies": { 6828 "dependencies": {
6838 "@typescript-eslint/experimental-utils": { 6829 "@typescript-eslint/experimental-utils": {
6839 "version": "4.29.0", 6830 "version": "4.29.1",
6840 "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.29.0.tgz", 6831 "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.29.1.tgz",
6841 "integrity": "sha512-FpNVKykfeaIxlArLUP/yQfv/5/3rhl1ov6RWgud4OgbqWLkEq7lqgQU9iiavZRzpzCRQV4XddyFz3wFXdkiX9w==", 6832 "integrity": "sha512-kl6QG6qpzZthfd2bzPNSJB2YcZpNOrP6r9jueXupcZHnL74WiuSjaft7WSu17J9+ae9zTlk0KJMXPUj0daBxMw==",
6842 "dev": true, 6833 "dev": true,
6843 "requires": { 6834 "requires": {
6844 "@types/json-schema": "^7.0.7", 6835 "@types/json-schema": "^7.0.7",
6845 "@typescript-eslint/scope-manager": "4.29.0", 6836 "@typescript-eslint/scope-manager": "4.29.1",
6846 "@typescript-eslint/types": "4.29.0", 6837 "@typescript-eslint/types": "4.29.1",
6847 "@typescript-eslint/typescript-estree": "4.29.0", 6838 "@typescript-eslint/typescript-estree": "4.29.1",
6848 "eslint-scope": "^5.1.1", 6839 "eslint-scope": "^5.1.1",
6849 "eslint-utils": "^3.0.0" 6840 "eslint-utils": "^3.0.0"
6850 } 6841 }
6851 }, 6842 },
6852 "@typescript-eslint/scope-manager": { 6843 "@typescript-eslint/scope-manager": {
6853 "version": "4.29.0", 6844 "version": "4.29.1",
6854 "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.29.0.tgz", 6845 "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.29.1.tgz",
6855 "integrity": "sha512-HPq7XAaDMM3DpmuijxLV9Io8/6pQnliiXMQUcAdjpJJSR+fdmbD/zHCd7hMkjJn04UQtCQBtshgxClzg6NIS2w==", 6846 "integrity": "sha512-Hzv/uZOa9zrD/W5mftZa54Jd5Fed3tL6b4HeaOpwVSabJK8CJ+2MkDasnX/XK4rqP5ZTWngK1ZDeCi6EnxPQ7A==",
6856 "dev": true, 6847 "dev": true,
6857 "requires": { 6848 "requires": {
6858 "@typescript-eslint/types": "4.29.0", 6849 "@typescript-eslint/types": "4.29.1",
6859 "@typescript-eslint/visitor-keys": "4.29.0" 6850 "@typescript-eslint/visitor-keys": "4.29.1"
6860 } 6851 }
6861 }, 6852 },
6862 "@typescript-eslint/types": { 6853 "@typescript-eslint/types": {
6863 "version": "4.29.0", 6854 "version": "4.29.1",
6864 "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.29.0.tgz", 6855 "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.29.1.tgz",
6865 "integrity": "sha512-2YJM6XfWfi8pgU2HRhTp7WgRw78TCRO3dOmSpAvIQ8MOv4B46JD2chnhpNT7Jq8j0APlIbzO1Bach734xxUl4A==", 6856 "integrity": "sha512-Jj2yu78IRfw4nlaLtKjVaGaxh/6FhofmQ/j8v3NXmAiKafbIqtAPnKYrf0sbGjKdj0hS316J8WhnGnErbJ4RCA==",
6866 "dev": true 6857 "dev": true
6867 }, 6858 },
6868 "@typescript-eslint/typescript-estree": { 6859 "@typescript-eslint/typescript-estree": {
6869 "version": "4.29.0", 6860 "version": "4.29.1",
6870 "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.0.tgz", 6861 "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.1.tgz",
6871 "integrity": "sha512-8ZpNHDIOyqzzgZrQW9+xQ4k5hM62Xy2R4RPO3DQxMc5Rq5QkCdSpk/drka+DL9w6sXNzV5nrdlBmf8+x495QXQ==", 6862 "integrity": "sha512-lIkkrR9E4lwZkzPiRDNq0xdC3f2iVCUjw/7WPJ4S2Sl6C3nRWkeE1YXCQ0+KsiaQRbpY16jNaokdWnm9aUIsfw==",
6872 "dev": true, 6863 "dev": true,
6873 "requires": { 6864 "requires": {
6874 "@typescript-eslint/types": "4.29.0", 6865 "@typescript-eslint/types": "4.29.1",
6875 "@typescript-eslint/visitor-keys": "4.29.0", 6866 "@typescript-eslint/visitor-keys": "4.29.1",
6876 "debug": "^4.3.1", 6867 "debug": "^4.3.1",
6877 "globby": "^11.0.3", 6868 "globby": "^11.0.3",
6878 "is-glob": "^4.0.1", 6869 "is-glob": "^4.0.1",
@@ -6881,12 +6872,12 @@
6881 } 6872 }
6882 }, 6873 },
6883 "@typescript-eslint/visitor-keys": { 6874 "@typescript-eslint/visitor-keys": {
6884 "version": "4.29.0", 6875 "version": "4.29.1",
6885 "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.0.tgz", 6876 "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.1.tgz",
6886 "integrity": "sha512-LoaofO1C/jAJYs0uEpYMXfHboGXzOJeV118X4OsZu9f7rG7Pr9B3+4HTU8+err81rADa4xfQmAxnRnPAI2jp+Q==", 6877 "integrity": "sha512-zLqtjMoXvgdZY/PG6gqA73V8BjqPs4af1v2kiiETBObp+uC6gRYnJLmJHxC0QyUrrHDLJPIWNYxoBV3wbcRlag==",
6887 "dev": true, 6878 "dev": true,
6888 "requires": { 6879 "requires": {
6889 "@typescript-eslint/types": "4.29.0", 6880 "@typescript-eslint/types": "4.29.1",
6890 "eslint-visitor-keys": "^2.0.0" 6881 "eslint-visitor-keys": "^2.0.0"
6891 } 6882 }
6892 }, 6883 },
@@ -6916,41 +6907,41 @@
6916 } 6907 }
6917 }, 6908 },
6918 "@typescript-eslint/parser": { 6909 "@typescript-eslint/parser": {
6919 "version": "4.29.0", 6910 "version": "4.29.1",
6920 "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.29.0.tgz", 6911 "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.29.1.tgz",
6921 "integrity": "sha512-+92YRNHFdXgq+GhWQPT2bmjX09X7EH36JfgN2/4wmhtwV/HPxozpCNst8jrWcngLtEVd/4zAwA6BKojAlf+YqA==", 6912 "integrity": "sha512-3fL5iN20hzX3Q4OkG7QEPFjZV2qsVGiDhEwwh+EkmE/w7oteiOvUNzmpu5eSwGJX/anCryONltJ3WDmAzAoCMg==",
6922 "dev": true, 6913 "dev": true,
6923 "requires": { 6914 "requires": {
6924 "@typescript-eslint/scope-manager": "4.29.0", 6915 "@typescript-eslint/scope-manager": "4.29.1",
6925 "@typescript-eslint/types": "4.29.0", 6916 "@typescript-eslint/types": "4.29.1",
6926 "@typescript-eslint/typescript-estree": "4.29.0", 6917 "@typescript-eslint/typescript-estree": "4.29.1",
6927 "debug": "^4.3.1" 6918 "debug": "^4.3.1"
6928 }, 6919 },
6929 "dependencies": { 6920 "dependencies": {
6930 "@typescript-eslint/scope-manager": { 6921 "@typescript-eslint/scope-manager": {
6931 "version": "4.29.0", 6922 "version": "4.29.1",
6932 "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.29.0.tgz", 6923 "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.29.1.tgz",
6933 "integrity": "sha512-HPq7XAaDMM3DpmuijxLV9Io8/6pQnliiXMQUcAdjpJJSR+fdmbD/zHCd7hMkjJn04UQtCQBtshgxClzg6NIS2w==", 6924 "integrity": "sha512-Hzv/uZOa9zrD/W5mftZa54Jd5Fed3tL6b4HeaOpwVSabJK8CJ+2MkDasnX/XK4rqP5ZTWngK1ZDeCi6EnxPQ7A==",
6934 "dev": true, 6925 "dev": true,
6935 "requires": { 6926 "requires": {
6936 "@typescript-eslint/types": "4.29.0", 6927 "@typescript-eslint/types": "4.29.1",
6937 "@typescript-eslint/visitor-keys": "4.29.0" 6928 "@typescript-eslint/visitor-keys": "4.29.1"
6938 } 6929 }
6939 }, 6930 },
6940 "@typescript-eslint/types": { 6931 "@typescript-eslint/types": {
6941 "version": "4.29.0", 6932 "version": "4.29.1",
6942 "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.29.0.tgz", 6933 "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.29.1.tgz",
6943 "integrity": "sha512-2YJM6XfWfi8pgU2HRhTp7WgRw78TCRO3dOmSpAvIQ8MOv4B46JD2chnhpNT7Jq8j0APlIbzO1Bach734xxUl4A==", 6934 "integrity": "sha512-Jj2yu78IRfw4nlaLtKjVaGaxh/6FhofmQ/j8v3NXmAiKafbIqtAPnKYrf0sbGjKdj0hS316J8WhnGnErbJ4RCA==",
6944 "dev": true 6935 "dev": true
6945 }, 6936 },
6946 "@typescript-eslint/typescript-estree": { 6937 "@typescript-eslint/typescript-estree": {
6947 "version": "4.29.0", 6938 "version": "4.29.1",
6948 "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.0.tgz", 6939 "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.1.tgz",
6949 "integrity": "sha512-8ZpNHDIOyqzzgZrQW9+xQ4k5hM62Xy2R4RPO3DQxMc5Rq5QkCdSpk/drka+DL9w6sXNzV5nrdlBmf8+x495QXQ==", 6940 "integrity": "sha512-lIkkrR9E4lwZkzPiRDNq0xdC3f2iVCUjw/7WPJ4S2Sl6C3nRWkeE1YXCQ0+KsiaQRbpY16jNaokdWnm9aUIsfw==",
6950 "dev": true, 6941 "dev": true,
6951 "requires": { 6942 "requires": {
6952 "@typescript-eslint/types": "4.29.0", 6943 "@typescript-eslint/types": "4.29.1",
6953 "@typescript-eslint/visitor-keys": "4.29.0", 6944 "@typescript-eslint/visitor-keys": "4.29.1",
6954 "debug": "^4.3.1", 6945 "debug": "^4.3.1",
6955 "globby": "^11.0.3", 6946 "globby": "^11.0.3",
6956 "is-glob": "^4.0.1", 6947 "is-glob": "^4.0.1",
@@ -6959,12 +6950,12 @@
6959 } 6950 }
6960 }, 6951 },
6961 "@typescript-eslint/visitor-keys": { 6952 "@typescript-eslint/visitor-keys": {
6962 "version": "4.29.0", 6953 "version": "4.29.1",
6963 "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.0.tgz", 6954 "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.1.tgz",
6964 "integrity": "sha512-LoaofO1C/jAJYs0uEpYMXfHboGXzOJeV118X4OsZu9f7rG7Pr9B3+4HTU8+err81rADa4xfQmAxnRnPAI2jp+Q==", 6955 "integrity": "sha512-zLqtjMoXvgdZY/PG6gqA73V8BjqPs4af1v2kiiETBObp+uC6gRYnJLmJHxC0QyUrrHDLJPIWNYxoBV3wbcRlag==",
6965 "dev": true, 6956 "dev": true,
6966 "requires": { 6957 "requires": {
6967 "@typescript-eslint/types": "4.29.0", 6958 "@typescript-eslint/types": "4.29.1",
6968 "eslint-visitor-keys": "^2.0.0" 6959 "eslint-visitor-keys": "^2.0.0"
6969 } 6960 }
6970 }, 6961 },
@@ -7923,9 +7914,9 @@
7923 "dev": true 7914 "dev": true
7924 }, 7915 },
7925 "app-builder-lib": { 7916 "app-builder-lib": {
7926 "version": "22.12.0", 7917 "version": "22.12.1",
7927 "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-22.12.0.tgz", 7918 "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-22.12.1.tgz",
7928 "integrity": "sha512-VsBCb3zkY1ugdFxKHF31gxrJipFAf+cDE74XfPwxM4Jrb+QblQX8YRO2Cl268TZrhBEcVnBKIrx9aSnvMbBVgw==", 7919 "integrity": "sha512-lE//wq64cp8zA/oDQKsmgtoJOmjNMebPeUBYai7yGAqwhR7P9ggYDwWCUd2sL+T6f1YJFCQ2GrLwf1qkm7xHMQ==",
7929 "dev": true, 7920 "dev": true,
7930 "requires": { 7921 "requires": {
7931 "7zip-bin": "~5.1.1", 7922 "7zip-bin": "~5.1.1",
@@ -7934,13 +7925,13 @@
7934 "@malept/flatpak-bundler": "^0.4.0", 7925 "@malept/flatpak-bundler": "^0.4.0",
7935 "async-exit-hook": "^2.0.1", 7926 "async-exit-hook": "^2.0.1",
7936 "bluebird-lst": "^1.0.9", 7927 "bluebird-lst": "^1.0.9",
7937 "builder-util": "22.11.11", 7928 "builder-util": "22.12.1",
7938 "builder-util-runtime": "8.7.10", 7929 "builder-util-runtime": "8.7.10",
7939 "chromium-pickle-js": "^0.2.0", 7930 "chromium-pickle-js": "^0.2.0",
7940 "debug": "^4.3.2", 7931 "debug": "^4.3.2",
7941 "ejs": "^3.1.6", 7932 "ejs": "^3.1.6",
7942 "electron-osx-sign": "^0.5.0", 7933 "electron-osx-sign": "^0.5.0",
7943 "electron-publish": "22.11.11", 7934 "electron-publish": "22.12.1",
7944 "fs-extra": "^10.0.0", 7935 "fs-extra": "^10.0.0",
7945 "hosted-git-info": "^4.0.2", 7936 "hosted-git-info": "^4.0.2",
7946 "is-ci": "^3.0.0", 7937 "is-ci": "^3.0.0",
@@ -8789,39 +8780,6 @@
8789 "file-uri-to-path": "1.0.0" 8780 "file-uri-to-path": "1.0.0"
8790 } 8781 }
8791 }, 8782 },
8792 "bl": {
8793 "version": "1.2.3",
8794 "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz",
8795 "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==",
8796 "requires": {
8797 "readable-stream": "^2.3.5",
8798 "safe-buffer": "^5.1.1"
8799 },
8800 "dependencies": {
8801 "readable-stream": {
8802 "version": "2.3.7",
8803 "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
8804 "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
8805 "requires": {
8806 "core-util-is": "~1.0.0",
8807 "inherits": "~2.0.3",
8808 "isarray": "~1.0.0",
8809 "process-nextick-args": "~2.0.0",
8810 "safe-buffer": "~5.1.1",
8811 "string_decoder": "~1.1.1",
8812 "util-deprecate": "~1.0.1"
8813 }
8814 },
8815 "string_decoder": {
8816 "version": "1.1.1",
8817 "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
8818 "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
8819 "requires": {
8820 "safe-buffer": "~5.1.0"
8821 }
8822 }
8823 }
8824 },
8825 "block-stream": { 8783 "block-stream": {
8826 "version": "0.0.9", 8784 "version": "0.0.9",
8827 "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", 8785 "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
@@ -8980,9 +8938,9 @@
8980 "dev": true 8938 "dev": true
8981 }, 8939 },
8982 "boolean": { 8940 "boolean": {
8983 "version": "3.1.2", 8941 "version": "3.1.4",
8984 "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.1.2.tgz", 8942 "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.1.4.tgz",
8985 "integrity": "sha512-YN6UmV0FfLlBVvRvNPx3pz5W/mUoYB24J4WSXOKP/OOJpi+Oq6WYqPaNTHzjI0QzwWtnvEd5CGYyQPgp1jFxnw==", 8943 "integrity": "sha512-3hx0kwU3uzG6ReQ3pnaFQPSktpBw6RHN3/ivDKEuU8g1XSfafowyvDnadjv1xp8IZqhtSukxlwv9bF6FhX8m0w==",
8986 "dev": true, 8944 "dev": true,
8987 "optional": true 8945 "optional": true
8988 }, 8946 },
@@ -9275,6 +9233,7 @@
9275 "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", 9233 "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
9276 "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", 9234 "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
9277 "dev": true, 9235 "dev": true,
9236 "optional": true,
9278 "requires": { 9237 "requires": {
9279 "base64-js": "^1.3.1", 9238 "base64-js": "^1.3.1",
9280 "ieee754": "^1.1.13" 9239 "ieee754": "^1.1.13"
@@ -9284,6 +9243,7 @@
9284 "version": "1.2.0", 9243 "version": "1.2.0",
9285 "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", 9244 "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
9286 "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", 9245 "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
9246 "dev": true,
9287 "requires": { 9247 "requires": {
9288 "buffer-alloc-unsafe": "^1.1.0", 9248 "buffer-alloc-unsafe": "^1.1.0",
9289 "buffer-fill": "^1.0.0" 9249 "buffer-fill": "^1.0.0"
@@ -9292,7 +9252,8 @@
9292 "buffer-alloc-unsafe": { 9252 "buffer-alloc-unsafe": {
9293 "version": "1.1.0", 9253 "version": "1.1.0",
9294 "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", 9254 "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
9295 "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" 9255 "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==",
9256 "dev": true
9296 }, 9257 },
9297 "buffer-crc32": { 9258 "buffer-crc32": {
9298 "version": "0.2.13", 9259 "version": "0.2.13",
@@ -9314,12 +9275,14 @@
9314 "buffer-fill": { 9275 "buffer-fill": {
9315 "version": "1.0.0", 9276 "version": "1.0.0",
9316 "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", 9277 "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
9317 "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" 9278 "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=",
9279 "dev": true
9318 }, 9280 },
9319 "buffer-from": { 9281 "buffer-from": {
9320 "version": "1.1.2", 9282 "version": "1.1.2",
9321 "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 9283 "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
9322 "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" 9284 "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
9285 "dev": true
9323 }, 9286 },
9324 "buffer-indexof": { 9287 "buffer-indexof": {
9325 "version": "1.1.1", 9288 "version": "1.1.1",
@@ -9334,9 +9297,9 @@
9334 "dev": true 9297 "dev": true
9335 }, 9298 },
9336 "builder-util": { 9299 "builder-util": {
9337 "version": "22.11.11", 9300 "version": "22.12.1",
9338 "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-22.11.11.tgz", 9301 "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-22.12.1.tgz",
9339 "integrity": "sha512-2UJjOuPXhix68mmQ9hkv9G52Y0EVB8RPjlJF61jr3/tLIyd3UiJmEEhKttu8F+JVHKj8myz1MWw2/keJE/Nh+w==", 9302 "integrity": "sha512-w0XF84saZZ8GLXy75tL1UzKEVCRHTIi/0NYV5WDqAUXLQWYWZr1m0TfsMXwD2+3TfzCAcavctzcpprm8Iw3gcQ==",
9340 "dev": true, 9303 "dev": true,
9341 "requires": { 9304 "requires": {
9342 "7zip-bin": "~5.1.1", 9305 "7zip-bin": "~5.1.1",
@@ -9346,6 +9309,7 @@
9346 "bluebird-lst": "^1.0.9", 9309 "bluebird-lst": "^1.0.9",
9347 "builder-util-runtime": "8.7.10", 9310 "builder-util-runtime": "8.7.10",
9348 "chalk": "^4.1.1", 9311 "chalk": "^4.1.1",
9312 "cross-spawn": "^7.0.3",
9349 "debug": "^4.3.2", 9313 "debug": "^4.3.2",
9350 "fs-extra": "^10.0.0", 9314 "fs-extra": "^10.0.0",
9351 "is-ci": "^3.0.0", 9315 "is-ci": "^3.0.0",
@@ -9399,12 +9363,44 @@
9399 "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 9363 "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
9400 "dev": true 9364 "dev": true
9401 }, 9365 },
9366 "cross-spawn": {
9367 "version": "7.0.3",
9368 "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
9369 "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
9370 "dev": true,
9371 "requires": {
9372 "path-key": "^3.1.0",
9373 "shebang-command": "^2.0.0",
9374 "which": "^2.0.1"
9375 }
9376 },
9402 "has-flag": { 9377 "has-flag": {
9403 "version": "4.0.0", 9378 "version": "4.0.0",
9404 "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 9379 "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
9405 "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 9380 "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
9406 "dev": true 9381 "dev": true
9407 }, 9382 },
9383 "path-key": {
9384 "version": "3.1.1",
9385 "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
9386 "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
9387 "dev": true
9388 },
9389 "shebang-command": {
9390 "version": "2.0.0",
9391 "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
9392 "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
9393 "dev": true,
9394 "requires": {
9395 "shebang-regex": "^3.0.0"
9396 }
9397 },
9398 "shebang-regex": {
9399 "version": "3.0.0",
9400 "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
9401 "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
9402 "dev": true
9403 },
9408 "supports-color": { 9404 "supports-color": {
9409 "version": "7.2.0", 9405 "version": "7.2.0",
9410 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 9406 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -9413,6 +9409,15 @@
9413 "requires": { 9409 "requires": {
9414 "has-flag": "^4.0.0" 9410 "has-flag": "^4.0.0"
9415 } 9411 }
9412 },
9413 "which": {
9414 "version": "2.0.2",
9415 "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
9416 "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
9417 "dev": true,
9418 "requires": {
9419 "isexe": "^2.0.0"
9420 }
9416 } 9421 }
9417 } 9422 }
9418 }, 9423 },
@@ -9602,12 +9607,6 @@
9602 } 9607 }
9603 } 9608 }
9604 }, 9609 },
9605 "cacheable-lookup": {
9606 "version": "5.0.4",
9607 "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz",
9608 "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==",
9609 "dev": true
9610 },
9611 "cacheable-request": { 9610 "cacheable-request": {
9612 "version": "6.1.0", 9611 "version": "6.1.0",
9613 "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", 9612 "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz",
@@ -9683,6 +9682,7 @@
9683 "version": "3.0.0", 9682 "version": "3.0.0",
9684 "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", 9683 "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz",
9685 "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", 9684 "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
9685 "dev": true,
9686 "requires": { 9686 "requires": {
9687 "no-case": "^2.2.0", 9687 "no-case": "^2.2.0",
9688 "upper-case": "^1.1.1" 9688 "upper-case": "^1.1.1"
@@ -9706,9 +9706,9 @@
9706 } 9706 }
9707 }, 9707 },
9708 "caniuse-lite": { 9708 "caniuse-lite": {
9709 "version": "1.0.30001249", 9709 "version": "1.0.30001251",
9710 "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001249.tgz", 9710 "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001251.tgz",
9711 "integrity": "sha512-vcX4U8lwVXPdqzPWi6cAJ3FnQaqXbBqy/GZseKNQzRj37J7qZdGcBtxq/QLFNLLlfsoXLUdHw8Iwenri86Tagw==", 9711 "integrity": "sha512-HOe1r+9VkU4TFmnU70z+r7OLmtR+/chB1rdcJUeQlAinjEeb0cKL20tlAtOagNZhbrtLnCvV19B4FmF1rgzl6A==",
9712 "dev": true 9712 "dev": true
9713 }, 9713 },
9714 "caseless": { 9714 "caseless": {
@@ -9935,6 +9935,7 @@
9935 "version": "4.2.3", 9935 "version": "4.2.3",
9936 "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", 9936 "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz",
9937 "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", 9937 "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==",
9938 "dev": true,
9938 "requires": { 9939 "requires": {
9939 "source-map": "~0.6.0" 9940 "source-map": "~0.6.0"
9940 }, 9941 },
@@ -9942,7 +9943,8 @@
9942 "source-map": { 9943 "source-map": {
9943 "version": "0.6.1", 9944 "version": "0.6.1",
9944 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 9945 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
9945 "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" 9946 "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
9947 "dev": true
9946 } 9948 }
9947 } 9949 }
9948 }, 9950 },
@@ -9967,12 +9969,6 @@
9967 "restore-cursor": "^3.1.0" 9969 "restore-cursor": "^3.1.0"
9968 } 9970 }
9969 }, 9971 },
9970 "cli-spinners": {
9971 "version": "2.6.0",
9972 "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz",
9973 "integrity": "sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==",
9974 "dev": true
9975 },
9976 "cli-table": { 9972 "cli-table": {
9977 "version": "0.3.6", 9973 "version": "0.3.6",
9978 "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.6.tgz", 9974 "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.6.tgz",
@@ -11503,6 +11499,7 @@
11503 "version": "1.1.3", 11499 "version": "1.1.3",
11504 "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", 11500 "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz",
11505 "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", 11501 "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==",
11502 "dev": true,
11506 "requires": { 11503 "requires": {
11507 "mdn-data": "2.0.14", 11504 "mdn-data": "2.0.14",
11508 "source-map": "^0.6.1" 11505 "source-map": "^0.6.1"
@@ -11511,7 +11508,8 @@
11511 "source-map": { 11508 "source-map": {
11512 "version": "0.6.1", 11509 "version": "0.6.1",
11513 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 11510 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
11514 "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" 11511 "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
11512 "dev": true
11515 } 11513 }
11516 } 11514 }
11517 }, 11515 },
@@ -11533,6 +11531,7 @@
11533 "version": "4.2.0", 11531 "version": "4.2.0",
11534 "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", 11532 "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz",
11535 "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", 11533 "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==",
11534 "dev": true,
11536 "requires": { 11535 "requires": {
11537 "css-tree": "^1.1.2" 11536 "css-tree": "^1.1.2"
11538 } 11537 }
@@ -12090,13 +12089,13 @@
12090 } 12089 }
12091 }, 12090 },
12092 "dmg-builder": { 12091 "dmg-builder": {
12093 "version": "22.12.0", 12092 "version": "22.12.1",
12094 "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-22.12.0.tgz", 12093 "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-22.12.1.tgz",
12095 "integrity": "sha512-5MANoNVctpiN536BLNDQp/gDk2BLRe23LE+RbOSt3I8b65V6mtvekjNiyUU5M+/UAbAzCcOZcCcaV3jDBuapaw==", 12094 "integrity": "sha512-keh9hGtqZ6weOyFg7wd8VYS7U5oYKFzeOEDoEc5ciiaLHfYKqFbJskvCOM2+aA7One92hZMwaIhMNoEug+jsbw==",
12096 "dev": true, 12095 "dev": true,
12097 "requires": { 12096 "requires": {
12098 "app-builder-lib": "22.12.0", 12097 "app-builder-lib": "22.12.1",
12099 "builder-util": "22.11.11", 12098 "builder-util": "22.12.1",
12100 "builder-util-runtime": "8.7.10", 12099 "builder-util-runtime": "8.7.10",
12101 "dmg-license": "^1.0.9", 12100 "dmg-license": "^1.0.9",
12102 "fs-extra": "^10.0.0", 12101 "fs-extra": "^10.0.0",
@@ -12308,18 +12307,11 @@
12308 "dev": true 12307 "dev": true
12309 }, 12308 },
12310 "du": { 12309 "du": {
12311 "version": "0.1.0", 12310 "version": "1.0.0",
12312 "resolved": "https://registry.npmjs.org/du/-/du-0.1.0.tgz", 12311 "resolved": "https://registry.npmjs.org/du/-/du-1.0.0.tgz",
12313 "integrity": "sha1-8m40CgnHvFtv1pr2263qYPqMb00=", 12312 "integrity": "sha512-w00+6XpIq924IvDLyOOx5HFO4KwH6YV6buqFx6og/ErTaJ34kVOyI+Q2f+X8pvZkDoEgT6xspA4iYSN99mqPDA==",
12314 "requires": { 12313 "requires": {
12315 "async": "~0.1.22" 12314 "map-async": "~0.1.1"
12316 },
12317 "dependencies": {
12318 "async": {
12319 "version": "0.1.22",
12320 "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz",
12321 "integrity": "sha1-D8GqoIig4+8Ovi2IMbqw3PiEUGE="
12322 }
12323 } 12315 }
12324 }, 12316 },
12325 "duplexer": { 12317 "duplexer": {
@@ -12337,6 +12329,7 @@
12337 "version": "4.1.2", 12329 "version": "4.1.2",
12338 "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", 12330 "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz",
12339 "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", 12331 "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==",
12332 "dev": true,
12340 "requires": { 12333 "requires": {
12341 "end-of-stream": "^1.4.1", 12334 "end-of-stream": "^1.4.1",
12342 "inherits": "^2.0.3", 12335 "inherits": "^2.0.3",
@@ -12412,9 +12405,9 @@
12412 } 12405 }
12413 }, 12406 },
12414 "electron": { 12407 "electron": {
12415 "version": "13.1.9", 12408 "version": "13.2.2",
12416 "resolved": "https://registry.npmjs.org/electron/-/electron-13.1.9.tgz", 12409 "resolved": "https://registry.npmjs.org/electron/-/electron-13.2.2.tgz",
12417 "integrity": "sha512-By4Zb72XNQLrPb70BXdIW3NtEHFwybP5DIQjohnCxOYONq5vojuHjNcTuWnBgMvwQ2qwykk6Tw5EwF2Pt0CWjA==", 12410 "integrity": "sha512-thGq2YaZqQWK1HexRghxdb26a8hA7ZSebukUSHlnHrY9+Sx9rW7e3uEHbibk/seRXVoXO76HndjKdHyObP9/Kw==",
12418 "dev": true, 12411 "dev": true,
12419 "requires": { 12412 "requires": {
12420 "@electron/get": "^1.0.1", 12413 "@electron/get": "^1.0.1",
@@ -12423,17 +12416,17 @@
12423 } 12416 }
12424 }, 12417 },
12425 "electron-builder": { 12418 "electron-builder": {
12426 "version": "22.12.0", 12419 "version": "22.12.1",
12427 "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-22.12.0.tgz", 12420 "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-22.12.1.tgz",
12428 "integrity": "sha512-X6YA0R6oYsS2iy+u0w3Sdm7u9rTo4JggD/jabKG34nZ0Hs5/iPAHBkcVvXqiFdMvnywbh1jm/aaf4PWW6XNMHw==", 12421 "integrity": "sha512-WttcOgfO5uy9OgKAWE3Yy2oiz39bTNXaKC3dKrwtKq0MaZL8DDvNGRNkFiZutOIF4wAUfwyG7Pm0KbI8Hl44Gw==",
12429 "dev": true, 12422 "dev": true,
12430 "requires": { 12423 "requires": {
12431 "@types/yargs": "^17.0.1", 12424 "@types/yargs": "^17.0.1",
12432 "app-builder-lib": "22.12.0", 12425 "app-builder-lib": "22.12.1",
12433 "builder-util": "22.11.11", 12426 "builder-util": "22.12.1",
12434 "builder-util-runtime": "8.7.10", 12427 "builder-util-runtime": "8.7.10",
12435 "chalk": "^4.1.1", 12428 "chalk": "^4.1.1",
12436 "dmg-builder": "22.12.0", 12429 "dmg-builder": "22.12.1",
12437 "fs-extra": "^10.0.0", 12430 "fs-extra": "^10.0.0",
12438 "is-ci": "^3.0.0", 12431 "is-ci": "^3.0.0",
12439 "lazy-val": "^1.0.5", 12432 "lazy-val": "^1.0.5",
@@ -12568,9 +12561,9 @@
12568 "dev": true 12561 "dev": true
12569 }, 12562 },
12570 "yargs": { 12563 "yargs": {
12571 "version": "17.1.0", 12564 "version": "17.1.1",
12572 "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.1.0.tgz", 12565 "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.1.1.tgz",
12573 "integrity": "sha512-SQr7qqmQ2sNijjJGHL4u7t8vyDZdZ3Ahkmo4sc1w5xI9TBX0QDdG/g4SFnxtWOsGLjwHQue57eFALfwFCnixgg==", 12566 "integrity": "sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ==",
12574 "dev": true, 12567 "dev": true,
12575 "requires": { 12568 "requires": {
12576 "cliui": "^7.0.2", 12569 "cliui": "^7.0.2",
@@ -12699,13 +12692,13 @@
12699 } 12692 }
12700 }, 12693 },
12701 "electron-publish": { 12694 "electron-publish": {
12702 "version": "22.11.11", 12695 "version": "22.12.1",
12703 "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-22.11.11.tgz", 12696 "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-22.12.1.tgz",
12704 "integrity": "sha512-XINI2yz7DpForvLDENr1zfi6yW+O3ufeIgNCg/nkqiD3tBM44AokgY3aYURzsi93ZwFscoQkR2LhmHDvn30oAw==", 12697 "integrity": "sha512-863+dgShqdmfelCfteR2xkkHch9bPtmIdD1IDLPzL3+43HdEz0oGvRnRJTBKzLrI94D3CNOM4OoPUj3L2JMLqw==",
12705 "dev": true, 12698 "dev": true,
12706 "requires": { 12699 "requires": {
12707 "@types/fs-extra": "^9.0.11", 12700 "@types/fs-extra": "^9.0.11",
12708 "builder-util": "22.11.11", 12701 "builder-util": "22.12.1",
12709 "builder-util-runtime": "8.7.10", 12702 "builder-util-runtime": "8.7.10",
12710 "chalk": "^4.1.1", 12703 "chalk": "^4.1.1",
12711 "fs-extra": "^10.0.0", 12704 "fs-extra": "^10.0.0",
@@ -12790,407 +12783,6 @@
12790 "react-virtualized": "^9.7.6" 12783 "react-virtualized": "^9.7.6"
12791 } 12784 }
12792 }, 12785 },
12793 "electron-rebuild": {
12794 "version": "2.3.5",
12795 "resolved": "https://registry.npmjs.org/electron-rebuild/-/electron-rebuild-2.3.5.tgz",
12796 "integrity": "sha512-1sQ1DRtQGpglFhc3urD4olMJzt/wxlbnAAsf+WY2xHf5c50ZovivZvCXSpVgTOP9f4TzOMvelWyspyfhxQKHzQ==",
12797 "dev": true,
12798 "requires": {
12799 "@malept/cross-spawn-promise": "^1.1.1",
12800 "colors": "^1.3.3",
12801 "debug": "^4.1.1",
12802 "detect-libc": "^1.0.3",
12803 "fs-extra": "^9.0.1",
12804 "got": "^11.7.0",
12805 "lzma-native": "^6.0.1",
12806 "node-abi": "^2.19.2",
12807 "node-gyp": "^7.1.0",
12808 "ora": "^5.1.0",
12809 "tar": "^6.0.5",
12810 "yargs": "^16.0.0"
12811 },
12812 "dependencies": {
12813 "@sindresorhus/is": {
12814 "version": "4.0.1",
12815 "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.0.1.tgz",
12816 "integrity": "sha512-Qm9hBEBu18wt1PO2flE7LPb30BHMQt1eQgbV76YntdNk73XZGpn3izvGTYxbGgzXKgbCjiia0uxTd3aTNQrY/g==",
12817 "dev": true
12818 },
12819 "@szmarczak/http-timer": {
12820 "version": "4.0.6",
12821 "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz",
12822 "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==",
12823 "dev": true,
12824 "requires": {
12825 "defer-to-connect": "^2.0.0"
12826 }
12827 },
12828 "ansi-regex": {
12829 "version": "5.0.0",
12830 "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
12831 "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
12832 "dev": true
12833 },
12834 "ansi-styles": {
12835 "version": "4.3.0",
12836 "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
12837 "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
12838 "dev": true,
12839 "requires": {
12840 "color-convert": "^2.0.1"
12841 }
12842 },
12843 "cacheable-request": {
12844 "version": "7.0.2",
12845 "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz",
12846 "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==",
12847 "dev": true,
12848 "requires": {
12849 "clone-response": "^1.0.2",
12850 "get-stream": "^5.1.0",
12851 "http-cache-semantics": "^4.0.0",
12852 "keyv": "^4.0.0",
12853 "lowercase-keys": "^2.0.0",
12854 "normalize-url": "^6.0.1",
12855 "responselike": "^2.0.0"
12856 }
12857 },
12858 "chownr": {
12859 "version": "2.0.0",
12860 "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
12861 "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
12862 "dev": true
12863 },
12864 "cliui": {
12865 "version": "7.0.4",
12866 "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
12867 "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
12868 "dev": true,
12869 "requires": {
12870 "string-width": "^4.2.0",
12871 "strip-ansi": "^6.0.0",
12872 "wrap-ansi": "^7.0.0"
12873 }
12874 },
12875 "color-convert": {
12876 "version": "2.0.1",
12877 "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
12878 "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
12879 "dev": true,
12880 "requires": {
12881 "color-name": "~1.1.4"
12882 }
12883 },
12884 "color-name": {
12885 "version": "1.1.4",
12886 "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
12887 "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
12888 "dev": true
12889 },
12890 "colors": {
12891 "version": "1.4.0",
12892 "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
12893 "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==",
12894 "dev": true
12895 },
12896 "decompress-response": {
12897 "version": "6.0.0",
12898 "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
12899 "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
12900 "dev": true,
12901 "requires": {
12902 "mimic-response": "^3.1.0"
12903 }
12904 },
12905 "defer-to-connect": {
12906 "version": "2.0.1",
12907 "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz",
12908 "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==",
12909 "dev": true
12910 },
12911 "fs-extra": {
12912 "version": "9.1.0",
12913 "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
12914 "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
12915 "dev": true,
12916 "requires": {
12917 "at-least-node": "^1.0.0",
12918 "graceful-fs": "^4.2.0",
12919 "jsonfile": "^6.0.1",
12920 "universalify": "^2.0.0"
12921 }
12922 },
12923 "fs-minipass": {
12924 "version": "2.1.0",
12925 "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
12926 "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
12927 "dev": true,
12928 "requires": {
12929 "minipass": "^3.0.0"
12930 }
12931 },
12932 "get-caller-file": {
12933 "version": "2.0.5",
12934 "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
12935 "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
12936 "dev": true
12937 },
12938 "get-stream": {
12939 "version": "5.2.0",
12940 "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
12941 "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
12942 "dev": true,
12943 "requires": {
12944 "pump": "^3.0.0"
12945 }
12946 },
12947 "glob": {
12948 "version": "7.1.7",
12949 "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
12950 "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
12951 "dev": true,
12952 "requires": {
12953 "fs.realpath": "^1.0.0",
12954 "inflight": "^1.0.4",
12955 "inherits": "2",
12956 "minimatch": "^3.0.4",
12957 "once": "^1.3.0",
12958 "path-is-absolute": "^1.0.0"
12959 }
12960 },
12961 "got": {
12962 "version": "11.8.2",
12963 "resolved": "https://registry.npmjs.org/got/-/got-11.8.2.tgz",
12964 "integrity": "sha512-D0QywKgIe30ODs+fm8wMZiAcZjypcCodPNuMz5H9Mny7RJ+IjJ10BdmGW7OM7fHXP+O7r6ZwapQ/YQmMSvB0UQ==",
12965 "dev": true,
12966 "requires": {
12967 "@sindresorhus/is": "^4.0.0",
12968 "@szmarczak/http-timer": "^4.0.5",
12969 "@types/cacheable-request": "^6.0.1",
12970 "@types/responselike": "^1.0.0",
12971 "cacheable-lookup": "^5.0.3",
12972 "cacheable-request": "^7.0.1",
12973 "decompress-response": "^6.0.0",
12974 "http2-wrapper": "^1.0.0-beta.5.2",
12975 "lowercase-keys": "^2.0.0",
12976 "p-cancelable": "^2.0.0",
12977 "responselike": "^2.0.0"
12978 }
12979 },
12980 "is-fullwidth-code-point": {
12981 "version": "3.0.0",
12982 "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
12983 "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
12984 "dev": true
12985 },
12986 "json-buffer": {
12987 "version": "3.0.1",
12988 "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
12989 "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
12990 "dev": true
12991 },
12992 "jsonfile": {
12993 "version": "6.1.0",
12994 "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
12995 "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
12996 "dev": true,
12997 "requires": {
12998 "graceful-fs": "^4.1.6",
12999 "universalify": "^2.0.0"
13000 }
13001 },
13002 "keyv": {
13003 "version": "4.0.3",
13004 "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.3.tgz",
13005 "integrity": "sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA==",
13006 "dev": true,
13007 "requires": {
13008 "json-buffer": "3.0.1"
13009 }
13010 },
13011 "lowercase-keys": {
13012 "version": "2.0.0",
13013 "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
13014 "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
13015 "dev": true
13016 },
13017 "mimic-response": {
13018 "version": "3.1.0",
13019 "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
13020 "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
13021 "dev": true
13022 },
13023 "minipass": {
13024 "version": "3.1.3",
13025 "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz",
13026 "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==",
13027 "dev": true,
13028 "requires": {
13029 "yallist": "^4.0.0"
13030 }
13031 },
13032 "minizlib": {
13033 "version": "2.1.2",
13034 "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
13035 "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
13036 "dev": true,
13037 "requires": {
13038 "minipass": "^3.0.0",
13039 "yallist": "^4.0.0"
13040 }
13041 },
13042 "mkdirp": {
13043 "version": "1.0.4",
13044 "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
13045 "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
13046 "dev": true
13047 },
13048 "node-gyp": {
13049 "version": "7.1.2",
13050 "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz",
13051 "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==",
13052 "dev": true,
13053 "requires": {
13054 "env-paths": "^2.2.0",
13055 "glob": "^7.1.4",
13056 "graceful-fs": "^4.2.3",
13057 "nopt": "^5.0.0",
13058 "npmlog": "^4.1.2",
13059 "request": "^2.88.2",
13060 "rimraf": "^3.0.2",
13061 "semver": "^7.3.2",
13062 "tar": "^6.0.2",
13063 "which": "^2.0.2"
13064 }
13065 },
13066 "nopt": {
13067 "version": "5.0.0",
13068 "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
13069 "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
13070 "dev": true,
13071 "requires": {
13072 "abbrev": "1"
13073 }
13074 },
13075 "p-cancelable": {
13076 "version": "2.1.1",
13077 "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz",
13078 "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==",
13079 "dev": true
13080 },
13081 "responselike": {
13082 "version": "2.0.0",
13083 "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz",
13084 "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==",
13085 "dev": true,
13086 "requires": {
13087 "lowercase-keys": "^2.0.0"
13088 }
13089 },
13090 "rimraf": {
13091 "version": "3.0.2",
13092 "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
13093 "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
13094 "dev": true,
13095 "requires": {
13096 "glob": "^7.1.3"
13097 }
13098 },
13099 "string-width": {
13100 "version": "4.2.2",
13101 "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
13102 "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
13103 "dev": true,
13104 "requires": {
13105 "emoji-regex": "^8.0.0",
13106 "is-fullwidth-code-point": "^3.0.0",
13107 "strip-ansi": "^6.0.0"
13108 }
13109 },
13110 "strip-ansi": {
13111 "version": "6.0.0",
13112 "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
13113 "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
13114 "dev": true,
13115 "requires": {
13116 "ansi-regex": "^5.0.0"
13117 }
13118 },
13119 "tar": {
13120 "version": "6.1.6",
13121 "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.6.tgz",
13122 "integrity": "sha512-oaWyu5dQbHaYcyZCTfyPpC+VmI62/OM2RTUYavTk1MDr1cwW5Boi3baeYQKiZbY2uSQJGr+iMOzb/JFxLrft+g==",
13123 "dev": true,
13124 "requires": {
13125 "chownr": "^2.0.0",
13126 "fs-minipass": "^2.0.0",
13127 "minipass": "^3.0.0",
13128 "minizlib": "^2.1.1",
13129 "mkdirp": "^1.0.3",
13130 "yallist": "^4.0.0"
13131 }
13132 },
13133 "universalify": {
13134 "version": "2.0.0",
13135 "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
13136 "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
13137 "dev": true
13138 },
13139 "which": {
13140 "version": "2.0.2",
13141 "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
13142 "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
13143 "dev": true,
13144 "requires": {
13145 "isexe": "^2.0.0"
13146 }
13147 },
13148 "wrap-ansi": {
13149 "version": "7.0.0",
13150 "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
13151 "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
13152 "dev": true,
13153 "requires": {
13154 "ansi-styles": "^4.0.0",
13155 "string-width": "^4.1.0",
13156 "strip-ansi": "^6.0.0"
13157 }
13158 },
13159 "y18n": {
13160 "version": "5.0.8",
13161 "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
13162 "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
13163 "dev": true
13164 },
13165 "yallist": {
13166 "version": "4.0.0",
13167 "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
13168 "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
13169 "dev": true
13170 },
13171 "yargs": {
13172 "version": "16.2.0",
13173 "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
13174 "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
13175 "dev": true,
13176 "requires": {
13177 "cliui": "^7.0.2",
13178 "escalade": "^3.1.1",
13179 "get-caller-file": "^2.0.5",
13180 "require-directory": "^2.1.1",
13181 "string-width": "^4.2.0",
13182 "y18n": "^5.0.5",
13183 "yargs-parser": "^20.2.2"
13184 }
13185 },
13186 "yargs-parser": {
13187 "version": "20.2.9",
13188 "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
13189 "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
13190 "dev": true
13191 }
13192 }
13193 },
13194 "electron-to-chromium": { 12786 "electron-to-chromium": {
13195 "version": "1.3.799", 12787 "version": "1.3.799",
13196 "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.799.tgz", 12788 "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.799.tgz",
@@ -13897,36 +13489,30 @@
13897 "dev": true 13489 "dev": true
13898 }, 13490 },
13899 "eslint-import-resolver-node": { 13491 "eslint-import-resolver-node": {
13900 "version": "0.3.4", 13492 "version": "0.3.5",
13901 "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", 13493 "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.5.tgz",
13902 "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", 13494 "integrity": "sha512-XMoPKjSpXbkeJ7ZZ9icLnJMTY5Mc1kZbCakHquaFsXPpyWOwK0TK6CODO+0ca54UoM9LKOxyUNnoVZRl8TeaAg==",
13903 "dev": true, 13495 "dev": true,
13904 "requires": { 13496 "requires": {
13905 "debug": "^2.6.9", 13497 "debug": "^3.2.7",
13906 "resolve": "^1.13.1" 13498 "resolve": "^1.20.0"
13907 }, 13499 },
13908 "dependencies": { 13500 "dependencies": {
13909 "debug": { 13501 "debug": {
13910 "version": "2.6.9", 13502 "version": "3.2.7",
13911 "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 13503 "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
13912 "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 13504 "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
13913 "dev": true, 13505 "dev": true,
13914 "requires": { 13506 "requires": {
13915 "ms": "2.0.0" 13507 "ms": "^2.1.1"
13916 } 13508 }
13917 },
13918 "ms": {
13919 "version": "2.0.0",
13920 "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
13921 "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
13922 "dev": true
13923 } 13509 }
13924 } 13510 }
13925 }, 13511 },
13926 "eslint-module-utils": { 13512 "eslint-module-utils": {
13927 "version": "2.6.1", 13513 "version": "2.6.2",
13928 "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.1.tgz", 13514 "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.2.tgz",
13929 "integrity": "sha512-ZXI9B8cxAJIH4nfkhTwcRTEAnrVfobYqwjWy/QMCZ8rHkZHFjf9yO4BzpiF9kCSfNlMG54eKigISHpX0+AaT4A==", 13515 "integrity": "sha512-QG8pcgThYOuqxupd06oYTZoNOGaUdTY1PqK+oS6ElF6vs4pBdk/aYxFVQQXzcrAqp9m7cl7lb2ubazX+g16k2Q==",
13930 "dev": true, 13516 "dev": true,
13931 "requires": { 13517 "requires": {
13932 "debug": "^3.2.7", 13518 "debug": "^3.2.7",
@@ -14003,17 +13589,17 @@
14003 } 13589 }
14004 }, 13590 },
14005 "eslint-plugin-import": { 13591 "eslint-plugin-import": {
14006 "version": "2.23.4", 13592 "version": "2.24.0",
14007 "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.23.4.tgz", 13593 "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.24.0.tgz",
14008 "integrity": "sha512-6/wP8zZRsnQFiR3iaPFgh5ImVRM1WN5NUWfTIRqwOdeiGJlBcSk82o1FEVq8yXmy4lkIzTo7YhHCIxlU/2HyEQ==", 13594 "integrity": "sha512-Kc6xqT9hiYi2cgybOc0I2vC9OgAYga5o/rAFinam/yF/t5uBqxQbauNPMC6fgb640T/89P0gFoO27FOilJ/Cqg==",
14009 "dev": true, 13595 "dev": true,
14010 "requires": { 13596 "requires": {
14011 "array-includes": "^3.1.3", 13597 "array-includes": "^3.1.3",
14012 "array.prototype.flat": "^1.2.4", 13598 "array.prototype.flat": "^1.2.4",
14013 "debug": "^2.6.9", 13599 "debug": "^2.6.9",
14014 "doctrine": "^2.1.0", 13600 "doctrine": "^2.1.0",
14015 "eslint-import-resolver-node": "^0.3.4", 13601 "eslint-import-resolver-node": "^0.3.5",
14016 "eslint-module-utils": "^2.6.1", 13602 "eslint-module-utils": "^2.6.2",
14017 "find-up": "^2.0.0", 13603 "find-up": "^2.0.0",
14018 "has": "^1.0.3", 13604 "has": "^1.0.3",
14019 "is-core-module": "^2.4.0", 13605 "is-core-module": "^2.4.0",
@@ -15318,7 +14904,8 @@
15318 "fork-stream": { 14904 "fork-stream": {
15319 "version": "0.0.4", 14905 "version": "0.0.4",
15320 "resolved": "https://registry.npmjs.org/fork-stream/-/fork-stream-0.0.4.tgz", 14906 "resolved": "https://registry.npmjs.org/fork-stream/-/fork-stream-0.0.4.tgz",
15321 "integrity": "sha1-24Sfznf2cIpfjzhq5TOgkHtUrnA=" 14907 "integrity": "sha1-24Sfznf2cIpfjzhq5TOgkHtUrnA=",
14908 "dev": true
15322 }, 14909 },
15323 "form-data": { 14910 "form-data": {
15324 "version": "2.3.3", 14911 "version": "2.3.3",
@@ -15389,11 +14976,6 @@
15389 } 14976 }
15390 } 14977 }
15391 }, 14978 },
15392 "fs-constants": {
15393 "version": "1.0.0",
15394 "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
15395 "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
15396 },
15397 "fs-extra": { 14979 "fs-extra": {
15398 "version": "10.0.0", 14980 "version": "10.0.0",
15399 "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", 14981 "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz",
@@ -15897,9 +15479,9 @@
15897 }, 15479 },
15898 "dependencies": { 15480 "dependencies": {
15899 "core-js": { 15481 "core-js": {
15900 "version": "3.16.1", 15482 "version": "3.16.2",
15901 "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.1.tgz", 15483 "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.2.tgz",
15902 "integrity": "sha512-AAkP8i35EbefU+JddyWi12AWE9f2N/qr/pwnDtWz4nyUIBGMJPX99ANFFRSw6FefM374lDujdtLDyhN2A/btHw==", 15484 "integrity": "sha512-P0KPukO6OjMpjBtHSceAZEWlDD1M2Cpzpg6dBbrjFqFhBHe/BwhxaP820xKOjRn/lZRQirrCusIpLS/n2sgXLQ==",
15903 "dev": true, 15485 "dev": true,
15904 "optional": true 15486 "optional": true
15905 } 15487 }
@@ -15991,6 +15573,7 @@
15991 "version": "1.0.2", 15573 "version": "1.0.2",
15992 "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", 15574 "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz",
15993 "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", 15575 "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==",
15576 "dev": true,
15994 "requires": { 15577 "requires": {
15995 "sparkles": "^1.0.0" 15578 "sparkles": "^1.0.0"
15996 } 15579 }
@@ -16371,6 +15954,7 @@
16371 "version": "4.0.1", 15954 "version": "4.0.1",
16372 "resolved": "https://registry.npmjs.org/gulp-csso/-/gulp-csso-4.0.1.tgz", 15955 "resolved": "https://registry.npmjs.org/gulp-csso/-/gulp-csso-4.0.1.tgz",
16373 "integrity": "sha512-Kg8gqmd6XcUlMTdBbqdCEcpHumc8ytc4khgm9AXeCjl8eHx7b6tC11y8haizFI+Zw/cSHL6HCj7GwGLwxxBUFQ==", 15956 "integrity": "sha512-Kg8gqmd6XcUlMTdBbqdCEcpHumc8ytc4khgm9AXeCjl8eHx7b6tC11y8haizFI+Zw/cSHL6HCj7GwGLwxxBUFQ==",
15957 "dev": true,
16374 "requires": { 15958 "requires": {
16375 "csso": "^4.0.0", 15959 "csso": "^4.0.0",
16376 "plugin-error": "^1.0.0", 15960 "plugin-error": "^1.0.0",
@@ -16381,6 +15965,7 @@
16381 "version": "5.0.1", 15965 "version": "5.0.1",
16382 "resolved": "https://registry.npmjs.org/gulp-htmlmin/-/gulp-htmlmin-5.0.1.tgz", 15966 "resolved": "https://registry.npmjs.org/gulp-htmlmin/-/gulp-htmlmin-5.0.1.tgz",
16383 "integrity": "sha512-ASlyDPZOSKjHYUifYV0rf9JPDflN9IRIb8lw2vRqtYMC4ljU3zAmnnaVXwFQ3H+CfXxZSUesZ2x7jrnPJu93jA==", 15967 "integrity": "sha512-ASlyDPZOSKjHYUifYV0rf9JPDflN9IRIb8lw2vRqtYMC4ljU3zAmnnaVXwFQ3H+CfXxZSUesZ2x7jrnPJu93jA==",
15968 "dev": true,
16384 "requires": { 15969 "requires": {
16385 "html-minifier": "^3.5.20", 15970 "html-minifier": "^3.5.20",
16386 "plugin-error": "^1.0.1", 15971 "plugin-error": "^1.0.1",
@@ -16391,6 +15976,7 @@
16391 "version": "3.0.0", 15976 "version": "3.0.0",
16392 "resolved": "https://registry.npmjs.org/gulp-if/-/gulp-if-3.0.0.tgz", 15977 "resolved": "https://registry.npmjs.org/gulp-if/-/gulp-if-3.0.0.tgz",
16393 "integrity": "sha512-fCUEngzNiEZEK2YuPm+sdMpO6ukb8+/qzbGfJBXyNOXz85bCG7yBI+pPSl+N90d7gnLvMsarthsAImx0qy7BAw==", 15978 "integrity": "sha512-fCUEngzNiEZEK2YuPm+sdMpO6ukb8+/qzbGfJBXyNOXz85bCG7yBI+pPSl+N90d7gnLvMsarthsAImx0qy7BAw==",
15979 "dev": true,
16394 "requires": { 15980 "requires": {
16395 "gulp-match": "^1.1.0", 15981 "gulp-match": "^1.1.0",
16396 "ternary-stream": "^3.0.0", 15982 "ternary-stream": "^3.0.0",
@@ -16401,6 +15987,7 @@
16401 "version": "3.0.2", 15987 "version": "3.0.2",
16402 "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", 15988 "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz",
16403 "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", 15989 "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==",
15990 "dev": true,
16404 "requires": { 15991 "requires": {
16405 "inherits": "^2.0.4", 15992 "inherits": "^2.0.4",
16406 "readable-stream": "2 || 3" 15993 "readable-stream": "2 || 3"
@@ -16412,6 +15999,7 @@
16412 "version": "1.1.0", 15999 "version": "1.1.0",
16413 "resolved": "https://registry.npmjs.org/gulp-match/-/gulp-match-1.1.0.tgz", 16000 "resolved": "https://registry.npmjs.org/gulp-match/-/gulp-match-1.1.0.tgz",
16414 "integrity": "sha512-DlyVxa1Gj24DitY2OjEsS+X6tDpretuxD6wTfhXE/Rw2hweqc1f6D/XtsJmoiCwLWfXgR87W9ozEityPCVzGtQ==", 16001 "integrity": "sha512-DlyVxa1Gj24DitY2OjEsS+X6tDpretuxD6wTfhXE/Rw2hweqc1f6D/XtsJmoiCwLWfXgR87W9ozEityPCVzGtQ==",
16002 "dev": true,
16415 "requires": { 16003 "requires": {
16416 "minimatch": "^3.0.3" 16004 "minimatch": "^3.0.3"
16417 } 16005 }
@@ -16513,10 +16101,49 @@
16513 "through2": "^2.0.1" 16101 "through2": "^2.0.1"
16514 } 16102 }
16515 }, 16103 },
16104 "gulp-typescript": {
16105 "version": "6.0.0-alpha.1",
16106 "resolved": "https://registry.npmjs.org/gulp-typescript/-/gulp-typescript-6.0.0-alpha.1.tgz",
16107 "integrity": "sha512-KoT0TTfjfT7w3JItHkgFH1T/zK4oXWC+a8xxKfniRfVcA0Fa1bKrIhztYelYmb+95RB80OLMBreknYkdwzdi2Q==",
16108 "dev": true,
16109 "requires": {
16110 "ansi-colors": "^4.1.1",
16111 "plugin-error": "^1.0.1",
16112 "source-map": "^0.7.3",
16113 "through2": "^3.0.1",
16114 "vinyl": "^2.2.0",
16115 "vinyl-fs": "^3.0.3"
16116 },
16117 "dependencies": {
16118 "ansi-colors": {
16119 "version": "4.1.1",
16120 "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
16121 "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
16122 "dev": true
16123 },
16124 "source-map": {
16125 "version": "0.7.3",
16126 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
16127 "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
16128 "dev": true
16129 },
16130 "through2": {
16131 "version": "3.0.2",
16132 "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz",
16133 "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==",
16134 "dev": true,
16135 "requires": {
16136 "inherits": "^2.0.4",
16137 "readable-stream": "2 || 3"
16138 }
16139 }
16140 }
16141 },
16516 "gulp-uglify": { 16142 "gulp-uglify": {
16517 "version": "3.0.2", 16143 "version": "3.0.2",
16518 "resolved": "https://registry.npmjs.org/gulp-uglify/-/gulp-uglify-3.0.2.tgz", 16144 "resolved": "https://registry.npmjs.org/gulp-uglify/-/gulp-uglify-3.0.2.tgz",
16519 "integrity": "sha512-gk1dhB74AkV2kzqPMQBLA3jPoIAPd/nlNzP2XMDSG8XZrqnlCiDGAqC+rZOumzFvB5zOphlFh6yr3lgcAb/OOg==", 16145 "integrity": "sha512-gk1dhB74AkV2kzqPMQBLA3jPoIAPd/nlNzP2XMDSG8XZrqnlCiDGAqC+rZOumzFvB5zOphlFh6yr3lgcAb/OOg==",
16146 "dev": true,
16520 "requires": { 16147 "requires": {
16521 "array-each": "^1.0.1", 16148 "array-each": "^1.0.1",
16522 "extend-shallow": "^3.0.2", 16149 "extend-shallow": "^3.0.2",
@@ -16534,6 +16161,7 @@
16534 "version": "3.0.2", 16161 "version": "3.0.2",
16535 "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", 16162 "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
16536 "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", 16163 "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
16164 "dev": true,
16537 "requires": { 16165 "requires": {
16538 "assign-symbols": "^1.0.0", 16166 "assign-symbols": "^1.0.0",
16539 "is-extendable": "^1.0.1" 16167 "is-extendable": "^1.0.1"
@@ -16543,6 +16171,7 @@
16543 "version": "1.0.1", 16171 "version": "1.0.1",
16544 "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", 16172 "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
16545 "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", 16173 "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
16174 "dev": true,
16546 "requires": { 16175 "requires": {
16547 "is-plain-object": "^2.0.4" 16176 "is-plain-object": "^2.0.4"
16548 } 16177 }
@@ -16553,6 +16182,7 @@
16553 "version": "1.0.0", 16182 "version": "1.0.0",
16554 "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", 16183 "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz",
16555 "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", 16184 "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=",
16185 "dev": true,
16556 "requires": { 16186 "requires": {
16557 "glogg": "^1.0.0" 16187 "glogg": "^1.0.0"
16558 } 16188 }
@@ -16627,6 +16257,7 @@
16627 "version": "0.1.0", 16257 "version": "0.1.0",
16628 "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", 16258 "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz",
16629 "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", 16259 "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=",
16260 "dev": true,
16630 "requires": { 16261 "requires": {
16631 "sparkles": "^1.0.0" 16262 "sparkles": "^1.0.0"
16632 } 16263 }
@@ -16740,12 +16371,13 @@
16740 "he": { 16371 "he": {
16741 "version": "1.2.0", 16372 "version": "1.2.0",
16742 "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 16373 "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
16743 "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" 16374 "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
16375 "dev": true
16744 }, 16376 },
16745 "hex-rgb": { 16377 "hex-rgb": {
16746 "version": "3.0.0", 16378 "version": "4.3.0",
16747 "resolved": "https://registry.npmjs.org/hex-rgb/-/hex-rgb-3.0.0.tgz", 16379 "resolved": "https://registry.npmjs.org/hex-rgb/-/hex-rgb-4.3.0.tgz",
16748 "integrity": "sha512-iWOUTZu7KQGhErV8JfTQDH5F/M2D0HVd0sexS4Grg4e4RYAiN3c4jfpPqKgfedqeebKcNZBl2z3zlgCtFjpFJQ==", 16380 "integrity": "sha512-Ox1pJVrDCyGHMG9CFg1tmrRUMRPRsAWYc/PinY0XzJU4K7y7vjNoLKIQ7BR5UJMCxNN8EM1MNDmHWA/B3aZUuw==",
16749 "dev": true 16381 "dev": true
16750 }, 16382 },
16751 "hexy": { 16383 "hexy": {
@@ -16860,6 +16492,7 @@
16860 "version": "3.5.21", 16492 "version": "3.5.21",
16861 "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", 16493 "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz",
16862 "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", 16494 "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==",
16495 "dev": true,
16863 "requires": { 16496 "requires": {
16864 "camel-case": "3.0.x", 16497 "camel-case": "3.0.x",
16865 "clean-css": "4.2.x", 16498 "clean-css": "4.2.x",
@@ -16873,7 +16506,8 @@
16873 "commander": { 16506 "commander": {
16874 "version": "2.17.1", 16507 "version": "2.17.1",
16875 "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", 16508 "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
16876 "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" 16509 "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
16510 "dev": true
16877 } 16511 }
16878 } 16512 }
16879 }, 16513 },
@@ -17059,24 +16693,6 @@
17059 "sshpk": "^1.7.0" 16693 "sshpk": "^1.7.0"
17060 } 16694 }
17061 }, 16695 },
17062 "http2-wrapper": {
17063 "version": "1.0.3",
17064 "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz",
17065 "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==",
17066 "dev": true,
17067 "requires": {
17068 "quick-lru": "^5.1.1",
17069 "resolve-alpn": "^1.0.0"
17070 },
17071 "dependencies": {
17072 "quick-lru": {
17073 "version": "5.1.1",
17074 "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
17075 "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
17076 "dev": true
17077 }
17078 }
17079 },
17080 "https-browserify": { 16696 "https-browserify": {
17081 "version": "1.0.0", 16697 "version": "1.0.0",
17082 "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", 16698 "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
@@ -17780,12 +17396,6 @@
17780 } 17396 }
17781 } 17397 }
17782 }, 17398 },
17783 "is-interactive": {
17784 "version": "1.0.0",
17785 "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
17786 "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==",
17787 "dev": true
17788 },
17789 "is-lambda": { 17399 "is-lambda": {
17790 "version": "1.0.1", 17400 "version": "1.0.1",
17791 "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", 17401 "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz",
@@ -20915,7 +20525,8 @@
20915 "lower-case": { 20525 "lower-case": {
20916 "version": "1.1.4", 20526 "version": "1.1.4",
20917 "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", 20527 "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz",
20918 "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=" 20528 "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=",
20529 "dev": true
20919 }, 20530 },
20920 "lowercase-keys": { 20531 "lowercase-keys": {
20921 "version": "1.0.1", 20532 "version": "1.0.1",
@@ -20937,50 +20548,6 @@
20937 "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", 20548 "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz",
20938 "integrity": "sha1-tcg1G5Rky9dQM1p5ZQoOwOVhGN0=" 20549 "integrity": "sha1-tcg1G5Rky9dQM1p5ZQoOwOVhGN0="
20939 }, 20550 },
20940 "lzma-native": {
20941 "version": "6.0.1",
20942 "resolved": "https://registry.npmjs.org/lzma-native/-/lzma-native-6.0.1.tgz",
20943 "integrity": "sha512-O6oWF0xe1AFvOCjU8uOZBZ/lhjaMNwHfVNaqVMqmoQXlRwBcFWpCAToiZOdXcKVMdo/5s/D0a2QgA5laMErxHQ==",
20944 "dev": true,
20945 "requires": {
20946 "node-addon-api": "^1.6.0",
20947 "node-pre-gyp": "^0.11.0",
20948 "readable-stream": "^2.3.5",
20949 "rimraf": "^2.7.1"
20950 },
20951 "dependencies": {
20952 "node-addon-api": {
20953 "version": "1.7.2",
20954 "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz",
20955 "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==",
20956 "dev": true
20957 },
20958 "readable-stream": {
20959 "version": "2.3.7",
20960 "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
20961 "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
20962 "dev": true,
20963 "requires": {
20964 "core-util-is": "~1.0.0",
20965 "inherits": "~2.0.3",
20966 "isarray": "~1.0.0",
20967 "process-nextick-args": "~2.0.0",
20968 "safe-buffer": "~5.1.1",
20969 "string_decoder": "~1.1.1",
20970 "util-deprecate": "~1.0.1"
20971 }
20972 },
20973 "string_decoder": {
20974 "version": "1.1.1",
20975 "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
20976 "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
20977 "dev": true,
20978 "requires": {
20979 "safe-buffer": "~5.1.0"
20980 }
20981 }
20982 }
20983 },
20984 "macos-notification-state": { 20551 "macos-notification-state": {
20985 "version": "1.3.5", 20552 "version": "1.3.5",
20986 "resolved": "https://registry.npmjs.org/macos-notification-state/-/macos-notification-state-1.3.5.tgz", 20553 "resolved": "https://registry.npmjs.org/macos-notification-state/-/macos-notification-state-1.3.5.tgz",
@@ -21045,12 +20612,14 @@
21045 "make-error": { 20612 "make-error": {
21046 "version": "1.3.6", 20613 "version": "1.3.6",
21047 "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", 20614 "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
21048 "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" 20615 "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
20616 "dev": true
21049 }, 20617 },
21050 "make-error-cause": { 20618 "make-error-cause": {
21051 "version": "1.2.2", 20619 "version": "1.2.2",
21052 "resolved": "https://registry.npmjs.org/make-error-cause/-/make-error-cause-1.2.2.tgz", 20620 "resolved": "https://registry.npmjs.org/make-error-cause/-/make-error-cause-1.2.2.tgz",
21053 "integrity": "sha1-3wOI/NCzeBbf8KX7gQiTl3fcvJ0=", 20621 "integrity": "sha1-3wOI/NCzeBbf8KX7gQiTl3fcvJ0=",
20622 "dev": true,
21054 "requires": { 20623 "requires": {
21055 "make-error": "^1.2.0" 20624 "make-error": "^1.2.0"
21056 } 20625 }
@@ -21138,6 +20707,11 @@
21138 "p-defer": "^1.0.0" 20707 "p-defer": "^1.0.0"
21139 } 20708 }
21140 }, 20709 },
20710 "map-async": {
20711 "version": "0.1.1",
20712 "resolved": "https://registry.npmjs.org/map-async/-/map-async-0.1.1.tgz",
20713 "integrity": "sha1-yJfARJ+Fhkx0taPxlu20IVZDF0U="
20714 },
21141 "map-cache": { 20715 "map-cache": {
21142 "version": "0.2.2", 20716 "version": "0.2.2",
21143 "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", 20717 "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
@@ -21212,7 +20786,8 @@
21212 "mdn-data": { 20786 "mdn-data": {
21213 "version": "2.0.14", 20787 "version": "2.0.14",
21214 "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", 20788 "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz",
21215 "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" 20789 "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==",
20790 "dev": true
21216 }, 20791 },
21217 "media-typer": { 20792 "media-typer": {
21218 "version": "0.3.0", 20793 "version": "0.3.0",
@@ -21848,12 +21423,6 @@
21848 "react-lifecycles-compat": "^3.0.2" 21423 "react-lifecycles-compat": "^3.0.2"
21849 } 21424 }
21850 }, 21425 },
21851 "mobx-react-devtools": {
21852 "version": "6.1.1",
21853 "resolved": "https://registry.npmjs.org/mobx-react-devtools/-/mobx-react-devtools-6.1.1.tgz",
21854 "integrity": "sha512-nc5IXLdEUFLn3wZal65KF3/JFEFd+mbH4KTz/IG5BOPyw7jo8z29w/8qm7+wiCyqVfUIgJ1gL4+HVKmcXIOgqA==",
21855 "dev": true
21856 },
21857 "mobx-react-form": { 21426 "mobx-react-form": {
21858 "version": "1.35.1", 21427 "version": "1.35.1",
21859 "resolved": "https://registry.npmjs.org/mobx-react-form/-/mobx-react-form-1.35.1.tgz", 21428 "resolved": "https://registry.npmjs.org/mobx-react-form/-/mobx-react-form-1.35.1.tgz",
@@ -22356,7 +21925,8 @@
22356 "nan": { 21925 "nan": {
22357 "version": "2.15.0", 21926 "version": "2.15.0",
22358 "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", 21927 "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz",
22359 "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==" 21928 "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==",
21929 "optional": true
22360 }, 21930 },
22361 "nanoid": { 21931 "nanoid": {
22362 "version": "3.1.23", 21932 "version": "3.1.23",
@@ -22472,6 +22042,7 @@
22472 "version": "2.3.2", 22042 "version": "2.3.2",
22473 "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", 22043 "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
22474 "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", 22044 "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==",
22045 "dev": true,
22475 "requires": { 22046 "requires": {
22476 "lower-case": "^1.1.1" 22047 "lower-case": "^1.1.1"
22477 } 22048 }
@@ -23337,100 +22908,6 @@
23337 "word-wrap": "^1.2.3" 22908 "word-wrap": "^1.2.3"
23338 } 22909 }
23339 }, 22910 },
23340 "ora": {
23341 "version": "5.4.1",
23342 "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz",
23343 "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==",
23344 "dev": true,
23345 "requires": {
23346 "bl": "^4.1.0",
23347 "chalk": "^4.1.0",
23348 "cli-cursor": "^3.1.0",
23349 "cli-spinners": "^2.5.0",
23350 "is-interactive": "^1.0.0",
23351 "is-unicode-supported": "^0.1.0",
23352 "log-symbols": "^4.1.0",
23353 "strip-ansi": "^6.0.0",
23354 "wcwidth": "^1.0.1"
23355 },
23356 "dependencies": {
23357 "ansi-regex": {
23358 "version": "5.0.0",
23359 "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
23360 "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
23361 "dev": true
23362 },
23363 "ansi-styles": {
23364 "version": "4.3.0",
23365 "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
23366 "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
23367 "dev": true,
23368 "requires": {
23369 "color-convert": "^2.0.1"
23370 }
23371 },
23372 "bl": {
23373 "version": "4.1.0",
23374 "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
23375 "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
23376 "dev": true,
23377 "requires": {
23378 "buffer": "^5.5.0",
23379 "inherits": "^2.0.4",
23380 "readable-stream": "^3.4.0"
23381 }
23382 },
23383 "chalk": {
23384 "version": "4.1.2",
23385 "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
23386 "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
23387 "dev": true,
23388 "requires": {
23389 "ansi-styles": "^4.1.0",
23390 "supports-color": "^7.1.0"
23391 }
23392 },
23393 "color-convert": {
23394 "version": "2.0.1",
23395 "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
23396 "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
23397 "dev": true,
23398 "requires": {
23399 "color-name": "~1.1.4"
23400 }
23401 },
23402 "color-name": {
23403 "version": "1.1.4",
23404 "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
23405 "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
23406 "dev": true
23407 },
23408 "has-flag": {
23409 "version": "4.0.0",
23410 "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
23411 "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
23412 "dev": true
23413 },
23414 "strip-ansi": {
23415 "version": "6.0.0",
23416 "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
23417 "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
23418 "dev": true,
23419 "requires": {
23420 "ansi-regex": "^5.0.0"
23421 }
23422 },
23423 "supports-color": {
23424 "version": "7.2.0",
23425 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
23426 "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
23427 "dev": true,
23428 "requires": {
23429 "has-flag": "^4.0.0"
23430 }
23431 }
23432 }
23433 },
23434 "ordered-read-streams": { 22911 "ordered-read-streams": {
23435 "version": "1.0.1", 22912 "version": "1.0.1",
23436 "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", 22913 "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz",
@@ -23861,6 +23338,7 @@
23861 "version": "2.1.1", 23338 "version": "2.1.1",
23862 "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", 23339 "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz",
23863 "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", 23340 "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
23341 "dev": true,
23864 "requires": { 23342 "requires": {
23865 "no-case": "^2.2.0" 23343 "no-case": "^2.2.0"
23866 } 23344 }
@@ -24254,6 +23732,7 @@
24254 "version": "1.0.1", 23732 "version": "1.0.1",
24255 "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", 23733 "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz",
24256 "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", 23734 "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==",
23735 "dev": true,
24257 "requires": { 23736 "requires": {
24258 "ansi-colors": "^1.0.1", 23737 "ansi-colors": "^1.0.1",
24259 "arr-diff": "^4.0.0", 23738 "arr-diff": "^4.0.0",
@@ -24265,6 +23744,7 @@
24265 "version": "1.1.0", 23744 "version": "1.1.0",
24266 "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", 23745 "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz",
24267 "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", 23746 "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==",
23747 "dev": true,
24268 "requires": { 23748 "requires": {
24269 "ansi-wrap": "^0.1.0" 23749 "ansi-wrap": "^0.1.0"
24270 } 23750 }
@@ -24273,6 +23753,7 @@
24273 "version": "3.0.2", 23753 "version": "3.0.2",
24274 "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", 23754 "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
24275 "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", 23755 "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
23756 "dev": true,
24276 "requires": { 23757 "requires": {
24277 "assign-symbols": "^1.0.0", 23758 "assign-symbols": "^1.0.0",
24278 "is-extendable": "^1.0.1" 23759 "is-extendable": "^1.0.1"
@@ -24282,6 +23763,7 @@
24282 "version": "1.0.1", 23763 "version": "1.0.1",
24283 "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", 23764 "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
24284 "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", 23765 "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
23766 "dev": true,
24285 "requires": { 23767 "requires": {
24286 "is-plain-object": "^2.0.4" 23768 "is-plain-object": "^2.0.4"
24287 } 23769 }
@@ -25994,7 +25476,8 @@
25994 "relateurl": { 25476 "relateurl": {
25995 "version": "0.2.7", 25477 "version": "0.2.7",
25996 "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", 25478 "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
25997 "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" 25479 "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=",
25480 "dev": true
25998 }, 25481 },
25999 "remove-bom-buffer": { 25482 "remove-bom-buffer": {
26000 "version": "3.0.0", 25483 "version": "3.0.0",
@@ -26177,12 +25660,6 @@
26177 "path-parse": "^1.0.6" 25660 "path-parse": "^1.0.6"
26178 } 25661 }
26179 }, 25662 },
26180 "resolve-alpn": {
26181 "version": "1.2.0",
26182 "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.0.tgz",
26183 "integrity": "sha512-e4FNQs+9cINYMO5NMFc6kOUCdohjqFPSgMuwuZAOUWqrfWsen+Yjy5qZFkV5K7VO7tFSLKcUL97olkED7sCBHA==",
26184 "dev": true
26185 },
26186 "resolve-cwd": { 25663 "resolve-cwd": {
26187 "version": "3.0.0", 25664 "version": "3.0.0",
26188 "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", 25665 "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
@@ -26966,9 +26443,9 @@
26966 } 26443 }
26967 }, 26444 },
26968 "simple-git": { 26445 "simple-git": {
26969 "version": "2.42.0", 26446 "version": "2.44.0",
26970 "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-2.42.0.tgz", 26447 "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-2.44.0.tgz",
26971 "integrity": "sha512-illpUX0bcrdB3AyvBGLz0ToRVP7lXNJOGVybGVuVk7PpivPNK5YKJx2aagKdKbveaMtt0DCLK4/jfjDb6b2M2g==", 26448 "integrity": "sha512-wIjcAmymhzgdaM0Y/a+XxmNGlivvHQTPZDYXVmyHMShVDwdeVqu3+OOyDbYu0DnfVzqLs2EOxRTgMNbC3YquwQ==",
26972 "dev": true, 26449 "dev": true,
26973 "requires": { 26450 "requires": {
26974 "@kwsites/file-exists": "^1.1.1", 26451 "@kwsites/file-exists": "^1.1.1",
@@ -27018,11 +26495,6 @@
27018 "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==", 26495 "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==",
27019 "dev": true 26496 "dev": true
27020 }, 26497 },
27021 "smoothscroll-polyfill": {
27022 "version": "0.4.4",
27023 "resolved": "https://registry.npmjs.org/smoothscroll-polyfill/-/smoothscroll-polyfill-0.4.4.tgz",
27024 "integrity": "sha512-TK5ZA9U5RqCwMpfoMq/l1mrH0JAR7y7KRvOBx0n2869aLxch+gT9GhN3yUfjiw+d/DiF1mKo14+hd62JyMmoBg=="
27025 },
27026 "snapdragon": { 26498 "snapdragon": {
27027 "version": "0.8.2", 26499 "version": "0.8.2",
27028 "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", 26500 "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
@@ -27256,6 +26728,7 @@
27256 "version": "0.5.19", 26728 "version": "0.5.19",
27257 "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", 26729 "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
27258 "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", 26730 "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
26731 "dev": true,
27259 "requires": { 26732 "requires": {
27260 "buffer-from": "^1.0.0", 26733 "buffer-from": "^1.0.0",
27261 "source-map": "^0.6.0" 26734 "source-map": "^0.6.0"
@@ -27264,7 +26737,8 @@
27264 "source-map": { 26737 "source-map": {
27265 "version": "0.6.1", 26738 "version": "0.6.1",
27266 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 26739 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
27267 "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" 26740 "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
26741 "dev": true
27268 } 26742 }
27269 } 26743 }
27270 }, 26744 },
@@ -27276,7 +26750,8 @@
27276 "sparkles": { 26750 "sparkles": {
27277 "version": "1.0.1", 26751 "version": "1.0.1",
27278 "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", 26752 "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz",
27279 "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==" 26753 "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==",
26754 "dev": true
27280 }, 26755 },
27281 "spawn-command": { 26756 "spawn-command": {
27282 "version": "0.0.2-1", 26757 "version": "0.0.2-1",
@@ -27668,7 +27143,8 @@
27668 "stream-shift": { 27143 "stream-shift": {
27669 "version": "1.0.1", 27144 "version": "1.0.1",
27670 "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", 27145 "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
27671 "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" 27146 "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==",
27147 "dev": true
27672 }, 27148 },
27673 "strict-uri-encode": { 27149 "strict-uri-encode": {
27674 "version": "1.1.0", 27150 "version": "1.1.0",
@@ -28029,74 +27505,6 @@
28029 } 27505 }
28030 } 27506 }
28031 }, 27507 },
28032 "tar-fs": {
28033 "version": "1.16.3",
28034 "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz",
28035 "integrity": "sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==",
28036 "requires": {
28037 "chownr": "^1.0.1",
28038 "mkdirp": "^0.5.1",
28039 "pump": "^1.0.0",
28040 "tar-stream": "^1.1.2"
28041 },
28042 "dependencies": {
28043 "pump": {
28044 "version": "1.0.3",
28045 "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz",
28046 "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==",
28047 "requires": {
28048 "end-of-stream": "^1.1.0",
28049 "once": "^1.3.1"
28050 }
28051 }
28052 }
28053 },
28054 "tar-stream": {
28055 "version": "1.6.2",
28056 "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz",
28057 "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==",
28058 "requires": {
28059 "bl": "^1.0.0",
28060 "buffer-alloc": "^1.2.0",
28061 "end-of-stream": "^1.0.0",
28062 "fs-constants": "^1.0.0",
28063 "readable-stream": "^2.3.0",
28064 "to-buffer": "^1.1.1",
28065 "xtend": "^4.0.0"
28066 },
28067 "dependencies": {
28068 "readable-stream": {
28069 "version": "2.3.7",
28070 "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
28071 "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
28072 "requires": {
28073 "core-util-is": "~1.0.0",
28074 "inherits": "~2.0.3",
28075 "isarray": "~1.0.0",
28076 "process-nextick-args": "~2.0.0",
28077 "safe-buffer": "~5.1.1",
28078 "string_decoder": "~1.1.1",
28079 "util-deprecate": "~1.0.1"
28080 }
28081 },
28082 "string_decoder": {
28083 "version": "1.1.1",
28084 "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
28085 "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
28086 "requires": {
28087 "safe-buffer": "~5.1.0"
28088 }
28089 }
28090 }
28091 },
28092 "targz": {
28093 "version": "1.0.1",
28094 "resolved": "https://registry.npmjs.org/targz/-/targz-1.0.1.tgz",
28095 "integrity": "sha1-j3alI2lM3t+7XWCkB2/27uzFOY8=",
28096 "requires": {
28097 "tar-fs": "^1.8.1"
28098 }
28099 },
28100 "tarn": { 27508 "tarn": {
28101 "version": "1.1.5", 27509 "version": "1.1.5",
28102 "resolved": "https://registry.npmjs.org/tarn/-/tarn-1.1.5.tgz", 27510 "resolved": "https://registry.npmjs.org/tarn/-/tarn-1.1.5.tgz",
@@ -28203,6 +27611,7 @@
28203 "version": "3.0.0", 27611 "version": "3.0.0",
28204 "resolved": "https://registry.npmjs.org/ternary-stream/-/ternary-stream-3.0.0.tgz", 27612 "resolved": "https://registry.npmjs.org/ternary-stream/-/ternary-stream-3.0.0.tgz",
28205 "integrity": "sha512-oIzdi+UL/JdktkT+7KU5tSIQjj8pbShj3OASuvDEhm0NT5lppsm7aXWAmAq4/QMaBIyfuEcNLbAQA+HpaISobQ==", 27613 "integrity": "sha512-oIzdi+UL/JdktkT+7KU5tSIQjj8pbShj3OASuvDEhm0NT5lppsm7aXWAmAq4/QMaBIyfuEcNLbAQA+HpaISobQ==",
27614 "dev": true,
28206 "requires": { 27615 "requires": {
28207 "duplexify": "^4.1.1", 27616 "duplexify": "^4.1.1",
28208 "fork-stream": "^0.0.4", 27617 "fork-stream": "^0.0.4",
@@ -28214,6 +27623,7 @@
28214 "version": "3.0.2", 27623 "version": "3.0.2",
28215 "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", 27624 "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz",
28216 "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", 27625 "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==",
27626 "dev": true,
28217 "requires": { 27627 "requires": {
28218 "inherits": "^2.0.4", 27628 "inherits": "^2.0.4",
28219 "readable-stream": "2 || 3" 27629 "readable-stream": "2 || 3"
@@ -28222,9 +27632,10 @@
28222 } 27632 }
28223 }, 27633 },
28224 "terser": { 27634 "terser": {
28225 "version": "4.4.0", 27635 "version": "4.8.0",
28226 "resolved": "https://registry.npmjs.org/terser/-/terser-4.4.0.tgz", 27636 "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz",
28227 "integrity": "sha512-oDG16n2WKm27JO8h4y/w3iqBGAOSCtq7k8dRmrn4Wf9NouL0b2WpMHGChFGZq4nFAQy1FsNJrVQHfurXOSTmOA==", 27637 "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==",
27638 "dev": true,
28228 "requires": { 27639 "requires": {
28229 "commander": "^2.20.0", 27640 "commander": "^2.20.0",
28230 "source-map": "~0.6.1", 27641 "source-map": "~0.6.1",
@@ -28234,7 +27645,8 @@
28234 "source-map": { 27645 "source-map": {
28235 "version": "0.6.1", 27646 "version": "0.6.1",
28236 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 27647 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
28237 "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" 27648 "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
27649 "dev": true
28238 } 27650 }
28239 } 27651 }
28240 }, 27652 },
@@ -28325,6 +27737,17 @@
28325 "figgy-pudding": "^3.5.1" 27737 "figgy-pudding": "^3.5.1"
28326 } 27738 }
28327 }, 27739 },
27740 "terser": {
27741 "version": "4.8.0",
27742 "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz",
27743 "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==",
27744 "dev": true,
27745 "requires": {
27746 "commander": "^2.20.0",
27747 "source-map": "~0.6.1",
27748 "source-map-support": "~0.5.12"
27749 }
27750 },
28328 "yallist": { 27751 "yallist": {
28329 "version": "3.1.1", 27752 "version": "3.1.1",
28330 "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", 27753 "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
@@ -28403,6 +27826,7 @@
28403 "version": "2.0.5", 27826 "version": "2.0.5",
28404 "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", 27827 "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
28405 "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", 27828 "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
27829 "dev": true,
28406 "requires": { 27830 "requires": {
28407 "readable-stream": "~2.3.6", 27831 "readable-stream": "~2.3.6",
28408 "xtend": "~4.0.1" 27832 "xtend": "~4.0.1"
@@ -28412,6 +27836,7 @@
28412 "version": "2.3.7", 27836 "version": "2.3.7",
28413 "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 27837 "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
28414 "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 27838 "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
27839 "dev": true,
28415 "requires": { 27840 "requires": {
28416 "core-util-is": "~1.0.0", 27841 "core-util-is": "~1.0.0",
28417 "inherits": "~2.0.3", 27842 "inherits": "~2.0.3",
@@ -28426,6 +27851,7 @@
28426 "version": "1.1.1", 27851 "version": "1.1.1",
28427 "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 27852 "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
28428 "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 27853 "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
27854 "dev": true,
28429 "requires": { 27855 "requires": {
28430 "safe-buffer": "~5.1.0" 27856 "safe-buffer": "~5.1.0"
28431 } 27857 }
@@ -28573,11 +27999,6 @@
28573 "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", 27999 "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
28574 "dev": true 28000 "dev": true
28575 }, 28001 },
28576 "to-buffer": {
28577 "version": "1.1.1",
28578 "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz",
28579 "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg=="
28580 },
28581 "to-fast-properties": { 28002 "to-fast-properties": {
28582 "version": "2.0.0", 28003 "version": "2.0.0",
28583 "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", 28004 "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
@@ -28775,9 +28196,9 @@
28775 } 28196 }
28776 }, 28197 },
28777 "tslib": { 28198 "tslib": {
28778 "version": "2.3.0", 28199 "version": "2.3.1",
28779 "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", 28200 "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
28780 "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" 28201 "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="
28781 }, 28202 },
28782 "tsscmp": { 28203 "tsscmp": {
28783 "version": "1.0.6", 28204 "version": "1.0.6",
@@ -28898,6 +28319,7 @@
28898 "version": "3.4.10", 28319 "version": "3.4.10",
28899 "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", 28320 "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz",
28900 "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", 28321 "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==",
28322 "dev": true,
28901 "requires": { 28323 "requires": {
28902 "commander": "~2.19.0", 28324 "commander": "~2.19.0",
28903 "source-map": "~0.6.1" 28325 "source-map": "~0.6.1"
@@ -28906,12 +28328,14 @@
28906 "commander": { 28328 "commander": {
28907 "version": "2.19.0", 28329 "version": "2.19.0",
28908 "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", 28330 "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz",
28909 "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==" 28331 "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==",
28332 "dev": true
28910 }, 28333 },
28911 "source-map": { 28334 "source-map": {
28912 "version": "0.6.1", 28335 "version": "0.6.1",
28913 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 28336 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
28914 "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" 28337 "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
28338 "dev": true
28915 } 28339 }
28916 } 28340 }
28917 }, 28341 },
@@ -29259,7 +28683,8 @@
29259 "upper-case": { 28683 "upper-case": {
29260 "version": "1.1.3", 28684 "version": "1.1.3",
29261 "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", 28685 "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
29262 "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=" 28686 "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=",
28687 "dev": true
29263 }, 28688 },
29264 "uri-js": { 28689 "uri-js": {
29265 "version": "4.4.1", 28690 "version": "4.4.1",
@@ -29579,6 +29004,7 @@
29579 "version": "0.2.1", 29004 "version": "0.2.1",
29580 "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", 29005 "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz",
29581 "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=", 29006 "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=",
29007 "dev": true,
29582 "requires": { 29008 "requires": {
29583 "source-map": "^0.5.1" 29009 "source-map": "^0.5.1"
29584 } 29010 }
@@ -30578,24 +30004,6 @@
30578 } 30004 }
30579 } 30005 }
30580 }, 30006 },
30581 "windows-notification-state": {
30582 "version": "1.3.4",
30583 "resolved": "https://registry.npmjs.org/windows-notification-state/-/windows-notification-state-1.3.4.tgz",
30584 "integrity": "sha512-Z2n6YLARi14AGqaY5zAlMnhButzjRjlQui0k73nXe4tVRg2U918zLeC3ZxM/i4JKho/GqV85rgQsMfLWnbTUCA==",
30585 "requires": {
30586 "bindings": "^1.5.0",
30587 "nan": "^2.14.0"
30588 }
30589 },
30590 "windows-quiet-hours": {
30591 "version": "1.2.7",
30592 "resolved": "https://registry.npmjs.org/windows-quiet-hours/-/windows-quiet-hours-1.2.7.tgz",
30593 "integrity": "sha512-PjKM2/RQhZ3ikG4COq0vPpXvmJsxckcg2YN3xmQv8kZl5l1uu00a/epSGDeY6tczDPkzBhoThBz1FKRqxBA7cQ==",
30594 "requires": {
30595 "bindings": "^1.3.0",
30596 "nan": "^2.7.0"
30597 }
30598 },
30599 "windows-release": { 30007 "windows-release": {
30600 "version": "4.0.0", 30008 "version": "4.0.0",
30601 "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz", 30009 "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz",
diff --git a/package.json b/package.json
index 564b6c032..91e0731ed 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.1-beta.1", 6 "version": "5.6.1-nightly.37",
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",
@@ -18,18 +18,16 @@
18 "engine-strict": true, 18 "engine-strict": true,
19 "scripts": { 19 "scripts": {
20 "prepare": "husky install", 20 "prepare": "husky install",
21 "prestart": "npm run rebuild",
22 "start": "electron ./build", 21 "start": "electron ./build",
23 "start:local": "cross-env USE_LOCAL_API=1 npm start", 22 "start:local": "cross-env USE_LOCAL_API=1 npm start",
24 "start:live": "cross-env USE_LIVE_API=1 npm start", 23 "start:live": "cross-env USE_LIVE_API=1 npm start",
25 "dev": "cross-env NODE_ENV=development gulp dev", 24 "dev": "cross-env NODE_ENV=development gulp dev",
26 "test": "jest", 25 "test": "jest",
27 "test:watch": "jest --watch", 26 "test:watch": "jest --watch",
28 "lint": "eslint \"{src,packages,uidev}/**/*.{js,jsx,ts,tsx}\" --quiet --fix", 27 "lint": "eslint \"{src,scripts,packages,uidev}/**/*.{js,jsx,ts,tsx}\" --quiet --fix",
29 "manage-translations": "node ./src/i18n/manage-translations.js", 28 "manage-translations": "node ./src/i18n/manage-translations.js",
30 "prebuild": "preval-build-info-cli && gulp build", 29 "prebuild": "preval-build-info-cli && gulp build",
31 "build": "electron-builder", 30 "build": "electron-builder",
32 "rebuild": "electron-rebuild --force-abi=98",
33 "commit": "git-cz", 31 "commit": "git-cz",
34 "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -u", 32 "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -u",
35 "contributors": "all-contributors", 33 "contributors": "all-contributors",
@@ -40,8 +38,8 @@
40 "apply-branding": "node ./src/i18n/apply-branding.js", 38 "apply-branding": "node ./src/i18n/apply-branding.js",
41 "update-submodules": "git submodule update --remote --force", 39 "update-submodules": "git submodule update --remote --force",
42 "prepare-code": "npm run lint && npm run reformat-files && npm run manage-translations && npm run apply-branding", 40 "prepare-code": "npm run lint && npm run reformat-files && npm run manage-translations && npm run apply-branding",
43 "build-theme-info": "node src/scripts/build-theme-info.js", 41 "build-theme-info": "node scripts/build-theme-info.js",
44 "link-readme": "node src/scripts/link-readme.js", 42 "link-readme": "node scripts/link-readme.js",
45 "minify-images": "./scripts/minify-images.sh", 43 "minify-images": "./scripts/minify-images.sh",
46 "start:server": "node src/internal-server/test.js" 44 "start:server": "node src/internal-server/test.js"
47 }, 45 },
@@ -64,7 +62,6 @@
64 "@electron/remote": "1.2.1", 62 "@electron/remote": "1.2.1",
65 "@mdi/font": "5.9.55", 63 "@mdi/font": "5.9.55",
66 "@mdi/js": "4.6.95", 64 "@mdi/js": "4.6.95",
67 "@meetfranz/electron-notification-state": "1.0.0",
68 "@meetfranz/forms": "file:packages/forms", 65 "@meetfranz/forms": "file:packages/forms",
69 "@meetfranz/theme": "file:packages/theme", 66 "@meetfranz/theme": "file:packages/theme",
70 "@meetfranz/ui": "file:packages/ui", 67 "@meetfranz/ui": "file:packages/ui",
@@ -80,7 +77,7 @@
80 "darkreader": "4.9.34", 77 "darkreader": "4.9.34",
81 "dbus-next": "0.9.2", 78 "dbus-next": "0.9.2",
82 "debug": "4.3.2", 79 "debug": "4.3.2",
83 "du": "0.1.0", 80 "du": "1.0.0",
84 "electron-dl": "3.2.1", 81 "electron-dl": "3.2.1",
85 "electron-fetch": "1.7.3", 82 "electron-fetch": "1.7.3",
86 "electron-find": "1.0.7", 83 "electron-find": "1.0.7",
@@ -89,13 +86,10 @@
89 "electron-util": "0.17.0", 86 "electron-util": "0.17.0",
90 "electron-window-state": "5.0.3", 87 "electron-window-state": "5.0.3",
91 "fs-extra": "10.0.0", 88 "fs-extra": "10.0.0",
92 "gulp-csso": "4.0.1",
93 "gulp-htmlmin": "5.0.1",
94 "gulp-if": "3.0.0",
95 "gulp-uglify": "3.0.2",
96 "jsonwebtoken": "8.5.1", 89 "jsonwebtoken": "8.5.1",
97 "jss": "10.7.1", 90 "jss": "10.7.1",
98 "lodash": "4.17.21", 91 "lodash": "4.17.21",
92 "macos-notification-state": "1.3.5",
99 "macos-version": "5.2.1", 93 "macos-version": "5.2.1",
100 "marked": "0.7.0", 94 "marked": "0.7.0",
101 "mime-types": "2.1.32", 95 "mime-types": "2.1.32",
@@ -128,12 +122,9 @@
128 "react-tooltip": "4.2.21", 122 "react-tooltip": "4.2.21",
129 "route-parser": "0.0.5", 123 "route-parser": "0.0.5",
130 "semver": "7.3.5", 124 "semver": "7.3.5",
131 "smoothscroll-polyfill": "0.4.4",
132 "sqlite3": "5.0.0", 125 "sqlite3": "5.0.0",
133 "tar": "4.4.15", 126 "tar": "4.4.15",
134 "targz": "1.0.1", 127 "tslib": "2.3.1",
135 "terser": "4.4.0",
136 "tslib": "2.3.0",
137 "useragent-generator": "1.1.1-amkt-22079-finish.0", 128 "useragent-generator": "1.1.1-amkt-22079-finish.0",
138 "uuid": "3.3.3", 129 "uuid": "3.3.3",
139 "validator": "11.0.0", 130 "validator": "11.0.0",
@@ -151,18 +142,22 @@
151 "@babel/plugin-syntax-dynamic-import": "7.8.3", 142 "@babel/plugin-syntax-dynamic-import": "7.8.3",
152 "@babel/preset-env": "7.15.0", 143 "@babel/preset-env": "7.15.0",
153 "@babel/preset-react": "7.14.5", 144 "@babel/preset-react": "7.14.5",
154 "@babel/register": "7.14.5", 145 "@babel/register": "7.15.3",
155 "@commitlint/cli": "13.1.0", 146 "@commitlint/cli": "13.1.0",
156 "@commitlint/config-conventional": "13.1.0", 147 "@commitlint/config-conventional": "13.1.0",
148 "@tsconfig/node14": "1.0.1",
157 "@types/color": "3.0.2", 149 "@types/color": "3.0.2",
150 "@types/du": "1.0.0",
158 "@types/fs-extra": "9.0.12", 151 "@types/fs-extra": "9.0.12",
159 "@types/lodash": "4.14.172", 152 "@types/lodash": "4.14.172",
160 "@types/node": "14.17.6", 153 "@types/node": "14.17.6",
161 "@types/react": "16.14.6", 154 "@types/react": "16.14.6",
162 "@types/react-dom": "16.9.13", 155 "@types/react-dom": "16.9.13",
156 "@types/route-parser": "0.1.3",
157 "@types/tar": "4.0.5",
163 "@types/uuid": "3.4.9", 158 "@types/uuid": "3.4.9",
164 "@typescript-eslint/eslint-plugin": "4.29.0", 159 "@typescript-eslint/eslint-plugin": "4.29.1",
165 "@typescript-eslint/parser": "4.29.0", 160 "@typescript-eslint/parser": "4.29.1",
166 "all-contributors-cli": "6.20.0", 161 "all-contributors-cli": "6.20.0",
167 "babel-plugin-react-intl": "3.5.1", 162 "babel-plugin-react-intl": "3.5.1",
168 "commitizen": "4.2.4", 163 "commitizen": "4.2.4",
@@ -170,15 +165,14 @@
170 "cross-env": "7.0.3", 165 "cross-env": "7.0.3",
171 "cz-conventional-changelog": "3.3.0", 166 "cz-conventional-changelog": "3.3.0",
172 "dotenv": "10.0.0", 167 "dotenv": "10.0.0",
173 "electron": "13.1.9", 168 "electron": "13.2.2",
174 "electron-builder": "22.12.0", 169 "electron-builder": "22.12.1",
175 "electron-notarize": "1.1.0", 170 "electron-notarize": "1.1.0",
176 "electron-rebuild": "2.3.5",
177 "eslint": "7.32.0", 171 "eslint": "7.32.0",
178 "eslint-config-airbnb": "18.2.1", 172 "eslint-config-airbnb": "18.2.1",
179 "eslint-config-airbnb-typescript": "12.3.1", 173 "eslint-config-airbnb-typescript": "12.3.1",
180 "eslint-config-prettier": "8.3.0", 174 "eslint-config-prettier": "8.3.0",
181 "eslint-plugin-import": "2.23.4", 175 "eslint-plugin-import": "2.24.0",
182 "eslint-plugin-jest": "24.4.0", 176 "eslint-plugin-jest": "24.4.0",
183 "eslint-plugin-jsx-a11y": "6.4.1", 177 "eslint-plugin-jsx-a11y": "6.4.1",
184 "eslint-plugin-prettier": "3.4.0", 178 "eslint-plugin-prettier": "3.4.0",
@@ -189,22 +183,27 @@
189 "gulp-babel": "8.0.0", 183 "gulp-babel": "8.0.0",
190 "gulp-cli": "2.3.0", 184 "gulp-cli": "2.3.0",
191 "gulp-connect": "5.7.0", 185 "gulp-connect": "5.7.0",
186 "gulp-csso": "4.0.1",
187 "gulp-htmlmin": "5.0.1",
188 "gulp-if": "3.0.0",
192 "gulp-sass": "5.0.0", 189 "gulp-sass": "5.0.0",
193 "gulp-sass-variables": "1.2.0", 190 "gulp-sass-variables": "1.2.0",
194 "hex-rgb": "3.0.0", 191 "gulp-typescript": "6.0.0-alpha.1",
192 "gulp-uglify": "3.0.2",
193 "hex-rgb": "4.3.0",
195 "html-webpack-plugin": "4.5.2", 194 "html-webpack-plugin": "4.5.2",
196 "husky": "7.0.1", 195 "husky": "7.0.1",
197 "jest": "27.0.6", 196 "jest": "27.0.6",
198 "kebab-case": "1.0.1", 197 "kebab-case": "1.0.1",
199 "lerna": "4.0.0", 198 "lerna": "4.0.0",
200 "mobx-react-devtools": "6.1.1",
201 "mocha": "9.0.3", 199 "mocha": "9.0.3",
202 "node-abi": "2.30.0", 200 "node-abi": "2.30.0",
203 "prettier": "2.3.2", 201 "prettier": "2.3.2",
204 "preval-build-info": "1.0.3", 202 "preval-build-info": "1.0.3",
205 "react-intl-translations-manager": "5.0.3", 203 "react-intl-translations-manager": "5.0.3",
206 "sass": "1.37.5", 204 "sass": "1.37.5",
207 "simple-git": "2.42.0", 205 "simple-git": "2.44.0",
206 "terser": "4.8.0",
208 "ts-loader": "5.4.5", 207 "ts-loader": "5.4.5",
209 "typescript": "3.9.10", 208 "typescript": "3.9.10",
210 "webpack": "4.46.0", 209 "webpack": "4.46.0",
diff --git a/recipes b/recipes
Subproject 3b15588002104a183e46076f4d6286677eef09c Subproject 4929cbff010712f109f5805027c140f434e7703
diff --git a/src/scripts/add-crowdin-contributors.js b/scripts/add-crowdin-contributors.js
index ed29a0daf..05e377a94 100644
--- a/src/scripts/add-crowdin-contributors.js
+++ b/scripts/add-crowdin-contributors.js
@@ -48,7 +48,7 @@ console.clear();
48console.log(JSON.stringify(members)); 48console.log(JSON.stringify(members));
49 49
50 * 3. Paste the output of the script (JSON Array) below to set 'list' to that value 50 * 3. Paste the output of the script (JSON Array) below to set 'list' to that value
51 * 4. Execute this script using 'node src/scripts/add-crowdin-contributors.js' 51 * 4. Execute this script using 'node scripts/add-crowdin-contributors.js'
52 * 5. Regenerate the README table using the CLI ('all-contributors generate') 52 * 5. Regenerate the README table using the CLI ('all-contributors generate')
53 * Please check if the generated data is ok and no data is lost. 53 * Please check if the generated data is ok and no data is lost.
54*/ 54*/
diff --git a/src/scripts/build-theme-info.js b/scripts/build-theme-info.js
index 4058be942..4058be942 100644
--- a/src/scripts/build-theme-info.js
+++ b/scripts/build-theme-info.js
diff --git a/src/scripts/link-readme.js b/scripts/link-readme.js
index 1e47cddf8..1e47cddf8 100644
--- a/src/scripts/link-readme.js
+++ b/scripts/link-readme.js
diff --git a/src/theme/default/legacy.js b/scripts/theme/default/legacy.js
index 3f4bec5d5..015dca756 100644
--- a/src/theme/default/legacy.js
+++ b/scripts/theme/default/legacy.js
@@ -1,4 +1,4 @@
1/* legacy config, injected into sass */ 1/* legacy config, injected into sass at build time */
2export const themeBrandPrimary = '#7266F0'; 2export const themeBrandPrimary = '#7266F0';
3export const themeBrandSuccess = '#5cb85c'; 3export const themeBrandSuccess = '#5cb85c';
4export const themeBrandInfo = '#5bc0de'; 4export const themeBrandInfo = '#5bc0de';
diff --git a/src/api/apiBase.js b/src/api/apiBase.js
index ad37ca02c..2fad7eb21 100644
--- a/src/api/apiBase.js
+++ b/src/api/apiBase.js
@@ -12,6 +12,7 @@ import {
12 SERVER_NOT_LOADED, 12 SERVER_NOT_LOADED,
13} from '../config'; 13} from '../config';
14 14
15// Note: This cannot be used from the internal-server since we are not running within the context of a browser window
15const apiBase = (withVersion = true) => { 16const apiBase = (withVersion = true) => {
16 let url; 17 let url;
17 18
diff --git a/src/api/server/LocalApi.js b/src/api/server/LocalApi.ts
index 644f15b93..71721bb0f 100644
--- a/src/api/server/LocalApi.js
+++ b/src/api/server/LocalApi.ts
@@ -8,9 +8,9 @@ const debug = require('debug')('Ferdi:LocalApi');
8 8
9export default class LocalApi { 9export default class LocalApi {
10 // Settings 10 // Settings
11 getAppSettings(type) { 11 getAppSettings(type: any) {
12 return new Promise(resolve => { 12 return new Promise(resolve => {
13 ipcRenderer.once('appSettings', (event, resp) => { 13 ipcRenderer.once('appSettings', (_event, resp) => {
14 debug('LocalApi::getAppSettings resolves', resp.type, resp.data); 14 debug('LocalApi::getAppSettings resolves', resp.type, resp.data);
15 resolve(resp); 15 resolve(resp);
16 }); 16 });
@@ -19,7 +19,7 @@ export default class LocalApi {
19 }); 19 });
20 } 20 }
21 21
22 async updateAppSettings(type, data) { 22 async updateAppSettings(type: any, data: any) {
23 debug('LocalApi::updateAppSettings resolves', type, data); 23 debug('LocalApi::updateAppSettings resolves', type, data);
24 ipcRenderer.send('updateAppSettings', { 24 ipcRenderer.send('updateAppSettings', {
25 type, 25 type,
@@ -31,7 +31,7 @@ export default class LocalApi {
31 async getAppCacheSize() { 31 async getAppCacheSize() {
32 const partitionsDir = getServicePartitionsDirectory(); 32 const partitionsDir = getServicePartitionsDirectory();
33 return new Promise((resolve, reject) => { 33 return new Promise((resolve, reject) => {
34 du(partitionsDir, (err, size) => { 34 du(partitionsDir, (err: Error | null, size?: number | undefined) => {
35 if (err) reject(err); 35 if (err) reject(err);
36 36
37 debug('LocalApi::getAppCacheSize resolves', size); 37 debug('LocalApi::getAppCacheSize resolves', size);
@@ -40,7 +40,7 @@ export default class LocalApi {
40 }); 40 });
41 } 41 }
42 42
43 async clearCache(serviceId = null) { 43 async clearCache(serviceId: string | null = null) {
44 const s = serviceId 44 const s = serviceId
45 ? session.fromPartition(`persist:service-${serviceId}`) 45 ? session.fromPartition(`persist:service-${serviceId}`)
46 : session.defaultSession; 46 : session.defaultSession;
diff --git a/src/api/server/ServerApi.js b/src/api/server/ServerApi.js
index bc0b0dff9..b5042525a 100644
--- a/src/api/server/ServerApi.js
+++ b/src/api/server/ServerApi.js
@@ -1,19 +1,18 @@
1import { join } from 'path'; 1import { join } from 'path';
2import tar from 'tar'; 2import tar from 'tar';
3import { readdirSync, statSync, writeFileSync, copySync, ensureDirSync, pathExistsSync, readJsonSync, removeSync } from 'fs-extra'; 3import { readdirSync, statSync, writeFileSync, copySync, ensureDirSync, pathExistsSync, readJsonSync, removeSync } from 'fs-extra';
4import { app, require as remoteRequire } from '@electron/remote'; 4import { require as remoteRequire } from '@electron/remote';
5 5
6import ServiceModel from '../../models/Service'; 6import ServiceModel from '../../models/Service';
7import RecipePreviewModel from '../../models/RecipePreview'; 7import RecipePreviewModel from '../../models/RecipePreview';
8import RecipeModel from '../../models/Recipe'; 8import RecipeModel from '../../models/Recipe';
9import NewsModel from '../../models/News'; 9import NewsModel from '../../models/News';
10import UserModel from '../../models/User'; 10import UserModel from '../../models/User';
11import OrderModel from '../../models/Order';
12 11
13import { sleep } from '../../helpers/async-helpers'; 12import { sleep } from '../../helpers/async-helpers';
14 13
15import { SERVER_NOT_LOADED } from '../../config'; 14import { SERVER_NOT_LOADED } from '../../config';
16import { osArch, osPlatform, asarRecipesPath, userDataRecipesPath, userDataPath } from '../../environment'; 15import { osArch, osPlatform, asarRecipesPath, userDataRecipesPath, userDataPath, ferdiVersion } from '../../environment';
17import apiBase from '../apiBase'; 16import apiBase from '../apiBase';
18import { prepareAuthRequest, sendAuthRequest } from '../utils/auth'; 17import { prepareAuthRequest, sendAuthRequest } from '../utils/auth';
19 18
@@ -435,9 +434,7 @@ export default class ServerApi {
435 434
436 // News 435 // News
437 async getLatestNews() { 436 async getLatestNews() {
438 const url = `${apiBase( 437 const url = `${apiBase(true)}/news?platform=${osPlatform}&arch=${osArch}&version=${ferdiVersion}`;
439 true,
440 )}/news?platform=${osPlatform}&arch=${osArch}&version=${app.getVersion()}`;
441 const request = await sendAuthRequest(url); 438 const request = await sendAuthRequest(url);
442 if (!request.ok) throw request; 439 if (!request.ok) throw request;
443 const data = await request.json(); 440 const data = await request.json();
@@ -591,19 +588,6 @@ export default class ServerApi {
591 .filter(newsItem => newsItem !== null); 588 .filter(newsItem => newsItem !== null);
592 } 589 }
593 590
594 _mapOrderModels(orders) {
595 return orders
596 .map(orderItem => {
597 try {
598 return new OrderModel(orderItem);
599 } catch (e) {
600 console.error(e);
601 return null;
602 }
603 })
604 .filter(orderItem => orderItem !== null);
605 }
606
607 _getDevRecipes() { 591 _getDevRecipes() {
608 const recipesDirectory = getDevRecipeDirectory(); 592 const recipesDirectory = getDevRecipeDirectory();
609 try { 593 try {
diff --git a/src/api/utils/auth.js b/src/api/utils/auth.js
index 9f718f171..e493b2962 100644
--- a/src/api/utils/auth.js
+++ b/src/api/utils/auth.js
@@ -1,5 +1,5 @@
1import { app } from '@electron/remote';
2import localStorage from 'mobx-localstorage'; 1import localStorage from 'mobx-localstorage';
2import { ferdiLocale, ferdiVersion } from '../../environment';
3 3
4export const prepareAuthRequest = (options = { method: 'GET' }, auth = true) => { 4export const prepareAuthRequest = (options = { method: 'GET' }, auth = true) => {
5 const request = Object.assign(options, { 5 const request = Object.assign(options, {
@@ -7,10 +7,10 @@ export const prepareAuthRequest = (options = { method: 'GET' }, auth = true) =>
7 headers: { 7 headers: {
8 'Content-Type': 'application/json', 8 'Content-Type': 'application/json',
9 'X-Franz-Source': 'desktop', 9 'X-Franz-Source': 'desktop',
10 'X-Franz-Version': app.getVersion(), 10 'X-Franz-Version': ferdiVersion,
11 'X-Franz-platform': process.platform, 11 'X-Franz-platform': process.platform,
12 'X-Franz-Timezone-Offset': new Date().getTimezoneOffset(), 12 'X-Franz-Timezone-Offset': new Date().getTimezoneOffset(),
13 'X-Franz-System-Locale': app.getLocale(), 13 'X-Franz-System-Locale': ferdiLocale,
14 ...options.headers, 14 ...options.headers,
15 }, 15 },
16 }); 16 });
diff --git a/src/app.js b/src/app.js
index 39b50cb33..e0d2dbc5a 100644
--- a/src/app.js
+++ b/src/app.js
@@ -6,8 +6,6 @@ import { Provider } from 'mobx-react';
6import { syncHistoryWithStore, RouterStore } from 'mobx-react-router'; 6import { syncHistoryWithStore, RouterStore } from 'mobx-react-router';
7import { hashHistory } from 'react-router'; 7import { hashHistory } from 'react-router';
8 8
9import smoothScroll from 'smoothscroll-polyfill';
10
11import ServerApi from './api/server/ServerApi'; 9import ServerApi from './api/server/ServerApi';
12import LocalApi from './api/server/LocalApi'; 10import LocalApi from './api/server/LocalApi';
13import storeFactory from './stores'; 11import storeFactory from './stores';
@@ -19,9 +17,6 @@ import TouchBarFactory from './lib/TouchBar';
19import I18N from './I18n'; 17import I18N from './I18n';
20import Routes from './routes'; 18import Routes from './routes';
21 19
22// Add Polyfills
23smoothScroll.polyfill();
24
25// Basic electron Setup 20// Basic electron Setup
26webFrame.setVisualZoomLevelLimits(1, 1); 21webFrame.setVisualZoomLevelLimits(1, 1);
27 22
diff --git a/src/components/layout/AppLayout.js b/src/components/layout/AppLayout.js
index d5e1deb39..00d7a759b 100644
--- a/src/components/layout/AppLayout.js
+++ b/src/components/layout/AppLayout.js
@@ -7,7 +7,6 @@ import injectSheet from 'react-jss';
7 7
8import InfoBar from '../ui/InfoBar'; 8import InfoBar from '../ui/InfoBar';
9import { Component as BasicAuth } from '../../features/basicAuth'; 9import { Component as BasicAuth } from '../../features/basicAuth';
10import { Component as ShareFranz } from '../../features/shareFranz';
11import { Component as QuickSwitch } from '../../features/quickSwitch'; 10import { Component as QuickSwitch } from '../../features/quickSwitch';
12import { Component as NightlyBuilds } from '../../features/nightlyBuilds'; 11import { Component as NightlyBuilds } from '../../features/nightlyBuilds';
13import { Component as PublishDebugInfo } from '../../features/publishDebugInfo'; 12import { Component as PublishDebugInfo } from '../../features/publishDebugInfo';
@@ -204,7 +203,6 @@ class AppLayout extends Component {
204 /> 203 />
205 )} 204 )}
206 <BasicAuth /> 205 <BasicAuth />
207 <ShareFranz />
208 <QuickSwitch /> 206 <QuickSwitch />
209 <NightlyBuilds /> 207 <NightlyBuilds />
210 <PublishDebugInfo /> 208 <PublishDebugInfo />
diff --git a/src/components/layout/Sidebar.js b/src/components/layout/Sidebar.js
index daa5642c3..a9fb73f33 100644
--- a/src/components/layout/Sidebar.js
+++ b/src/components/layout/Sidebar.js
@@ -216,8 +216,7 @@ export default @inject('stores', 'actions') @observer class Sidebar extends Comp
216 className="sidebar__button sidebar__button--settings" 216 className="sidebar__button sidebar__button--settings"
217 data-tip={`${intl.formatMessage(messages.settings)} (${settingsShortcutKey(false)})`} 217 data-tip={`${intl.formatMessage(messages.settings)} (${settingsShortcutKey(false)})`}
218 > 218 >
219 {/* TODO: Because of https://github.com/Templarian/MaterialDesign-Webfont/issues/81 bug in @mdi/font in 5.9.55, added `mdi-memory` as a fallback */} 219 <i className="mdi mdi-cog" />
220 <i className="mdi mdi-settings mdi-memory" />
221 { (this.props.stores.app.updateStatus === this.props.stores.app.updateStatusTypes.AVAILABLE 220 { (this.props.stores.app.updateStatus === this.props.stores.app.updateStatusTypes.AVAILABLE
222 || this.props.stores.app.updateStatus === this.props.stores.app.updateStatusTypes.DOWNLOADED) && ( 221 || this.props.stores.app.updateStatus === this.props.stores.app.updateStatusTypes.DOWNLOADED) && (
223 <span className="update-available"> 222 <span className="update-available">
diff --git a/src/components/services/content/ServiceWebview.js b/src/components/services/content/ServiceWebview.js
index 3b499a5db..c0f48793a 100644
--- a/src/components/services/content/ServiceWebview.js
+++ b/src/components/services/content/ServiceWebview.js
@@ -24,7 +24,9 @@ class ServiceWebview extends Component {
24 super(props); 24 super(props);
25 25
26 reaction( 26 reaction(
27 () => this.webview, 27 () => (
28 this.webview
29 ),
28 () => { 30 () => {
29 if (this.webview && this.webview.view) { 31 if (this.webview && this.webview.view) {
30 this.webview.view.addEventListener('console-message', (e) => { 32 this.webview.view.addEventListener('console-message', (e) => {
diff --git a/src/components/services/tabs/TabItem.js b/src/components/services/tabs/TabItem.js
index 6a6d2c8c5..6ad925670 100644
--- a/src/components/services/tabs/TabItem.js
+++ b/src/components/services/tabs/TabItem.js
@@ -10,7 +10,7 @@ import ms from 'ms';
10 10
11import { observable, autorun } from 'mobx'; 11import { observable, autorun } from 'mobx';
12import ServiceModel from '../../../models/Service'; 12import ServiceModel from '../../../models/Service';
13import { shortcutKey } from '../../../environment'; 13import { cmdOrCtrlShortcutKey } from '../../../environment';
14 14
15const IS_SERVICE_DEBUGGING_ENABLED = ( 15const IS_SERVICE_DEBUGGING_ENABLED = (
16 localStorage.getItem('debug') || '' 16 localStorage.getItem('debug') || ''
@@ -201,7 +201,7 @@ class TabItem extends Component {
201 { 201 {
202 label: intl.formatMessage(messages.reload), 202 label: intl.formatMessage(messages.reload),
203 click: reload, 203 click: reload,
204 accelerator: `${shortcutKey()}+R`, 204 accelerator: `${cmdOrCtrlShortcutKey()}+R`,
205 }, 205 },
206 { 206 {
207 label: intl.formatMessage(messages.edit), 207 label: intl.formatMessage(messages.edit),
@@ -307,7 +307,7 @@ class TabItem extends Component {
307 onClick={clickHandler} 307 onClick={clickHandler}
308 onContextMenu={() => menu.popup(getCurrentWindow())} 308 onContextMenu={() => menu.popup(getCurrentWindow())}
309 data-tip={`${service.name} ${ 309 data-tip={`${service.name} ${
310 shortcutIndex <= 9 ? `(${shortcutKey(false)}+${shortcutIndex})` : '' 310 shortcutIndex <= 9 ? `(${cmdOrCtrlShortcutKey(false)}+${shortcutIndex})` : ''
311 }`} 311 }`}
312 > 312 >
313 <img src={service.icon} className="tab-item__icon" alt="" /> 313 <img src={service.icon} className="tab-item__icon" alt="" />
diff --git a/src/components/settings/settings/EditSettingsForm.js b/src/components/settings/settings/EditSettingsForm.js
index 87a4ada27..41580ca78 100644
--- a/src/components/settings/settings/EditSettingsForm.js
+++ b/src/components/settings/settings/EditSettingsForm.js
@@ -1,4 +1,4 @@
1import { app, systemPreferences } from '@electron/remote'; 1import { systemPreferences } from '@electron/remote';
2import React, { Component } from 'react'; 2import React, { Component } from 'react';
3import PropTypes from 'prop-types'; 3import PropTypes from 'prop-types';
4import { observer } from 'mobx-react'; 4import { observer } from 'mobx-react';
@@ -12,11 +12,9 @@ import ToggleRaw from '../../ui/ToggleRaw';
12import Select from '../../ui/Select'; 12import Select from '../../ui/Select';
13import Input from '../../ui/Input'; 13import Input from '../../ui/Input';
14 14
15import { 15import { FRANZ_TRANSLATION, GITHUB_FRANZ_URL } from '../../../config';
16 FRANZ_TRANSLATION, 16import { DEFAULT_APP_SETTINGS, ferdiVersion, isMac, isWindows, lockFerdiShortcutKey, userDataPath, userDataRecipesPath } from '../../../environment';
17 GITHUB_FRANZ_URL, 17import { openPath } from '../../../helpers/url-helpers';
18} from '../../../config';
19import { DEFAULT_APP_SETTINGS, isMac, isWindows, lockFerdiShortcutKey } from '../../../environment';
20import globalMessages from '../../../i18n/globalMessages'; 18import globalMessages from '../../../i18n/globalMessages';
21 19
22const messages = defineMessages({ 20const messages = defineMessages({
@@ -116,6 +114,18 @@ const messages = defineMessages({
116 id: 'settings.app.buttonClearAllCache', 114 id: 'settings.app.buttonClearAllCache',
117 defaultMessage: '!!!Clear cache', 115 defaultMessage: '!!!Clear cache',
118 }, 116 },
117 subheadlineFerdiProfile: {
118 id: 'settings.app.subheadlineFerdiProfile',
119 defaultMessage: '!!!Ferdi Profile',
120 },
121 buttonOpenFerdiProfileFolder: {
122 id: 'settings.app.buttonOpenFerdiProfileFolder',
123 defaultMessage: '!!!Open Profile folder',
124 },
125 buttonOpenFerdiServiceRecipesFolder: {
126 id: 'settings.app.buttonOpenFerdiServiceRecipesFolder',
127 defaultMessage: '!!!Open Service Recipes folder',
128 },
119 buttonSearchForUpdate: { 129 buttonSearchForUpdate: {
120 id: 'settings.app.buttonSearchForUpdate', 130 id: 'settings.app.buttonSearchForUpdate',
121 defaultMessage: '!!!Check for updates', 131 defaultMessage: '!!!Check for updates',
@@ -259,6 +269,9 @@ export default @observer class EditSettingsForm extends Component {
259 } 269 }
260 } 270 }
261 271
272 const profileFolder = userDataPath();
273 const recipeFolder = userDataRecipesPath();
274
262 return ( 275 return (
263 <div className="settings__main"> 276 <div className="settings__main">
264 <div className="settings__header"> 277 <div className="settings__header">
@@ -631,6 +644,30 @@ export default @observer class EditSettingsForm extends Component {
631 /> 644 />
632 </p> 645 </p>
633 </div> 646 </div>
647
648 <Hr />
649
650 <div className="settings__settings-group">
651 <h3>
652 {intl.formatMessage(messages.subheadlineFerdiProfile)}
653 </h3>
654 <p>
655 <div className="settings__open-settings-file-container">
656 <Button
657 buttonType="secondary"
658 label={intl.formatMessage(messages.buttonOpenFerdiProfileFolder)}
659 className="settings__open-settings-file-button"
660 onClick={() => openPath(profileFolder)}
661 />
662 <Button
663 buttonType="secondary"
664 label={intl.formatMessage(messages.buttonOpenFerdiServiceRecipesFolder)}
665 className="settings__open-settings-file-button"
666 onClick={() => openPath(recipeFolder)}
667 />
668 </div>
669 </p>
670 </div>
634 </div> 671 </div>
635 )} 672 )}
636 673
@@ -669,7 +706,7 @@ export default @observer class EditSettingsForm extends Component {
669 )} 706 )}
670 {intl.formatMessage(messages.currentVersion)} 707 {intl.formatMessage(messages.currentVersion)}
671 {' '} 708 {' '}
672 {app.getVersion()} 709 {ferdiVersion}
673 {noUpdateAvailable && ( 710 {noUpdateAvailable && (
674 <> 711 <>
675 <br /> 712 <br />
diff --git a/src/components/ui/AppLoader/index.js b/src/components/ui/AppLoader/index.js
index 31d7ca249..bbfd5de28 100644
--- a/src/components/ui/AppLoader/index.js
+++ b/src/components/ui/AppLoader/index.js
@@ -8,6 +8,7 @@ import { shuffleArray } from '../../../helpers/array-helpers';
8 8
9import styles from './styles'; 9import styles from './styles';
10 10
11// TODO: Need to externalize for i18n
11const textList = shuffleArray([ 12const textList = shuffleArray([
12 'Adding free features', 13 'Adding free features',
13 'Making application usable', 14 'Making application usable',
diff --git a/src/components/ui/Link.js b/src/components/ui/Link.js
index fd14b7018..003211e5c 100644
--- a/src/components/ui/Link.js
+++ b/src/components/ui/Link.js
@@ -1,4 +1,3 @@
1import { shell } from 'electron';
2import React, { Component } from 'react'; 1import React, { Component } from 'react';
3import PropTypes from 'prop-types'; 2import PropTypes from 'prop-types';
4import { inject, observer } from 'mobx-react'; 3import { inject, observer } from 'mobx-react';
@@ -7,15 +6,18 @@ import classnames from 'classnames';
7 6
8import { oneOrManyChildElements } from '../../prop-types'; 7import { oneOrManyChildElements } from '../../prop-types';
9import { matchRoute } from '../../helpers/routing-helpers'; 8import { matchRoute } from '../../helpers/routing-helpers';
9import { openExternalUrl } from '../../helpers/url-helpers';
10 10
11// TODO: create container component for this component 11// TODO: create container component for this component
12export default @inject('stores') @observer class Link extends Component { 12export default @inject('stores') @observer class Link extends Component {
13 onClick(e) { 13 onClick(e) {
14 if (this.props.disabled) e.preventDefault(); 14 if (this.props.disabled) {
15 else if (this.props.target === '_blank') {
16 e.preventDefault(); 15 e.preventDefault();
17 shell.openExternal(this.props.to); 16 } else if (this.props.target === '_blank') {
17 e.preventDefault();
18 openExternalUrl(this.props.to, true);
18 } 19 }
20 // Note: if neither of the above, then let the other onClick handlers process it
19 } 21 }
20 22
21 render() { 23 render() {
diff --git a/src/config.js b/src/config.ts
index aeaec1089..0647b8f52 100644
--- a/src/config.js
+++ b/src/config.ts
@@ -33,6 +33,7 @@ export const CDN_URL = 'https://cdn.franzinfra.com';
33 33
34export const KEEP_WS_LOADED_USID = '0a0aa000-0a0a-49a0-a000-a0a0a0a0a0a0'; 34export const KEEP_WS_LOADED_USID = '0a0aa000-0a0a-49a0-a000-a0a0a0a0a0a0';
35 35
36// TODO: Need to convert many of these to i18n
36export const HIBERNATION_STRATEGIES = { 37export const HIBERNATION_STRATEGIES = {
37 10: 'Extremely Fast Hibernation (10sec)', 38 10: 'Extremely Fast Hibernation (10sec)',
38 30: 'Very Fast Hibernation (30sec)', 39 30: 'Very Fast Hibernation (30sec)',
@@ -180,3 +181,5 @@ export const DEFAULT_IS_FEATURE_ENABLED_BY_USER = true;
180export const TODOS_PARTITION_ID = 'persist:todos'; 181export const TODOS_PARTITION_ID = 'persist:todos';
181 182
182export const CUSTOM_WEBSITE_RECIPE_ID = 'franz-custom-website'; 183export const CUSTOM_WEBSITE_RECIPE_ID = 'franz-custom-website';
184
185export const DEFAULT_SERVICE_ORDER = 99; // something high enough that it gets added to the end of the already-added services on the left sidebar
diff --git a/src/containers/settings/RecipesScreen.js b/src/containers/settings/RecipesScreen.js
index 52bf31383..784052bbe 100644
--- a/src/containers/settings/RecipesScreen.js
+++ b/src/containers/settings/RecipesScreen.js
@@ -1,5 +1,4 @@
1import { shell } from 'electron'; 1import { readJsonSync } from 'fs-extra';
2import { ensureDirSync, readJsonSync } from 'fs-extra';
3import React, { Component } from 'react'; 2import React, { Component } from 'react';
4import PropTypes from 'prop-types'; 3import PropTypes from 'prop-types';
5import { autorun } from 'mobx'; 4import { autorun } from 'mobx';
@@ -17,6 +16,7 @@ import { asarRecipesPath, userDataRecipesPath } from '../../environment';
17import { communityRecipesStore } from '../../features/communityRecipes'; 16import { communityRecipesStore } from '../../features/communityRecipes';
18import RecipePreview from '../../models/RecipePreview'; 17import RecipePreview from '../../models/RecipePreview';
19import AppStore from '../../stores/AppStore'; 18import AppStore from '../../stores/AppStore';
19import { openPath } from '../../helpers/url-helpers';
20 20
21export default @inject('stores', 'actions') @observer class RecipesScreen extends Component { 21export default @inject('stores', 'actions') @observer class RecipesScreen extends Component {
22 static propTypes = { 22 static propTypes = {
@@ -74,6 +74,12 @@ export default @inject('stores', 'actions') @observer class RecipesScreen extend
74 } 74 }
75 } 75 }
76 76
77 _sortByName(recipe1, recipe2) {
78 if (recipe1.name.toLowerCase() < recipe2.name.toLowerCase()) { return -1; }
79 if (recipe1.name.toLowerCase() > recipe2.name.toLowerCase()) { return 1; }
80 return 0;
81 }
82
77 prepareRecipes(recipes) { 83 prepareRecipes(recipes) {
78 return recipes 84 return recipes
79 // Filter out duplicate recipes 85 // Filter out duplicate recipes
@@ -82,11 +88,7 @@ export default @inject('stores', 'actions') @observer class RecipesScreen extend
82 return ids.indexOf(recipe.id) === index; 88 return ids.indexOf(recipe.id) === index;
83 89
84 // Sort alphabetically 90 // Sort alphabetically
85 }).sort((a, b) => { 91 }).sort(this._sortByName);
86 if (a.id < b.id) { return -1; }
87 if (a.id > b.id) { return 1; }
88 return 0;
89 });
90 } 92 }
91 93
92 // Create an array of RecipePreviews from an array of recipe objects 94 // Create an array of RecipePreviews from an array of recipe objects
@@ -121,6 +123,7 @@ export default @inject('stores', 'actions') @observer class RecipesScreen extend
121 } else if (filter === 'dev') { 123 } else if (filter === 'dev') {
122 recipeFilter = communityRecipesStore.communityRecipes; 124 recipeFilter = communityRecipesStore.communityRecipes;
123 } 125 }
126 recipeFilter = recipeFilter.sort(this._sortByName);
124 127
125 const allRecipes = this.state.needle ? this.prepareRecipes([ 128 const allRecipes = this.state.needle ? this.prepareRecipes([
126 // All search recipes from server 129 // All search recipes from server
@@ -130,7 +133,7 @@ export default @inject('stores', 'actions') @observer class RecipesScreen extend
130 this.customRecipes 133 this.customRecipes
131 .filter((service) => service.name.toLowerCase().includes(this.state.needle.toLowerCase()) || (service.aliases || []).some(alias => alias.toLowerCase().includes(this.state.needle.toLowerCase()))), 134 .filter((service) => service.name.toLowerCase().includes(this.state.needle.toLowerCase()) || (service.aliases || []).some(alias => alias.toLowerCase().includes(this.state.needle.toLowerCase()))),
132 ), 135 ),
133 ]) : recipeFilter; 136 ]).sort(this._sortByName) : recipeFilter;
134 137
135 const customWebsiteRecipe = recipePreviews.all.find((service) => service.id === CUSTOM_WEBSITE_RECIPE_ID); 138 const customWebsiteRecipe = recipePreviews.all.find((service) => service.id === CUSTOM_WEBSITE_RECIPE_ID);
136 139
@@ -154,13 +157,8 @@ export default @inject('stores', 'actions') @observer class RecipesScreen extend
154 serviceStatus={services.actionStatus} 157 serviceStatus={services.actionStatus}
155 recipeFilter={filter} 158 recipeFilter={filter}
156 recipeDirectory={recipeDirectory} 159 recipeDirectory={recipeDirectory}
157 openRecipeDirectory={async () => { 160 openRecipeDirectory={() => openPath(recipeDirectory)}
158 ensureDirSync(recipeDirectory); 161 openDevDocs={() => appActions.openExternalUrl({ url: FRANZ_DEV_DOCS })}
159 shell.openExternal(`file://${recipeDirectory}`);
160 }}
161 openDevDocs={() => {
162 appActions.openExternalUrl({ url: FRANZ_DEV_DOCS });
163 }}
164 /> 162 />
165 </ErrorBoundary> 163 </ErrorBoundary>
166 ); 164 );
diff --git a/src/electron/ipc-api/dnd.js b/src/electron/ipc-api/dnd.js
index da4d7781e..6fb8999a3 100644
--- a/src/electron/ipc-api/dnd.js
+++ b/src/electron/ipc-api/dnd.js
@@ -1,16 +1,23 @@
1import { ipcMain } from 'electron'; 1import { ipcMain } from 'electron';
2import { getDoNotDisturb } from '@meetfranz/electron-notification-state'; 2import { getDoNotDisturb } from 'macos-notification-state';
3import { isMac } from '../../environment';
3 4
4const debug = require('debug')('Ferdi:ipcApi:dnd'); 5const debug = require('debug')('Ferdi:ipcApi:dnd');
5 6
6export default async () => { 7export default async () => {
7 ipcMain.handle('get-dnd', async () => { 8 ipcMain.handle('get-dnd', async () => {
9 if (!isMac) {
10 debug('Not on macOS, returning', false);
11 return false;
12 }
13
8 try { 14 try {
9 const isDND = getDoNotDisturb(); 15 const isDND = getDoNotDisturb();
10 debug('Fetching DND state, set to', isDND); 16 debug('Fetching DND state, set to', isDND);
11 return isDND; 17 return isDND;
12 } catch (e) { 18 } catch (e) {
13 console.error(e); 19 console.error(e);
20 return false;
14 } 21 }
15 }); 22 });
16}; 23};
diff --git a/src/electron/ipc-api/focusState.js b/src/electron/ipc-api/focusState.js
new file mode 100644
index 000000000..0b4a0d8f3
--- /dev/null
+++ b/src/electron/ipc-api/focusState.js
@@ -0,0 +1,9 @@
1export default (params) => {
2 params.mainWindow.on('focus', () => {
3 params.mainWindow.webContents.send('isWindowFocused', true);
4 });
5
6 params.mainWindow.on('blur', () => {
7 params.mainWindow.webContents.send('isWindowFocused', false);
8 });
9};
diff --git a/src/electron/ipc-api/index.js b/src/electron/ipc-api/index.js
index 999ac7d2d..5da1edc39 100644
--- a/src/electron/ipc-api/index.js
+++ b/src/electron/ipc-api/index.js
@@ -5,6 +5,7 @@ import download from './download';
5import localServer from './localServer'; 5import localServer from './localServer';
6import cld from './cld'; 6import cld from './cld';
7import dnd from './dnd'; 7import dnd from './dnd';
8import focusState from './focusState';
8 9
9export default (params) => { 10export default (params) => {
10 settings(params); 11 settings(params);
@@ -14,4 +15,5 @@ export default (params) => {
14 localServer(params); 15 localServer(params);
15 cld(params); 16 cld(params);
16 dnd(); 17 dnd();
18 focusState(params);
17}; 19};
diff --git a/src/environment.js b/src/environment.js
index 42c6b2927..f8a51b207 100644
--- a/src/environment.js
+++ b/src/environment.js
@@ -31,6 +31,7 @@ export const ferdiVersion = app.getVersion();
31export const electronVersion = process.versions.electron; 31export const electronVersion = process.versions.electron;
32export const chromeVersion = process.versions.chrome; 32export const chromeVersion = process.versions.chrome;
33export const nodeVersion = process.versions.node; 33export const nodeVersion = process.versions.node;
34export const ferdiLocale = app.getLocale();
34 35
35// Set app directory before loading user modules 36// Set app directory before loading user modules
36if (process.env.FERDI_APPDATA_DIR != null) { 37if (process.env.FERDI_APPDATA_DIR != null) {
@@ -78,17 +79,17 @@ export const is64Bit = osArch.match(/64/);
78const ctrlKey = isMac ? '⌘' : 'Ctrl'; 79const ctrlKey = isMac ? '⌘' : 'Ctrl';
79const cmdKey = isMac ? 'Cmd' : 'Ctrl'; 80const cmdKey = isMac ? 'Cmd' : 'Ctrl';
80 81
81export const altKey = isMac ? '⌥' : 'Alt'; 82export const altKey = (isAccelerator = true) => (!isAccelerator && isMac ? '⌥' : 'Alt');
82export const shiftKey = isMac ? '⇧' : 'Shift'; 83export const shiftKey = (isAccelerator = true) => (!isAccelerator && isMac ? '⇧' : 'Shift');
83 84
84// Platform specific shortcut keys 85// Platform specific shortcut keys
85export const shortcutKey = (isAccelerator = true) => (isAccelerator ? cmdKey : ctrlKey); 86export const cmdOrCtrlShortcutKey = (isAccelerator = true) => (isAccelerator ? cmdKey : ctrlKey);
86export const lockFerdiShortcutKey = (isAccelerator = true) => `${shortcutKey(isAccelerator)}+${shiftKey}+L`; 87export const lockFerdiShortcutKey = (isAccelerator = true) => `${cmdOrCtrlShortcutKey(isAccelerator)}+${shiftKey(isAccelerator)}+L`;
87export const todosToggleShortcutKey = (isAccelerator = true) => `${shortcutKey(isAccelerator)}+T`; 88export const todosToggleShortcutKey = (isAccelerator = true) => `${cmdOrCtrlShortcutKey(isAccelerator)}+T`;
88export const workspaceToggleShortcutKey = (isAccelerator = true) => `${shortcutKey(isAccelerator)}+D`; 89export const workspaceToggleShortcutKey = (isAccelerator = true) => `${cmdOrCtrlShortcutKey(isAccelerator)}+D`;
89export const muteFerdiShortcutKey = (isAccelerator = true) => `${shortcutKey(isAccelerator)}+${shiftKey}+M`; 90export const muteFerdiShortcutKey = (isAccelerator = true) => `${cmdOrCtrlShortcutKey(isAccelerator)}+${shiftKey(isAccelerator)}+M`;
90export const addNewServiceShortcutKey = (isAccelerator = true) => `${shortcutKey(isAccelerator)}+N`; 91export const addNewServiceShortcutKey = (isAccelerator = true) => `${cmdOrCtrlShortcutKey(isAccelerator)}+N`;
91export const settingsShortcutKey = (isAccelerator = true) => `${shortcutKey(isAccelerator)}+${isMac ? ',' : 'P'}`; 92export const settingsShortcutKey = (isAccelerator = true) => `${cmdOrCtrlShortcutKey(isAccelerator)}+${isMac ? ',' : 'P'}`;
92 93
93let api; 94let api;
94let wsApi; 95let wsApi;
diff --git a/src/features/announcements/api.js b/src/features/announcements/api.js
index a7fe24bb1..962f3e694 100644
--- a/src/features/announcements/api.js
+++ b/src/features/announcements/api.js
@@ -1,14 +1,14 @@
1import { app } from '@electron/remote';
2import Request from '../../stores/lib/Request'; 1import Request from '../../stores/lib/Request';
3import apiBase from '../../api/apiBase'; 2import apiBase from '../../api/apiBase';
4import { GITHUB_FERDI_REPO_NAME, GITHUB_NIGHTLIES_REPO_NAME, GITHUB_ORG_NAME } from '../../config'; 3import { GITHUB_FERDI_REPO_NAME, GITHUB_NIGHTLIES_REPO_NAME, GITHUB_ORG_NAME } from '../../config';
4import { ferdiVersion } from '../../environment';
5 5
6const debug = require('debug')('Ferdi:feature:announcements:api'); 6const debug = require('debug')('Ferdi:feature:announcements:api');
7 7
8export const announcementsApi = { 8export const announcementsApi = {
9 async getCurrentVersion() { 9 async getCurrentVersion() {
10 debug('getting current version of electron app'); 10 debug('getting current version of electron app');
11 return Promise.resolve(app.getVersion()); 11 return Promise.resolve(ferdiVersion);
12 }, 12 },
13 13
14 async getChangelog(version) { 14 async getChangelog(version) {
diff --git a/src/features/announcements/index.js b/src/features/announcements/index.js
index 28f0b10ed..19930c5b1 100644
--- a/src/features/announcements/index.js
+++ b/src/features/announcements/index.js
@@ -24,8 +24,6 @@ export default function initAnnouncements(stores, actions) {
24 announcementsStore.stop(); 24 announcementsStore.stop();
25 } 25 }
26 }, 26 },
27 { 27 { fireImmediately: true },
28 fireImmediately: true,
29 },
30 ); 28 );
31} 29}
diff --git a/src/features/appearance/index.js b/src/features/appearance/index.js
index 87651a3f4..c3425ba9c 100644
--- a/src/features/appearance/index.js
+++ b/src/features/appearance/index.js
@@ -235,8 +235,6 @@ export default function initAppearance(stores) {
235 () => { 235 () => {
236 updateStyle(settings.all.app); 236 updateStyle(settings.all.app);
237 }, 237 },
238 { 238 { fireImmediately: true },
239 fireImmediately: true,
240 },
241 ); 239 );
242} 240}
diff --git a/src/features/nightlyBuilds/Component.js b/src/features/nightlyBuilds/Component.js
index 5a809aaf2..6e5941948 100644
--- a/src/features/nightlyBuilds/Component.js
+++ b/src/features/nightlyBuilds/Component.js
@@ -55,7 +55,7 @@ const styles = () => ({
55 }, 55 },
56}); 56});
57 57
58export default @injectSheet(styles) @inject('stores', 'actions') @observer class nightlyBuildsModal extends Component { 58export default @injectSheet(styles) @inject('stores', 'actions') @observer class NightlyBuildsModal extends Component {
59 static contextTypes = { 59 static contextTypes = {
60 intl: intlShape, 60 intl: intlShape,
61 }; 61 };
@@ -124,7 +124,7 @@ export default @injectSheet(styles) @inject('stores', 'actions') @observer class
124 } 124 }
125} 125}
126 126
127nightlyBuildsModal.wrappedComponent.propTypes = { 127NightlyBuildsModal.wrappedComponent.propTypes = {
128 stores: PropTypes.shape({ 128 stores: PropTypes.shape({
129 settings: PropTypes.instanceOf(SettingsStore).isRequired, 129 settings: PropTypes.instanceOf(SettingsStore).isRequired,
130 }).isRequired, 130 }).isRequired,
diff --git a/src/features/quickSwitch/Component.js b/src/features/quickSwitch/Component.js
index 812f2c04b..78d5d94a0 100644
--- a/src/features/quickSwitch/Component.js
+++ b/src/features/quickSwitch/Component.js
@@ -118,8 +118,12 @@ export default @injectSheet(styles) @inject('stores', 'actions') @observer class
118 this.openService = this.openService.bind(this); 118 this.openService = this.openService.bind(this);
119 119
120 reaction( 120 reaction(
121 () => ModalState.isModalVisible, 121 () => (
122 this._handleVisibilityChange, 122 ModalState.isModalVisible
123 ),
124 () => {
125 this._handleVisibilityChange();
126 },
123 ); 127 );
124 } 128 }
125 129
diff --git a/src/features/settingsWS/index.js b/src/features/settingsWS/index.js
index 6711296da..7771421d6 100755
--- a/src/features/settingsWS/index.js
+++ b/src/features/settingsWS/index.js
@@ -22,8 +22,6 @@ export default function initSettingsWebSocket(stores, actions) {
22 settingsStore.stop(); 22 settingsStore.stop();
23 } 23 }
24 }, 24 },
25 { 25 { fireImmediately: true },
26 fireImmediately: true,
27 },
28 ); 26 );
29} 27}
diff --git a/src/features/shareFranz/Component.js b/src/features/shareFranz/Component.js
deleted file mode 100644
index cc2e81b70..000000000
--- a/src/features/shareFranz/Component.js
+++ /dev/null
@@ -1,159 +0,0 @@
1import React, { Component } from 'react';
2import PropTypes from 'prop-types';
3import { observer, inject } from 'mobx-react';
4import injectSheet from 'react-jss';
5import { defineMessages, intlShape } from 'react-intl';
6import { Button } from '@meetfranz/forms';
7import { H1, Icon } from '@meetfranz/ui';
8
9import {
10 mdiHeart, mdiEmail, mdiFacebookBox, mdiTwitter,
11} from '@mdi/js';
12import Modal from '../../components/ui/Modal';
13import { state } from './store';
14import ServicesStore from '../../stores/ServicesStore';
15
16const messages = defineMessages({
17 headline: {
18 id: 'feature.shareFranz.headline',
19 defaultMessage: '!!!Ferdi is better together!',
20 },
21 text: {
22 id: 'feature.shareFranz.text',
23 defaultMessage: '!!!Tell your friends and colleagues how awesome Ferdi is and help us to spread the word.',
24 },
25 actionsEmail: {
26 id: 'feature.shareFranz.action.email',
27 defaultMessage: '!!!Share as email',
28 },
29 actionsFacebook: {
30 id: 'feature.shareFranz.action.facebook',
31 defaultMessage: '!!!Share on Facebook',
32 },
33 actionsTwitter: {
34 id: 'feature.shareFranz.action.twitter',
35 defaultMessage: '!!!Share on Twitter',
36 },
37 shareTextEmail: {
38 id: 'feature.shareFranz.shareText.email',
39 defaultMessage: '!!! I\'ve added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com',
40 },
41 shareTextTwitter: {
42 id: 'feature.shareFranz.shareText.twitter',
43 defaultMessage: '!!! I\'ve added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com /cc @FranzMessenger',
44 },
45});
46
47const styles = (theme) => ({
48 modal: {
49 width: '80%',
50 maxWidth: 600,
51 background: theme.styleTypes.primary.accent,
52 textAlign: 'center',
53 color: theme.styleTypes.primary.contrast,
54 },
55 heartContainer: {
56 display: 'flex',
57 justifyContent: 'center',
58 borderRadius: '100%',
59 background: theme.brandDanger,
60 padding: 20,
61 width: 100,
62 height: 100,
63 margin: [-70, 'auto', 30],
64 },
65 heart: {
66 fill: theme.styleTypes.primary.contrast,
67 },
68 headline: {
69 textAlign: 'center',
70 fontSize: 40,
71 marginBottom: 20,
72 },
73 actions: {
74 display: 'flex',
75 justifyContent: 'space-between',
76 marginTop: 30,
77 },
78 cta: {
79 background: theme.styleTypes.primary.contrast,
80 color: `${theme.styleTypes.primary.accent} !important`,
81
82 '& svg': {
83 fill: theme.styleTypes.primary.accent,
84 },
85 },
86});
87
88export default @injectSheet(styles) @inject('stores') @observer class ShareFranzModal extends Component {
89 static propTypes = {
90 classes: PropTypes.object.isRequired,
91 };
92
93 static contextTypes = {
94 intl: intlShape,
95 };
96
97 close() {
98 state.isModalVisible = false;
99 }
100
101 render() {
102 const { isModalVisible } = state;
103
104 const {
105 classes,
106 stores,
107 } = this.props;
108
109 const serviceCount = stores.services.all.length;
110
111 const { intl } = this.context;
112
113 return (
114 <Modal
115 isOpen={isModalVisible}
116 className={classes.modal}
117 shouldCloseOnOverlayClick
118 close={this.close.bind(this)}
119 >
120 <div className={classes.heartContainer}>
121 <Icon icon={mdiHeart} className={classes.heart} size={4} />
122 </div>
123 <H1 className={classes.headline}>
124 {intl.formatMessage(messages.headline)}
125 </H1>
126 <p>{intl.formatMessage(messages.text)}</p>
127 <div className={classes.actions}>
128 <Button
129 label={intl.formatMessage(messages.actionsEmail)}
130 className={classes.cta}
131 icon={mdiEmail}
132 href={`mailto:?subject=Meet the cool app Franz&body=${intl.formatMessage(messages.shareTextEmail, { count: serviceCount })}}`}
133 target="_blank"
134 />
135 <Button
136 label={intl.formatMessage(messages.actionsFacebook)}
137 className={classes.cta}
138 icon={mdiFacebookBox}
139 href="https://www.facebook.com/sharer/sharer.php?u=https://www.meetfranz.com?utm_source=facebook&utm_medium=referral&utm_campaign=share-button"
140 target="_blank"
141 />
142 <Button
143 label={intl.formatMessage(messages.actionsTwitter)}
144 className={classes.cta}
145 icon={mdiTwitter}
146 href={`http://twitter.com/intent/tweet?status=${intl.formatMessage(messages.shareTextTwitter, { count: serviceCount })}`}
147 target="_blank"
148 />
149 </div>
150 </Modal>
151 );
152 }
153}
154
155ShareFranzModal.wrappedComponent.propTypes = {
156 stores: PropTypes.shape({
157 services: PropTypes.instanceOf(ServicesStore).isRequired,
158 }).isRequired,
159};
diff --git a/src/features/shareFranz/index.js b/src/features/shareFranz/index.js
deleted file mode 100644
index 9add0f65e..000000000
--- a/src/features/shareFranz/index.js
+++ /dev/null
@@ -1,35 +0,0 @@
1import { reaction } from 'mobx';
2import ms from 'ms';
3import { state as ModalState } from './store';
4
5export { default as Component } from './Component';
6
7const debug = require('debug')('Ferdi:feature:shareFranz');
8
9const state = ModalState;
10
11export default function initialize(stores) {
12 debug('Initialize shareFerdi feature');
13
14 window.ferdi.features.shareFerdi = {
15 state,
16 };
17
18 function showModal() {
19 debug('Would have showed share window');
20 }
21
22 reaction(
23 () => stores.user.isLoggedIn,
24 () => {
25 setTimeout(() => {
26 if (stores.settings.stats.appStarts % 50 === 0) {
27 showModal();
28 }
29 }, ms('2s'));
30 },
31 {
32 fireImmediately: true,
33 },
34 );
35}
diff --git a/src/features/shareFranz/store.js b/src/features/shareFranz/store.js
deleted file mode 100644
index c637e9eff..000000000
--- a/src/features/shareFranz/store.js
+++ /dev/null
@@ -1,8 +0,0 @@
1import { observable } from 'mobx';
2
3const defaultState = {
4 isModalVisible: false,
5 lastShown: null,
6};
7
8export const state = observable(defaultState);
diff --git a/src/features/todos/index.js b/src/features/todos/index.js
index 1c6c9179a..55956d1d7 100644
--- a/src/features/todos/index.js
+++ b/src/features/todos/index.js
@@ -13,7 +13,9 @@ export default function initTodos(stores, actions) {
13 13
14 // Toggle todos feature 14 // Toggle todos feature
15 reaction( 15 reaction(
16 () => features.features.isTodosEnabled, 16 () => (
17 features.features.isTodosEnabled
18 ),
17 (isEnabled) => { 19 (isEnabled) => {
18 if (isEnabled) { 20 if (isEnabled) {
19 debug('Initializing `todos` feature'); 21 debug('Initializing `todos` feature');
@@ -23,8 +25,6 @@ export default function initTodos(stores, actions) {
23 todosStore.stop(); 25 todosStore.stop();
24 } 26 }
25 }, 27 },
26 { 28 { fireImmediately: true },
27 fireImmediately: true,
28 },
29 ); 29 );
30} 30}
diff --git a/src/features/workspaces/components/WorkspaceDrawerItem.js b/src/features/workspaces/components/WorkspaceDrawerItem.js
index fff607330..252158364 100644
--- a/src/features/workspaces/components/WorkspaceDrawerItem.js
+++ b/src/features/workspaces/components/WorkspaceDrawerItem.js
@@ -5,7 +5,7 @@ import { observer } from 'mobx-react';
5import injectSheet from 'react-jss'; 5import injectSheet from 'react-jss';
6import classnames from 'classnames'; 6import classnames from 'classnames';
7import { defineMessages, intlShape } from 'react-intl'; 7import { defineMessages, intlShape } from 'react-intl';
8import { altKey, shortcutKey } from '../../../environment'; 8import { altKey, cmdOrCtrlShortcutKey } from '../../../environment';
9 9
10const messages = defineMessages({ 10const messages = defineMessages({
11 noServicesAddedYet: { 11 noServicesAddedYet: {
@@ -125,7 +125,7 @@ class WorkspaceDrawerItem extends Component {
125 onContextMenuEditClick && contextMenu.popup(getCurrentWindow()) 125 onContextMenuEditClick && contextMenu.popup(getCurrentWindow())
126 } 126 }
127 data-tip={`${ 127 data-tip={`${
128 shortcutIndex <= 9 ? `(${shortcutKey(false)}+${altKey}+${shortcutIndex})` : '' 128 shortcutIndex <= 9 ? `(${cmdOrCtrlShortcutKey(false)}+${altKey(false)}+${shortcutIndex})` : ''
129 }`} 129 }`}
130 > 130 >
131 <span 131 <span
diff --git a/src/features/workspaces/index.js b/src/features/workspaces/index.js
index 3db6de5b2..83e4d9049 100644
--- a/src/features/workspaces/index.js
+++ b/src/features/workspaces/index.js
@@ -12,7 +12,9 @@ export default function initWorkspaces(stores, actions) {
12 12
13 // Toggle workspace feature 13 // Toggle workspace feature
14 reaction( 14 reaction(
15 () => features.features.isWorkspaceEnabled, 15 () => (
16 features.features.isWorkspaceEnabled
17 ),
16 (isEnabled) => { 18 (isEnabled) => {
17 if (isEnabled && !workspaceStore.isFeatureActive) { 19 if (isEnabled && !workspaceStore.isFeatureActive) {
18 debug('Initializing `workspaces` feature'); 20 debug('Initializing `workspaces` feature');
@@ -23,8 +25,6 @@ export default function initWorkspaces(stores, actions) {
23 resetApiRequests(); 25 resetApiRequests();
24 } 26 }
25 }, 27 },
26 { 28 { fireImmediately: true },
27 fireImmediately: true,
28 },
29 ); 29 );
30} 30}
diff --git a/src/helpers/array-helpers.js b/src/helpers/array-helpers.ts
index 5e592b7f7..ae5d8d99f 100644
--- a/src/helpers/array-helpers.js
+++ b/src/helpers/array-helpers.ts
@@ -1,4 +1,4 @@
1export const shuffleArray = (arr) => arr 1export const shuffleArray = (arr: any[]) => arr
2 .map((a) => [Math.random(), a]) 2 .map((a) => [Math.random(), a])
3 .sort((a, b) => a[0] - b[0]) 3 .sort((a, b) => a[0] - b[0])
4 .map((a) => a[1]); 4 .map((a) => a[1]);
diff --git a/src/helpers/asar-helpers.js b/src/helpers/asar-helpers.ts
index 9e4380c06..3d9f0d941 100644
--- a/src/helpers/asar-helpers.js
+++ b/src/helpers/asar-helpers.ts
@@ -1,3 +1,3 @@
1export function asarPath(dir = '') { 1export function asarPath(dir: string = '') {
2 return dir.replace('app.asar', 'app.asar.unpacked'); 2 return dir.replace('app.asar', 'app.asar.unpacked');
3} 3}
diff --git a/src/helpers/async-helpers.js b/src/helpers/async-helpers.ts
index c6c57e28e..aae3c3928 100644
--- a/src/helpers/async-helpers.js
+++ b/src/helpers/async-helpers.ts
@@ -1,5 +1,5 @@
1/* eslint-disable import/prefer-default-export */ 1/* eslint-disable import/prefer-default-export */
2 2
3export function sleep(ms = 0) { 3export function sleep(ms: number = 0) {
4 return new Promise((r) => setTimeout(r, ms)); 4 return new Promise((r) => setTimeout(r, ms));
5} 5}
diff --git a/src/helpers/i18n-helpers.js b/src/helpers/i18n-helpers.ts
index 807b9066e..c1f18f446 100644
--- a/src/helpers/i18n-helpers.js
+++ b/src/helpers/i18n-helpers.ts
@@ -3,7 +3,7 @@ export function getLocale({
3}) { 3}) {
4 let localeStr = locale; 4 let localeStr = locale;
5 if (locales[locale] === undefined) { 5 if (locales[locale] === undefined) {
6 let localeFuzzy; 6 let localeFuzzy: string | undefined;
7 Object.keys(locales).forEach((localStr) => { 7 Object.keys(locales).forEach((localStr) => {
8 if (locales && Object.hasOwnProperty.call(locales, localStr)) { 8 if (locales && Object.hasOwnProperty.call(locales, localStr)) {
9 if (locale.substring(0, 2) === localStr.substring(0, 2)) { 9 if (locale.substring(0, 2) === localStr.substring(0, 2)) {
@@ -31,7 +31,7 @@ export function getLocale({
31export function getSelectOptions({ 31export function getSelectOptions({
32 locales, resetToDefaultText = '', automaticDetectionText = '', sort = true, 32 locales, resetToDefaultText = '', automaticDetectionText = '', sort = true,
33}) { 33}) {
34 const options = []; 34 const options: object[] = [];
35 35
36 if (resetToDefaultText) { 36 if (resetToDefaultText) {
37 options.push( 37 options.push(
diff --git a/src/helpers/password-helpers.js b/src/helpers/password-helpers.ts
index cf461e4f7..89c75c752 100644
--- a/src/helpers/password-helpers.js
+++ b/src/helpers/password-helpers.ts
@@ -1,10 +1,10 @@
1import crypto from 'crypto'; 1import crypto from 'crypto';
2 2
3export function hash(password) { 3export function hash(password: crypto.BinaryLike) {
4 return crypto.createHash('sha256').update(password).digest('base64'); 4 return crypto.createHash('sha256').update(password).digest('base64');
5} 5}
6 6
7export function scorePassword(password) { 7export function scorePassword(password: string) {
8 let score = 0; 8 let score = 0;
9 if (!password) { 9 if (!password) {
10 return score; 10 return score;
@@ -32,5 +32,5 @@ export function scorePassword(password) {
32 32
33 score += (variationCount - 1) * 10; 33 score += (variationCount - 1) * 10;
34 34
35 return parseInt(score, 10); 35 return parseInt(score.toString(), 10);
36} 36}
diff --git a/src/helpers/recipe-helpers.js b/src/helpers/recipe-helpers.ts
index 7e4bfa85a..965429210 100644
--- a/src/helpers/recipe-helpers.js
+++ b/src/helpers/recipe-helpers.ts
@@ -1,15 +1,15 @@
1import { parse } from 'path'; 1import { parse } from 'path';
2import { userDataRecipesPath } from '../environment'; 2import { userDataRecipesPath } from '../environment';
3 3
4export function getRecipeDirectory(id = '') { 4export function getRecipeDirectory(id: string = ''): string {
5 return userDataRecipesPath(id); 5 return userDataRecipesPath(id);
6} 6}
7 7
8export function getDevRecipeDirectory(id = '') { 8export function getDevRecipeDirectory(id: string = ''): string {
9 return userDataRecipesPath('dev', id); 9 return userDataRecipesPath('dev', id);
10} 10}
11 11
12export function loadRecipeConfig(recipeId) { 12export function loadRecipeConfig(recipeId: string) {
13 try { 13 try {
14 const configPath = `${recipeId}/package.json`; 14 const configPath = `${recipeId}/package.json`;
15 // Delete module from cache 15 // Delete module from cache
diff --git a/src/helpers/routing-helpers.js b/src/helpers/routing-helpers.js
deleted file mode 100644
index 14922ebf3..000000000
--- a/src/helpers/routing-helpers.js
+++ /dev/null
@@ -1,4 +0,0 @@
1import RouteParser from 'route-parser';
2
3// eslint-disable-next-line
4export const matchRoute = (pattern, path) => new RouteParser(pattern).match(path);
diff --git a/src/helpers/routing-helpers.ts b/src/helpers/routing-helpers.ts
new file mode 100644
index 000000000..18169f01b
--- /dev/null
+++ b/src/helpers/routing-helpers.ts
@@ -0,0 +1,3 @@
1import RouteParser from 'route-parser';
2
3export const matchRoute = (pattern: string, path: string) => new RouteParser(pattern).match(path);
diff --git a/src/helpers/schedule-helpers.js b/src/helpers/schedule-helpers.ts
index a3020cad6..754fd5556 100644
--- a/src/helpers/schedule-helpers.js
+++ b/src/helpers/schedule-helpers.ts
@@ -1,6 +1,6 @@
1/* eslint-disable import/prefer-default-export */ 1/* eslint-disable import/prefer-default-export */
2 2
3export function isInTimeframe(start, end) { 3export function isInTimeframe(start: string, end: string) {
4 const [ 4 const [
5 startHourStr, 5 startHourStr,
6 startMinuteStr, 6 startMinuteStr,
diff --git a/src/helpers/url-helpers.js b/src/helpers/url-helpers.js
deleted file mode 100644
index 972f9b79a..000000000
--- a/src/helpers/url-helpers.js
+++ /dev/null
@@ -1,20 +0,0 @@
1import { URL } from 'url';
2
3import { ALLOWED_PROTOCOLS } from '../config';
4
5const debug = require('debug')('Ferdi:Helpers:url');
6
7export function isValidExternalURL(url) {
8 let parsedUrl;
9 try {
10 parsedUrl = new URL(url);
11 } catch (_) {
12 return false;
13 }
14
15 const isAllowed = ALLOWED_PROTOCOLS.includes(parsedUrl.protocol);
16
17 debug('protocol check is', isAllowed, 'for:', url);
18
19 return isAllowed;
20}
diff --git a/src/helpers/url-helpers.ts b/src/helpers/url-helpers.ts
new file mode 100644
index 000000000..3657ae693
--- /dev/null
+++ b/src/helpers/url-helpers.ts
@@ -0,0 +1,37 @@
1// This is taken from: https://benjamin-altpeter.de/shell-openexternal-dangers/
2
3import { URL } from 'url';
4import { ensureDirSync } from 'fs-extra';
5import { shell } from 'electron';
6
7import { ALLOWED_PROTOCOLS } from '../config';
8
9const debug = require('debug')('Ferdi:Helpers:url');
10
11export function isValidExternalURL(url: string | URL) {
12 let parsedUrl: URL;
13 try {
14 parsedUrl = new URL(url.toString());
15 } catch (_) {
16 return false;
17 }
18
19 const isAllowed = ALLOWED_PROTOCOLS.includes(parsedUrl.protocol);
20
21 debug('protocol check is', isAllowed, 'for:', url);
22
23 return isAllowed;
24}
25
26export async function openPath(folderName: string) {
27 ensureDirSync(folderName);
28 shell.openPath(folderName);
29}
30
31// TODO: Need to verify and fix/remove the skipping logic. Ideally, we should never skip this check
32export function openExternalUrl(url: string | URL, skipValidityCheck: boolean = false) {
33 debug('Open url:', url, 'with skipValidityCheck:', skipValidityCheck);
34 if (skipValidityCheck || isValidExternalURL(url)) {
35 shell.openExternal(url.toString());
36 }
37}
diff --git a/src/helpers/userAgent-helpers.js b/src/helpers/userAgent-helpers.ts
index ede5e6dc4..73c8bfd03 100644
--- a/src/helpers/userAgent-helpers.js
+++ b/src/helpers/userAgent-helpers.ts
@@ -6,7 +6,7 @@ import {
6} from '../environment'; 6} from '../environment';
7 7
8function macOS() { 8function macOS() {
9 const version = macosVersion(); 9 const version = macosVersion() || '';
10 let cpuName = os.cpus()[0].model.split(' ')[0]; 10 let cpuName = os.cpus()[0].model.split(' ')[0];
11 if (cpuName && cpuName.match(/\(/)) { 11 if (cpuName && cpuName.match(/\(/)) {
12 cpuName = cpuName.split('(')[0]; 12 cpuName = cpuName.split('(')[0];
diff --git a/src/helpers/visibility-helper.js b/src/helpers/visibility-helper.js
deleted file mode 100644
index 8456c4ecf..000000000
--- a/src/helpers/visibility-helper.js
+++ /dev/null
@@ -1,27 +0,0 @@
1export function onVisibilityChange(cb) {
2 let isVisible = true;
3
4 if (!cb) {
5 throw new Error('no callback given');
6 }
7
8 function focused() {
9 if (!isVisible) {
10 cb(isVisible = true);
11 }
12 }
13
14 function unfocused() {
15 if (isVisible) {
16 cb(isVisible = false);
17 }
18 }
19
20 document.addEventListener('visibilitychange', () => { (document.hidden ? unfocused : focused)(); });
21
22 window.onpageshow = focused;
23 window.onfocus = focused;
24
25 window.onpagehid = unfocused;
26 window.onblur = unfocused;
27}
diff --git a/src/i18n/locales/af.json b/src/i18n/locales/af.json
index 3e185e73b..89060b506 100644
--- a/src/i18n/locales/af.json
+++ b/src/i18n/locales/af.json
@@ -26,13 +26,6 @@
26 "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.", 26 "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.",
27 "feature.quickSwitch.search": "Search...", 27 "feature.quickSwitch.search": "Search...",
28 "feature.quickSwitch.title": "QuickSwitch", 28 "feature.quickSwitch.title": "QuickSwitch",
29 "feature.shareFranz.action.email": "Send as email",
30 "feature.shareFranz.action.facebook": "Share on Facebook",
31 "feature.shareFranz.action.twitter": "Share on Twitter",
32 "feature.shareFranz.headline": "Ferdi is better together!",
33 "feature.shareFranz.shareText.email": "I've added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.getferdi.com",
34 "feature.shareFranz.shareText.twitter": "I've added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.getferdi.com /cc @FerdiMessenger",
35 "feature.shareFranz.text": "Tell your friends and colleagues how awesome Ferdi is and help us to spread the word.",
36 "global.api.unhealthy": "Can't connect to Ferdi online services", 29 "global.api.unhealthy": "Can't connect to Ferdi online services",
37 "global.notConnectedToTheInternet": "You are not connected to the internet.", 30 "global.notConnectedToTheInternet": "You are not connected to the internet.",
38 "global.spellchecker.useDefault": "Use System Default ({default})", 31 "global.spellchecker.useDefault": "Use System Default ({default})",
@@ -205,6 +198,8 @@
205 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", 198 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})",
206 "settings.app.buttonClearAllCache": "Clear cache", 199 "settings.app.buttonClearAllCache": "Clear cache",
207 "settings.app.buttonInstallUpdate": "Restart & install update", 200 "settings.app.buttonInstallUpdate": "Restart & install update",
201 "settings.app.buttonOpenFerdiProfileFolder": "Open Profile folder",
202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open Service Recipes folder",
208 "settings.app.buttonSearchForUpdate": "Check for updates", 203 "settings.app.buttonSearchForUpdate": "Check for updates",
209 "settings.app.cacheInfo": "Ferdi cache is currently using {size} of disk space.", 204 "settings.app.cacheInfo": "Ferdi cache is currently using {size} of disk space.",
210 "settings.app.cacheNotCleared": "Couldn't clear all cache", 205 "settings.app.cacheNotCleared": "Couldn't clear all cache",
@@ -275,6 +270,7 @@
275 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 270 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!",
276 "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.", 271 "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.",
277 "settings.app.subheadlineCache": "Cache", 272 "settings.app.subheadlineCache": "Cache",
273 "settings.app.subheadlineFerdiProfile": "Ferdi Profile",
278 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", 274 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.",
279 "settings.app.translationHelp": "Help us to translate Ferdi into your language.", 275 "settings.app.translationHelp": "Help us to translate Ferdi into your language.",
280 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.", 276 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.",
diff --git a/src/i18n/locales/ar.json b/src/i18n/locales/ar.json
index 1081ace02..e5caabd2b 100644
--- a/src/i18n/locales/ar.json
+++ b/src/i18n/locales/ar.json
@@ -26,13 +26,6 @@
26 "feature.quickSwitch.info": "حدد خدمة من خلال زر تاب، ↑ Ùˆ ↓. اÙتح الخدمة بالظغط على زر الدخول.", 26 "feature.quickSwitch.info": "حدد خدمة من خلال زر تاب، ↑ Ùˆ ↓. اÙتح الخدمة بالظغط على زر الدخول.",
27 "feature.quickSwitch.search": "بحث...", 27 "feature.quickSwitch.search": "بحث...",
28 "feature.quickSwitch.title": "تبديل سريع", 28 "feature.quickSwitch.title": "تبديل سريع",
29 "feature.shareFranz.action.email": "إرسال كبريد إلكتروني",
30 "feature.shareFranz.action.facebook": "شارك على Ùيسبوك",
31 "feature.shareFranz.action.twitter": "شارÙÙƒ على تويتر",
32 "feature.shareFranz.headline": "Ùردي Ø£Ùضل معًا!",
33 "feature.shareFranz.shareText.email": "لقد أضÙت {count} خدمات إلى Ùردي! احصل على التطبيق المجاني لـ WhatsAppØŒ Ùˆ MessengerØŒ Ùˆ SlackØŒ Ùˆ Skype Ùˆ co على www.getferdi.com",
34 "feature.shareFranz.shareText.twitter": "لقد أضÙت {count} خدمات إلى Ùردي! احصل على التطبيق المجاني لـ WhatsAppØŒ Messenger, Slack, Skype and co على www.getferdi.com /cc @FerdiMessenger",
35 "feature.shareFranz.text": "أخبر أصدقائك وزملاءك كي٠أن Ùردي رائع وساعدنا على نشر الكلمة.",
36 "global.api.unhealthy": "لا يمكن الإتصال بخدمات Ùردي عبر الإنترنت", 29 "global.api.unhealthy": "لا يمكن الإتصال بخدمات Ùردي عبر الإنترنت",
37 "global.notConnectedToTheInternet": "أنت غير متصل بالإنترنت.", 30 "global.notConnectedToTheInternet": "أنت غير متصل بالإنترنت.",
38 "global.spellchecker.useDefault": "إستخدم الإعدادت الاÙتراضية ({default})", 31 "global.spellchecker.useDefault": "إستخدم الإعدادت الاÙتراضية ({default})",
@@ -205,6 +198,8 @@
205 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", 198 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})",
206 "settings.app.buttonClearAllCache": "مسح ذاكرة التخزين المؤقت", 199 "settings.app.buttonClearAllCache": "مسح ذاكرة التخزين المؤقت",
207 "settings.app.buttonInstallUpdate": "إعادة التشغيل وتثبيت التحديث", 200 "settings.app.buttonInstallUpdate": "إعادة التشغيل وتثبيت التحديث",
201 "settings.app.buttonOpenFerdiProfileFolder": "Open Profile folder",
202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open Service Recipes folder",
208 "settings.app.buttonSearchForUpdate": "التحقق من وجود تحديثات", 203 "settings.app.buttonSearchForUpdate": "التحقق من وجود تحديثات",
209 "settings.app.cacheInfo": "التخزين المؤقت Ù„Ùردي يستخدم حاليا {size} من مساحة القرص.", 204 "settings.app.cacheInfo": "التخزين المؤقت Ù„Ùردي يستخدم حاليا {size} من مساحة القرص.",
210 "settings.app.cacheNotCleared": "تعذر مسح كل ذاكرة التخزين المؤقت", 205 "settings.app.cacheNotCleared": "تعذر مسح كل ذاكرة التخزين المؤقت",
@@ -275,6 +270,7 @@
275 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 270 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!",
276 "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.", 271 "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.",
277 "settings.app.subheadlineCache": "الذاكرة المؤقتة", 272 "settings.app.subheadlineCache": "الذاكرة المؤقتة",
273 "settings.app.subheadlineFerdiProfile": "Ferdi Profile",
278 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", 274 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.",
279 "settings.app.translationHelp": "ساعدنا على ترجمة Ùيردي إلى لغتك.", 275 "settings.app.translationHelp": "ساعدنا على ترجمة Ùيردي إلى لغتك.",
280 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.", 276 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.",
diff --git a/src/i18n/locales/be.json b/src/i18n/locales/be.json
index 8f1141c31..78b5f362e 100644
--- a/src/i18n/locales/be.json
+++ b/src/i18n/locales/be.json
@@ -26,13 +26,6 @@
26 "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.", 26 "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.",
27 "feature.quickSwitch.search": "Search...", 27 "feature.quickSwitch.search": "Search...",
28 "feature.quickSwitch.title": "QuickSwitch", 28 "feature.quickSwitch.title": "QuickSwitch",
29 "feature.shareFranz.action.email": "Send as email",
30 "feature.shareFranz.action.facebook": "Share on Facebook",
31 "feature.shareFranz.action.twitter": "Share on Twitter",
32 "feature.shareFranz.headline": "Ferdi is better together!",
33 "feature.shareFranz.shareText.email": "I've added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.getferdi.com",
34 "feature.shareFranz.shareText.twitter": "I've added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.getferdi.com /cc @FerdiMessenger",
35 "feature.shareFranz.text": "Tell your friends and colleagues how awesome Ferdi is and help us to spread the word.",
36 "global.api.unhealthy": "Can't connect to Ferdi online services", 29 "global.api.unhealthy": "Can't connect to Ferdi online services",
37 "global.notConnectedToTheInternet": "You are not connected to the internet.", 30 "global.notConnectedToTheInternet": "You are not connected to the internet.",
38 "global.spellchecker.useDefault": "Use System Default ({default})", 31 "global.spellchecker.useDefault": "Use System Default ({default})",
@@ -205,6 +198,8 @@
205 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", 198 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})",
206 "settings.app.buttonClearAllCache": "Clear cache", 199 "settings.app.buttonClearAllCache": "Clear cache",
207 "settings.app.buttonInstallUpdate": "Restart & install update", 200 "settings.app.buttonInstallUpdate": "Restart & install update",
201 "settings.app.buttonOpenFerdiProfileFolder": "Open Profile folder",
202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open Service Recipes folder",
208 "settings.app.buttonSearchForUpdate": "Check for updates", 203 "settings.app.buttonSearchForUpdate": "Check for updates",
209 "settings.app.cacheInfo": "Ferdi cache is currently using {size} of disk space.", 204 "settings.app.cacheInfo": "Ferdi cache is currently using {size} of disk space.",
210 "settings.app.cacheNotCleared": "Couldn't clear all cache", 205 "settings.app.cacheNotCleared": "Couldn't clear all cache",
@@ -275,6 +270,7 @@
275 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 270 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!",
276 "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.", 271 "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.",
277 "settings.app.subheadlineCache": "Cache", 272 "settings.app.subheadlineCache": "Cache",
273 "settings.app.subheadlineFerdiProfile": "Ferdi Profile",
278 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", 274 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.",
279 "settings.app.translationHelp": "Help us to translate Ferdi into your language.", 275 "settings.app.translationHelp": "Help us to translate Ferdi into your language.",
280 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.", 276 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.",
diff --git a/src/i18n/locales/bs.json b/src/i18n/locales/bs.json
index 3e185e73b..89060b506 100644
--- a/src/i18n/locales/bs.json
+++ b/src/i18n/locales/bs.json
@@ -26,13 +26,6 @@
26 "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.", 26 "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.",
27 "feature.quickSwitch.search": "Search...", 27 "feature.quickSwitch.search": "Search...",
28 "feature.quickSwitch.title": "QuickSwitch", 28 "feature.quickSwitch.title": "QuickSwitch",
29 "feature.shareFranz.action.email": "Send as email",
30 "feature.shareFranz.action.facebook": "Share on Facebook",
31 "feature.shareFranz.action.twitter": "Share on Twitter",
32 "feature.shareFranz.headline": "Ferdi is better together!",
33 "feature.shareFranz.shareText.email": "I've added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.getferdi.com",
34 "feature.shareFranz.shareText.twitter": "I've added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.getferdi.com /cc @FerdiMessenger",
35 "feature.shareFranz.text": "Tell your friends and colleagues how awesome Ferdi is and help us to spread the word.",
36 "global.api.unhealthy": "Can't connect to Ferdi online services", 29 "global.api.unhealthy": "Can't connect to Ferdi online services",
37 "global.notConnectedToTheInternet": "You are not connected to the internet.", 30 "global.notConnectedToTheInternet": "You are not connected to the internet.",
38 "global.spellchecker.useDefault": "Use System Default ({default})", 31 "global.spellchecker.useDefault": "Use System Default ({default})",
@@ -205,6 +198,8 @@
205 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", 198 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})",
206 "settings.app.buttonClearAllCache": "Clear cache", 199 "settings.app.buttonClearAllCache": "Clear cache",
207 "settings.app.buttonInstallUpdate": "Restart & install update", 200 "settings.app.buttonInstallUpdate": "Restart & install update",
201 "settings.app.buttonOpenFerdiProfileFolder": "Open Profile folder",
202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open Service Recipes folder",
208 "settings.app.buttonSearchForUpdate": "Check for updates", 203 "settings.app.buttonSearchForUpdate": "Check for updates",
209 "settings.app.cacheInfo": "Ferdi cache is currently using {size} of disk space.", 204 "settings.app.cacheInfo": "Ferdi cache is currently using {size} of disk space.",
210 "settings.app.cacheNotCleared": "Couldn't clear all cache", 205 "settings.app.cacheNotCleared": "Couldn't clear all cache",
@@ -275,6 +270,7 @@
275 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 270 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!",
276 "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.", 271 "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.",
277 "settings.app.subheadlineCache": "Cache", 272 "settings.app.subheadlineCache": "Cache",
273 "settings.app.subheadlineFerdiProfile": "Ferdi Profile",
278 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", 274 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.",
279 "settings.app.translationHelp": "Help us to translate Ferdi into your language.", 275 "settings.app.translationHelp": "Help us to translate Ferdi into your language.",
280 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.", 276 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.",
diff --git a/src/i18n/locales/ca.json b/src/i18n/locales/ca.json
index beb7f7f92..0d57b5b19 100644
--- a/src/i18n/locales/ca.json
+++ b/src/i18n/locales/ca.json
@@ -26,13 +26,6 @@
26 "feature.quickSwitch.info": "Seleccioneu un servei amb TAB, ↑ i ↓. Obriu un servei amb ENTER.", 26 "feature.quickSwitch.info": "Seleccioneu un servei amb TAB, ↑ i ↓. Obriu un servei amb ENTER.",
27 "feature.quickSwitch.search": "Cerca...", 27 "feature.quickSwitch.search": "Cerca...",
28 "feature.quickSwitch.title": "QuickSwitch", 28 "feature.quickSwitch.title": "QuickSwitch",
29 "feature.shareFranz.action.email": "Envia com a correu",
30 "feature.shareFranz.action.facebook": "Compartir en Facebook",
31 "feature.shareFranz.action.twitter": "Compartir a Twitter",
32 "feature.shareFranz.headline": "Junts millorem Ferdi!",
33 "feature.shareFranz.shareText.email": "He afegit {count} serveis a Ferdi! Obtén l'aplicació gratuïta per a Whatsapp, Messenger, Slack, Skype a www,getferdi.com",
34 "feature.shareFranz.shareText.twitter": "He afegit {count} serveis a Ferdi! Obtén l'aplicació gratuïta de Whatsapp, Messenger, Slack, Skype i altres a www.getferdi.com/cc @FerdiMessenger",
35 "feature.shareFranz.text": "Digues als teus amics i col·legues l'increïble que és Ferdi i ajuda'ns a còrrer la veu ",
36 "global.api.unhealthy": "No es pot connectar amb els serveis en línia de Ferdi", 29 "global.api.unhealthy": "No es pot connectar amb els serveis en línia de Ferdi",
37 "global.notConnectedToTheInternet": "No esteu connectat a Internet.", 30 "global.notConnectedToTheInternet": "No esteu connectat a Internet.",
38 "global.spellchecker.useDefault": "Utilitzar el predeterminat del sistema ({default})", 31 "global.spellchecker.useDefault": "Utilitzar el predeterminat del sistema ({default})",
@@ -205,6 +198,8 @@
205 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", 198 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})",
206 "settings.app.buttonClearAllCache": "Buida la memòria cau", 199 "settings.app.buttonClearAllCache": "Buida la memòria cau",
207 "settings.app.buttonInstallUpdate": "Reinicia i instal·la l'actualització", 200 "settings.app.buttonInstallUpdate": "Reinicia i instal·la l'actualització",
201 "settings.app.buttonOpenFerdiProfileFolder": "Open Profile folder",
202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open Service Recipes folder",
208 "settings.app.buttonSearchForUpdate": "Comprova si hi ha actualitzacions", 203 "settings.app.buttonSearchForUpdate": "Comprova si hi ha actualitzacions",
209 "settings.app.cacheInfo": "La memòria cau de Ferdi està utilitzant {size} d'espai al disc", 204 "settings.app.cacheInfo": "La memòria cau de Ferdi està utilitzant {size} d'espai al disc",
210 "settings.app.cacheNotCleared": "Couldn't clear all cache", 205 "settings.app.cacheNotCleared": "Couldn't clear all cache",
@@ -275,6 +270,7 @@
275 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 270 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!",
276 "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.", 271 "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.",
277 "settings.app.subheadlineCache": "Memòria cau", 272 "settings.app.subheadlineCache": "Memòria cau",
273 "settings.app.subheadlineFerdiProfile": "Ferdi Profile",
278 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", 274 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.",
279 "settings.app.translationHelp": "Ajuda'ns a traduir Ferdi en la teva llengua.", 275 "settings.app.translationHelp": "Ajuda'ns a traduir Ferdi en la teva llengua.",
280 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.", 276 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.",
diff --git a/src/i18n/locales/cs.json b/src/i18n/locales/cs.json
index 16c5322aa..be17c2b00 100644
--- a/src/i18n/locales/cs.json
+++ b/src/i18n/locales/cs.json
@@ -26,13 +26,6 @@
26 "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.", 26 "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.",
27 "feature.quickSwitch.search": "Search...", 27 "feature.quickSwitch.search": "Search...",
28 "feature.quickSwitch.title": "QuickSwitch", 28 "feature.quickSwitch.title": "QuickSwitch",
29 "feature.shareFranz.action.email": "Poslat jako e-mail",
30 "feature.shareFranz.action.facebook": "Sdílet na Facebooku",
31 "feature.shareFranz.action.twitter": "Sdílet na Twitteru",
32 "feature.shareFranz.headline": "SpoleÄnÄ› je Ferdi jeÅ¡tÄ› lepší!",
33 "feature.shareFranz.shareText.email": "Přidali jsme {count} služeb do Ferdie. Získejte zdarma aplikace pro WhatsApp, Messenger, SLack, Skype a další na www.getferdi.com",
34 "feature.shareFranz.shareText.twitter": "I've added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.getferdi.com /cc @FerdiMessenger",
35 "feature.shareFranz.text": "Tell your friends and colleagues how awesome Ferdi is and help us to spread the word.",
36 "global.api.unhealthy": "Nemůžeme připojit Ferdi k online službám", 29 "global.api.unhealthy": "Nemůžeme připojit Ferdi k online službám",
37 "global.notConnectedToTheInternet": "Připojení k internetu není k dispozici.", 30 "global.notConnectedToTheInternet": "Připojení k internetu není k dispozici.",
38 "global.spellchecker.useDefault": "Use System Default ({default})", 31 "global.spellchecker.useDefault": "Use System Default ({default})",
@@ -205,6 +198,8 @@
205 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", 198 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})",
206 "settings.app.buttonClearAllCache": "Vyprázdnit mezipaměti", 199 "settings.app.buttonClearAllCache": "Vyprázdnit mezipaměti",
207 "settings.app.buttonInstallUpdate": "Restartovat a nainstalovat aktualizace", 200 "settings.app.buttonInstallUpdate": "Restartovat a nainstalovat aktualizace",
201 "settings.app.buttonOpenFerdiProfileFolder": "Open Profile folder",
202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open Service Recipes folder",
208 "settings.app.buttonSearchForUpdate": "Zkontrolovat aktualizace", 203 "settings.app.buttonSearchForUpdate": "Zkontrolovat aktualizace",
209 "settings.app.cacheInfo": "Ferdi momentálně používá {size} místa na disku.", 204 "settings.app.cacheInfo": "Ferdi momentálně používá {size} místa na disku.",
210 "settings.app.cacheNotCleared": "Couldn't clear all cache", 205 "settings.app.cacheNotCleared": "Couldn't clear all cache",
@@ -275,6 +270,7 @@
275 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 270 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!",
276 "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.", 271 "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.",
277 "settings.app.subheadlineCache": "Mezipaměť", 272 "settings.app.subheadlineCache": "Mezipaměť",
273 "settings.app.subheadlineFerdiProfile": "Ferdi Profile",
278 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", 274 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.",
279 "settings.app.translationHelp": "Pomozte nám přeložit Ferdi do svého jazyka.", 275 "settings.app.translationHelp": "Pomozte nám přeložit Ferdi do svého jazyka.",
280 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.", 276 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.",
diff --git a/src/i18n/locales/da.json b/src/i18n/locales/da.json
index 7ea135cb2..596e6400e 100644
--- a/src/i18n/locales/da.json
+++ b/src/i18n/locales/da.json
@@ -26,13 +26,6 @@
26 "feature.quickSwitch.info": "Vælg en tjeneste med TAB, ↑ og ↓. Åbn en tjeneste med ENTER.", 26 "feature.quickSwitch.info": "Vælg en tjeneste med TAB, ↑ og ↓. Åbn en tjeneste med ENTER.",
27 "feature.quickSwitch.search": "Søg...", 27 "feature.quickSwitch.search": "Søg...",
28 "feature.quickSwitch.title": "Hurtigskift", 28 "feature.quickSwitch.title": "Hurtigskift",
29 "feature.shareFranz.action.email": "Send som mail",
30 "feature.shareFranz.action.facebook": "Del på Facebook",
31 "feature.shareFranz.action.twitter": "Del på Twitter",
32 "feature.shareFranz.headline": "Ferdi er bedre sammen!",
33 "feature.shareFranz.shareText.email": "Jeg har tilføjet {count} tjenester til Ferdi! Få den gratis app til WhatsApp, Messenger, Slack, Skype osv. på www.getferdi.com",
34 "feature.shareFranz.shareText.twitter": "Jeg har tilføjet {count} tjenester til Ferdi! Få den gratis app til WhatsApp, Messenger, Slack, Skype osv. på www.getferdi.com /cc @FerdiMessenger",
35 "feature.shareFranz.text": "Fortæl dine venner og kolleger, hvor fedt et program Ferdi er, og hjælp os med at sprede ordet.",
36 "global.api.unhealthy": "Kan ikke oprette forbindelse til Ferdi onlinetjenester", 29 "global.api.unhealthy": "Kan ikke oprette forbindelse til Ferdi onlinetjenester",
37 "global.notConnectedToTheInternet": "Du har ikke forbindelse til internettet.", 30 "global.notConnectedToTheInternet": "Du har ikke forbindelse til internettet.",
38 "global.spellchecker.useDefault": "Benyt systemstandard ({default})", 31 "global.spellchecker.useDefault": "Benyt systemstandard ({default})",
@@ -205,6 +198,8 @@
205 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", 198 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})",
206 "settings.app.buttonClearAllCache": "Ryd cache", 199 "settings.app.buttonClearAllCache": "Ryd cache",
207 "settings.app.buttonInstallUpdate": "Genstart og installer opdatering", 200 "settings.app.buttonInstallUpdate": "Genstart og installer opdatering",
201 "settings.app.buttonOpenFerdiProfileFolder": "Open Profile folder",
202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open Service Recipes folder",
208 "settings.app.buttonSearchForUpdate": "Søg efter opdateringer", 203 "settings.app.buttonSearchForUpdate": "Søg efter opdateringer",
209 "settings.app.cacheInfo": "Ferdi's cache bruger i øjeblikket {size} diskplads.", 204 "settings.app.cacheInfo": "Ferdi's cache bruger i øjeblikket {size} diskplads.",
210 "settings.app.cacheNotCleared": "Kunne ikke rydde al cache", 205 "settings.app.cacheNotCleared": "Kunne ikke rydde al cache",
@@ -275,6 +270,7 @@
275 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 270 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!",
276 "settings.app.spellCheckerLanguageInfo": "Ferdi bruger din Macs indbyggede stavekontrol. Hvis du ønsker at ændre de sprog, stavekontrollen kontrollerer for, kan du gøre det i din Macs systemindstillinger.", 271 "settings.app.spellCheckerLanguageInfo": "Ferdi bruger din Macs indbyggede stavekontrol. Hvis du ønsker at ændre de sprog, stavekontrollen kontrollerer for, kan du gøre det i din Macs systemindstillinger.",
277 "settings.app.subheadlineCache": "Cache", 272 "settings.app.subheadlineCache": "Cache",
273 "settings.app.subheadlineFerdiProfile": "Ferdi Profile",
278 "settings.app.todoServerInfo": "Denne server vil blive brugt til funktionen \"Ferdi Todo\".", 274 "settings.app.todoServerInfo": "Denne server vil blive brugt til funktionen \"Ferdi Todo\".",
279 "settings.app.translationHelp": "Hjælp os med at oversætte Ferdi til dit sprog.", 275 "settings.app.translationHelp": "Hjælp os med at oversætte Ferdi til dit sprog.",
280 "settings.app.universalDarkModeInfo": "Universel mørk tilstand forsøger at dynamisk generere mørk tilstand stilarter for tjenester, der ellers ikke er understøttet.", 276 "settings.app.universalDarkModeInfo": "Universel mørk tilstand forsøger at dynamisk generere mørk tilstand stilarter for tjenester, der ellers ikke er understøttet.",
diff --git a/src/i18n/locales/de.json b/src/i18n/locales/de.json
index eef9aa21a..20f55e851 100644
--- a/src/i18n/locales/de.json
+++ b/src/i18n/locales/de.json
@@ -26,13 +26,6 @@
26 "feature.quickSwitch.info": "Wähle einen Service mit TAB, ↑ und ↓. Um einen Service zu öffnen, drücke ENTER.", 26 "feature.quickSwitch.info": "Wähle einen Service mit TAB, ↑ und ↓. Um einen Service zu öffnen, drücke ENTER.",
27 "feature.quickSwitch.search": "Suchen...", 27 "feature.quickSwitch.search": "Suchen...",
28 "feature.quickSwitch.title": "Schnellauswahl", 28 "feature.quickSwitch.title": "Schnellauswahl",
29 "feature.shareFranz.action.email": "Als E-Mail senden",
30 "feature.shareFranz.action.facebook": "Auf Facebook teilen",
31 "feature.shareFranz.action.twitter": "Auf Twitter teilen",
32 "feature.shareFranz.headline": "Gemeinsam ist Ferdi noch besser!",
33 "feature.shareFranz.shareText.email": "Ich habe {count} Services zu Ferdi hinzugefügt! Hol dir jetzt die kostenlose App für WhatsApp, Messenger, Slack, Skype und viele mehr auf www.getferdi.com",
34 "feature.shareFranz.shareText.twitter": "Ich habe {count} Services zu Ferdi hinzugefügt! Hol dir die kostenlose App für WhatsApp, Messenger, Slack, Skype und viele mehr auf www.getferdi.com /cc @FerdiMessenger",
35 "feature.shareFranz.text": "Bitte erzähle deinen Freunden und Kolleginnen, warum du Ferdi toll findest.",
36 "global.api.unhealthy": "Verbindung zu den Ferdi Online Services fehlgeschlagen", 29 "global.api.unhealthy": "Verbindung zu den Ferdi Online Services fehlgeschlagen",
37 "global.notConnectedToTheInternet": "Du bist nicht mit dem Internet verbunden.", 30 "global.notConnectedToTheInternet": "Du bist nicht mit dem Internet verbunden.",
38 "global.spellchecker.useDefault": "Standard benutzen ({default})", 31 "global.spellchecker.useDefault": "Standard benutzen ({default})",
@@ -205,6 +198,8 @@
205 "settings.app.accentColorInfo": "Schreibe deine Akzentfarbe in einem CSS-kompatiblen Format. (Standard: {defaultAccentColor})", 198 "settings.app.accentColorInfo": "Schreibe deine Akzentfarbe in einem CSS-kompatiblen Format. (Standard: {defaultAccentColor})",
206 "settings.app.buttonClearAllCache": "Cache leeren", 199 "settings.app.buttonClearAllCache": "Cache leeren",
207 "settings.app.buttonInstallUpdate": "Neu starten & Update installieren", 200 "settings.app.buttonInstallUpdate": "Neu starten & Update installieren",
201 "settings.app.buttonOpenFerdiProfileFolder": "Open Profile folder",
202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open Service Recipes folder",
208 "settings.app.buttonSearchForUpdate": "Nach Updates suchen", 203 "settings.app.buttonSearchForUpdate": "Nach Updates suchen",
209 "settings.app.cacheInfo": "Der Ferdi Cache belegt derzeit {size}.", 204 "settings.app.cacheInfo": "Der Ferdi Cache belegt derzeit {size}.",
210 "settings.app.cacheNotCleared": "Konnte nicht den ganzen Zwischenspeicher löschen", 205 "settings.app.cacheNotCleared": "Konnte nicht den ganzen Zwischenspeicher löschen",
@@ -275,6 +270,7 @@
275 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 270 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!",
276 "settings.app.spellCheckerLanguageInfo": "Ferdi verwendet den eingebauten Rechtschreibprüfer deines Macs, um nach Tippfehlern zu suchen. Wenn du die zu überprüfenden Sprachen ändern möchtest, kannst du das in deinen Systemeinstellungen tun.", 271 "settings.app.spellCheckerLanguageInfo": "Ferdi verwendet den eingebauten Rechtschreibprüfer deines Macs, um nach Tippfehlern zu suchen. Wenn du die zu überprüfenden Sprachen ändern möchtest, kannst du das in deinen Systemeinstellungen tun.",
277 "settings.app.subheadlineCache": "Cache", 272 "settings.app.subheadlineCache": "Cache",
273 "settings.app.subheadlineFerdiProfile": "Ferdi Profile",
278 "settings.app.todoServerInfo": "Dieser Server wird für die \"Ferdi Todo\"-Funktion verwendet.", 274 "settings.app.todoServerInfo": "Dieser Server wird für die \"Ferdi Todo\"-Funktion verwendet.",
279 "settings.app.translationHelp": "Hilf uns, Ferdi in Deine Sprache zu übersetzen.", 275 "settings.app.translationHelp": "Hilf uns, Ferdi in Deine Sprache zu übersetzen.",
280 "settings.app.universalDarkModeInfo": "Universeller Dark Mode versucht dynamisch Dienste abzudunkeln, die vom normalen Dark Mode noch nicht unterstützt werden.", 276 "settings.app.universalDarkModeInfo": "Universeller Dark Mode versucht dynamisch Dienste abzudunkeln, die vom normalen Dark Mode noch nicht unterstützt werden.",
diff --git a/src/i18n/locales/defaultMessages.json b/src/i18n/locales/defaultMessages.json
index 683ec4628..418bf6bea 100644
--- a/src/i18n/locales/defaultMessages.json
+++ b/src/i18n/locales/defaultMessages.json
@@ -1035,52 +1035,52 @@
1035 "defaultMessage": "!!!Your services have been updated.", 1035 "defaultMessage": "!!!Your services have been updated.",
1036 "end": { 1036 "end": {
1037 "column": 3, 1037 "column": 3,
1038 "line": 32 1038 "line": 31
1039 }, 1039 },
1040 "file": "src/components/layout/AppLayout.js", 1040 "file": "src/components/layout/AppLayout.js",
1041 "id": "infobar.servicesUpdated", 1041 "id": "infobar.servicesUpdated",
1042 "start": { 1042 "start": {
1043 "column": 19, 1043 "column": 19,
1044 "line": 29 1044 "line": 28
1045 } 1045 }
1046 }, 1046 },
1047 { 1047 {
1048 "defaultMessage": "!!!Reload services", 1048 "defaultMessage": "!!!Reload services",
1049 "end": { 1049 "end": {
1050 "column": 3, 1050 "column": 3,
1051 "line": 36 1051 "line": 35
1052 }, 1052 },
1053 "file": "src/components/layout/AppLayout.js", 1053 "file": "src/components/layout/AppLayout.js",
1054 "id": "infobar.buttonReloadServices", 1054 "id": "infobar.buttonReloadServices",
1055 "start": { 1055 "start": {
1056 "column": 24, 1056 "column": 24,
1057 "line": 33 1057 "line": 32
1058 } 1058 }
1059 }, 1059 },
1060 { 1060 {
1061 "defaultMessage": "!!!Could not load services and user information", 1061 "defaultMessage": "!!!Could not load services and user information",
1062 "end": { 1062 "end": {
1063 "column": 3, 1063 "column": 3,
1064 "line": 40 1064 "line": 39
1065 }, 1065 },
1066 "file": "src/components/layout/AppLayout.js", 1066 "file": "src/components/layout/AppLayout.js",
1067 "id": "infobar.requiredRequestsFailed", 1067 "id": "infobar.requiredRequestsFailed",
1068 "start": { 1068 "start": {
1069 "column": 26, 1069 "column": 26,
1070 "line": 37 1070 "line": 36
1071 } 1071 }
1072 }, 1072 },
1073 { 1073 {
1074 "defaultMessage": "!!!There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.", 1074 "defaultMessage": "!!!There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.",
1075 "end": { 1075 "end": {
1076 "column": 3, 1076 "column": 3,
1077 "line": 45 1077 "line": 44
1078 }, 1078 },
1079 "file": "src/components/layout/AppLayout.js", 1079 "file": "src/components/layout/AppLayout.js",
1080 "id": "infobar.authRequestFailed", 1080 "id": "infobar.authRequestFailed",
1081 "start": { 1081 "start": {
1082 "column": 21, 1082 "column": 21,
1083 "line": 41 1083 "line": 40
1084 } 1084 }
1085 } 1085 }
1086 ], 1086 ],
@@ -2893,416 +2893,455 @@
2893 "defaultMessage": "!!!Settings", 2893 "defaultMessage": "!!!Settings",
2894 "end": { 2894 "end": {
2895 "column": 3, 2895 "column": 3,
2896 "line": 26 2896 "line": 24
2897 }, 2897 },
2898 "file": "src/components/settings/settings/EditSettingsForm.js", 2898 "file": "src/components/settings/settings/EditSettingsForm.js",
2899 "id": "settings.app.headline", 2899 "id": "settings.app.headline",
2900 "start": { 2900 "start": {
2901 "column": 12, 2901 "column": 12,
2902 "line": 23 2902 "line": 21
2903 } 2903 }
2904 }, 2904 },
2905 { 2905 {
2906 "defaultMessage": "!!!General", 2906 "defaultMessage": "!!!General",
2907 "end": { 2907 "end": {
2908 "column": 3, 2908 "column": 3,
2909 "line": 30 2909 "line": 28
2910 }, 2910 },
2911 "file": "src/components/settings/settings/EditSettingsForm.js", 2911 "file": "src/components/settings/settings/EditSettingsForm.js",
2912 "id": "settings.app.headlineGeneral", 2912 "id": "settings.app.headlineGeneral",
2913 "start": { 2913 "start": {
2914 "column": 19, 2914 "column": 19,
2915 "line": 27 2915 "line": 25
2916 } 2916 }
2917 }, 2917 },
2918 { 2918 {
2919 "defaultMessage": "!!!Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 2919 "defaultMessage": "!!!Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!",
2920 "end": { 2920 "end": {
2921 "column": 3, 2921 "column": 3,
2922 "line": 34 2922 "line": 32
2923 }, 2923 },
2924 "file": "src/components/settings/settings/EditSettingsForm.js", 2924 "file": "src/components/settings/settings/EditSettingsForm.js",
2925 "id": "settings.app.sentryInfo", 2925 "id": "settings.app.sentryInfo",
2926 "start": { 2926 "start": {
2927 "column": 14, 2927 "column": 14,
2928 "line": 31 2928 "line": 29
2929 } 2929 }
2930 }, 2930 },
2931 { 2931 {
2932 "defaultMessage": "!!!By default, Ferdi will keep all your services open and loaded in the background so they are ready when you want to use them. Service Hibernation will unload your services after a specified amount. This is useful to save RAM or keeping services from slowing down your computer.", 2932 "defaultMessage": "!!!By default, Ferdi will keep all your services open and loaded in the background so they are ready when you want to use them. Service Hibernation will unload your services after a specified amount. This is useful to save RAM or keeping services from slowing down your computer.",
2933 "end": { 2933 "end": {
2934 "column": 3, 2934 "column": 3,
2935 "line": 38 2935 "line": 36
2936 }, 2936 },
2937 "file": "src/components/settings/settings/EditSettingsForm.js", 2937 "file": "src/components/settings/settings/EditSettingsForm.js",
2938 "id": "settings.app.hibernateInfo", 2938 "id": "settings.app.hibernateInfo",
2939 "start": { 2939 "start": {
2940 "column": 17, 2940 "column": 17,
2941 "line": 35 2941 "line": 33
2942 } 2942 }
2943 }, 2943 },
2944 { 2944 {
2945 "defaultMessage": "!!!Minutes of inactivity, after which Ferdi should automatically lock. Use 0 to disable", 2945 "defaultMessage": "!!!Minutes of inactivity, after which Ferdi should automatically lock. Use 0 to disable",
2946 "end": { 2946 "end": {
2947 "column": 3, 2947 "column": 3,
2948 "line": 42 2948 "line": 40
2949 }, 2949 },
2950 "file": "src/components/settings/settings/EditSettingsForm.js", 2950 "file": "src/components/settings/settings/EditSettingsForm.js",
2951 "id": "settings.app.inactivityLockInfo", 2951 "id": "settings.app.inactivityLockInfo",
2952 "start": { 2952 "start": {
2953 "column": 22, 2953 "column": 22,
2954 "line": 39 2954 "line": 37
2955 } 2955 }
2956 }, 2956 },
2957 { 2957 {
2958 "defaultMessage": "!!!This server will be used for the \"Franz Todo\" feature. (default: https://app.franztodos.com)", 2958 "defaultMessage": "!!!This server will be used for the \"Franz Todo\" feature. (default: https://app.franztodos.com)",
2959 "end": { 2959 "end": {
2960 "column": 3, 2960 "column": 3,
2961 "line": 46 2961 "line": 44
2962 }, 2962 },
2963 "file": "src/components/settings/settings/EditSettingsForm.js", 2963 "file": "src/components/settings/settings/EditSettingsForm.js",
2964 "id": "settings.app.todoServerInfo", 2964 "id": "settings.app.todoServerInfo",
2965 "start": { 2965 "start": {
2966 "column": 18, 2966 "column": 18,
2967 "line": 43 2967 "line": 41
2968 } 2968 }
2969 }, 2969 },
2970 { 2970 {
2971 "defaultMessage": "!!!Password", 2971 "defaultMessage": "!!!Password",
2972 "end": { 2972 "end": {
2973 "column": 3, 2973 "column": 3,
2974 "line": 50 2974 "line": 48
2975 }, 2975 },
2976 "file": "src/components/settings/settings/EditSettingsForm.js", 2976 "file": "src/components/settings/settings/EditSettingsForm.js",
2977 "id": "settings.app.lockedPassword", 2977 "id": "settings.app.lockedPassword",
2978 "start": { 2978 "start": {
2979 "column": 18, 2979 "column": 18,
2980 "line": 47 2980 "line": 45
2981 } 2981 }
2982 }, 2982 },
2983 { 2983 {
2984 "defaultMessage": "!!!Please make sure to set a password you'll remember.\nIf you loose this password, you will have to reinstall Ferdi.", 2984 "defaultMessage": "!!!Please make sure to set a password you'll remember.\nIf you loose this password, you will have to reinstall Ferdi.",
2985 "end": { 2985 "end": {
2986 "column": 3, 2986 "column": 3,
2987 "line": 54 2987 "line": 52
2988 }, 2988 },
2989 "file": "src/components/settings/settings/EditSettingsForm.js", 2989 "file": "src/components/settings/settings/EditSettingsForm.js",
2990 "id": "settings.app.lockedPasswordInfo", 2990 "id": "settings.app.lockedPasswordInfo",
2991 "start": { 2991 "start": {
2992 "column": 22, 2992 "column": 22,
2993 "line": 51 2993 "line": 49
2994 } 2994 }
2995 }, 2995 },
2996 { 2996 {
2997 "defaultMessage": "!!!Password Lock allows you to keep your messages protected.\nUsing Password Lock, you will be prompted to enter your password everytime you start Ferdi or lock Ferdi yourself using the lock symbol in the bottom left corner or the shortcut {lockShortcut}.", 2997 "defaultMessage": "!!!Password Lock allows you to keep your messages protected.\nUsing Password Lock, you will be prompted to enter your password everytime you start Ferdi or lock Ferdi yourself using the lock symbol in the bottom left corner or the shortcut {lockShortcut}.",
2998 "end": { 2998 "end": {
2999 "column": 3, 2999 "column": 3,
3000 "line": 58 3000 "line": 56
3001 }, 3001 },
3002 "file": "src/components/settings/settings/EditSettingsForm.js", 3002 "file": "src/components/settings/settings/EditSettingsForm.js",
3003 "id": "settings.app.lockInfo", 3003 "id": "settings.app.lockInfo",
3004 "start": { 3004 "start": {
3005 "column": 12, 3005 "column": 12,
3006 "line": 55 3006 "line": 53
3007 } 3007 }
3008 }, 3008 },
3009 { 3009 {
3010 "defaultMessage": "!!!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.", 3010 "defaultMessage": "!!!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.",
3011 "end": { 3011 "end": {
3012 "column": 3, 3012 "column": 3,
3013 "line": 62 3013 "line": 60
3014 }, 3014 },
3015 "file": "src/components/settings/settings/EditSettingsForm.js", 3015 "file": "src/components/settings/settings/EditSettingsForm.js",
3016 "id": "settings.app.scheduledDNDTimeInfo", 3016 "id": "settings.app.scheduledDNDTimeInfo",
3017 "start": { 3017 "start": {
3018 "column": 24, 3018 "column": 24,
3019 "line": 59 3019 "line": 57
3020 } 3020 }
3021 }, 3021 },
3022 { 3022 {
3023 "defaultMessage": "!!!Scheduled Do-not-Disturb allows you to define a period of time in which you do not want to get Notifications from Ferdi.", 3023 "defaultMessage": "!!!Scheduled Do-not-Disturb allows you to define a period of time in which you do not want to get Notifications from Ferdi.",
3024 "end": { 3024 "end": {
3025 "column": 3, 3025 "column": 3,
3026 "line": 66 3026 "line": 64
3027 }, 3027 },
3028 "file": "src/components/settings/settings/EditSettingsForm.js", 3028 "file": "src/components/settings/settings/EditSettingsForm.js",
3029 "id": "settings.app.scheduledDNDInfo", 3029 "id": "settings.app.scheduledDNDInfo",
3030 "start": { 3030 "start": {
3031 "column": 20, 3031 "column": 20,
3032 "line": 63 3032 "line": 61
3033 } 3033 }
3034 }, 3034 },
3035 { 3035 {
3036 "defaultMessage": "!!!Language", 3036 "defaultMessage": "!!!Language",
3037 "end": { 3037 "end": {
3038 "column": 3, 3038 "column": 3,
3039 "line": 70 3039 "line": 68
3040 }, 3040 },
3041 "file": "src/components/settings/settings/EditSettingsForm.js", 3041 "file": "src/components/settings/settings/EditSettingsForm.js",
3042 "id": "settings.app.headlineLanguage", 3042 "id": "settings.app.headlineLanguage",
3043 "start": { 3043 "start": {
3044 "column": 20, 3044 "column": 20,
3045 "line": 67 3045 "line": 65
3046 } 3046 }
3047 }, 3047 },
3048 { 3048 {
3049 "defaultMessage": "!!!Updates", 3049 "defaultMessage": "!!!Updates",
3050 "end": { 3050 "end": {
3051 "column": 3, 3051 "column": 3,
3052 "line": 74 3052 "line": 72
3053 }, 3053 },
3054 "file": "src/components/settings/settings/EditSettingsForm.js", 3054 "file": "src/components/settings/settings/EditSettingsForm.js",
3055 "id": "settings.app.headlineUpdates", 3055 "id": "settings.app.headlineUpdates",
3056 "start": { 3056 "start": {
3057 "column": 19, 3057 "column": 19,
3058 "line": 71 3058 "line": 69
3059 } 3059 }
3060 }, 3060 },
3061 { 3061 {
3062 "defaultMessage": "!!!Appearance", 3062 "defaultMessage": "!!!Appearance",
3063 "end": { 3063 "end": {
3064 "column": 3, 3064 "column": 3,
3065 "line": 78 3065 "line": 76
3066 }, 3066 },
3067 "file": "src/components/settings/settings/EditSettingsForm.js", 3067 "file": "src/components/settings/settings/EditSettingsForm.js",
3068 "id": "settings.app.headlineAppearance", 3068 "id": "settings.app.headlineAppearance",
3069 "start": { 3069 "start": {
3070 "column": 22, 3070 "column": 22,
3071 "line": 75 3071 "line": 73
3072 } 3072 }
3073 }, 3073 },
3074 { 3074 {
3075 "defaultMessage": "!!!Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.", 3075 "defaultMessage": "!!!Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.",
3076 "end": { 3076 "end": {
3077 "column": 3, 3077 "column": 3,
3078 "line": 82 3078 "line": 80
3079 }, 3079 },
3080 "file": "src/components/settings/settings/EditSettingsForm.js", 3080 "file": "src/components/settings/settings/EditSettingsForm.js",
3081 "id": "settings.app.universalDarkModeInfo", 3081 "id": "settings.app.universalDarkModeInfo",
3082 "start": { 3082 "start": {
3083 "column": 25, 3083 "column": 25,
3084 "line": 79 3084 "line": 77
3085 } 3085 }
3086 }, 3086 },
3087 { 3087 {
3088 "defaultMessage": "!!!Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", 3088 "defaultMessage": "!!!Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})",
3089 "end": { 3089 "end": {
3090 "column": 3, 3090 "column": 3,
3091 "line": 86 3091 "line": 84
3092 }, 3092 },
3093 "file": "src/components/settings/settings/EditSettingsForm.js", 3093 "file": "src/components/settings/settings/EditSettingsForm.js",
3094 "id": "settings.app.accentColorInfo", 3094 "id": "settings.app.accentColorInfo",
3095 "start": { 3095 "start": {
3096 "column": 19, 3096 "column": 19,
3097 "line": 83 3097 "line": 81
3098 } 3098 }
3099 }, 3099 },
3100 { 3100 {
3101 "defaultMessage": "!!!Privacy", 3101 "defaultMessage": "!!!Privacy",
3102 "end": { 3102 "end": {
3103 "column": 3, 3103 "column": 3,
3104 "line": 90 3104 "line": 88
3105 }, 3105 },
3106 "file": "src/components/settings/settings/EditSettingsForm.js", 3106 "file": "src/components/settings/settings/EditSettingsForm.js",
3107 "id": "settings.app.headlinePrivacy", 3107 "id": "settings.app.headlinePrivacy",
3108 "start": { 3108 "start": {
3109 "column": 19, 3109 "column": 19,
3110 "line": 87 3110 "line": 85
3111 } 3111 }
3112 }, 3112 },
3113 { 3113 {
3114 "defaultMessage": "!!!Advanced", 3114 "defaultMessage": "!!!Advanced",
3115 "end": { 3115 "end": {
3116 "column": 3, 3116 "column": 3,
3117 "line": 94 3117 "line": 92
3118 }, 3118 },
3119 "file": "src/components/settings/settings/EditSettingsForm.js", 3119 "file": "src/components/settings/settings/EditSettingsForm.js",
3120 "id": "settings.app.headlineAdvanced", 3120 "id": "settings.app.headlineAdvanced",
3121 "start": { 3121 "start": {
3122 "column": 20, 3122 "column": 20,
3123 "line": 91 3123 "line": 89
3124 } 3124 }
3125 }, 3125 },
3126 { 3126 {
3127 "defaultMessage": "!!!Help us to translate Ferdi into your language.", 3127 "defaultMessage": "!!!Help us to translate Ferdi into your language.",
3128 "end": { 3128 "end": {
3129 "column": 3, 3129 "column": 3,
3130 "line": 98 3130 "line": 96
3131 }, 3131 },
3132 "file": "src/components/settings/settings/EditSettingsForm.js", 3132 "file": "src/components/settings/settings/EditSettingsForm.js",
3133 "id": "settings.app.translationHelp", 3133 "id": "settings.app.translationHelp",
3134 "start": { 3134 "start": {
3135 "column": 19, 3135 "column": 19,
3136 "line": 95 3136 "line": 93
3137 } 3137 }
3138 }, 3138 },
3139 { 3139 {
3140 "defaultMessage": "!!!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.", 3140 "defaultMessage": "!!!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.",
3141 "end": { 3141 "end": {
3142 "column": 3, 3142 "column": 3,
3143 "line": 102 3143 "line": 100
3144 }, 3144 },
3145 "file": "src/components/settings/settings/EditSettingsForm.js", 3145 "file": "src/components/settings/settings/EditSettingsForm.js",
3146 "id": "settings.app.spellCheckerLanguageInfo", 3146 "id": "settings.app.spellCheckerLanguageInfo",
3147 "start": { 3147 "start": {
3148 "column": 28, 3148 "column": 28,
3149 "line": 99 3149 "line": 97
3150 } 3150 }
3151 }, 3151 },
3152 { 3152 {
3153 "defaultMessage": "!!!Cache", 3153 "defaultMessage": "!!!Cache",
3154 "end": { 3154 "end": {
3155 "column": 3, 3155 "column": 3,
3156 "line": 106 3156 "line": 104
3157 }, 3157 },
3158 "file": "src/components/settings/settings/EditSettingsForm.js", 3158 "file": "src/components/settings/settings/EditSettingsForm.js",
3159 "id": "settings.app.subheadlineCache", 3159 "id": "settings.app.subheadlineCache",
3160 "start": { 3160 "start": {
3161 "column": 20, 3161 "column": 20,
3162 "line": 103 3162 "line": 101
3163 } 3163 }
3164 }, 3164 },
3165 { 3165 {
3166 "defaultMessage": "!!!Ferdi cache is currently using {size} of disk space.", 3166 "defaultMessage": "!!!Ferdi cache is currently using {size} of disk space.",
3167 "end": { 3167 "end": {
3168 "column": 3, 3168 "column": 3,
3169 "line": 110 3169 "line": 108
3170 }, 3170 },
3171 "file": "src/components/settings/settings/EditSettingsForm.js", 3171 "file": "src/components/settings/settings/EditSettingsForm.js",
3172 "id": "settings.app.cacheInfo", 3172 "id": "settings.app.cacheInfo",
3173 "start": { 3173 "start": {
3174 "column": 13, 3174 "column": 13,
3175 "line": 107 3175 "line": 105
3176 } 3176 }
3177 }, 3177 },
3178 { 3178 {
3179 "defaultMessage": "!!!Couldn't clear all cache", 3179 "defaultMessage": "!!!Couldn't clear all cache",
3180 "end": { 3180 "end": {
3181 "column": 3, 3181 "column": 3,
3182 "line": 114 3182 "line": 112
3183 }, 3183 },
3184 "file": "src/components/settings/settings/EditSettingsForm.js", 3184 "file": "src/components/settings/settings/EditSettingsForm.js",
3185 "id": "settings.app.cacheNotCleared", 3185 "id": "settings.app.cacheNotCleared",
3186 "start": { 3186 "start": {
3187 "column": 19, 3187 "column": 19,
3188 "line": 111 3188 "line": 109
3189 } 3189 }
3190 }, 3190 },
3191 { 3191 {
3192 "defaultMessage": "!!!Clear cache", 3192 "defaultMessage": "!!!Clear cache",
3193 "end": { 3193 "end": {
3194 "column": 3, 3194 "column": 3,
3195 "line": 118 3195 "line": 116
3196 }, 3196 },
3197 "file": "src/components/settings/settings/EditSettingsForm.js", 3197 "file": "src/components/settings/settings/EditSettingsForm.js",
3198 "id": "settings.app.buttonClearAllCache", 3198 "id": "settings.app.buttonClearAllCache",
3199 "start": { 3199 "start": {
3200 "column": 23, 3200 "column": 23,
3201 "line": 115 3201 "line": 113
3202 }
3203 },
3204 {
3205 "defaultMessage": "!!!Ferdi Profile",
3206 "end": {
3207 "column": 3,
3208 "line": 120
3209 },
3210 "file": "src/components/settings/settings/EditSettingsForm.js",
3211 "id": "settings.app.subheadlineFerdiProfile",
3212 "start": {
3213 "column": 27,
3214 "line": 117
3215 }
3216 },
3217 {
3218 "defaultMessage": "!!!Open Profile folder",
3219 "end": {
3220 "column": 3,
3221 "line": 124
3222 },
3223 "file": "src/components/settings/settings/EditSettingsForm.js",
3224 "id": "settings.app.buttonOpenFerdiProfileFolder",
3225 "start": {
3226 "column": 32,
3227 "line": 121
3228 }
3229 },
3230 {
3231 "defaultMessage": "!!!Open Service Recipes folder",
3232 "end": {
3233 "column": 3,
3234 "line": 128
3235 },
3236 "file": "src/components/settings/settings/EditSettingsForm.js",
3237 "id": "settings.app.buttonOpenFerdiServiceRecipesFolder",
3238 "start": {
3239 "column": 39,
3240 "line": 125
3202 } 3241 }
3203 }, 3242 },
3204 { 3243 {
3205 "defaultMessage": "!!!Check for updates", 3244 "defaultMessage": "!!!Check for updates",
3206 "end": { 3245 "end": {
3207 "column": 3, 3246 "column": 3,
3208 "line": 122 3247 "line": 132
3209 }, 3248 },
3210 "file": "src/components/settings/settings/EditSettingsForm.js", 3249 "file": "src/components/settings/settings/EditSettingsForm.js",
3211 "id": "settings.app.buttonSearchForUpdate", 3250 "id": "settings.app.buttonSearchForUpdate",
3212 "start": { 3251 "start": {
3213 "column": 25, 3252 "column": 25,
3214 "line": 119 3253 "line": 129
3215 } 3254 }
3216 }, 3255 },
3217 { 3256 {
3218 "defaultMessage": "!!!Restart & install update", 3257 "defaultMessage": "!!!Restart & install update",
3219 "end": { 3258 "end": {
3220 "column": 3, 3259 "column": 3,
3221 "line": 126 3260 "line": 136
3222 }, 3261 },
3223 "file": "src/components/settings/settings/EditSettingsForm.js", 3262 "file": "src/components/settings/settings/EditSettingsForm.js",
3224 "id": "settings.app.buttonInstallUpdate", 3263 "id": "settings.app.buttonInstallUpdate",
3225 "start": { 3264 "start": {
3226 "column": 23, 3265 "column": 23,
3227 "line": 123 3266 "line": 133
3228 } 3267 }
3229 }, 3268 },
3230 { 3269 {
3231 "defaultMessage": "!!!Is searching for update", 3270 "defaultMessage": "!!!Is searching for update",
3232 "end": { 3271 "end": {
3233 "column": 3, 3272 "column": 3,
3234 "line": 130 3273 "line": 140
3235 }, 3274 },
3236 "file": "src/components/settings/settings/EditSettingsForm.js", 3275 "file": "src/components/settings/settings/EditSettingsForm.js",
3237 "id": "settings.app.updateStatusSearching", 3276 "id": "settings.app.updateStatusSearching",
3238 "start": { 3277 "start": {
3239 "column": 25, 3278 "column": 25,
3240 "line": 127 3279 "line": 137
3241 } 3280 }
3242 }, 3281 },
3243 { 3282 {
3244 "defaultMessage": "!!!Update available, downloading...", 3283 "defaultMessage": "!!!Update available, downloading...",
3245 "end": { 3284 "end": {
3246 "column": 3, 3285 "column": 3,
3247 "line": 134 3286 "line": 144
3248 }, 3287 },
3249 "file": "src/components/settings/settings/EditSettingsForm.js", 3288 "file": "src/components/settings/settings/EditSettingsForm.js",
3250 "id": "settings.app.updateStatusAvailable", 3289 "id": "settings.app.updateStatusAvailable",
3251 "start": { 3290 "start": {
3252 "column": 25, 3291 "column": 25,
3253 "line": 131 3292 "line": 141
3254 } 3293 }
3255 }, 3294 },
3256 { 3295 {
3257 "defaultMessage": "!!!You are using the latest version of Ferdi", 3296 "defaultMessage": "!!!You are using the latest version of Ferdi",
3258 "end": { 3297 "end": {
3259 "column": 3, 3298 "column": 3,
3260 "line": 138 3299 "line": 148
3261 }, 3300 },
3262 "file": "src/components/settings/settings/EditSettingsForm.js", 3301 "file": "src/components/settings/settings/EditSettingsForm.js",
3263 "id": "settings.app.updateStatusUpToDate", 3302 "id": "settings.app.updateStatusUpToDate",
3264 "start": { 3303 "start": {
3265 "column": 24, 3304 "column": 24,
3266 "line": 135 3305 "line": 145
3267 } 3306 }
3268 }, 3307 },
3269 { 3308 {
3270 "defaultMessage": "!!!Current version:", 3309 "defaultMessage": "!!!Current version:",
3271 "end": { 3310 "end": {
3272 "column": 3, 3311 "column": 3,
3273 "line": 142 3312 "line": 152
3274 }, 3313 },
3275 "file": "src/components/settings/settings/EditSettingsForm.js", 3314 "file": "src/components/settings/settings/EditSettingsForm.js",
3276 "id": "settings.app.currentVersion", 3315 "id": "settings.app.currentVersion",
3277 "start": { 3316 "start": {
3278 "column": 18, 3317 "column": 18,
3279 "line": 139 3318 "line": 149
3280 } 3319 }
3281 }, 3320 },
3282 { 3321 {
3283 "defaultMessage": "!!!Changes require restart", 3322 "defaultMessage": "!!!Changes require restart",
3284 "end": { 3323 "end": {
3285 "column": 3, 3324 "column": 3,
3286 "line": 146 3325 "line": 156
3287 }, 3326 },
3288 "file": "src/components/settings/settings/EditSettingsForm.js", 3327 "file": "src/components/settings/settings/EditSettingsForm.js",
3289 "id": "settings.app.restartRequired", 3328 "id": "settings.app.restartRequired",
3290 "start": { 3329 "start": {
3291 "column": 22, 3330 "column": 22,
3292 "line": 143 3331 "line": 153
3293 } 3332 }
3294 }, 3333 },
3295 { 3334 {
3296 "defaultMessage": "!!!Official translations are English & German. All other languages are community based translations.", 3335 "defaultMessage": "!!!Official translations are English & German. All other languages are community based translations.",
3297 "end": { 3336 "end": {
3298 "column": 3, 3337 "column": 3,
3299 "line": 150 3338 "line": 160
3300 }, 3339 },
3301 "file": "src/components/settings/settings/EditSettingsForm.js", 3340 "file": "src/components/settings/settings/EditSettingsForm.js",
3302 "id": "settings.app.languageDisclaimer", 3341 "id": "settings.app.languageDisclaimer",
3303 "start": { 3342 "start": {
3304 "column": 22, 3343 "column": 22,
3305 "line": 147 3344 "line": 157
3306 } 3345 }
3307 } 3346 }
3308 ], 3347 ],
@@ -5226,102 +5265,6 @@
5226 { 5265 {
5227 "descriptors": [ 5266 "descriptors": [
5228 { 5267 {
5229 "defaultMessage": "!!!Ferdi is better together!",
5230 "end": {
5231 "column": 3,
5232 "line": 20
5233 },
5234 "file": "src/features/shareFranz/Component.js",
5235 "id": "feature.shareFranz.headline",
5236 "start": {
5237 "column": 12,
5238 "line": 17
5239 }
5240 },
5241 {
5242 "defaultMessage": "!!!Tell your friends and colleagues how awesome Ferdi is and help us to spread the word.",
5243 "end": {
5244 "column": 3,
5245 "line": 24
5246 },
5247 "file": "src/features/shareFranz/Component.js",
5248 "id": "feature.shareFranz.text",
5249 "start": {
5250 "column": 8,
5251 "line": 21
5252 }
5253 },
5254 {
5255 "defaultMessage": "!!!Share as email",
5256 "end": {
5257 "column": 3,
5258 "line": 28
5259 },
5260 "file": "src/features/shareFranz/Component.js",
5261 "id": "feature.shareFranz.action.email",
5262 "start": {
5263 "column": 16,
5264 "line": 25
5265 }
5266 },
5267 {
5268 "defaultMessage": "!!!Share on Facebook",
5269 "end": {
5270 "column": 3,
5271 "line": 32
5272 },
5273 "file": "src/features/shareFranz/Component.js",
5274 "id": "feature.shareFranz.action.facebook",
5275 "start": {
5276 "column": 19,
5277 "line": 29
5278 }
5279 },
5280 {
5281 "defaultMessage": "!!!Share on Twitter",
5282 "end": {
5283 "column": 3,
5284 "line": 36
5285 },
5286 "file": "src/features/shareFranz/Component.js",
5287 "id": "feature.shareFranz.action.twitter",
5288 "start": {
5289 "column": 18,
5290 "line": 33
5291 }
5292 },
5293 {
5294 "defaultMessage": "!!! I've added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com",
5295 "end": {
5296 "column": 3,
5297 "line": 40
5298 },
5299 "file": "src/features/shareFranz/Component.js",
5300 "id": "feature.shareFranz.shareText.email",
5301 "start": {
5302 "column": 18,
5303 "line": 37
5304 }
5305 },
5306 {
5307 "defaultMessage": "!!! I've added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com /cc @FranzMessenger",
5308 "end": {
5309 "column": 3,
5310 "line": 44
5311 },
5312 "file": "src/features/shareFranz/Component.js",
5313 "id": "feature.shareFranz.shareText.twitter",
5314 "start": {
5315 "column": 20,
5316 "line": 41
5317 }
5318 }
5319 ],
5320 "path": "src/features/shareFranz/Component.json"
5321 },
5322 {
5323 "descriptors": [
5324 {
5325 "defaultMessage": "!!!Home", 5268 "defaultMessage": "!!!Home",
5326 "end": { 5269 "end": {
5327 "column": 3, 5270 "column": 3,
@@ -5955,949 +5898,949 @@
5955 "defaultMessage": "!!!Edit", 5898 "defaultMessage": "!!!Edit",
5956 "end": { 5899 "end": {
5957 "column": 3, 5900 "column": 3,
5958 "line": 23 5901 "line": 22
5959 }, 5902 },
5960 "file": "src/lib/Menu.js", 5903 "file": "src/lib/Menu.js",
5961 "id": "menu.edit", 5904 "id": "menu.edit",
5962 "start": { 5905 "start": {
5963 "column": 8, 5906 "column": 8,
5964 "line": 20 5907 "line": 19
5965 } 5908 }
5966 }, 5909 },
5967 { 5910 {
5968 "defaultMessage": "!!!Undo", 5911 "defaultMessage": "!!!Undo",
5969 "end": { 5912 "end": {
5970 "column": 3, 5913 "column": 3,
5971 "line": 27 5914 "line": 26
5972 }, 5915 },
5973 "file": "src/lib/Menu.js", 5916 "file": "src/lib/Menu.js",
5974 "id": "menu.edit.undo", 5917 "id": "menu.edit.undo",
5975 "start": { 5918 "start": {
5976 "column": 8, 5919 "column": 8,
5977 "line": 24 5920 "line": 23
5978 } 5921 }
5979 }, 5922 },
5980 { 5923 {
5981 "defaultMessage": "!!!Redo", 5924 "defaultMessage": "!!!Redo",
5982 "end": { 5925 "end": {
5983 "column": 3, 5926 "column": 3,
5984 "line": 31 5927 "line": 30
5985 }, 5928 },
5986 "file": "src/lib/Menu.js", 5929 "file": "src/lib/Menu.js",
5987 "id": "menu.edit.redo", 5930 "id": "menu.edit.redo",
5988 "start": { 5931 "start": {
5989 "column": 8, 5932 "column": 8,
5990 "line": 28 5933 "line": 27
5991 } 5934 }
5992 }, 5935 },
5993 { 5936 {
5994 "defaultMessage": "!!!Cut", 5937 "defaultMessage": "!!!Cut",
5995 "end": { 5938 "end": {
5996 "column": 3, 5939 "column": 3,
5997 "line": 35 5940 "line": 34
5998 }, 5941 },
5999 "file": "src/lib/Menu.js", 5942 "file": "src/lib/Menu.js",
6000 "id": "menu.edit.cut", 5943 "id": "menu.edit.cut",
6001 "start": { 5944 "start": {
6002 "column": 7, 5945 "column": 7,
6003 "line": 32 5946 "line": 31
6004 } 5947 }
6005 }, 5948 },
6006 { 5949 {
6007 "defaultMessage": "!!!Copy", 5950 "defaultMessage": "!!!Copy",
6008 "end": { 5951 "end": {
6009 "column": 3, 5952 "column": 3,
6010 "line": 39 5953 "line": 38
6011 }, 5954 },
6012 "file": "src/lib/Menu.js", 5955 "file": "src/lib/Menu.js",
6013 "id": "menu.edit.copy", 5956 "id": "menu.edit.copy",
6014 "start": { 5957 "start": {
6015 "column": 8, 5958 "column": 8,
6016 "line": 36 5959 "line": 35
6017 } 5960 }
6018 }, 5961 },
6019 { 5962 {
6020 "defaultMessage": "!!!Paste", 5963 "defaultMessage": "!!!Paste",
6021 "end": { 5964 "end": {
6022 "column": 3, 5965 "column": 3,
6023 "line": 43 5966 "line": 42
6024 }, 5967 },
6025 "file": "src/lib/Menu.js", 5968 "file": "src/lib/Menu.js",
6026 "id": "menu.edit.paste", 5969 "id": "menu.edit.paste",
6027 "start": { 5970 "start": {
6028 "column": 9, 5971 "column": 9,
6029 "line": 40 5972 "line": 39
6030 } 5973 }
6031 }, 5974 },
6032 { 5975 {
6033 "defaultMessage": "!!!Paste And Match Style", 5976 "defaultMessage": "!!!Paste And Match Style",
6034 "end": { 5977 "end": {
6035 "column": 3, 5978 "column": 3,
6036 "line": 47 5979 "line": 46
6037 }, 5980 },
6038 "file": "src/lib/Menu.js", 5981 "file": "src/lib/Menu.js",
6039 "id": "menu.edit.pasteAndMatchStyle", 5982 "id": "menu.edit.pasteAndMatchStyle",
6040 "start": { 5983 "start": {
6041 "column": 22, 5984 "column": 22,
6042 "line": 44 5985 "line": 43
6043 } 5986 }
6044 }, 5987 },
6045 { 5988 {
6046 "defaultMessage": "!!!Delete", 5989 "defaultMessage": "!!!Delete",
6047 "end": { 5990 "end": {
6048 "column": 3, 5991 "column": 3,
6049 "line": 51 5992 "line": 50
6050 }, 5993 },
6051 "file": "src/lib/Menu.js", 5994 "file": "src/lib/Menu.js",
6052 "id": "menu.edit.delete", 5995 "id": "menu.edit.delete",
6053 "start": { 5996 "start": {
6054 "column": 10, 5997 "column": 10,
6055 "line": 48 5998 "line": 47
6056 } 5999 }
6057 }, 6000 },
6058 { 6001 {
6059 "defaultMessage": "!!!Select All", 6002 "defaultMessage": "!!!Select All",
6060 "end": { 6003 "end": {
6061 "column": 3, 6004 "column": 3,
6062 "line": 55 6005 "line": 54
6063 }, 6006 },
6064 "file": "src/lib/Menu.js", 6007 "file": "src/lib/Menu.js",
6065 "id": "menu.edit.selectAll", 6008 "id": "menu.edit.selectAll",
6066 "start": { 6009 "start": {
6067 "column": 13, 6010 "column": 13,
6068 "line": 52 6011 "line": 51
6069 } 6012 }
6070 }, 6013 },
6071 { 6014 {
6072 "defaultMessage": "!!!Find in Page", 6015 "defaultMessage": "!!!Find in Page",
6073 "end": { 6016 "end": {
6074 "column": 3, 6017 "column": 3,
6075 "line": 59 6018 "line": 58
6076 }, 6019 },
6077 "file": "src/lib/Menu.js", 6020 "file": "src/lib/Menu.js",
6078 "id": "menu.edit.findInPage", 6021 "id": "menu.edit.findInPage",
6079 "start": { 6022 "start": {
6080 "column": 14, 6023 "column": 14,
6081 "line": 56 6024 "line": 55
6082 } 6025 }
6083 }, 6026 },
6084 { 6027 {
6085 "defaultMessage": "!!!Speech", 6028 "defaultMessage": "!!!Speech",
6086 "end": { 6029 "end": {
6087 "column": 3, 6030 "column": 3,
6088 "line": 63 6031 "line": 62
6089 }, 6032 },
6090 "file": "src/lib/Menu.js", 6033 "file": "src/lib/Menu.js",
6091 "id": "menu.edit.speech", 6034 "id": "menu.edit.speech",
6092 "start": { 6035 "start": {
6093 "column": 10, 6036 "column": 10,
6094 "line": 60 6037 "line": 59
6095 } 6038 }
6096 }, 6039 },
6097 { 6040 {
6098 "defaultMessage": "!!!Start Speaking", 6041 "defaultMessage": "!!!Start Speaking",
6099 "end": { 6042 "end": {
6100 "column": 3, 6043 "column": 3,
6101 "line": 67 6044 "line": 66
6102 }, 6045 },
6103 "file": "src/lib/Menu.js", 6046 "file": "src/lib/Menu.js",
6104 "id": "menu.edit.startSpeaking", 6047 "id": "menu.edit.startSpeaking",
6105 "start": { 6048 "start": {
6106 "column": 17, 6049 "column": 17,
6107 "line": 64 6050 "line": 63
6108 } 6051 }
6109 }, 6052 },
6110 { 6053 {
6111 "defaultMessage": "!!!Stop Speaking", 6054 "defaultMessage": "!!!Stop Speaking",
6112 "end": { 6055 "end": {
6113 "column": 3, 6056 "column": 3,
6114 "line": 71 6057 "line": 70
6115 }, 6058 },
6116 "file": "src/lib/Menu.js", 6059 "file": "src/lib/Menu.js",
6117 "id": "menu.edit.stopSpeaking", 6060 "id": "menu.edit.stopSpeaking",
6118 "start": { 6061 "start": {
6119 "column": 16, 6062 "column": 16,
6120 "line": 68 6063 "line": 67
6121 } 6064 }
6122 }, 6065 },
6123 { 6066 {
6124 "defaultMessage": "!!!Start Dictation", 6067 "defaultMessage": "!!!Start Dictation",
6125 "end": { 6068 "end": {
6126 "column": 3, 6069 "column": 3,
6127 "line": 75 6070 "line": 74
6128 }, 6071 },
6129 "file": "src/lib/Menu.js", 6072 "file": "src/lib/Menu.js",
6130 "id": "menu.edit.startDictation", 6073 "id": "menu.edit.startDictation",
6131 "start": { 6074 "start": {
6132 "column": 18, 6075 "column": 18,
6133 "line": 72 6076 "line": 71
6134 } 6077 }
6135 }, 6078 },
6136 { 6079 {
6137 "defaultMessage": "!!!Emoji & Symbols", 6080 "defaultMessage": "!!!Emoji & Symbols",
6138 "end": { 6081 "end": {
6139 "column": 3, 6082 "column": 3,
6140 "line": 79 6083 "line": 78
6141 }, 6084 },
6142 "file": "src/lib/Menu.js", 6085 "file": "src/lib/Menu.js",
6143 "id": "menu.edit.emojiSymbols", 6086 "id": "menu.edit.emojiSymbols",
6144 "start": { 6087 "start": {
6145 "column": 16, 6088 "column": 16,
6146 "line": 76 6089 "line": 75
6147 } 6090 }
6148 }, 6091 },
6149 { 6092 {
6150 "defaultMessage": "!!!Open Quick Switch", 6093 "defaultMessage": "!!!Open Quick Switch",
6151 "end": { 6094 "end": {
6152 "column": 3, 6095 "column": 3,
6153 "line": 83 6096 "line": 82
6154 }, 6097 },
6155 "file": "src/lib/Menu.js", 6098 "file": "src/lib/Menu.js",
6156 "id": "menu.view.openQuickSwitch", 6099 "id": "menu.view.openQuickSwitch",
6157 "start": { 6100 "start": {
6158 "column": 19, 6101 "column": 19,
6159 "line": 80 6102 "line": 79
6160 } 6103 }
6161 }, 6104 },
6162 { 6105 {
6163 "defaultMessage": "!!!Back", 6106 "defaultMessage": "!!!Back",
6164 "end": { 6107 "end": {
6165 "column": 3, 6108 "column": 3,
6166 "line": 87 6109 "line": 86
6167 }, 6110 },
6168 "file": "src/lib/Menu.js", 6111 "file": "src/lib/Menu.js",
6169 "id": "menu.view.back", 6112 "id": "menu.view.back",
6170 "start": { 6113 "start": {
6171 "column": 8, 6114 "column": 8,
6172 "line": 84 6115 "line": 83
6173 } 6116 }
6174 }, 6117 },
6175 { 6118 {
6176 "defaultMessage": "!!!Forward", 6119 "defaultMessage": "!!!Forward",
6177 "end": { 6120 "end": {
6178 "column": 3, 6121 "column": 3,
6179 "line": 91 6122 "line": 90
6180 }, 6123 },
6181 "file": "src/lib/Menu.js", 6124 "file": "src/lib/Menu.js",
6182 "id": "menu.view.forward", 6125 "id": "menu.view.forward",
6183 "start": { 6126 "start": {
6184 "column": 11, 6127 "column": 11,
6185 "line": 88 6128 "line": 87
6186 } 6129 }
6187 }, 6130 },
6188 { 6131 {
6189 "defaultMessage": "!!!Actual Size", 6132 "defaultMessage": "!!!Actual Size",
6190 "end": { 6133 "end": {
6191 "column": 3, 6134 "column": 3,
6192 "line": 95 6135 "line": 94
6193 }, 6136 },
6194 "file": "src/lib/Menu.js", 6137 "file": "src/lib/Menu.js",
6195 "id": "menu.view.resetZoom", 6138 "id": "menu.view.resetZoom",
6196 "start": { 6139 "start": {
6197 "column": 13, 6140 "column": 13,
6198 "line": 92 6141 "line": 91
6199 } 6142 }
6200 }, 6143 },
6201 { 6144 {
6202 "defaultMessage": "!!!Zoom In", 6145 "defaultMessage": "!!!Zoom In",
6203 "end": { 6146 "end": {
6204 "column": 3, 6147 "column": 3,
6205 "line": 99 6148 "line": 98
6206 }, 6149 },
6207 "file": "src/lib/Menu.js", 6150 "file": "src/lib/Menu.js",
6208 "id": "menu.view.zoomIn", 6151 "id": "menu.view.zoomIn",
6209 "start": { 6152 "start": {
6210 "column": 10, 6153 "column": 10,
6211 "line": 96 6154 "line": 95
6212 } 6155 }
6213 }, 6156 },
6214 { 6157 {
6215 "defaultMessage": "!!!Zoom Out", 6158 "defaultMessage": "!!!Zoom Out",
6216 "end": { 6159 "end": {
6217 "column": 3, 6160 "column": 3,
6218 "line": 103 6161 "line": 102
6219 }, 6162 },
6220 "file": "src/lib/Menu.js", 6163 "file": "src/lib/Menu.js",
6221 "id": "menu.view.zoomOut", 6164 "id": "menu.view.zoomOut",
6222 "start": { 6165 "start": {
6223 "column": 11, 6166 "column": 11,
6224 "line": 100 6167 "line": 99
6225 } 6168 }
6226 }, 6169 },
6227 { 6170 {
6228 "defaultMessage": "!!!Toggle Full Screen", 6171 "defaultMessage": "!!!Toggle Full Screen",
6229 "end": { 6172 "end": {
6230 "column": 3, 6173 "column": 3,
6231 "line": 107 6174 "line": 106
6232 }, 6175 },
6233 "file": "src/lib/Menu.js", 6176 "file": "src/lib/Menu.js",
6234 "id": "menu.view.toggleFullScreen", 6177 "id": "menu.view.toggleFullScreen",
6235 "start": { 6178 "start": {
6236 "column": 20, 6179 "column": 20,
6237 "line": 104 6180 "line": 103
6238 } 6181 }
6239 }, 6182 },
6240 { 6183 {
6241 "defaultMessage": "!!!Toggle Dark Mode", 6184 "defaultMessage": "!!!Toggle Dark Mode",
6242 "end": { 6185 "end": {
6243 "column": 3, 6186 "column": 3,
6244 "line": 111 6187 "line": 110
6245 }, 6188 },
6246 "file": "src/lib/Menu.js", 6189 "file": "src/lib/Menu.js",
6247 "id": "menu.view.toggleDarkMode", 6190 "id": "menu.view.toggleDarkMode",
6248 "start": { 6191 "start": {
6249 "column": 18, 6192 "column": 18,
6250 "line": 108 6193 "line": 107
6251 } 6194 }
6252 }, 6195 },
6253 { 6196 {
6254 "defaultMessage": "!!!Toggle Developer Tools", 6197 "defaultMessage": "!!!Toggle Developer Tools",
6255 "end": { 6198 "end": {
6256 "column": 3, 6199 "column": 3,
6257 "line": 115 6200 "line": 114
6258 }, 6201 },
6259 "file": "src/lib/Menu.js", 6202 "file": "src/lib/Menu.js",
6260 "id": "menu.view.toggleDevTools", 6203 "id": "menu.view.toggleDevTools",
6261 "start": { 6204 "start": {
6262 "column": 18, 6205 "column": 18,
6263 "line": 112 6206 "line": 111
6264 } 6207 }
6265 }, 6208 },
6266 { 6209 {
6267 "defaultMessage": "!!!Toggle Todos Developer Tools", 6210 "defaultMessage": "!!!Toggle Todos Developer Tools",
6268 "end": { 6211 "end": {
6269 "column": 3, 6212 "column": 3,
6270 "line": 119 6213 "line": 118
6271 }, 6214 },
6272 "file": "src/lib/Menu.js", 6215 "file": "src/lib/Menu.js",
6273 "id": "menu.view.toggleTodosDevTools", 6216 "id": "menu.view.toggleTodosDevTools",
6274 "start": { 6217 "start": {
6275 "column": 23, 6218 "column": 23,
6276 "line": 116 6219 "line": 115
6277 } 6220 }
6278 }, 6221 },
6279 { 6222 {
6280 "defaultMessage": "!!!Toggle Service Developer Tools", 6223 "defaultMessage": "!!!Toggle Service Developer Tools",
6281 "end": { 6224 "end": {
6282 "column": 3, 6225 "column": 3,
6283 "line": 123 6226 "line": 122
6284 }, 6227 },
6285 "file": "src/lib/Menu.js", 6228 "file": "src/lib/Menu.js",
6286 "id": "menu.view.toggleServiceDevTools", 6229 "id": "menu.view.toggleServiceDevTools",
6287 "start": { 6230 "start": {
6288 "column": 25, 6231 "column": 25,
6289 "line": 120 6232 "line": 119
6290 } 6233 }
6291 }, 6234 },
6292 { 6235 {
6293 "defaultMessage": "!!!Reload Service", 6236 "defaultMessage": "!!!Reload Service",
6294 "end": { 6237 "end": {
6295 "column": 3, 6238 "column": 3,
6296 "line": 127 6239 "line": 126
6297 }, 6240 },
6298 "file": "src/lib/Menu.js", 6241 "file": "src/lib/Menu.js",
6299 "id": "menu.view.reloadService", 6242 "id": "menu.view.reloadService",
6300 "start": { 6243 "start": {
6301 "column": 17, 6244 "column": 17,
6302 "line": 124 6245 "line": 123
6303 } 6246 }
6304 }, 6247 },
6305 { 6248 {
6306 "defaultMessage": "!!!Reload Ferdi", 6249 "defaultMessage": "!!!Reload Ferdi",
6307 "end": { 6250 "end": {
6308 "column": 3, 6251 "column": 3,
6309 "line": 131 6252 "line": 130
6310 }, 6253 },
6311 "file": "src/lib/Menu.js", 6254 "file": "src/lib/Menu.js",
6312 "id": "menu.view.reloadFerdi", 6255 "id": "menu.view.reloadFerdi",
6313 "start": { 6256 "start": {
6314 "column": 15, 6257 "column": 15,
6315 "line": 128 6258 "line": 127
6316 } 6259 }
6317 }, 6260 },
6318 { 6261 {
6319 "defaultMessage": "!!!Lock Ferdi", 6262 "defaultMessage": "!!!Lock Ferdi",
6320 "end": { 6263 "end": {
6321 "column": 3, 6264 "column": 3,
6322 "line": 135 6265 "line": 134
6323 }, 6266 },
6324 "file": "src/lib/Menu.js", 6267 "file": "src/lib/Menu.js",
6325 "id": "menu.view.lockFerdi", 6268 "id": "menu.view.lockFerdi",
6326 "start": { 6269 "start": {
6327 "column": 13, 6270 "column": 13,
6328 "line": 132 6271 "line": 131
6329 } 6272 }
6330 }, 6273 },
6331 { 6274 {
6332 "defaultMessage": "!!!Reload ToDos", 6275 "defaultMessage": "!!!Reload ToDos",
6333 "end": { 6276 "end": {
6334 "column": 3, 6277 "column": 3,
6335 "line": 139 6278 "line": 138
6336 }, 6279 },
6337 "file": "src/lib/Menu.js", 6280 "file": "src/lib/Menu.js",
6338 "id": "menu.view.reloadTodos", 6281 "id": "menu.view.reloadTodos",
6339 "start": { 6282 "start": {
6340 "column": 15, 6283 "column": 15,
6341 "line": 136 6284 "line": 135
6342 } 6285 }
6343 }, 6286 },
6344 { 6287 {
6345 "defaultMessage": "!!!Minimize", 6288 "defaultMessage": "!!!Minimize",
6346 "end": { 6289 "end": {
6347 "column": 3, 6290 "column": 3,
6348 "line": 143 6291 "line": 142
6349 }, 6292 },
6350 "file": "src/lib/Menu.js", 6293 "file": "src/lib/Menu.js",
6351 "id": "menu.window.minimize", 6294 "id": "menu.window.minimize",
6352 "start": { 6295 "start": {
6353 "column": 12, 6296 "column": 12,
6354 "line": 140 6297 "line": 139
6355 } 6298 }
6356 }, 6299 },
6357 { 6300 {
6358 "defaultMessage": "!!!Close", 6301 "defaultMessage": "!!!Close",
6359 "end": { 6302 "end": {
6360 "column": 3, 6303 "column": 3,
6361 "line": 147 6304 "line": 146
6362 }, 6305 },
6363 "file": "src/lib/Menu.js", 6306 "file": "src/lib/Menu.js",
6364 "id": "menu.window.close", 6307 "id": "menu.window.close",
6365 "start": { 6308 "start": {
6366 "column": 9, 6309 "column": 9,
6367 "line": 144 6310 "line": 143
6368 } 6311 }
6369 }, 6312 },
6370 { 6313 {
6371 "defaultMessage": "!!!Learn More", 6314 "defaultMessage": "!!!Learn More",
6372 "end": { 6315 "end": {
6373 "column": 3, 6316 "column": 3,
6374 "line": 151 6317 "line": 150
6375 }, 6318 },
6376 "file": "src/lib/Menu.js", 6319 "file": "src/lib/Menu.js",
6377 "id": "menu.help.learnMore", 6320 "id": "menu.help.learnMore",
6378 "start": { 6321 "start": {
6379 "column": 13, 6322 "column": 13,
6380 "line": 148 6323 "line": 147
6381 } 6324 }
6382 }, 6325 },
6383 { 6326 {
6384 "defaultMessage": "!!!Changelog", 6327 "defaultMessage": "!!!Changelog",
6385 "end": { 6328 "end": {
6386 "column": 3, 6329 "column": 3,
6387 "line": 155 6330 "line": 154
6388 }, 6331 },
6389 "file": "src/lib/Menu.js", 6332 "file": "src/lib/Menu.js",
6390 "id": "menu.help.changelog", 6333 "id": "menu.help.changelog",
6391 "start": { 6334 "start": {
6392 "column": 13, 6335 "column": 13,
6393 "line": 152 6336 "line": 151
6394 } 6337 }
6395 }, 6338 },
6396 { 6339 {
6397 "defaultMessage": "!!!Import/Export Configuration Data", 6340 "defaultMessage": "!!!Import/Export Configuration Data",
6398 "end": { 6341 "end": {
6399 "column": 3, 6342 "column": 3,
6400 "line": 159 6343 "line": 158
6401 }, 6344 },
6402 "file": "src/lib/Menu.js", 6345 "file": "src/lib/Menu.js",
6403 "id": "menu.help.importExportData", 6346 "id": "menu.help.importExportData",
6404 "start": { 6347 "start": {
6405 "column": 20, 6348 "column": 20,
6406 "line": 156 6349 "line": 155
6407 } 6350 }
6408 }, 6351 },
6409 { 6352 {
6410 "defaultMessage": "!!!Support", 6353 "defaultMessage": "!!!Support",
6411 "end": { 6354 "end": {
6412 "column": 3, 6355 "column": 3,
6413 "line": 163 6356 "line": 162
6414 }, 6357 },
6415 "file": "src/lib/Menu.js", 6358 "file": "src/lib/Menu.js",
6416 "id": "menu.help.support", 6359 "id": "menu.help.support",
6417 "start": { 6360 "start": {
6418 "column": 11, 6361 "column": 11,
6419 "line": 160 6362 "line": 159
6420 } 6363 }
6421 }, 6364 },
6422 { 6365 {
6423 "defaultMessage": "!!!Copy Debug Information", 6366 "defaultMessage": "!!!Copy Debug Information",
6424 "end": { 6367 "end": {
6425 "column": 3, 6368 "column": 3,
6426 "line": 167 6369 "line": 166
6427 }, 6370 },
6428 "file": "src/lib/Menu.js", 6371 "file": "src/lib/Menu.js",
6429 "id": "menu.help.debugInfo", 6372 "id": "menu.help.debugInfo",
6430 "start": { 6373 "start": {
6431 "column": 13, 6374 "column": 13,
6432 "line": 164 6375 "line": 163
6433 } 6376 }
6434 }, 6377 },
6435 { 6378 {
6436 "defaultMessage": "!!!Publish Debug Information", 6379 "defaultMessage": "!!!Publish Debug Information",
6437 "end": { 6380 "end": {
6438 "column": 3, 6381 "column": 3,
6439 "line": 171 6382 "line": 170
6440 }, 6383 },
6441 "file": "src/lib/Menu.js", 6384 "file": "src/lib/Menu.js",
6442 "id": "menu.help.publishDebugInfo", 6385 "id": "menu.help.publishDebugInfo",
6443 "start": { 6386 "start": {
6444 "column": 20, 6387 "column": 20,
6445 "line": 168 6388 "line": 167
6446 } 6389 }
6447 }, 6390 },
6448 { 6391 {
6449 "defaultMessage": "!!!Ferdi Debug Information", 6392 "defaultMessage": "!!!Ferdi Debug Information",
6450 "end": { 6393 "end": {
6451 "column": 3, 6394 "column": 3,
6452 "line": 175 6395 "line": 174
6453 }, 6396 },
6454 "file": "src/lib/Menu.js", 6397 "file": "src/lib/Menu.js",
6455 "id": "menu.help.debugInfoCopiedHeadline", 6398 "id": "menu.help.debugInfoCopiedHeadline",
6456 "start": { 6399 "start": {
6457 "column": 27, 6400 "column": 27,
6458 "line": 172 6401 "line": 171
6459 } 6402 }
6460 }, 6403 },
6461 { 6404 {
6462 "defaultMessage": "!!!Your Debug Information has been copied to your clipboard.", 6405 "defaultMessage": "!!!Your Debug Information has been copied to your clipboard.",
6463 "end": { 6406 "end": {
6464 "column": 3, 6407 "column": 3,
6465 "line": 179 6408 "line": 178
6466 }, 6409 },
6467 "file": "src/lib/Menu.js", 6410 "file": "src/lib/Menu.js",
6468 "id": "menu.help.debugInfoCopiedBody", 6411 "id": "menu.help.debugInfoCopiedBody",
6469 "start": { 6412 "start": {
6470 "column": 23, 6413 "column": 23,
6471 "line": 176 6414 "line": 175
6472 } 6415 }
6473 }, 6416 },
6474 { 6417 {
6475 "defaultMessage": "!!!Unlock with Touch ID", 6418 "defaultMessage": "!!!Unlock with Touch ID",
6476 "end": { 6419 "end": {
6477 "column": 3, 6420 "column": 3,
6478 "line": 183 6421 "line": 182
6479 }, 6422 },
6480 "file": "src/lib/Menu.js", 6423 "file": "src/lib/Menu.js",
6481 "id": "locked.touchId", 6424 "id": "locked.touchId",
6482 "start": { 6425 "start": {
6483 "column": 11, 6426 "column": 11,
6484 "line": 180 6427 "line": 179
6485 } 6428 }
6486 }, 6429 },
6487 { 6430 {
6488 "defaultMessage": "!!!unlock via Touch ID", 6431 "defaultMessage": "!!!unlock via Touch ID",
6489 "end": { 6432 "end": {
6490 "column": 3, 6433 "column": 3,
6491 "line": 187 6434 "line": 186
6492 }, 6435 },
6493 "file": "src/lib/Menu.js", 6436 "file": "src/lib/Menu.js",
6494 "id": "locked.touchIdPrompt", 6437 "id": "locked.touchIdPrompt",
6495 "start": { 6438 "start": {
6496 "column": 17, 6439 "column": 17,
6497 "line": 184 6440 "line": 183
6498 } 6441 }
6499 }, 6442 },
6500 { 6443 {
6501 "defaultMessage": "!!!Terms of Service", 6444 "defaultMessage": "!!!Terms of Service",
6502 "end": { 6445 "end": {
6503 "column": 3, 6446 "column": 3,
6504 "line": 191 6447 "line": 190
6505 }, 6448 },
6506 "file": "src/lib/Menu.js", 6449 "file": "src/lib/Menu.js",
6507 "id": "menu.help.tos", 6450 "id": "menu.help.tos",
6508 "start": { 6451 "start": {
6509 "column": 7, 6452 "column": 7,
6510 "line": 188 6453 "line": 187
6511 } 6454 }
6512 }, 6455 },
6513 { 6456 {
6514 "defaultMessage": "!!!Privacy Statement", 6457 "defaultMessage": "!!!Privacy Statement",
6515 "end": { 6458 "end": {
6516 "column": 3, 6459 "column": 3,
6517 "line": 195 6460 "line": 194
6518 }, 6461 },
6519 "file": "src/lib/Menu.js", 6462 "file": "src/lib/Menu.js",
6520 "id": "menu.help.privacy", 6463 "id": "menu.help.privacy",
6521 "start": { 6464 "start": {
6522 "column": 11, 6465 "column": 11,
6523 "line": 192 6466 "line": 191
6524 } 6467 }
6525 }, 6468 },
6526 { 6469 {
6527 "defaultMessage": "!!!File", 6470 "defaultMessage": "!!!File",
6528 "end": { 6471 "end": {
6529 "column": 3, 6472 "column": 3,
6530 "line": 199 6473 "line": 198
6531 }, 6474 },
6532 "file": "src/lib/Menu.js", 6475 "file": "src/lib/Menu.js",
6533 "id": "menu.file", 6476 "id": "menu.file",
6534 "start": { 6477 "start": {
6535 "column": 8, 6478 "column": 8,
6536 "line": 196 6479 "line": 195
6537 } 6480 }
6538 }, 6481 },
6539 { 6482 {
6540 "defaultMessage": "!!!View", 6483 "defaultMessage": "!!!View",
6541 "end": { 6484 "end": {
6542 "column": 3, 6485 "column": 3,
6543 "line": 203 6486 "line": 202
6544 }, 6487 },
6545 "file": "src/lib/Menu.js", 6488 "file": "src/lib/Menu.js",
6546 "id": "menu.view", 6489 "id": "menu.view",
6547 "start": { 6490 "start": {
6548 "column": 8, 6491 "column": 8,
6549 "line": 200 6492 "line": 199
6550 } 6493 }
6551 }, 6494 },
6552 { 6495 {
6553 "defaultMessage": "!!!Services", 6496 "defaultMessage": "!!!Services",
6554 "end": { 6497 "end": {
6555 "column": 3, 6498 "column": 3,
6556 "line": 207 6499 "line": 206
6557 }, 6500 },
6558 "file": "src/lib/Menu.js", 6501 "file": "src/lib/Menu.js",
6559 "id": "menu.services", 6502 "id": "menu.services",
6560 "start": { 6503 "start": {
6561 "column": 12, 6504 "column": 12,
6562 "line": 204 6505 "line": 203
6563 } 6506 }
6564 }, 6507 },
6565 { 6508 {
6566 "defaultMessage": "!!!Window", 6509 "defaultMessage": "!!!Window",
6567 "end": { 6510 "end": {
6568 "column": 3, 6511 "column": 3,
6569 "line": 211 6512 "line": 210
6570 }, 6513 },
6571 "file": "src/lib/Menu.js", 6514 "file": "src/lib/Menu.js",
6572 "id": "menu.window", 6515 "id": "menu.window",
6573 "start": { 6516 "start": {
6574 "column": 10, 6517 "column": 10,
6575 "line": 208 6518 "line": 207
6576 } 6519 }
6577 }, 6520 },
6578 { 6521 {
6579 "defaultMessage": "!!!Help", 6522 "defaultMessage": "!!!Help",
6580 "end": { 6523 "end": {
6581 "column": 3, 6524 "column": 3,
6582 "line": 215 6525 "line": 214
6583 }, 6526 },
6584 "file": "src/lib/Menu.js", 6527 "file": "src/lib/Menu.js",
6585 "id": "menu.help", 6528 "id": "menu.help",
6586 "start": { 6529 "start": {
6587 "column": 8, 6530 "column": 8,
6588 "line": 212 6531 "line": 211
6589 } 6532 }
6590 }, 6533 },
6591 { 6534 {
6592 "defaultMessage": "!!!About Ferdi", 6535 "defaultMessage": "!!!About Ferdi",
6593 "end": { 6536 "end": {
6594 "column": 3, 6537 "column": 3,
6595 "line": 219 6538 "line": 218
6596 }, 6539 },
6597 "file": "src/lib/Menu.js", 6540 "file": "src/lib/Menu.js",
6598 "id": "menu.app.about", 6541 "id": "menu.app.about",
6599 "start": { 6542 "start": {
6600 "column": 9, 6543 "column": 9,
6601 "line": 216 6544 "line": 215
6602 } 6545 }
6603 }, 6546 },
6604 { 6547 {
6605 "defaultMessage": "!!!What's new?", 6548 "defaultMessage": "!!!What's new?",
6606 "end": { 6549 "end": {
6607 "column": 3, 6550 "column": 3,
6608 "line": 223 6551 "line": 222
6609 }, 6552 },
6610 "file": "src/lib/Menu.js", 6553 "file": "src/lib/Menu.js",
6611 "id": "menu.app.announcement", 6554 "id": "menu.app.announcement",
6612 "start": { 6555 "start": {
6613 "column": 16, 6556 "column": 16,
6614 "line": 220 6557 "line": 219
6615 } 6558 }
6616 }, 6559 },
6617 { 6560 {
6618 "defaultMessage": "!!!Settings", 6561 "defaultMessage": "!!!Settings",
6619 "end": { 6562 "end": {
6620 "column": 3, 6563 "column": 3,
6621 "line": 227 6564 "line": 226
6622 }, 6565 },
6623 "file": "src/lib/Menu.js", 6566 "file": "src/lib/Menu.js",
6624 "id": "menu.app.settings", 6567 "id": "menu.app.settings",
6625 "start": { 6568 "start": {
6626 "column": 12, 6569 "column": 12,
6627 "line": 224 6570 "line": 223
6628 } 6571 }
6629 }, 6572 },
6630 { 6573 {
6631 "defaultMessage": "!!!Check for updates", 6574 "defaultMessage": "!!!Check for updates",
6632 "end": { 6575 "end": {
6633 "column": 3, 6576 "column": 3,
6634 "line": 231 6577 "line": 230
6635 }, 6578 },
6636 "file": "src/lib/Menu.js", 6579 "file": "src/lib/Menu.js",
6637 "id": "menu.app.checkForUpdates", 6580 "id": "menu.app.checkForUpdates",
6638 "start": { 6581 "start": {
6639 "column": 19, 6582 "column": 19,
6640 "line": 228 6583 "line": 227
6641 } 6584 }
6642 }, 6585 },
6643 { 6586 {
6644 "defaultMessage": "!!!Hide", 6587 "defaultMessage": "!!!Hide",
6645 "end": { 6588 "end": {
6646 "column": 3, 6589 "column": 3,
6647 "line": 235 6590 "line": 234
6648 }, 6591 },
6649 "file": "src/lib/Menu.js", 6592 "file": "src/lib/Menu.js",
6650 "id": "menu.app.hide", 6593 "id": "menu.app.hide",
6651 "start": { 6594 "start": {
6652 "column": 8, 6595 "column": 8,
6653 "line": 232 6596 "line": 231
6654 } 6597 }
6655 }, 6598 },
6656 { 6599 {
6657 "defaultMessage": "!!!Hide Others", 6600 "defaultMessage": "!!!Hide Others",
6658 "end": { 6601 "end": {
6659 "column": 3, 6602 "column": 3,
6660 "line": 239 6603 "line": 238
6661 }, 6604 },
6662 "file": "src/lib/Menu.js", 6605 "file": "src/lib/Menu.js",
6663 "id": "menu.app.hideOthers", 6606 "id": "menu.app.hideOthers",
6664 "start": { 6607 "start": {
6665 "column": 14, 6608 "column": 14,
6666 "line": 236 6609 "line": 235
6667 } 6610 }
6668 }, 6611 },
6669 { 6612 {
6670 "defaultMessage": "!!!Unhide", 6613 "defaultMessage": "!!!Unhide",
6671 "end": { 6614 "end": {
6672 "column": 3, 6615 "column": 3,
6673 "line": 243 6616 "line": 242
6674 }, 6617 },
6675 "file": "src/lib/Menu.js", 6618 "file": "src/lib/Menu.js",
6676 "id": "menu.app.unhide", 6619 "id": "menu.app.unhide",
6677 "start": { 6620 "start": {
6678 "column": 10, 6621 "column": 10,
6679 "line": 240 6622 "line": 239
6680 } 6623 }
6681 }, 6624 },
6682 { 6625 {
6683 "defaultMessage": "!!!Auto-hide menu bar", 6626 "defaultMessage": "!!!Auto-hide menu bar",
6684 "end": { 6627 "end": {
6685 "column": 3, 6628 "column": 3,
6686 "line": 247 6629 "line": 246
6687 }, 6630 },
6688 "file": "src/lib/Menu.js", 6631 "file": "src/lib/Menu.js",
6689 "id": "menu.app.autohideMenuBar", 6632 "id": "menu.app.autohideMenuBar",
6690 "start": { 6633 "start": {
6691 "column": 19, 6634 "column": 19,
6692 "line": 244 6635 "line": 243
6693 } 6636 }
6694 }, 6637 },
6695 { 6638 {
6696 "defaultMessage": "!!!Quit", 6639 "defaultMessage": "!!!Quit",
6697 "end": { 6640 "end": {
6698 "column": 3, 6641 "column": 3,
6699 "line": 251 6642 "line": 250
6700 }, 6643 },
6701 "file": "src/lib/Menu.js", 6644 "file": "src/lib/Menu.js",
6702 "id": "menu.app.quit", 6645 "id": "menu.app.quit",
6703 "start": { 6646 "start": {
6704 "column": 8, 6647 "column": 8,
6705 "line": 248 6648 "line": 247
6706 } 6649 }
6707 }, 6650 },
6708 { 6651 {
6709 "defaultMessage": "!!!Add New Service...", 6652 "defaultMessage": "!!!Add New Service...",
6710 "end": { 6653 "end": {
6711 "column": 3, 6654 "column": 3,
6712 "line": 255 6655 "line": 254
6713 }, 6656 },
6714 "file": "src/lib/Menu.js", 6657 "file": "src/lib/Menu.js",
6715 "id": "menu.services.addNewService", 6658 "id": "menu.services.addNewService",
6716 "start": { 6659 "start": {
6717 "column": 17, 6660 "column": 17,
6718 "line": 252 6661 "line": 251
6719 } 6662 }
6720 }, 6663 },
6721 { 6664 {
6722 "defaultMessage": "!!!Add New Workspace...", 6665 "defaultMessage": "!!!Add New Workspace...",
6723 "end": { 6666 "end": {
6724 "column": 3, 6667 "column": 3,
6725 "line": 259 6668 "line": 258
6726 }, 6669 },
6727 "file": "src/lib/Menu.js", 6670 "file": "src/lib/Menu.js",
6728 "id": "menu.workspaces.addNewWorkspace", 6671 "id": "menu.workspaces.addNewWorkspace",
6729 "start": { 6672 "start": {
6730 "column": 19, 6673 "column": 19,
6731 "line": 256 6674 "line": 255
6732 } 6675 }
6733 }, 6676 },
6734 { 6677 {
6735 "defaultMessage": "!!!Open workspace drawer", 6678 "defaultMessage": "!!!Open workspace drawer",
6736 "end": { 6679 "end": {
6737 "column": 3, 6680 "column": 3,
6738 "line": 263 6681 "line": 262
6739 }, 6682 },
6740 "file": "src/lib/Menu.js", 6683 "file": "src/lib/Menu.js",
6741 "id": "menu.workspaces.openWorkspaceDrawer", 6684 "id": "menu.workspaces.openWorkspaceDrawer",
6742 "start": { 6685 "start": {
6743 "column": 23, 6686 "column": 23,
6744 "line": 260 6687 "line": 259
6745 } 6688 }
6746 }, 6689 },
6747 { 6690 {
6748 "defaultMessage": "!!!Close workspace drawer", 6691 "defaultMessage": "!!!Close workspace drawer",
6749 "end": { 6692 "end": {
6750 "column": 3, 6693 "column": 3,
6751 "line": 267 6694 "line": 266
6752 }, 6695 },
6753 "file": "src/lib/Menu.js", 6696 "file": "src/lib/Menu.js",
6754 "id": "menu.workspaces.closeWorkspaceDrawer", 6697 "id": "menu.workspaces.closeWorkspaceDrawer",
6755 "start": { 6698 "start": {
6756 "column": 24, 6699 "column": 24,
6757 "line": 264 6700 "line": 263
6758 } 6701 }
6759 }, 6702 },
6760 { 6703 {
6761 "defaultMessage": "!!!Activate next service...", 6704 "defaultMessage": "!!!Activate next service...",
6762 "end": { 6705 "end": {
6763 "column": 3, 6706 "column": 3,
6764 "line": 271 6707 "line": 270
6765 }, 6708 },
6766 "file": "src/lib/Menu.js", 6709 "file": "src/lib/Menu.js",
6767 "id": "menu.services.setNextServiceActive", 6710 "id": "menu.services.setNextServiceActive",
6768 "start": { 6711 "start": {
6769 "column": 23, 6712 "column": 23,
6770 "line": 268 6713 "line": 267
6771 } 6714 }
6772 }, 6715 },
6773 { 6716 {
6774 "defaultMessage": "!!!Activate previous service...", 6717 "defaultMessage": "!!!Activate previous service...",
6775 "end": { 6718 "end": {
6776 "column": 3, 6719 "column": 3,
6777 "line": 275 6720 "line": 274
6778 }, 6721 },
6779 "file": "src/lib/Menu.js", 6722 "file": "src/lib/Menu.js",
6780 "id": "menu.services.activatePreviousService", 6723 "id": "menu.services.activatePreviousService",
6781 "start": { 6724 "start": {
6782 "column": 27, 6725 "column": 27,
6783 "line": 272 6726 "line": 271
6784 } 6727 }
6785 }, 6728 },
6786 { 6729 {
6787 "defaultMessage": "!!!Disable notifications & audio", 6730 "defaultMessage": "!!!Disable notifications & audio",
6788 "end": { 6731 "end": {
6789 "column": 3, 6732 "column": 3,
6790 "line": 279 6733 "line": 278
6791 }, 6734 },
6792 "file": "src/lib/Menu.js", 6735 "file": "src/lib/Menu.js",
6793 "id": "sidebar.muteApp", 6736 "id": "sidebar.muteApp",
6794 "start": { 6737 "start": {
6795 "column": 11, 6738 "column": 11,
6796 "line": 276 6739 "line": 275
6797 } 6740 }
6798 }, 6741 },
6799 { 6742 {
6800 "defaultMessage": "!!!Enable notifications & audio", 6743 "defaultMessage": "!!!Enable notifications & audio",
6801 "end": { 6744 "end": {
6802 "column": 3, 6745 "column": 3,
6803 "line": 283 6746 "line": 282
6804 }, 6747 },
6805 "file": "src/lib/Menu.js", 6748 "file": "src/lib/Menu.js",
6806 "id": "sidebar.unmuteApp", 6749 "id": "sidebar.unmuteApp",
6807 "start": { 6750 "start": {
6808 "column": 13, 6751 "column": 13,
6809 "line": 280 6752 "line": 279
6810 } 6753 }
6811 }, 6754 },
6812 { 6755 {
6813 "defaultMessage": "!!!Workspaces", 6756 "defaultMessage": "!!!Workspaces",
6814 "end": { 6757 "end": {
6815 "column": 3, 6758 "column": 3,
6816 "line": 287 6759 "line": 286
6817 }, 6760 },
6818 "file": "src/lib/Menu.js", 6761 "file": "src/lib/Menu.js",
6819 "id": "menu.workspaces", 6762 "id": "menu.workspaces",
6820 "start": { 6763 "start": {
6821 "column": 14, 6764 "column": 14,
6822 "line": 284 6765 "line": 283
6823 } 6766 }
6824 }, 6767 },
6825 { 6768 {
6826 "defaultMessage": "!!!Default", 6769 "defaultMessage": "!!!Default",
6827 "end": { 6770 "end": {
6828 "column": 3, 6771 "column": 3,
6829 "line": 291 6772 "line": 290
6830 }, 6773 },
6831 "file": "src/lib/Menu.js", 6774 "file": "src/lib/Menu.js",
6832 "id": "menu.workspaces.defaultWorkspace", 6775 "id": "menu.workspaces.defaultWorkspace",
6833 "start": { 6776 "start": {
6834 "column": 20, 6777 "column": 20,
6835 "line": 288 6778 "line": 287
6836 } 6779 }
6837 }, 6780 },
6838 { 6781 {
6839 "defaultMessage": "!!!Todos", 6782 "defaultMessage": "!!!Todos",
6840 "end": { 6783 "end": {
6841 "column": 3, 6784 "column": 3,
6842 "line": 295 6785 "line": 294
6843 }, 6786 },
6844 "file": "src/lib/Menu.js", 6787 "file": "src/lib/Menu.js",
6845 "id": "menu.todos", 6788 "id": "menu.todos",
6846 "start": { 6789 "start": {
6847 "column": 9, 6790 "column": 9,
6848 "line": 292 6791 "line": 291
6849 } 6792 }
6850 }, 6793 },
6851 { 6794 {
6852 "defaultMessage": "!!!Open Todos drawer", 6795 "defaultMessage": "!!!Open Todos drawer",
6853 "end": { 6796 "end": {
6854 "column": 3, 6797 "column": 3,
6855 "line": 299 6798 "line": 298
6856 }, 6799 },
6857 "file": "src/lib/Menu.js", 6800 "file": "src/lib/Menu.js",
6858 "id": "menu.Todoss.openTodosDrawer", 6801 "id": "menu.Todoss.openTodosDrawer",
6859 "start": { 6802 "start": {
6860 "column": 19, 6803 "column": 19,
6861 "line": 296 6804 "line": 295
6862 } 6805 }
6863 }, 6806 },
6864 { 6807 {
6865 "defaultMessage": "!!!Close Todos drawer", 6808 "defaultMessage": "!!!Close Todos drawer",
6866 "end": { 6809 "end": {
6867 "column": 3, 6810 "column": 3,
6868 "line": 303 6811 "line": 302
6869 }, 6812 },
6870 "file": "src/lib/Menu.js", 6813 "file": "src/lib/Menu.js",
6871 "id": "menu.Todoss.closeTodosDrawer", 6814 "id": "menu.Todoss.closeTodosDrawer",
6872 "start": { 6815 "start": {
6873 "column": 20, 6816 "column": 20,
6874 "line": 300 6817 "line": 299
6875 } 6818 }
6876 }, 6819 },
6877 { 6820 {
6878 "defaultMessage": "!!!Enable Todos", 6821 "defaultMessage": "!!!Enable Todos",
6879 "end": { 6822 "end": {
6880 "column": 3, 6823 "column": 3,
6881 "line": 307 6824 "line": 306
6882 }, 6825 },
6883 "file": "src/lib/Menu.js", 6826 "file": "src/lib/Menu.js",
6884 "id": "menu.todos.enableTodos", 6827 "id": "menu.todos.enableTodos",
6885 "start": { 6828 "start": {
6886 "column": 15, 6829 "column": 15,
6887 "line": 304 6830 "line": 303
6888 } 6831 }
6889 }, 6832 },
6890 { 6833 {
6891 "defaultMessage": "!!!Home", 6834 "defaultMessage": "!!!Home",
6892 "end": { 6835 "end": {
6893 "column": 3, 6836 "column": 3,
6894 "line": 311 6837 "line": 310
6895 }, 6838 },
6896 "file": "src/lib/Menu.js", 6839 "file": "src/lib/Menu.js",
6897 "id": "menu.services.goHome", 6840 "id": "menu.services.goHome",
6898 "start": { 6841 "start": {
6899 "column": 17, 6842 "column": 17,
6900 "line": 308 6843 "line": 307
6901 } 6844 }
6902 } 6845 }
6903 ], 6846 ],
diff --git a/src/i18n/locales/el.json b/src/i18n/locales/el.json
index a0f0e5fa6..0735df434 100644
--- a/src/i18n/locales/el.json
+++ b/src/i18n/locales/el.json
@@ -26,13 +26,6 @@
26 "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.", 26 "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.",
27 "feature.quickSwitch.search": "Search...", 27 "feature.quickSwitch.search": "Search...",
28 "feature.quickSwitch.title": "QuickSwitch", 28 "feature.quickSwitch.title": "QuickSwitch",
29 "feature.shareFranz.action.email": "Send as email",
30 "feature.shareFranz.action.facebook": "Share on Facebook",
31 "feature.shareFranz.action.twitter": "Share on Twitter",
32 "feature.shareFranz.headline": "Ferdi is better together!",
33 "feature.shareFranz.shareText.email": "I've added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.getferdi.com",
34 "feature.shareFranz.shareText.twitter": "I've added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.getferdi.com /cc @FerdiMessenger",
35 "feature.shareFranz.text": "Tell your friends and colleagues how awesome Ferdi is and help us to spread the word.",
36 "global.api.unhealthy": "Δεν είναι δυνατή η σÏνδεση με τις ζωντανές υπηÏεσίες του Ferdi", 29 "global.api.unhealthy": "Δεν είναι δυνατή η σÏνδεση με τις ζωντανές υπηÏεσίες του Ferdi",
37 "global.notConnectedToTheInternet": "Έχετε αποσυνδεθεί από το Διαδίκτυο", 30 "global.notConnectedToTheInternet": "Έχετε αποσυνδεθεί από το Διαδίκτυο",
38 "global.spellchecker.useDefault": "Use System Default ({default})", 31 "global.spellchecker.useDefault": "Use System Default ({default})",
@@ -205,6 +198,8 @@
205 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", 198 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})",
206 "settings.app.buttonClearAllCache": "ΚαθαÏισμός λανθάνουσας μνήμης", 199 "settings.app.buttonClearAllCache": "ΚαθαÏισμός λανθάνουσας μνήμης",
207 "settings.app.buttonInstallUpdate": "Επανεκκίνηση & εγκατάσταση ενημεÏώσεων", 200 "settings.app.buttonInstallUpdate": "Επανεκκίνηση & εγκατάσταση ενημεÏώσεων",
201 "settings.app.buttonOpenFerdiProfileFolder": "Open Profile folder",
202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open Service Recipes folder",
208 "settings.app.buttonSearchForUpdate": "Έλεγχος για ενημεÏώσεις", 203 "settings.app.buttonSearchForUpdate": "Έλεγχος για ενημεÏώσεις",
209 "settings.app.cacheInfo": "Το Ferdi χÏησιμοποιεί αυτήν τη στιγμή {size} χώÏου στο δίσκο.", 204 "settings.app.cacheInfo": "Το Ferdi χÏησιμοποιεί αυτήν τη στιγμή {size} χώÏου στο δίσκο.",
210 "settings.app.cacheNotCleared": "Couldn't clear all cache", 205 "settings.app.cacheNotCleared": "Couldn't clear all cache",
@@ -275,6 +270,7 @@
275 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 270 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!",
276 "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.", 271 "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.",
277 "settings.app.subheadlineCache": "Λανθάνουσα μνήμη", 272 "settings.app.subheadlineCache": "Λανθάνουσα μνήμη",
273 "settings.app.subheadlineFerdiProfile": "Ferdi Profile",
278 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", 274 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.",
279 "settings.app.translationHelp": "Βοηθήστε μας να μεταφÏάσουμε το Ferdi στη δική σας γλώσσα.", 275 "settings.app.translationHelp": "Βοηθήστε μας να μεταφÏάσουμε το Ferdi στη δική σας γλώσσα.",
280 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.", 276 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.",
diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json
index 002ea5655..fe2eb6ec3 100644
--- a/src/i18n/locales/en-US.json
+++ b/src/i18n/locales/en-US.json
@@ -26,13 +26,6 @@
26 "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.", 26 "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.",
27 "feature.quickSwitch.search": "Search...", 27 "feature.quickSwitch.search": "Search...",
28 "feature.quickSwitch.title": "QuickSwitch", 28 "feature.quickSwitch.title": "QuickSwitch",
29 "feature.shareFranz.action.email": "Send as email",
30 "feature.shareFranz.action.facebook": "Share on Facebook",
31 "feature.shareFranz.action.twitter": "Share on Twitter",
32 "feature.shareFranz.headline": "Ferdi is better together!",
33 "feature.shareFranz.shareText.email": "I've added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.getferdi.com",
34 "feature.shareFranz.shareText.twitter": "I've added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.getferdi.com /cc @FerdiMessenger",
35 "feature.shareFranz.text": "Tell your friends and colleagues how awesome Ferdi is and help us to spread the word.",
36 "global.api.unhealthy": "Can't connect to Ferdi online services", 29 "global.api.unhealthy": "Can't connect to Ferdi online services",
37 "global.notConnectedToTheInternet": "You are not connected to the internet.", 30 "global.notConnectedToTheInternet": "You are not connected to the internet.",
38 "global.spellchecker.useDefault": "Use System Default ({default})", 31 "global.spellchecker.useDefault": "Use System Default ({default})",
@@ -205,6 +198,8 @@
205 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", 198 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})",
206 "settings.app.buttonClearAllCache": "Clear cache", 199 "settings.app.buttonClearAllCache": "Clear cache",
207 "settings.app.buttonInstallUpdate": "Restart & install update", 200 "settings.app.buttonInstallUpdate": "Restart & install update",
201 "settings.app.buttonOpenFerdiProfileFolder": "Open Profile folder",
202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open Service Recipes folder",
208 "settings.app.buttonSearchForUpdate": "Check for updates", 203 "settings.app.buttonSearchForUpdate": "Check for updates",
209 "settings.app.cacheInfo": "Ferdi cache is currently using {size} of disk space.", 204 "settings.app.cacheInfo": "Ferdi cache is currently using {size} of disk space.",
210 "settings.app.cacheNotCleared": "Couldn't clear all cache", 205 "settings.app.cacheNotCleared": "Couldn't clear all cache",
@@ -275,6 +270,7 @@
275 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 270 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!",
276 "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.", 271 "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.",
277 "settings.app.subheadlineCache": "Cache", 272 "settings.app.subheadlineCache": "Cache",
273 "settings.app.subheadlineFerdiProfile": "Ferdi Profile",
278 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", 274 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.",
279 "settings.app.translationHelp": "Help us to translate Ferdi into your language.", 275 "settings.app.translationHelp": "Help us to translate Ferdi into your language.",
280 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.", 276 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.",
diff --git a/src/i18n/locales/es.json b/src/i18n/locales/es.json
index 3c617ab5e..32c7ef601 100644
--- a/src/i18n/locales/es.json
+++ b/src/i18n/locales/es.json
@@ -26,13 +26,6 @@
26 "feature.quickSwitch.info": "Puede seleccionar un servicio usando TAB, ↑ y ↓. Puede abrir servicio usando ENTER.", 26 "feature.quickSwitch.info": "Puede seleccionar un servicio usando TAB, ↑ y ↓. Puede abrir servicio usando ENTER.",
27 "feature.quickSwitch.search": "Buscar...", 27 "feature.quickSwitch.search": "Buscar...",
28 "feature.quickSwitch.title": "Cambiar rápidamente", 28 "feature.quickSwitch.title": "Cambiar rápidamente",
29 "feature.shareFranz.action.email": "Enviar como correo",
30 "feature.shareFranz.action.facebook": "Compartir en Facebook",
31 "feature.shareFranz.action.twitter": "Compartir en Twitter",
32 "feature.shareFranz.headline": "¡Juntos mejoramos Ferdi!",
33 "feature.shareFranz.shareText.email": "¡He añadido {count} servicios a Ferdi! Obtén la aplicación gratuita para WhatsApp, Messenger, Slack, Skype en www.getferdi.com",
34 "feature.shareFranz.shareText.twitter": "He agregado {count} servicios a Ferdi! Obtené la aplicación gratuita de WhatsApp, Messenger, Slack, Skype y co en www.getferdi.com/cc @FerdiMessenger",
35 "feature.shareFranz.text": "Dile a tus amigos y colegas lo asombroso que es Ferdi y ayúdanos a correr la voz.",
36 "global.api.unhealthy": "No es posible conectarse a los servicios en línea de Ferdi.", 29 "global.api.unhealthy": "No es posible conectarse a los servicios en línea de Ferdi.",
37 "global.notConnectedToTheInternet": "No estás conectado a Internet", 30 "global.notConnectedToTheInternet": "No estás conectado a Internet",
38 "global.spellchecker.useDefault": "Utilizar estándar del sistema ({default})", 31 "global.spellchecker.useDefault": "Utilizar estándar del sistema ({default})",
@@ -205,6 +198,8 @@
205 "settings.app.accentColorInfo": "Escribe tu color de acento en un formato compatible con CSS. (Predeterminado: {defaultAccentColor})", 198 "settings.app.accentColorInfo": "Escribe tu color de acento en un formato compatible con CSS. (Predeterminado: {defaultAccentColor})",
206 "settings.app.buttonClearAllCache": "Limpiar caché", 199 "settings.app.buttonClearAllCache": "Limpiar caché",
207 "settings.app.buttonInstallUpdate": "Reiniciar e instalar actualización", 200 "settings.app.buttonInstallUpdate": "Reiniciar e instalar actualización",
201 "settings.app.buttonOpenFerdiProfileFolder": "Open Profile folder",
202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open Service Recipes folder",
208 "settings.app.buttonSearchForUpdate": "Comprobar actualizaciones", 203 "settings.app.buttonSearchForUpdate": "Comprobar actualizaciones",
209 "settings.app.cacheInfo": "El cache de Ferdi actualmente usa {size} de espacio en disco.", 204 "settings.app.cacheInfo": "El cache de Ferdi actualmente usa {size} de espacio en disco.",
210 "settings.app.cacheNotCleared": "No se ha podido eliminar el cache", 205 "settings.app.cacheNotCleared": "No se ha podido eliminar el cache",
@@ -275,6 +270,7 @@
275 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 270 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!",
276 "settings.app.spellCheckerLanguageInfo": "Ferdi utiliza el corrector ortográfico incluido en su Mac. Si desea cambiar los lenguajes que el corrector ortográfico revisa, lo puede hacer en las Preferencias del Sistema de su Mac.", 271 "settings.app.spellCheckerLanguageInfo": "Ferdi utiliza el corrector ortográfico incluido en su Mac. Si desea cambiar los lenguajes que el corrector ortográfico revisa, lo puede hacer en las Preferencias del Sistema de su Mac.",
277 "settings.app.subheadlineCache": "Caché", 272 "settings.app.subheadlineCache": "Caché",
273 "settings.app.subheadlineFerdiProfile": "Ferdi Profile",
278 "settings.app.todoServerInfo": "Este servidor se utilizará para la función \"Ferdi Todo\".", 274 "settings.app.todoServerInfo": "Este servidor se utilizará para la función \"Ferdi Todo\".",
279 "settings.app.translationHelp": "Ayúdanos a traducir Ferdi a tu idioma.", 275 "settings.app.translationHelp": "Ayúdanos a traducir Ferdi a tu idioma.",
280 "settings.app.universalDarkModeInfo": "El Modo Oscuro Universal intenta generar dinámicamente estilos de modo oscuro para servicios que de otro modo no están soportados actualmente.", 276 "settings.app.universalDarkModeInfo": "El Modo Oscuro Universal intenta generar dinámicamente estilos de modo oscuro para servicios que de otro modo no están soportados actualmente.",
diff --git a/src/i18n/locales/fi.json b/src/i18n/locales/fi.json
index cce6b3e9c..8cd5a23af 100644
--- a/src/i18n/locales/fi.json
+++ b/src/i18n/locales/fi.json
@@ -26,13 +26,6 @@
26 "feature.quickSwitch.info": "Valitse palvelu painamalla TAB, ↑ ja ↓. Avaa palvelu painamalla ENTER.", 26 "feature.quickSwitch.info": "Valitse palvelu painamalla TAB, ↑ ja ↓. Avaa palvelu painamalla ENTER.",
27 "feature.quickSwitch.search": "Etsi...", 27 "feature.quickSwitch.search": "Etsi...",
28 "feature.quickSwitch.title": "Pikavalitsin", 28 "feature.quickSwitch.title": "Pikavalitsin",
29 "feature.shareFranz.action.email": "Lähetä sähköpostina",
30 "feature.shareFranz.action.facebook": "Jaa Facebookissa",
31 "feature.shareFranz.action.twitter": "Jaa Twitterissä",
32 "feature.shareFranz.headline": "Ferdi on parempi yhdessä!",
33 "feature.shareFranz.shareText.email": "Lisäsin Ferdiin {count} palvelun! Hanki ilmainen sovellus WhatsAppille, Messengerille, Slackille, Skypelle ja muille palveluille osoitteessa www.getferdi.com",
34 "feature.shareFranz.shareText.twitter": "Olen lisännyt {count} palvelua Ferdiin! Hanki ilmainen sovellus WhatsAppille, Messengerille, Slackille, Skypelle ja muille palveluille osoitteessa www.getferdi.com /cc @FerdiMessenger",
35 "feature.shareFranz.text": "Kerro ystävillesi ja kollegoille, kuinka Ferdi on mahtava ja auta meitä levittämään sanaa eteenpäin.",
36 "global.api.unhealthy": "Ferdin verkkopalveluihin ei saada yhteyttä", 29 "global.api.unhealthy": "Ferdin verkkopalveluihin ei saada yhteyttä",
37 "global.notConnectedToTheInternet": "Et ole yhteydessä internetiin.", 30 "global.notConnectedToTheInternet": "Et ole yhteydessä internetiin.",
38 "global.spellchecker.useDefault": "Käytä järjestelmän oletusasetusta ({default})", 31 "global.spellchecker.useDefault": "Käytä järjestelmän oletusasetusta ({default})",
@@ -205,6 +198,8 @@
205 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", 198 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})",
206 "settings.app.buttonClearAllCache": "Tyhjennä välimuisti", 199 "settings.app.buttonClearAllCache": "Tyhjennä välimuisti",
207 "settings.app.buttonInstallUpdate": "Käynnistä uudelleen ja asenna päivitys", 200 "settings.app.buttonInstallUpdate": "Käynnistä uudelleen ja asenna päivitys",
201 "settings.app.buttonOpenFerdiProfileFolder": "Open Profile folder",
202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open Service Recipes folder",
208 "settings.app.buttonSearchForUpdate": "Tarkista päivitykset", 203 "settings.app.buttonSearchForUpdate": "Tarkista päivitykset",
209 "settings.app.cacheInfo": "Ferdi välimuisti käyttää tällä hetkellä {size} levytilaa.", 204 "settings.app.cacheInfo": "Ferdi välimuisti käyttää tällä hetkellä {size} levytilaa.",
210 "settings.app.cacheNotCleared": "Kaikkia väliaikaistiedostoja ei voitu poistaa", 205 "settings.app.cacheNotCleared": "Kaikkia väliaikaistiedostoja ei voitu poistaa",
@@ -275,6 +270,7 @@
275 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 270 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!",
276 "settings.app.spellCheckerLanguageInfo": "Ferdi käyttää Macin sisäänrakennettua oikolukua tarkastaessaan kirjoitusvirheitä. Jos haluat muuttaa tarkastettavaa kieltä, voit tehdä sen Macin järjestelmän asetuksissa.", 271 "settings.app.spellCheckerLanguageInfo": "Ferdi käyttää Macin sisäänrakennettua oikolukua tarkastaessaan kirjoitusvirheitä. Jos haluat muuttaa tarkastettavaa kieltä, voit tehdä sen Macin järjestelmän asetuksissa.",
277 "settings.app.subheadlineCache": "Välimuisti", 272 "settings.app.subheadlineCache": "Välimuisti",
273 "settings.app.subheadlineFerdiProfile": "Ferdi Profile",
278 "settings.app.todoServerInfo": "Tätä palvelinta käytetään \"Ferdi Todo\" -toiminnossa.", 274 "settings.app.todoServerInfo": "Tätä palvelinta käytetään \"Ferdi Todo\" -toiminnossa.",
279 "settings.app.translationHelp": "Auta meitä kääntämään Ferdi omalle kielellesi.", 275 "settings.app.translationHelp": "Auta meitä kääntämään Ferdi omalle kielellesi.",
280 "settings.app.universalDarkModeInfo": "Yleinen Tumma-tila yrittää luoda palveluille tyylejä, joita ei tueta tällä hetkellä.", 276 "settings.app.universalDarkModeInfo": "Yleinen Tumma-tila yrittää luoda palveluille tyylejä, joita ei tueta tällä hetkellä.",
diff --git a/src/i18n/locales/fr.json b/src/i18n/locales/fr.json
index 464c70138..9b513eaeb 100644
--- a/src/i18n/locales/fr.json
+++ b/src/i18n/locales/fr.json
@@ -26,13 +26,6 @@
26 "feature.quickSwitch.info": "Sélectionner un service avec TAB, ↑ et ↓. Ouvrir un service avec ENTER.", 26 "feature.quickSwitch.info": "Sélectionner un service avec TAB, ↑ et ↓. Ouvrir un service avec ENTER.",
27 "feature.quickSwitch.search": "Rechercher...", 27 "feature.quickSwitch.search": "Rechercher...",
28 "feature.quickSwitch.title": "Changement rapide", 28 "feature.quickSwitch.title": "Changement rapide",
29 "feature.shareFranz.action.email": "Envoyer par mail",
30 "feature.shareFranz.action.facebook": "Partager sur Facebook",
31 "feature.shareFranz.action.twitter": "Partager sur Twitter",
32 "feature.shareFranz.headline": "Ferdi est meilleur quand on est ensemble !",
33 "feature.shareFranz.shareText.email": "J'ai ajouté {count} services sur Ferdi ! Télécharger l'application gratuite pour WhatsApp, Messenger, Skype et autres sur www.getferdi.com",
34 "feature.shareFranz.shareText.twitter": "J'ai ajouté {count} services à Ferdi! Télécharge l'application gratuite pour WhatsApp, Messenger, Slack, Skype et autres sur www.getferdi.com /cc @FerdiMessenger",
35 "feature.shareFranz.text": "Dites à vos amis et collègues a quel point Ferdi est super et aidez nous à faire passer le mot.",
36 "global.api.unhealthy": "Impossible de se connecter aux services en ligne de Ferdi", 29 "global.api.unhealthy": "Impossible de se connecter aux services en ligne de Ferdi",
37 "global.notConnectedToTheInternet": "Vous n'êtes pas connecté à Internet.", 30 "global.notConnectedToTheInternet": "Vous n'êtes pas connecté à Internet.",
38 "global.spellchecker.useDefault": "Par défaut ({default})", 31 "global.spellchecker.useDefault": "Par défaut ({default})",
@@ -205,6 +198,8 @@
205 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", 198 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})",
206 "settings.app.buttonClearAllCache": "Vider le cache", 199 "settings.app.buttonClearAllCache": "Vider le cache",
207 "settings.app.buttonInstallUpdate": "Redémarrer et installer la mise à jour", 200 "settings.app.buttonInstallUpdate": "Redémarrer et installer la mise à jour",
201 "settings.app.buttonOpenFerdiProfileFolder": "Open Profile folder",
202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open Service Recipes folder",
208 "settings.app.buttonSearchForUpdate": "Vérifier les mises à jour", 203 "settings.app.buttonSearchForUpdate": "Vérifier les mises à jour",
209 "settings.app.cacheInfo": "Le cache de Ferdi occupe actuellement {size} en espace disque.", 204 "settings.app.cacheInfo": "Le cache de Ferdi occupe actuellement {size} en espace disque.",
210 "settings.app.cacheNotCleared": "Impossible de vider toute la cache", 205 "settings.app.cacheNotCleared": "Impossible de vider toute la cache",
@@ -275,6 +270,7 @@
275 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 270 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!",
276 "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.", 271 "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.",
277 "settings.app.subheadlineCache": "Cache", 272 "settings.app.subheadlineCache": "Cache",
273 "settings.app.subheadlineFerdiProfile": "Ferdi Profile",
278 "settings.app.todoServerInfo": "Ce serveur sera utilisé pour la fonctionnalité \"Ferdi Todo\".", 274 "settings.app.todoServerInfo": "Ce serveur sera utilisé pour la fonctionnalité \"Ferdi Todo\".",
279 "settings.app.translationHelp": "Aidez-nous à traduire Ferdi dans votre langue.", 275 "settings.app.translationHelp": "Aidez-nous à traduire Ferdi dans votre langue.",
280 "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.", 276 "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.",
diff --git a/src/i18n/locales/ga.json b/src/i18n/locales/ga.json
index cc7715e03..52d5b89fb 100644
--- a/src/i18n/locales/ga.json
+++ b/src/i18n/locales/ga.json
@@ -26,13 +26,6 @@
26 "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.", 26 "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.",
27 "feature.quickSwitch.search": "Search...", 27 "feature.quickSwitch.search": "Search...",
28 "feature.quickSwitch.title": "QuickSwitch", 28 "feature.quickSwitch.title": "QuickSwitch",
29 "feature.shareFranz.action.email": "Send as email",
30 "feature.shareFranz.action.facebook": "Share on Facebook",
31 "feature.shareFranz.action.twitter": "Share on Twitter",
32 "feature.shareFranz.headline": "Ferdi is better together!",
33 "feature.shareFranz.shareText.email": "I've added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.getferdi.com",
34 "feature.shareFranz.shareText.twitter": "I've added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.getferdi.com /cc @FerdiMessenger",
35 "feature.shareFranz.text": "Tell your friends and colleagues how awesome Ferdi is and help us to spread the word.",
36 "global.api.unhealthy": "Ní féidir nascadh le seirbhísí Ferdi ar líne", 29 "global.api.unhealthy": "Ní féidir nascadh le seirbhísí Ferdi ar líne",
37 "global.notConnectedToTheInternet": "Níl tú nasctha leis an Idirlíon.", 30 "global.notConnectedToTheInternet": "Níl tú nasctha leis an Idirlíon.",
38 "global.spellchecker.useDefault": "Use System Default ({default})", 31 "global.spellchecker.useDefault": "Use System Default ({default})",
@@ -205,6 +198,8 @@
205 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", 198 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})",
206 "settings.app.buttonClearAllCache": "Glan taisce", 199 "settings.app.buttonClearAllCache": "Glan taisce",
207 "settings.app.buttonInstallUpdate": "Atosaigh ⊠suiteáil nuashonrú", 200 "settings.app.buttonInstallUpdate": "Atosaigh ⊠suiteáil nuashonrú",
201 "settings.app.buttonOpenFerdiProfileFolder": "Open Profile folder",
202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open Service Recipes folder",
208 "settings.app.buttonSearchForUpdate": "Cuardaigh le nuashonruithe", 203 "settings.app.buttonSearchForUpdate": "Cuardaigh le nuashonruithe",
209 "settings.app.cacheInfo": "Tá taisce Ferdi ag baint úsáid as {size} den spás diosca.", 204 "settings.app.cacheInfo": "Tá taisce Ferdi ag baint úsáid as {size} den spás diosca.",
210 "settings.app.cacheNotCleared": "Couldn't clear all cache", 205 "settings.app.cacheNotCleared": "Couldn't clear all cache",
@@ -275,6 +270,7 @@
275 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 270 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!",
276 "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.", 271 "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.",
277 "settings.app.subheadlineCache": "Taisce", 272 "settings.app.subheadlineCache": "Taisce",
273 "settings.app.subheadlineFerdiProfile": "Ferdi Profile",
278 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", 274 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.",
279 "settings.app.translationHelp": "Cabhraigh linn Ferdi a aistriú i do theanga.", 275 "settings.app.translationHelp": "Cabhraigh linn Ferdi a aistriú i do theanga.",
280 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.", 276 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.",
diff --git a/src/i18n/locales/he.json b/src/i18n/locales/he.json
index fcba1f459..1ddcd2677 100644
--- a/src/i18n/locales/he.json
+++ b/src/i18n/locales/he.json
@@ -26,13 +26,6 @@
26 "feature.quickSwitch.info": "בחר שירות ×¢× ×ž×§×© ×” TAB, ↑ ו ↓. פתח שירות ב×מצעות מקש ×” ENTER.", 26 "feature.quickSwitch.info": "בחר שירות ×¢× ×ž×§×© ×” TAB, ↑ ו ↓. פתח שירות ב×מצעות מקש ×” ENTER.",
27 "feature.quickSwitch.search": "חיפוש...", 27 "feature.quickSwitch.search": "חיפוש...",
28 "feature.quickSwitch.title": "החלפה מהירה", 28 "feature.quickSwitch.title": "החלפה מהירה",
29 "feature.shareFranz.action.email": "שלח בתור ×ימייל",
30 "feature.shareFranz.action.facebook": "שיתוף ב-Facebook",
31 "feature.shareFranz.action.twitter": "שתף בטוויטר",
32 "feature.shareFranz.headline": "פרדי מוצלחת יותר ביחד!",
33 "feature.shareFranz.shareText.email": "הוספתי {count} ×©×™×¨×•×ª×™× ×œ×¤×¨×“×™! קבל ×ת ×”×פליקציה ×‘×—×™× × ×¢×‘×•×¨ ווטס×פ, מסנג'ר, סל×ק, סקייפ ועוד ב www.getferdi.com",
34 "feature.shareFranz.shareText.twitter": "הוספתי {count} ×©×™×¨×•×ª×™× ×œ×¤×¨×“×™! קבל ×ת ×”×פליקציה ×‘×—×™× × ×¢×‘×•×¨ ווטס×פ, מסנג'ר, סל×ק, סקייפ ועוד ב www.getferdi.com /cc @FerdiMessenger",
35 "feature.shareFranz.text": "ספר לחבריך ולעמיתיך כמה Ferdi ×”×•× ×ž×“×”×™× ×•×¢×–×•×¨ לנו להפיץ ×ת הבשורה.",
36 "global.api.unhealthy": "×œ× × ×™×ª×Ÿ להתחבר לשרותי ×”×ינטרנת של Ferdi", 29 "global.api.unhealthy": "×œ× × ×™×ª×Ÿ להתחבר לשרותי ×”×ינטרנת של Ferdi",
37 "global.notConnectedToTheInternet": "נר××” ש×תה ×œ× ×ž×—×•×‘×¨ ל×ינטרנט.", 30 "global.notConnectedToTheInternet": "נר××” ש×תה ×œ× ×ž×—×•×‘×¨ ל×ינטרנט.",
38 "global.spellchecker.useDefault": "השתמש בברירת המחדל של המערכת ({default})", 31 "global.spellchecker.useDefault": "השתמש בברירת המחדל של המערכת ({default})",
@@ -205,6 +198,8 @@
205 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", 198 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})",
206 "settings.app.buttonClearAllCache": "ניקוי המטמון", 199 "settings.app.buttonClearAllCache": "ניקוי המטמון",
207 "settings.app.buttonInstallUpdate": "הפעל מחדש והתקן עדכוני×", 200 "settings.app.buttonInstallUpdate": "הפעל מחדש והתקן עדכוני×",
201 "settings.app.buttonOpenFerdiProfileFolder": "Open Profile folder",
202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open Service Recipes folder",
208 "settings.app.buttonSearchForUpdate": "חפש עדכוני×", 203 "settings.app.buttonSearchForUpdate": "חפש עדכוני×",
209 "settings.app.cacheInfo": "פרדי משתמש כרגע ב {size} מתוך שטח הדיסק כזיכרון מטמון.", 204 "settings.app.cacheInfo": "פרדי משתמש כרגע ב {size} מתוך שטח הדיסק כזיכרון מטמון.",
210 "settings.app.cacheNotCleared": "×œ× × ×™×ª×Ÿ לנקות ×ת כל זיכרון המטמון", 205 "settings.app.cacheNotCleared": "×œ× × ×™×ª×Ÿ לנקות ×ת כל זיכרון המטמון",
@@ -275,6 +270,7 @@
275 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 270 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!",
276 "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.", 271 "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.",
277 "settings.app.subheadlineCache": "זיכרון מטמון", 272 "settings.app.subheadlineCache": "זיכרון מטמון",
273 "settings.app.subheadlineFerdiProfile": "Ferdi Profile",
278 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", 274 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.",
279 "settings.app.translationHelp": "Help us to translate Ferdi into your language.", 275 "settings.app.translationHelp": "Help us to translate Ferdi into your language.",
280 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.", 276 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.",
diff --git a/src/i18n/locales/hr.json b/src/i18n/locales/hr.json
index a1716483e..79b71986e 100644
--- a/src/i18n/locales/hr.json
+++ b/src/i18n/locales/hr.json
@@ -26,13 +26,6 @@
26 "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.", 26 "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.",
27 "feature.quickSwitch.search": "Search...", 27 "feature.quickSwitch.search": "Search...",
28 "feature.quickSwitch.title": "QuickSwitch", 28 "feature.quickSwitch.title": "QuickSwitch",
29 "feature.shareFranz.action.email": "Send as email",
30 "feature.shareFranz.action.facebook": "Share on Facebook",
31 "feature.shareFranz.action.twitter": "Share on Twitter",
32 "feature.shareFranz.headline": "Ferdi is better together!",
33 "feature.shareFranz.shareText.email": "I've added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.getferdi.com",
34 "feature.shareFranz.shareText.twitter": "I've added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.getferdi.com /cc @FerdiMessenger",
35 "feature.shareFranz.text": "Tell your friends and colleagues how awesome Ferdi is and help us to spread the word.",
36 "global.api.unhealthy": "Nije se moguće povezati na Francove on-line servise. ", 29 "global.api.unhealthy": "Nije se moguće povezati na Francove on-line servise. ",
37 "global.notConnectedToTheInternet": "Sada ste povezani s internetom. ", 30 "global.notConnectedToTheInternet": "Sada ste povezani s internetom. ",
38 "global.spellchecker.useDefault": "Use System Default ({default})", 31 "global.spellchecker.useDefault": "Use System Default ({default})",
@@ -205,6 +198,8 @@
205 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", 198 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})",
206 "settings.app.buttonClearAllCache": "OÄisti memoriju", 199 "settings.app.buttonClearAllCache": "OÄisti memoriju",
207 "settings.app.buttonInstallUpdate": "Ponovo pokreni i instaliraj ažuriranje", 200 "settings.app.buttonInstallUpdate": "Ponovo pokreni i instaliraj ažuriranje",
201 "settings.app.buttonOpenFerdiProfileFolder": "Open Profile folder",
202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open Service Recipes folder",
208 "settings.app.buttonSearchForUpdate": "Potraži ažuriranja", 203 "settings.app.buttonSearchForUpdate": "Potraži ažuriranja",
209 "settings.app.cacheInfo": "Ferdi predmemorija trenutno koristi {size} prostora na disku", 204 "settings.app.cacheInfo": "Ferdi predmemorija trenutno koristi {size} prostora na disku",
210 "settings.app.cacheNotCleared": "Couldn't clear all cache", 205 "settings.app.cacheNotCleared": "Couldn't clear all cache",
@@ -275,6 +270,7 @@
275 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 270 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!",
276 "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.", 271 "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.",
277 "settings.app.subheadlineCache": "Predmemorija", 272 "settings.app.subheadlineCache": "Predmemorija",
273 "settings.app.subheadlineFerdiProfile": "Ferdi Profile",
278 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", 274 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.",
279 "settings.app.translationHelp": "Pomozite nam prevesti aplikaciju na Vaš jezik. ", 275 "settings.app.translationHelp": "Pomozite nam prevesti aplikaciju na Vaš jezik. ",
280 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.", 276 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.",
diff --git a/src/i18n/locales/hu.json b/src/i18n/locales/hu.json
index fe52240f4..19ff83876 100644
--- a/src/i18n/locales/hu.json
+++ b/src/i18n/locales/hu.json
@@ -2,7 +2,7 @@
2 "app.errorHandler.action": "Újratöltés", 2 "app.errorHandler.action": "Újratöltés",
3 "app.errorHandler.headline": "Valami nem jött össze", 3 "app.errorHandler.headline": "Valami nem jött össze",
4 "changeserver.customServerLabel": "Egyéni szerver", 4 "changeserver.customServerLabel": "Egyéni szerver",
5 "changeserver.headline": "Change server", 5 "changeserver.headline": "Szerver megváltoztatása",
6 "changeserver.label": "Szerver", 6 "changeserver.label": "Szerver",
7 "changeserver.submit": "Küldés", 7 "changeserver.submit": "Küldés",
8 "changeserver.urlError": "Adjon meg egy érvényes URL-t", 8 "changeserver.urlError": "Adjon meg egy érvényes URL-t",
@@ -12,10 +12,10 @@
12 "connectionLostBanner.message": "Ja ne! Ferdi nem tud kapcsolodni {name}-hez.", 12 "connectionLostBanner.message": "Ja ne! Ferdi nem tud kapcsolodni {name}-hez.",
13 "feature.announcements.changelog.headline": "Ferdi {version} változásai", 13 "feature.announcements.changelog.headline": "Ferdi {version} változásai",
14 "feature.debugger.title": "Hibakeresési napló publikálása", 14 "feature.debugger.title": "Hibakeresési napló publikálása",
15 "feature.nightlyBuilds.activate": "Activate", 15 "feature.nightlyBuilds.activate": "Aktiválás",
16 "feature.nightlyBuilds.cancel": "Mégsem", 16 "feature.nightlyBuilds.cancel": "Mégsem",
17 "feature.nightlyBuilds.info": "Nightly builds are highly experimental versions of Ferdi that may contain unpolished or uncompleted features. These nightly builds are mainly used by developers to test their newly developed features and how they will perform in the final build. If you don't know what you are doing, we suggest not activating nightly builds.", 17 "feature.nightlyBuilds.info": "Nightly builds are highly experimental versions of Ferdi that may contain unpolished or uncompleted features. These nightly builds are mainly used by developers to test their newly developed features and how they will perform in the final build. If you don't know what you are doing, we suggest not activating nightly builds.",
18 "feature.nightlyBuilds.title": "Nightly Builds", 18 "feature.nightlyBuilds.title": "Nightly verziók",
19 "feature.publishDebugInfo.error": "Hiba történt a hibakeresési napló publikálása közben. Kérem próbálja meg később.", 19 "feature.publishDebugInfo.error": "Hiba történt a hibakeresési napló publikálása közben. Kérem próbálja meg később.",
20 "feature.publishDebugInfo.info": "Publishing your debug information helps us find issues and errors in Ferdi. By publishing your debug information you accept Ferdi Debugger's privacy policy and terms of service", 20 "feature.publishDebugInfo.info": "Publishing your debug information helps us find issues and errors in Ferdi. By publishing your debug information you accept Ferdi Debugger's privacy policy and terms of service",
21 "feature.publishDebugInfo.privacy": "Adatvédelmi szabályzat", 21 "feature.publishDebugInfo.privacy": "Adatvédelmi szabályzat",
@@ -25,14 +25,7 @@
25 "feature.publishDebugInfo.title": "Hibakeresési napló publikálása", 25 "feature.publishDebugInfo.title": "Hibakeresési napló publikálása",
26 "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.", 26 "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.",
27 "feature.quickSwitch.search": "Keresés...", 27 "feature.quickSwitch.search": "Keresés...",
28 "feature.quickSwitch.title": "QuickSwitch", 28 "feature.quickSwitch.title": "Gyorsváltó",
29 "feature.shareFranz.action.email": "Küldés email-ben",
30 "feature.shareFranz.action.facebook": "Megosztás Facebook-on",
31 "feature.shareFranz.action.twitter": "Megosztás Twitter-en",
32 "feature.shareFranz.headline": "A Ferdi barátokkal együtt mégjobb!",
33 "feature.shareFranz.shareText.email": "I've added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.getferdi.com",
34 "feature.shareFranz.shareText.twitter": "I've added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.getferdi.com /cc @FerdiMessenger",
35 "feature.shareFranz.text": "Tell your friends and colleagues how awesome Ferdi is and help us to spread the word.",
36 "global.api.unhealthy": "Nem lehet csatlakozni a Ferdi online szolgáltatáshoz", 29 "global.api.unhealthy": "Nem lehet csatlakozni a Ferdi online szolgáltatáshoz",
37 "global.notConnectedToTheInternet": "Nincs hálózati kapcsolat.", 30 "global.notConnectedToTheInternet": "Nincs hálózati kapcsolat.",
38 "global.spellchecker.useDefault": "Rendszer alapbeállítás használata ({default})", 31 "global.spellchecker.useDefault": "Rendszer alapbeállítás használata ({default})",
@@ -53,7 +46,7 @@
53 "infobar.requiredRequestsFailed": "Szolgáltatások és felhasználói információk nem tölthetők be", 46 "infobar.requiredRequestsFailed": "Szolgáltatások és felhasználói információk nem tölthetők be",
54 "infobar.servicesUpdated": "A szolgáltatások frissítésre kerültek.", 47 "infobar.servicesUpdated": "A szolgáltatások frissítésre kerültek.",
55 "infobar.updateAvailable": "Új frissítés érhető el a Ferdi-hoz.", 48 "infobar.updateAvailable": "Új frissítés érhető el a Ferdi-hoz.",
56 "infobox.dismiss": "Dismiss", 49 "infobox.dismiss": "Mégsem",
57 "invite.email.label": "Email cím", 50 "invite.email.label": "Email cím",
58 "invite.headline.friends": "Hívd meg 3 barátodat vagy kollégádat", 51 "invite.headline.friends": "Hívd meg 3 barátodat vagy kollégádat",
59 "invite.name.label": "Név", 52 "invite.name.label": "Név",
@@ -62,13 +55,13 @@
62 "invite.successInfo": "Meghívás sikeresen elküldve", 55 "invite.successInfo": "Meghívás sikeresen elküldve",
63 "locked.headline": "Zárolva", 56 "locked.headline": "Zárolva",
64 "locked.info": "Ferdi is currently locked. Please unlock Ferdi with your password to see your messages.", 57 "locked.info": "Ferdi is currently locked. Please unlock Ferdi with your password to see your messages.",
65 "locked.invalidCredentials": "Password invalid", 58 "locked.invalidCredentials": "Érvénytelen jelszó",
66 "locked.password.label": "Password", 59 "locked.password.label": "Jelszó",
67 "locked.submit.label": "Feloldás", 60 "locked.submit.label": "Feloldás",
68 "locked.touchId": "Feloldás ujjlenyomattal", 61 "locked.touchId": "Feloldás ujjlenyomattal",
69 "locked.touchIdPrompt": "feloldás ujjlenyomattal", 62 "locked.touchIdPrompt": "feloldás ujjlenyomattal",
70 "locked.unlockWithPassword": "Feloldás jelszóval", 63 "locked.unlockWithPassword": "Feloldás jelszóval",
71 "login.changeServer": "Change server", 64 "login.changeServer": "Szerver megváltoztatása",
72 "login.customServerQuestion": "Using a custom Ferdi server?", 65 "login.customServerQuestion": "Using a custom Ferdi server?",
73 "login.customServerSuggestion": "Try importing your Franz account", 66 "login.customServerSuggestion": "Try importing your Franz account",
74 "login.email.label": "Email cím", 67 "login.email.label": "Email cím",
@@ -76,7 +69,7 @@
76 "login.invalidCredentials": "Hibás email cím vagy jelszó", 69 "login.invalidCredentials": "Hibás email cím vagy jelszó",
77 "login.link.password": "Jelszó visszaállítás", 70 "login.link.password": "Jelszó visszaállítás",
78 "login.link.signup": "Új fiók létrehozása", 71 "login.link.signup": "Új fiók létrehozása",
79 "login.password.label": "Password", 72 "login.password.label": "Jelszó",
80 "login.serverLogout": "A munkamenet lejárt, kérlek lépj be újra.", 73 "login.serverLogout": "A munkamenet lejárt, kérlek lépj be újra.",
81 "login.submit.label": "Bejelentkezés", 74 "login.submit.label": "Bejelentkezés",
82 "login.tokenExpired": "A munkamenet lejárt, kérlek lépj be újra.", 75 "login.tokenExpired": "A munkamenet lejárt, kérlek lépj be újra.",
@@ -84,30 +77,30 @@
84 "menu.Todoss.openTodosDrawer": "Tennivalók sáv kinyitása", 77 "menu.Todoss.openTodosDrawer": "Tennivalók sáv kinyitása",
85 "menu.app.about": "Névjegy", 78 "menu.app.about": "Névjegy",
86 "menu.app.announcement": "Mi újság?", 79 "menu.app.announcement": "Mi újság?",
87 "menu.app.autohideMenuBar": "Auto-hide menu bar", 80 "menu.app.autohideMenuBar": "Menüsáv automatikus elrejtése",
88 "menu.app.checkForUpdates": "Frissítések keresése", 81 "menu.app.checkForUpdates": "Frissítések keresése",
89 "menu.app.hide": "Elrejt", 82 "menu.app.hide": "Elrejt",
90 "menu.app.hideOthers": "Hide Others", 83 "menu.app.hideOthers": "Többi elrejtése",
91 "menu.app.quit": "Quit", 84 "menu.app.quit": "Kilépés",
92 "menu.app.settings": "Beállítások", 85 "menu.app.settings": "Beállítások",
93 "menu.app.unhide": "Unhide", 86 "menu.app.unhide": "Megjelenít",
94 "menu.edit": "Szerkesztés", 87 "menu.edit": "Szerkesztés",
95 "menu.edit.copy": "Copy", 88 "menu.edit.copy": "Másolás",
96 "menu.edit.cut": "Cut", 89 "menu.edit.cut": "Kivágás",
97 "menu.edit.delete": "Törlés", 90 "menu.edit.delete": "Törlés",
98 "menu.edit.emojiSymbols": "Emoji és Szimbólumok", 91 "menu.edit.emojiSymbols": "Emoji és Szimbólumok",
99 "menu.edit.findInPage": "Find in Page", 92 "menu.edit.findInPage": "Keresés az oldalon",
100 "menu.edit.paste": "Paste", 93 "menu.edit.paste": "Beillesztés",
101 "menu.edit.pasteAndMatchStyle": "Paste And Match Style", 94 "menu.edit.pasteAndMatchStyle": "Beillesztés ugyanazzal a megjelenéssel",
102 "menu.edit.redo": "Redo", 95 "menu.edit.redo": "Újra",
103 "menu.edit.selectAll": "Select All", 96 "menu.edit.selectAll": "Összes kijelölése",
104 "menu.edit.speech": "Beszéd", 97 "menu.edit.speech": "Beszéd",
105 "menu.edit.startDictation": "Diktálás elkezdése", 98 "menu.edit.startDictation": "Diktálás elkezdése",
106 "menu.edit.startSpeaking": "Beszélgetés kezdeményezése", 99 "menu.edit.startSpeaking": "Beszélgetés kezdeményezése",
107 "menu.edit.stopSpeaking": "Beszéd vége", 100 "menu.edit.stopSpeaking": "Beszéd vége",
108 "menu.edit.undo": "Undo", 101 "menu.edit.undo": "Visszavonás",
109 "menu.file": "Fájl", 102 "menu.file": "Fájl",
110 "menu.help": "Help", 103 "menu.help": "Súgó",
111 "menu.help.changelog": "Változások listája", 104 "menu.help.changelog": "Változások listája",
112 "menu.help.debugInfo": "Hibajelentés másolása", 105 "menu.help.debugInfo": "Hibajelentés másolása",
113 "menu.help.debugInfoCopiedBody": "A Hibajelentést a vágólapra másoltuk.", 106 "menu.help.debugInfoCopiedBody": "A Hibajelentést a vágólapra másoltuk.",
@@ -121,29 +114,29 @@
121 "menu.services": "Szolgáltatások", 114 "menu.services": "Szolgáltatások",
122 "menu.services.activatePreviousService": "Előző szolgáltatás", 115 "menu.services.activatePreviousService": "Előző szolgáltatás",
123 "menu.services.addNewService": "Add New Service", 116 "menu.services.addNewService": "Add New Service",
124 "menu.services.goHome": "Home", 117 "menu.services.goHome": "Kezdőlap",
125 "menu.services.setNextServiceActive": "Következő szolgáltatás", 118 "menu.services.setNextServiceActive": "Következő szolgáltatás",
126 "menu.todos": "Tennivalók", 119 "menu.todos": "Tennivalók",
127 "menu.todos.enableTodos": "Enable Todos", 120 "menu.todos.enableTodos": "Enable Todos",
128 "menu.view": "Nézet", 121 "menu.view": "Nézet",
129 "menu.view.back": "Vissza", 122 "menu.view.back": "Vissza",
130 "menu.view.forward": "Előre", 123 "menu.view.forward": "Előre",
131 "menu.view.lockFerdi": "Lock Ferdi", 124 "menu.view.lockFerdi": "Ferdi bezárása",
132 "menu.view.openQuickSwitch": "Open Quick Switch", 125 "menu.view.openQuickSwitch": "Open Quick Switch",
133 "menu.view.reloadFerdi": "Reload Ferdi", 126 "menu.view.reloadFerdi": "Ferdi újratöltése",
134 "menu.view.reloadService": "Szolgáltatás újraindítása", 127 "menu.view.reloadService": "Szolgáltatás újraindítása",
135 "menu.view.reloadTodos": "Reload ToDos", 128 "menu.view.reloadTodos": "Reload ToDos",
136 "menu.view.resetZoom": "Actual Size", 129 "menu.view.resetZoom": "Tényleges méret",
137 "menu.view.toggleDarkMode": "Toggle Dark Mode", 130 "menu.view.toggleDarkMode": "Sötét mód ki-/bekapcsolása",
138 "menu.view.toggleDevTools": "Fejlesztői eszközök ki/bekapcsolása", 131 "menu.view.toggleDevTools": "Fejlesztői eszközök ki/bekapcsolása",
139 "menu.view.toggleFullScreen": "Toggle Full Screen", 132 "menu.view.toggleFullScreen": "Teljes képernyős mód ki/bekapcsolása",
140 "menu.view.toggleServiceDevTools": "Szolgáltatás Fejlesztői Eszközök ki/bekapcsolása", 133 "menu.view.toggleServiceDevTools": "Szolgáltatás Fejlesztői Eszközök ki/bekapcsolása",
141 "menu.view.toggleTodosDevTools": "Tennivalók Fejlesztői Eszközök kapcsolása", 134 "menu.view.toggleTodosDevTools": "Tennivalók Fejlesztői Eszközök kapcsolása",
142 "menu.view.zoomIn": "Zoom In", 135 "menu.view.zoomIn": "Nagyítás",
143 "menu.view.zoomOut": "Zoom Out", 136 "menu.view.zoomOut": "Kicsinyítés",
144 "menu.window": "Window", 137 "menu.window": "Ablak",
145 "menu.window.close": "Close", 138 "menu.window.close": "Bezárás",
146 "menu.window.minimize": "Minimize", 139 "menu.window.minimize": "Tálcára",
147 "menu.workspaces": "Munkaterületek", 140 "menu.workspaces": "Munkaterületek",
148 "menu.workspaces.addNewWorkspace": "Új munkaterület...", 141 "menu.workspaces.addNewWorkspace": "Új munkaterület...",
149 "menu.workspaces.closeWorkspaceDrawer": "Munkaterület panel bezárása", 142 "menu.workspaces.closeWorkspaceDrawer": "Munkaterület panel bezárása",
@@ -156,9 +149,9 @@
156 "password.noUser": "Nem található felhasználó a megadott email címmel", 149 "password.noUser": "Nem található felhasználó a megadott email címmel",
157 "password.submit.label": "Küldés", 150 "password.submit.label": "Küldés",
158 "password.successInfo": "Ellenőrizd az email fiókodat", 151 "password.successInfo": "Ellenőrizd az email fiókodat",
159 "pricing.features.accountSync": "Account Synchronisation", 152 "pricing.features.accountSync": "Fiók szinkronizálás",
160 "pricing.features.customWebsites": "Egyéni weboldalak megadása", 153 "pricing.features.customWebsites": "Egyéni weboldalak megadása",
161 "pricing.features.desktopNotifications": "Desktop Notifications", 154 "pricing.features.desktopNotifications": "Asztali értesítések",
162 "pricing.features.onPremise": "Helyi és egyéb távoli szolgáltatások", 155 "pricing.features.onPremise": "Helyi és egyéb távoli szolgáltatások",
163 "pricing.features.recipes": "Choose from more than 70 Services", 156 "pricing.features.recipes": "Choose from more than 70 Services",
164 "pricing.features.serviceProxies": "Szolgáltatás Proxy-k", 157 "pricing.features.serviceProxies": "Szolgáltatás Proxy-k",
@@ -178,14 +171,14 @@
178 "service.errorHandler.headline": "Jajj ne!", 171 "service.errorHandler.headline": "Jajj ne!",
179 "service.errorHandler.message": "Hiba", 172 "service.errorHandler.message": "Hiba",
180 "service.errorHandler.text": "{name} nem tudott betöltődni.", 173 "service.errorHandler.text": "{name} nem tudott betöltődni.",
181 "service.webviewLoader.loading": "Loading {service}", 174 "service.webviewLoader.loading": "{service} betöltése",
182 "services.getStarted": "Kezdj hozzá", 175 "services.getStarted": "Kezdj hozzá",
183 "services.login": "Please login to use Ferdi.", 176 "services.login": "Kérlek, lépj be a Ferdi használatához.",
184 "services.serverInfo": "Optionally, you can change your Ferdi server by clicking the cog in the bottom left corner. If you are switching over (from one of the hosted servers) to using Ferdi without an account, please be informed that you can export your data from that server and subsequently import it using the Help menu to resurrect all your workspaces and configured services!", 177 "services.serverInfo": "Optionally, you can change your Ferdi server by clicking the cog in the bottom left corner. If you are switching over (from one of the hosted servers) to using Ferdi without an account, please be informed that you can export your data from that server and subsequently import it using the Help menu to resurrect all your workspaces and configured services!",
185 "services.serverless": "Use Ferdi without an Account", 178 "services.serverless": "Use Ferdi without an Account",
186 "services.welcome": "Üdvözöl a Ferdi", 179 "services.welcome": "Üdvözöl a Ferdi",
187 "settings.account.account.editButton": "Fiók szerkesztése", 180 "settings.account.account.editButton": "Fiók szerkesztése",
188 "settings.account.accountUnavailable": "Account is unavailable", 181 "settings.account.accountUnavailable": "A Fiók nem érhető el",
189 "settings.account.accountUnavailableInfo": "You are using Ferdi without an account. If you want to use Ferdi with an account and keep your services synchronized across installations, please select a server in the Settings tab then login.", 182 "settings.account.accountUnavailableInfo": "You are using Ferdi without an account. If you want to use Ferdi with an account and keep your services synchronized across installations, please select a server in the Settings tab then login.",
190 "settings.account.buttonSave": "Profil frissítése", 183 "settings.account.buttonSave": "Profil frissítése",
191 "settings.account.deleteAccount": "Fiók törlése", 184 "settings.account.deleteAccount": "Fiók törlése",
@@ -205,53 +198,55 @@
205 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", 198 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})",
206 "settings.app.buttonClearAllCache": "Gyorsítótár törlése", 199 "settings.app.buttonClearAllCache": "Gyorsítótár törlése",
207 "settings.app.buttonInstallUpdate": "Újraindítás és frissítés telepítése", 200 "settings.app.buttonInstallUpdate": "Újraindítás és frissítés telepítése",
201 "settings.app.buttonOpenFerdiProfileFolder": "Open Profile folder",
202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open Service Recipes folder",
208 "settings.app.buttonSearchForUpdate": "Frissítések keresése", 203 "settings.app.buttonSearchForUpdate": "Frissítések keresése",
209 "settings.app.cacheInfo": "A Ferdi gyorsítótár jelenleg {size} lemezterületet használ.", 204 "settings.app.cacheInfo": "A Ferdi gyorsítótár jelenleg {size} lemezterületet használ.",
210 "settings.app.cacheNotCleared": "Couldn't clear all cache", 205 "settings.app.cacheNotCleared": "Couldn't clear all cache",
211 "settings.app.closeSettings": "Close settings", 206 "settings.app.closeSettings": "Beállítások bezárása",
212 "settings.app.currentVersion": "Aktuális verzió:", 207 "settings.app.currentVersion": "Aktuális verzió:",
213 "settings.app.form.accentColor": "Accent color", 208 "settings.app.form.accentColor": "Kiemelőszín",
214 "settings.app.form.adaptableDarkMode": "Synchronize dark mode with my OS's dark mode setting", 209 "settings.app.form.adaptableDarkMode": "Synchronize dark mode with my OS's dark mode setting",
215 "settings.app.form.alwaysShowWorkspaces": "Always show workspace drawer", 210 "settings.app.form.alwaysShowWorkspaces": "Always show workspace drawer",
216 "settings.app.form.autoLaunchInBackground": "Megnyitás háttérben", 211 "settings.app.form.autoLaunchInBackground": "Megnyitás háttérben",
217 "settings.app.form.autoLaunchOnStart": "Ferdi betöltése indításkor", 212 "settings.app.form.autoLaunchOnStart": "Ferdi betöltése indításkor",
218 "settings.app.form.automaticUpdates": "Enable updates", 213 "settings.app.form.automaticUpdates": "Frissítés engedélyezése",
219 "settings.app.form.beta": "Béta verziók keresése", 214 "settings.app.form.beta": "Béta verziók keresése",
220 "settings.app.form.clipboardNotifications": "Don't show notifications for clipboard events", 215 "settings.app.form.clipboardNotifications": "Don't show notifications for clipboard events",
221 "settings.app.form.closeToSystemTray": "Close Ferdi to system tray", 216 "settings.app.form.closeToSystemTray": "Close Ferdi to system tray",
222 "settings.app.form.customTodoServer": "Custom Todo Server", 217 "settings.app.form.customTodoServer": "Custom Todo Server",
223 "settings.app.form.darkMode": "Enable dark mode", 218 "settings.app.form.darkMode": "Sötét mód engedélyezése",
224 "settings.app.form.enableGPUAcceleration": "Hardveres gyorsítás engedélyezése", 219 "settings.app.form.enableGPUAcceleration": "Hardveres gyorsítás engedélyezése",
225 "settings.app.form.enableLock": "Enable Password Lock", 220 "settings.app.form.enableLock": "Jelszavas zár engedélyezése",
226 "settings.app.form.enableMenuBar": "Always show Ferdi in Menu Bar", 221 "settings.app.form.enableMenuBar": "Always show Ferdi in Menu Bar",
227 "settings.app.form.enableSpellchecking": "Helyesírás-ellenőrzés engedélyezése", 222 "settings.app.form.enableSpellchecking": "Helyesírás-ellenőrzés engedélyezése",
228 "settings.app.form.enableSystemTray": "Ferdi mutatása a tálcán", 223 "settings.app.form.enableSystemTray": "Ferdi mutatása a tálcán",
229 "settings.app.form.enableTodos": "Ferdi Tennivalók bekapcsolása", 224 "settings.app.form.enableTodos": "Ferdi Tennivalók bekapcsolása",
230 "settings.app.form.hibernateOnStartup": "Keep services in hibernation on startup", 225 "settings.app.form.hibernateOnStartup": "Keep services in hibernation on startup",
231 "settings.app.form.hibernationStrategy": "Hibernation strategy", 226 "settings.app.form.hibernationStrategy": "Hibernation strategy",
232 "settings.app.form.iconSize": "Service icon size", 227 "settings.app.form.iconSize": "Szolgáltatás ikon méret",
233 "settings.app.form.inactivityLock": "Lock after inactivity", 228 "settings.app.form.inactivityLock": "Lock after inactivity",
234 "settings.app.form.keepAllWorkspacesLoaded": "Keep all workspaces loaded", 229 "settings.app.form.keepAllWorkspacesLoaded": "Keep all workspaces loaded",
235 "settings.app.form.language": "Nyelv", 230 "settings.app.form.language": "Nyelv",
236 "settings.app.form.lockPassword": "Password", 231 "settings.app.form.lockPassword": "Jelszó",
237 "settings.app.form.minimizeToSystemTray": "Ferdi kicsinyítése a tálcára", 232 "settings.app.form.minimizeToSystemTray": "Ferdi kicsinyítése a tálcára",
238 "settings.app.form.navigationBarBehaviour": "Navigation bar behaviour", 233 "settings.app.form.navigationBarBehaviour": "Navigation bar behaviour",
239 "settings.app.form.notifyTaskBarOnMessage": "Notify TaskBar/Dock on new message", 234 "settings.app.form.notifyTaskBarOnMessage": "Notify TaskBar/Dock on new message",
240 "settings.app.form.passwordToggle": "Password toggle", 235 "settings.app.form.passwordToggle": "Jelszó bekapcsolás",
241 "settings.app.form.predefinedTodoServer": "Todo Server", 236 "settings.app.form.predefinedTodoServer": "Todo Server",
242 "settings.app.form.privateNotifications": "Don't show message content in notifications", 237 "settings.app.form.privateNotifications": "Don't show message content in notifications",
243 "settings.app.form.reloadAfterResume": "Reload Ferdi after system resume", 238 "settings.app.form.reloadAfterResume": "Reload Ferdi after system resume",
244 "settings.app.form.runInBackground": "Ferdi fusson a háttérben az ablak bezárásakor", 239 "settings.app.form.runInBackground": "Ferdi fusson a háttérben az ablak bezárásakor",
245 "settings.app.form.scheduledDNDEnabled": "Enable scheduled Do-not-Disturb", 240 "settings.app.form.scheduledDNDEnabled": "Enable scheduled Do-not-Disturb",
246 "settings.app.form.scheduledDNDEnd": "To", 241 "settings.app.form.scheduledDNDEnd": "Címzett",
247 "settings.app.form.scheduledDNDStart": "From", 242 "settings.app.form.scheduledDNDStart": "Feladó",
248 "settings.app.form.searchEngine": "Search engine", 243 "settings.app.form.searchEngine": "Keresőmotor",
249 "settings.app.form.sentry": "Send telemetry data", 244 "settings.app.form.sentry": "Send telemetry data",
250 "settings.app.form.serviceRibbonWidth": "Sidebar width", 245 "settings.app.form.serviceRibbonWidth": "Oldalsáv szélesség",
251 "settings.app.form.showDisabledServices": "Letiltott szolgáltatások megjelenítése", 246 "settings.app.form.showDisabledServices": "Letiltott szolgáltatások megjelenítése",
252 "settings.app.form.showDragArea": "Show draggable area on window", 247 "settings.app.form.showDragArea": "Show draggable area on window",
253 "settings.app.form.showMessagesBadgesWhenMuted": "Mutassa az 'olvasatlan üzenet' jelzést, amikor az értesítések le vannak tiltva", 248 "settings.app.form.showMessagesBadgesWhenMuted": "Mutassa az 'olvasatlan üzenet' jelzést, amikor az értesítések le vannak tiltva",
254 "settings.app.form.startMinimized": "Start minimized", 249 "settings.app.form.startMinimized": "Indítás minimalizálva",
255 "settings.app.form.universalDarkMode": "Enable universal Dark Mode", 250 "settings.app.form.universalDarkMode": "Enable universal Dark Mode",
256 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi", 251 "settings.app.form.useTouchIdToUnlock": "Allow using TouchID to unlock Ferdi",
257 "settings.app.form.useVerticalStyle": "Use vertical style", 252 "settings.app.form.useVerticalStyle": "Use vertical style",
@@ -261,13 +256,13 @@
261 "settings.app.headlineAppearance": "Megjelenés", 256 "settings.app.headlineAppearance": "Megjelenés",
262 "settings.app.headlineGeneral": "Ãltalános", 257 "settings.app.headlineGeneral": "Ãltalános",
263 "settings.app.headlineLanguage": "Nyelv", 258 "settings.app.headlineLanguage": "Nyelv",
264 "settings.app.headlinePrivacy": "Privacy", 259 "settings.app.headlinePrivacy": "Biztonság",
265 "settings.app.headlineUpdates": "Frissítések", 260 "settings.app.headlineUpdates": "Frissítések",
266 "settings.app.hibernateInfo": "By default, Ferdi will keep all your services open and loaded in the background so they are ready when you want to use them. Service Hibernation will unload your services after a specified amount. This is useful to save RAM or keeping services from slowing down your computer.", 261 "settings.app.hibernateInfo": "By default, Ferdi will keep all your services open and loaded in the background so they are ready when you want to use them. Service Hibernation will unload your services after a specified amount. This is useful to save RAM or keeping services from slowing down your computer.",
267 "settings.app.inactivityLockInfo": "Minutes of inactivity, after which Ferdi should automatically lock. Use 0 to disable", 262 "settings.app.inactivityLockInfo": "Minutes of inactivity, after which Ferdi should automatically lock. Use 0 to disable",
268 "settings.app.languageDisclaimer": "A hivatalos fordítások angol és német nyelven elérhetőek. Minden más nyelv közösségi fordításon alapul.", 263 "settings.app.languageDisclaimer": "A hivatalos fordítások angol és német nyelven elérhetőek. Minden más nyelv közösségi fordításon alapul.",
269 "settings.app.lockInfo": "Password Lock allows you to keep your messages protected.\nUsing Password Lock, you will be prompted to enter your password everytime you start Ferdi or lock Ferdi yourself using the lock symbol in the bottom left corner or the shortcut {lockShortcut}.", 264 "settings.app.lockInfo": "Password Lock allows you to keep your messages protected.\nUsing Password Lock, you will be prompted to enter your password everytime you start Ferdi or lock Ferdi yourself using the lock symbol in the bottom left corner or the shortcut {lockShortcut}.",
270 "settings.app.lockedPassword": "Password", 265 "settings.app.lockedPassword": "Jelszó",
271 "settings.app.lockedPasswordInfo": "Please make sure to set a password you'll remember.\nIf you loose this password, you will have to reinstall Ferdi.", 266 "settings.app.lockedPasswordInfo": "Please make sure to set a password you'll remember.\nIf you loose this password, you will have to reinstall Ferdi.",
272 "settings.app.restartRequired": "Újraindítást igénylő módosítás", 267 "settings.app.restartRequired": "Újraindítást igénylő módosítás",
273 "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.", 268 "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.",
@@ -275,6 +270,7 @@
275 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 270 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!",
276 "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.", 271 "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.",
277 "settings.app.subheadlineCache": "Gyorsítótár", 272 "settings.app.subheadlineCache": "Gyorsítótár",
273 "settings.app.subheadlineFerdiProfile": "Ferdi Profil",
278 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", 274 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.",
279 "settings.app.translationHelp": "Segíts nekünk a Ferdi-ot lefordítani a nyelvedre.", 275 "settings.app.translationHelp": "Segíts nekünk a Ferdi-ot lefordítani a nyelvedre.",
280 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.", 276 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.",
@@ -334,10 +330,10 @@
334 "settings.service.form.isMutedInfo": "Ha kikapcsolod, minden értesítési és lejátszott hang némításra kerül", 330 "settings.service.form.isMutedInfo": "Ha kikapcsolod, minden értesítési és lejátszott hang némításra kerül",
335 "settings.service.form.name": "Név", 331 "settings.service.form.name": "Név",
336 "settings.service.form.openDarkmodeCss": "Open darkmode.css", 332 "settings.service.form.openDarkmodeCss": "Open darkmode.css",
337 "settings.service.form.openUserCss": "Open user.css", 333 "settings.service.form.openUserCss": "User.css megnyitása",
338 "settings.service.form.openUserJs": "Open user.js", 334 "settings.service.form.openUserJs": "User.js megnyitása",
339 "settings.service.form.proxy.headline": "HTTP/HTTPS Proxy beállítások", 335 "settings.service.form.proxy.headline": "HTTP/HTTPS Proxy beállítások",
340 "settings.service.form.proxy.host": "Proxy Host/IP", 336 "settings.service.form.proxy.host": "Proxy hoszt/IP",
341 "settings.service.form.proxy.info": "Proxy beállítások nem szinkronizálódnak a Ferdi kiszolgálókkal.", 337 "settings.service.form.proxy.info": "Proxy beállítások nem szinkronizálódnak a Ferdi kiszolgálókkal.",
342 "settings.service.form.proxy.isEnabled": "Proxy használata", 338 "settings.service.form.proxy.isEnabled": "Proxy használata",
343 "settings.service.form.proxy.password": "Jelszó (opcionális)", 339 "settings.service.form.proxy.password": "Jelszó (opcionális)",
@@ -365,17 +361,17 @@
365 "settings.supportFerdi.headline": "Névjegy", 361 "settings.supportFerdi.headline": "Névjegy",
366 "settings.supportFerdi.openSurvey": "Open survey", 362 "settings.supportFerdi.openSurvey": "Open survey",
367 "settings.supportFerdi.textDonation": "If you feel like supporting Ferdi development with a donation, you can do so on both,", 363 "settings.supportFerdi.textDonation": "If you feel like supporting Ferdi development with a donation, you can do so on both,",
368 "settings.supportFerdi.textDonationAnd": "and", 364 "settings.supportFerdi.textDonationAnd": "és",
369 "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", 365 "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",
370 "settings.supportFerdi.textGitHubSponsors": "GitHub Sponsors", 366 "settings.supportFerdi.textGitHubSponsors": "GitHub Sponsors",
371 "settings.supportFerdi.textListContributors": "Full list of contributors", 367 "settings.supportFerdi.textListContributors": "Full list of contributors",
372 "settings.supportFerdi.textListContributorsHere": "here", 368 "settings.supportFerdi.textListContributorsHere": "itt",
373 "settings.supportFerdi.textOpenCollective": "Open Collective", 369 "settings.supportFerdi.textOpenCollective": "Open Collective",
374 "settings.supportFerdi.textSupportWelcome": "Support is always welcome. You can find a list of the help we need", 370 "settings.supportFerdi.textSupportWelcome": "Support is always welcome. You can find a list of the help we need",
375 "settings.supportFerdi.textSupportWelcomeHere": "here", 371 "settings.supportFerdi.textSupportWelcomeHere": "itt",
376 "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.", 372 "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.",
377 "settings.supportFerdi.title": "Do you like Ferdi?", 373 "settings.supportFerdi.title": "Tetszik a Ferdi?",
378 "settings.team.contentHeadline": "Franz Team Management", 374 "settings.team.contentHeadline": "Franz Csapatkezelés",
379 "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.", 375 "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.",
380 "settings.team.headline": "Csapat", 376 "settings.team.headline": "Csapat",
381 "settings.team.intro": "You are currently using Franz Servers, which is why you have access to Team Management.", 377 "settings.team.intro": "You are currently using Franz Servers, which is why you have access to Team Management.",
@@ -385,7 +381,7 @@
385 "settings.user.form.accountType.company": "Cég", 381 "settings.user.form.accountType.company": "Cég",
386 "settings.user.form.accountType.individual": "Egyén", 382 "settings.user.form.accountType.individual": "Egyén",
387 "settings.user.form.accountType.label": "Fiók típusa", 383 "settings.user.form.accountType.label": "Fiók típusa",
388 "settings.user.form.accountType.non-profit": "Non-Profit", 384 "settings.user.form.accountType.non-profit": "Nonprofit",
389 "settings.user.form.currentPassword": "Jelenlegi jelszó", 385 "settings.user.form.currentPassword": "Jelenlegi jelszó",
390 "settings.user.form.email": "Email", 386 "settings.user.form.email": "Email",
391 "settings.user.form.firstname": "Keresztnév", 387 "settings.user.form.firstname": "Keresztnév",
@@ -410,11 +406,11 @@
410 "settings.workspaces.workspacesRequestFailed": "Nem sikerült betölteni a munkaterületeket", 406 "settings.workspaces.workspacesRequestFailed": "Nem sikerült betölteni a munkaterületeket",
411 "setupAssistant.headline": "Let's get started", 407 "setupAssistant.headline": "Let's get started",
412 "setupAssistant.subheadline": "Choose from our most used services and get back on top of your messaging now.", 408 "setupAssistant.subheadline": "Choose from our most used services and get back on top of your messaging now.",
413 "setupAssistant.submit.label": "Let's go", 409 "setupAssistant.submit.label": "Vágjunk bele",
414 "sidebar.addNewService": "Szolgáltatás hozzáadása", 410 "sidebar.addNewService": "Szolgáltatás hozzáadása",
415 "sidebar.closeTodosDrawer": "Close Ferdi Todos", 411 "sidebar.closeTodosDrawer": "Close Ferdi Todos",
416 "sidebar.closeWorkspaceDrawer": "Munkaterület panel bezárása", 412 "sidebar.closeWorkspaceDrawer": "Munkaterület panel bezárása",
417 "sidebar.lockFerdi": "Lock Ferdi", 413 "sidebar.lockFerdi": "Ferdi bezárása",
418 "sidebar.muteApp": "Értesítések és hangok letiltása", 414 "sidebar.muteApp": "Értesítések és hangok letiltása",
419 "sidebar.openTodosDrawer": "Open Ferdi Todos", 415 "sidebar.openTodosDrawer": "Open Ferdi Todos",
420 "sidebar.openWorkspaceDrawer": "Munkaterület panel kinyitása", 416 "sidebar.openWorkspaceDrawer": "Munkaterület panel kinyitása",
@@ -429,22 +425,22 @@
429 "signup.legal.privacy": "Adatvédelmi Nyilatkozatot", 425 "signup.legal.privacy": "Adatvédelmi Nyilatkozatot",
430 "signup.legal.terms": "Felhasználási Feltételeket", 426 "signup.legal.terms": "Felhasználási Feltételeket",
431 "signup.link.login": "Már van fiókod? Lépj be!", 427 "signup.link.login": "Már van fiókod? Lépj be!",
432 "signup.password.label": "Password", 428 "signup.password.label": "Jelszó",
433 "signup.submit.label": "Fiók létrehozása", 429 "signup.submit.label": "Fiók létrehozása",
434 "tabs.item.confirmDeleteService": "Do you really want to delete the {serviceName} service?", 430 "tabs.item.confirmDeleteService": "Do you really want to delete the {serviceName} service?",
435 "tabs.item.deleteService": "Szolgáltatás törlése", 431 "tabs.item.deleteService": "Szolgáltatás törlése",
436 "tabs.item.disableAudio": "Hang letiltása", 432 "tabs.item.disableAudio": "Hang letiltása",
437 "tabs.item.disableDarkMode": "Disable Dark mode", 433 "tabs.item.disableDarkMode": "Sötét mód kikapcsolása",
438 "tabs.item.disableNotifications": "Értesítések letiltása", 434 "tabs.item.disableNotifications": "Értesítések letiltása",
439 "tabs.item.disableService": "Szolgáltatás letiltása", 435 "tabs.item.disableService": "Szolgáltatás letiltása",
440 "tabs.item.edit": "Szerkesztés", 436 "tabs.item.edit": "Szerkesztés",
441 "tabs.item.enableAudio": "Hang engedélyezése", 437 "tabs.item.enableAudio": "Hang engedélyezése",
442 "tabs.item.enableDarkMode": "Enable Dark mode", 438 "tabs.item.enableDarkMode": "Sötét mód bekapcsolása",
443 "tabs.item.enableNotification": "Értesítések engedélyezése", 439 "tabs.item.enableNotification": "Értesítések engedélyezése",
444 "tabs.item.enableService": "Szolgáltatás engedélyezése", 440 "tabs.item.enableService": "Szolgáltatás engedélyezése",
445 "tabs.item.hibernateService": "Hibernate service", 441 "tabs.item.hibernateService": "Szlgáltatás hibernálása",
446 "tabs.item.reload": "Újratöltés", 442 "tabs.item.reload": "Újratöltés",
447 "tabs.item.wakeUpService": "Wake up service", 443 "tabs.item.wakeUpService": "Szolgáltatás felébresztése",
448 "validation.email": "{field} nem érvényes", 444 "validation.email": "{field} nem érvényes",
449 "validation.minLength": "{field} mezőnek legalább {length} karakter hosszúnak kell lennie", 445 "validation.minLength": "{field} mezőnek legalább {length} karakter hosszúnak kell lennie",
450 "validation.oneRequired": "Legalább egy kitöltése szükséges", 446 "validation.oneRequired": "Legalább egy kitöltése szükséges",
@@ -452,8 +448,8 @@
452 "validation.url": "{field} nem érvényes URL", 448 "validation.url": "{field} nem érvényes URL",
453 "webControls.back": "Vissza", 449 "webControls.back": "Vissza",
454 "webControls.forward": "Előre", 450 "webControls.forward": "Előre",
455 "webControls.goHome": "Home", 451 "webControls.goHome": "Kezdőlap",
456 "webControls.openInBrowser": "Open in Browser", 452 "webControls.openInBrowser": "Megnyitás böngészőben",
457 "webControls.reload": "Újratöltés", 453 "webControls.reload": "Újratöltés",
458 "welcome.loginButton": "Jelentkezz be a fiókodba", 454 "welcome.loginButton": "Jelentkezz be a fiókodba",
459 "welcome.signupButton": "Új fiók létrehozása", 455 "welcome.signupButton": "Új fiók létrehozása",
diff --git a/src/i18n/locales/id.json b/src/i18n/locales/id.json
index caa33a068..0e6e3b951 100644
--- a/src/i18n/locales/id.json
+++ b/src/i18n/locales/id.json
@@ -26,13 +26,6 @@
26 "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.", 26 "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.",
27 "feature.quickSwitch.search": "Search...", 27 "feature.quickSwitch.search": "Search...",
28 "feature.quickSwitch.title": "QuickSwitch", 28 "feature.quickSwitch.title": "QuickSwitch",
29 "feature.shareFranz.action.email": "Kirim sebagai email",
30 "feature.shareFranz.action.facebook": "Bagikan di Facebook",
31 "feature.shareFranz.action.twitter": "Bagikan di Twitter",
32 "feature.shareFranz.headline": "Ferdi lebih baik bersama!",
33 "feature.shareFranz.shareText.email": "Saya telah menambahkan layanan {count} ke Ferdi! Dapatkan aplikasi gratis untuk WhatsApp, Messenger, Slack, Skype dan co di www.getferdi.com",
34 "feature.shareFranz.shareText.twitter": "Saya telah menambahkan {count} layanan di Ferdi! Dapatkan aplikasi gratis untuk WhatsApp, Messenger, Slack, Skype dan lainnya di www.getferdi.com /cc @FerdiMessenger",
35 "feature.shareFranz.text": "Beri tahu teman dan kolega Anda betapa hebatnya Ferdi dan bantu kami menyebarkan berita.",
36 "global.api.unhealthy": "Tidak dapat tersambung ke layanan Ferdi", 29 "global.api.unhealthy": "Tidak dapat tersambung ke layanan Ferdi",
37 "global.notConnectedToTheInternet": "Anda tidak tersambung ke internet.", 30 "global.notConnectedToTheInternet": "Anda tidak tersambung ke internet.",
38 "global.spellchecker.useDefault": "Gunakan Bawaan Sistem ({default})", 31 "global.spellchecker.useDefault": "Gunakan Bawaan Sistem ({default})",
@@ -205,6 +198,8 @@
205 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", 198 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})",
206 "settings.app.buttonClearAllCache": "Bersihkan singgahan", 199 "settings.app.buttonClearAllCache": "Bersihkan singgahan",
207 "settings.app.buttonInstallUpdate": "Mulai ulang & instal pembaruan", 200 "settings.app.buttonInstallUpdate": "Mulai ulang & instal pembaruan",
201 "settings.app.buttonOpenFerdiProfileFolder": "Open Profile folder",
202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open Service Recipes folder",
208 "settings.app.buttonSearchForUpdate": "Periksa versi baru", 203 "settings.app.buttonSearchForUpdate": "Periksa versi baru",
209 "settings.app.cacheInfo": "Singgahan Ferdi sedang menggunakan ruang disk {size}.", 204 "settings.app.cacheInfo": "Singgahan Ferdi sedang menggunakan ruang disk {size}.",
210 "settings.app.cacheNotCleared": "Couldn't clear all cache", 205 "settings.app.cacheNotCleared": "Couldn't clear all cache",
@@ -275,6 +270,7 @@
275 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 270 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!",
276 "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.", 271 "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.",
277 "settings.app.subheadlineCache": "Singgahan", 272 "settings.app.subheadlineCache": "Singgahan",
273 "settings.app.subheadlineFerdiProfile": "Ferdi Profile",
278 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", 274 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.",
279 "settings.app.translationHelp": "Bantu kami menerjemahkan Ferdi ke bahasa Anda.", 275 "settings.app.translationHelp": "Bantu kami menerjemahkan Ferdi ke bahasa Anda.",
280 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.", 276 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.",
diff --git a/src/i18n/locales/it.json b/src/i18n/locales/it.json
index e349677a0..d07a9bffd 100644
--- a/src/i18n/locales/it.json
+++ b/src/i18n/locales/it.json
@@ -26,13 +26,6 @@
26 "feature.quickSwitch.info": "Seleziona un servizio con TAB, ↑ e ↓. Apri un servizio con INVIO.", 26 "feature.quickSwitch.info": "Seleziona un servizio con TAB, ↑ e ↓. Apri un servizio con INVIO.",
27 "feature.quickSwitch.search": "Cerca...", 27 "feature.quickSwitch.search": "Cerca...",
28 "feature.quickSwitch.title": "Cambio Veloce", 28 "feature.quickSwitch.title": "Cambio Veloce",
29 "feature.shareFranz.action.email": "Manda come email",
30 "feature.shareFranz.action.facebook": "Condividi su Facebook",
31 "feature.shareFranz.action.twitter": "Condividi su Twitter",
32 "feature.shareFranz.headline": "Ferdi è migliore insieme!",
33 "feature.shareFranz.shareText.email": "Ho aggiunto {count} nuovi servizi a Ferdi! Scarica ora l'app gratuita per WhatsApp, Messenger, Slack, Skype e altri all'indirizzo www.getferdi.com",
34 "feature.shareFranz.shareText.twitter": "Ho aggiunto {count} nuovi servizi a Ferdi! Scarica ora l’app gratuita per WhatsApp, Messenger, Slack, Skype e altri all’indirizzo www.getferdi.com /cc @FerdiMessenger",
35 "feature.shareFranz.text": "Di’ ai tuoi amici e colleghi quanto Ferdi è fantastico e aiutaci a diffondere la parola.",
36 "global.api.unhealthy": "Impossibile connettersi ai servizi online di Ferdi", 29 "global.api.unhealthy": "Impossibile connettersi ai servizi online di Ferdi",
37 "global.notConnectedToTheInternet": "Non sei connesso a Internet.", 30 "global.notConnectedToTheInternet": "Non sei connesso a Internet.",
38 "global.spellchecker.useDefault": "Usa le impostazioni predefinite di sistema ({default})", 31 "global.spellchecker.useDefault": "Usa le impostazioni predefinite di sistema ({default})",
@@ -205,6 +198,8 @@
205 "settings.app.accentColorInfo": "Inserisci il tuo colore in risalto in un formato compatibile con CSS. (Default: {defaultAccentColor})", 198 "settings.app.accentColorInfo": "Inserisci il tuo colore in risalto in un formato compatibile con CSS. (Default: {defaultAccentColor})",
206 "settings.app.buttonClearAllCache": "Svuota la cache", 199 "settings.app.buttonClearAllCache": "Svuota la cache",
207 "settings.app.buttonInstallUpdate": "Riavvia e installa l'aggiornamento", 200 "settings.app.buttonInstallUpdate": "Riavvia e installa l'aggiornamento",
201 "settings.app.buttonOpenFerdiProfileFolder": "Open Profile folder",
202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open Service Recipes folder",
208 "settings.app.buttonSearchForUpdate": "Controlla aggiornamenti", 203 "settings.app.buttonSearchForUpdate": "Controlla aggiornamenti",
209 "settings.app.cacheInfo": "Ferdi sta utilizzando {size} di spazio su disco.", 204 "settings.app.cacheInfo": "Ferdi sta utilizzando {size} di spazio su disco.",
210 "settings.app.cacheNotCleared": "Impossibile eliminare tutta la cache", 205 "settings.app.cacheNotCleared": "Impossibile eliminare tutta la cache",
@@ -275,6 +270,7 @@
275 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 270 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!",
276 "settings.app.spellCheckerLanguageInfo": "Ferdi utilizza il controllo ortografico del tuo Mac per verificare la presenza di errori. Se si desidera modificare le lingue del controllo ortografico, è possibile farlo nelle preferenze di sistema del vostro Mac.", 271 "settings.app.spellCheckerLanguageInfo": "Ferdi utilizza il controllo ortografico del tuo Mac per verificare la presenza di errori. Se si desidera modificare le lingue del controllo ortografico, è possibile farlo nelle preferenze di sistema del vostro Mac.",
277 "settings.app.subheadlineCache": "Cache", 272 "settings.app.subheadlineCache": "Cache",
273 "settings.app.subheadlineFerdiProfile": "Ferdi Profile",
278 "settings.app.todoServerInfo": "Questo server verrà usato per le funzionalità 'Ferdi Todo'.", 274 "settings.app.todoServerInfo": "Questo server verrà usato per le funzionalità 'Ferdi Todo'.",
279 "settings.app.translationHelp": "Aiutaci a tradurre Ferdi nella tua lingua.", 275 "settings.app.translationHelp": "Aiutaci a tradurre Ferdi nella tua lingua.",
280 "settings.app.universalDarkModeInfo": "La modalità 'Dark Mode' universale cerca di generare dinamicamente uno stile di visualizzazione a sfondo scuro per quei servizi che non lo supportano nativamente.", 276 "settings.app.universalDarkModeInfo": "La modalità 'Dark Mode' universale cerca di generare dinamicamente uno stile di visualizzazione a sfondo scuro per quei servizi che non lo supportano nativamente.",
diff --git a/src/i18n/locales/ja.json b/src/i18n/locales/ja.json
index 707f08071..34d4c81cf 100644
--- a/src/i18n/locales/ja.json
+++ b/src/i18n/locales/ja.json
@@ -26,16 +26,9 @@
26 "feature.quickSwitch.info": "Tab, ↑, ↓ã§ã‚µãƒ¼ãƒ“スをé¸æŠžã—ã¾ã™ã€‚Enterã§ã‚µãƒ¼ãƒ“スを開ãã¾ã™", 26 "feature.quickSwitch.info": "Tab, ↑, ↓ã§ã‚µãƒ¼ãƒ“スをé¸æŠžã—ã¾ã™ã€‚Enterã§ã‚µãƒ¼ãƒ“スを開ãã¾ã™",
27 "feature.quickSwitch.search": "検索...", 27 "feature.quickSwitch.search": "検索...",
28 "feature.quickSwitch.title": "クイックスイッãƒ", 28 "feature.quickSwitch.title": "クイックスイッãƒ",
29 "feature.shareFranz.action.email": "メールã§é€ä¿¡",
30 "feature.shareFranz.action.facebook": "Facebookã§ã‚·ã‚§ã‚¢",
31 "feature.shareFranz.action.twitter": "Twitterã§ã‚·ã‚§ã‚¢",
32 "feature.shareFranz.headline": "Ferdiã¯ã‚ãªãŸã¨ã¨ã‚‚ã«",
33 "feature.shareFranz.shareText.email": "Ferdiã§{count}個ã®ã‚µãƒ¼ãƒ“スを使ã£ã¦ã„ã¾ã™ï¼ã‚ãªãŸã‚‚Gmail, Messenger, Slack, Skypeãªã©ã®ã‚µãƒ¼ãƒ“スをFerdiã§ä¸€å…ƒç®¡ç†ã—ã¾ã—ょã†ï¼ www.getferdi.com",
34 "feature.shareFranz.shareText.twitter": "{count}個ã®ã‚µãƒ¼ãƒ“スをFerdiã«è¿½åŠ ã—ã¾ã—ãŸï¼WhatsApp, Messenger, Slack, Skypeãªã©ã‚’一元管ç†ã™ã‚‹ç„¡æ–™ã®ã‚¢ãƒ—リをダウンロードã—ã¾ã—ょㆠwww.getferdi.com /cc @FerdiMessenger",
35 "feature.shareFranz.text": "ã‚ãªãŸã®ãŠå‹é”ã«Ferdiã‚’æ•™ãˆã¦ã‚ã’ã¾ã—ょã†ã€‚",
36 "global.api.unhealthy": "Ferdiã®ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã‚µãƒ¼ãƒ“スã«æŽ¥ç¶šã§ãã¾ã›ã‚“。", 29 "global.api.unhealthy": "Ferdiã®ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã‚µãƒ¼ãƒ“スã«æŽ¥ç¶šã§ãã¾ã›ã‚“。",
37 "global.notConnectedToTheInternet": "インターãƒãƒƒãƒˆã«æŽ¥ç¶šã•ã‚Œã¦ã„ã¾ã›ã‚“。", 30 "global.notConnectedToTheInternet": "インターãƒãƒƒãƒˆã«æŽ¥ç¶šã•ã‚Œã¦ã„ã¾ã›ã‚“。",
38 "global.spellchecker.useDefault": " {default}ã‚’åˆæœŸè¨­å®šã§ä½¿ç”¨ãã¦ãã ã•ã„", 31 "global.spellchecker.useDefault": "システムデフォルトを使用ãã‚‹({default})",
39 "global.spellchecking.autodetect": "言語を自動的ã«æ¤œå‡ºã™ã‚‹", 32 "global.spellchecking.autodetect": "言語を自動的ã«æ¤œå‡ºã™ã‚‹",
40 "global.spellchecking.autodetect.short": "自動", 33 "global.spellchecking.autodetect.short": "自動",
41 "global.spellchecking.language": "スペルãƒã‚§ãƒƒã‚¯ã™ã‚‹è¨€èªž", 34 "global.spellchecking.language": "スペルãƒã‚§ãƒƒã‚¯ã™ã‚‹è¨€èªž",
@@ -53,7 +46,7 @@
53 "infobar.requiredRequestsFailed": "サービスã¨ãƒ¦ãƒ¼ã‚¶ãƒ¼æƒ…報を読ã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸ", 46 "infobar.requiredRequestsFailed": "サービスã¨ãƒ¦ãƒ¼ã‚¶ãƒ¼æƒ…報を読ã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸ",
54 "infobar.servicesUpdated": "サービスãŒæ›´æ–°ã•ã‚Œã¾ã—ãŸã€‚", 47 "infobar.servicesUpdated": "サービスãŒæ›´æ–°ã•ã‚Œã¾ã—ãŸã€‚",
55 "infobar.updateAvailable": "Ferdiã®æ›´æ–°ãŒã‚ã‚Šã¾ã™ã€‚", 48 "infobar.updateAvailable": "Ferdiã®æ›´æ–°ãŒã‚ã‚Šã¾ã™ã€‚",
56 "infobox.dismiss": "Dismiss", 49 "infobox.dismiss": "é–‰ã˜ã‚‹",
57 "invite.email.label": "メールアドレス", 50 "invite.email.label": "メールアドレス",
58 "invite.headline.friends": "ã‚ãªãŸã®å‹äººã‚„åŒåƒšã®æ–¹ã‚’3åã¾ã§Ferdiã«æ‹›å¾…ã§ãã¾ã™", 51 "invite.headline.friends": "ã‚ãªãŸã®å‹äººã‚„åŒåƒšã®æ–¹ã‚’3åã¾ã§Ferdiã«æ‹›å¾…ã§ãã¾ã™",
59 "invite.name.label": "æ°å", 52 "invite.name.label": "æ°å",
@@ -87,32 +80,32 @@
87 "menu.app.autohideMenuBar": "メニューãƒãƒ¼ã‚’自動的ã«éš ã™", 80 "menu.app.autohideMenuBar": "メニューãƒãƒ¼ã‚’自動的ã«éš ã™",
88 "menu.app.checkForUpdates": "æ›´æ–°ã®ç¢ºèª", 81 "menu.app.checkForUpdates": "æ›´æ–°ã®ç¢ºèª",
89 "menu.app.hide": "éš ã™", 82 "menu.app.hide": "éš ã™",
90 "menu.app.hideOthers": "Hide Others", 83 "menu.app.hideOthers": "ä»–ã‚’éžè¡¨ç¤º",
91 "menu.app.quit": "Quit", 84 "menu.app.quit": "終了",
92 "menu.app.settings": "設定", 85 "menu.app.settings": "設定",
93 "menu.app.unhide": "Unhide", 86 "menu.app.unhide": "å†è¡¨ç¤º",
94 "menu.edit": "編集", 87 "menu.edit": "編集",
95 "menu.edit.copy": "Copy", 88 "menu.edit.copy": "コピー",
96 "menu.edit.cut": "Cut", 89 "menu.edit.cut": "切りå–ã‚Š",
97 "menu.edit.delete": "削除", 90 "menu.edit.delete": "削除",
98 "menu.edit.emojiSymbols": "絵文字ã¨ã‚·ãƒ³ãƒœãƒ«", 91 "menu.edit.emojiSymbols": "絵文字ã¨ã‚·ãƒ³ãƒœãƒ«",
99 "menu.edit.findInPage": "ページ内を検索", 92 "menu.edit.findInPage": "ページ内を検索",
100 "menu.edit.paste": "Paste", 93 "menu.edit.paste": "貼り付ã‘",
101 "menu.edit.pasteAndMatchStyle": "Paste And Match Style", 94 "menu.edit.pasteAndMatchStyle": "書å¼ã‚’統一ã—ã¦è²¼ã‚Šä»˜ã‘",
102 "menu.edit.redo": "Redo", 95 "menu.edit.redo": "ã‚„ã‚Šç›´ã—",
103 "menu.edit.selectAll": "Select All", 96 "menu.edit.selectAll": "å…¨ã¦é¸æŠž",
104 "menu.edit.speech": "読ã¿ä¸Šã’", 97 "menu.edit.speech": "読ã¿ä¸Šã’",
105 "menu.edit.startDictation": "音声入力を開始", 98 "menu.edit.startDictation": "音声入力を開始",
106 "menu.edit.startSpeaking": "読ã¿ä¸Šã’を開始", 99 "menu.edit.startSpeaking": "読ã¿ä¸Šã’を開始",
107 "menu.edit.stopSpeaking": "読ã¿ä¸Šã’ã‚’åœæ­¢", 100 "menu.edit.stopSpeaking": "読ã¿ä¸Šã’ã‚’åœæ­¢",
108 "menu.edit.undo": "Undo", 101 "menu.edit.undo": "å…ƒã«æˆ»ã™",
109 "menu.file": "ファイル", 102 "menu.file": "ファイル",
110 "menu.help": "Help", 103 "menu.help": "ヘルプ",
111 "menu.help.changelog": "更新履歴", 104 "menu.help.changelog": "更新履歴",
112 "menu.help.debugInfo": "デãƒãƒƒã‚°æƒ…報をコピー", 105 "menu.help.debugInfo": "デãƒãƒƒã‚°æƒ…報をコピー",
113 "menu.help.debugInfoCopiedBody": "デãƒãƒƒã‚°æƒ…報をクリップボードã«ã‚³ãƒ”ーã—ã¾ã—ãŸã€‚", 106 "menu.help.debugInfoCopiedBody": "デãƒãƒƒã‚°æƒ…報をクリップボードã«ã‚³ãƒ”ーã—ã¾ã—ãŸã€‚",
114 "menu.help.debugInfoCopiedHeadline": "Ferdiデãƒãƒƒã‚°æƒ…å ±", 107 "menu.help.debugInfoCopiedHeadline": "Ferdiデãƒãƒƒã‚°æƒ…å ±",
115 "menu.help.importExportData": "Import/Export Configuration Data", 108 "menu.help.importExportData": "設定データã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ/エクスãƒãƒ¼ãƒˆ",
116 "menu.help.learnMore": "Ferdiã«ã¤ã„ã¦", 109 "menu.help.learnMore": "Ferdiã«ã¤ã„ã¦",
117 "menu.help.privacy": "プライãƒã‚·ãƒ¼ã«ã¤ã„ã¦", 110 "menu.help.privacy": "プライãƒã‚·ãƒ¼ã«ã¤ã„ã¦",
118 "menu.help.publishDebugInfo": "デãƒãƒƒã‚°æƒ…å ±ã®å…¬é–‹", 111 "menu.help.publishDebugInfo": "デãƒãƒƒã‚°æƒ…å ±ã®å…¬é–‹",
@@ -130,20 +123,20 @@
130 "menu.view.forward": "次ã¸", 123 "menu.view.forward": "次ã¸",
131 "menu.view.lockFerdi": "Ferdiをロック", 124 "menu.view.lockFerdi": "Ferdiをロック",
132 "menu.view.openQuickSwitch": "クイックスイッãƒã‚’é–‹ã", 125 "menu.view.openQuickSwitch": "クイックスイッãƒã‚’é–‹ã",
133 "menu.view.reloadFerdi": "Reload Ferdi", 126 "menu.view.reloadFerdi": "Ferdiã‚’å†èª­ã¿è¾¼ã¿",
134 "menu.view.reloadService": "サービスをリロードã™ã‚‹", 127 "menu.view.reloadService": "サービスをリロードã™ã‚‹",
135 "menu.view.reloadTodos": "ToDoをリロード", 128 "menu.view.reloadTodos": "ToDoをリロード",
136 "menu.view.resetZoom": "Actual Size", 129 "menu.view.resetZoom": "å…ƒã®ã‚µã‚¤ã‚º",
137 "menu.view.toggleDarkMode": "ダークモードを切り替ãˆã‚‹", 130 "menu.view.toggleDarkMode": "ダークモードを切り替ãˆã‚‹",
138 "menu.view.toggleDevTools": "開発者ツールを切り替ãˆ", 131 "menu.view.toggleDevTools": "開発者ツールを切り替ãˆ",
139 "menu.view.toggleFullScreen": "Toggle Full Screen", 132 "menu.view.toggleFullScreen": "全画é¢è¡¨ç¤ºã®åˆ‡ã‚Šæ›¿ãˆ",
140 "menu.view.toggleServiceDevTools": "サービス開発者ツールを切り替ãˆ", 133 "menu.view.toggleServiceDevTools": "サービス開発者ツールを切り替ãˆ",
141 "menu.view.toggleTodosDevTools": "ToDoã®é–‹ç™ºè€…モードを切り替ãˆã‚‹", 134 "menu.view.toggleTodosDevTools": "ToDoã®é–‹ç™ºè€…モードを切り替ãˆã‚‹",
142 "menu.view.zoomIn": "Zoom In", 135 "menu.view.zoomIn": "拡大",
143 "menu.view.zoomOut": "Zoom Out", 136 "menu.view.zoomOut": "縮å°",
144 "menu.window": "Window", 137 "menu.window": "ウィンドウ",
145 "menu.window.close": "Close", 138 "menu.window.close": "é–‰ã˜ã‚‹",
146 "menu.window.minimize": "Minimize", 139 "menu.window.minimize": "最å°åŒ–",
147 "menu.workspaces": "ワークスペース", 140 "menu.workspaces": "ワークスペース",
148 "menu.workspaces.addNewWorkspace": "ワークスペースを追加", 141 "menu.workspaces.addNewWorkspace": "ワークスペースを追加",
149 "menu.workspaces.closeWorkspaceDrawer": "ワークスペースドロワーを閉ã˜ã‚‹", 142 "menu.workspaces.closeWorkspaceDrawer": "ワークスペースドロワーを閉ã˜ã‚‹",
@@ -181,7 +174,7 @@
181 "service.webviewLoader.loading": "{service}を読ã¿è¾¼ã¿ä¸­", 174 "service.webviewLoader.loading": "{service}を読ã¿è¾¼ã¿ä¸­",
182 "services.getStarted": "ã¯ã˜ã‚ã‚‹", 175 "services.getStarted": "ã¯ã˜ã‚ã‚‹",
183 "services.login": "Ferdiを使用ã™ã‚‹ã«ã¯ãƒ­ã‚°ã‚¤ãƒ³ã—ã¦ãã ã•ã„。", 176 "services.login": "Ferdiを使用ã™ã‚‹ã«ã¯ãƒ­ã‚°ã‚¤ãƒ³ã—ã¦ãã ã•ã„。",
184 "services.serverInfo": "Optionally, you can change your Ferdi server by clicking the cog in the bottom left corner. If you are switching over (from one of the hosted servers) to using Ferdi without an account, please be informed that you can export your data from that server and subsequently import it using the Help menu to resurrect all your workspaces and configured services!", 177 "services.serverInfo": "オプションã¨ã—ã¦ã€å·¦ä¸‹ã®æ­¯è»Šã‚’クリックã—ã¦Ferdiサーãƒãƒ¼ã‚’変更ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ä»–ã®ãƒ›ã‚¹ãƒˆã•ã‚ŒãŸã‚µãƒ¼ãƒã‹ã‚‰ã‚¢ã‚«ã‚¦ãƒ³ãƒˆãªã—ã§Ferdiを使ã†ã‚ˆã†ã«å¤‰æ›´ã™ã‚‹å ´åˆã¯ã€ãã®ã‚µãƒ¼ãƒã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ã‚’エクスãƒãƒ¼ãƒˆã—ã€ãã®å¾Œãƒ˜ãƒ«ãƒ—メニューを使ã£ã¦ã‚¤ãƒ³ãƒãƒ¼ãƒˆã™ã‚‹ã“ã¨ã§ã™ã¹ã¦ã®ãƒ¯ãƒ¼ã‚¯ã‚¹ãƒšãƒ¼ã‚¹ã¨è¨­å®šã—ãŸã‚µãƒ¼ãƒ“スを復元ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚",
185 "services.serverless": "アカウントãªã—ã§Ferdiを使用ã™ã‚‹", 178 "services.serverless": "アカウントãªã—ã§Ferdiを使用ã™ã‚‹",
186 "services.welcome": "Ferdiã«ã‚ˆã†ã“ã", 179 "services.welcome": "Ferdiã«ã‚ˆã†ã“ã",
187 "settings.account.account.editButton": "アカウントã®ç·¨é›†", 180 "settings.account.account.editButton": "アカウントã®ç·¨é›†",
@@ -205,10 +198,12 @@
205 "settings.app.accentColorInfo": "CSSフォーマットã§ã‚¢ã‚¯ã‚»ãƒ³ãƒˆã‚«ãƒ©ãƒ¼ã‚’記述ã—ã¦ãã ã•ã„。(デフォルト: {defaultAccentColor})", 198 "settings.app.accentColorInfo": "CSSフォーマットã§ã‚¢ã‚¯ã‚»ãƒ³ãƒˆã‚«ãƒ©ãƒ¼ã‚’記述ã—ã¦ãã ã•ã„。(デフォルト: {defaultAccentColor})",
206 "settings.app.buttonClearAllCache": "キャッシュを消去ã™ã‚‹", 199 "settings.app.buttonClearAllCache": "キャッシュを消去ã™ã‚‹",
207 "settings.app.buttonInstallUpdate": "å†èµ·å‹•ã—ã¦æ›´æ–°ã‚’インストールã™ã‚‹", 200 "settings.app.buttonInstallUpdate": "å†èµ·å‹•ã—ã¦æ›´æ–°ã‚’インストールã™ã‚‹",
201 "settings.app.buttonOpenFerdiProfileFolder": "プロファイルフォルダを開ã",
202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "サービスレシピフォルダを開ã",
208 "settings.app.buttonSearchForUpdate": "æ›´æ–°ã®ç¢ºèª", 203 "settings.app.buttonSearchForUpdate": "æ›´æ–°ã®ç¢ºèª",
209 "settings.app.cacheInfo": "ç¾åœ¨ã€Ferdiã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã¯ãƒ‡ã‚£ã‚¹ã‚¯ã®{size}分を使用ã—ã¦ã„ã¾ã™ã€‚", 204 "settings.app.cacheInfo": "ç¾åœ¨ã€Ferdiã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã¯ãƒ‡ã‚£ã‚¹ã‚¯ã®{size}分を使用ã—ã¦ã„ã¾ã™ã€‚",
210 "settings.app.cacheNotCleared": "ã™ã¹ã¦ã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚’クリアã§ãã¾ã›ã‚“ã§ã—ãŸ", 205 "settings.app.cacheNotCleared": "ã™ã¹ã¦ã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚’クリアã§ãã¾ã›ã‚“ã§ã—ãŸ",
211 "settings.app.closeSettings": "Close settings", 206 "settings.app.closeSettings": "設定を閉ã˜ã‚‹",
212 "settings.app.currentVersion": "ç¾åœ¨ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³:", 207 "settings.app.currentVersion": "ç¾åœ¨ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³:",
213 "settings.app.form.accentColor": "アクセントカラー", 208 "settings.app.form.accentColor": "アクセントカラー",
214 "settings.app.form.adaptableDarkMode": "ダークモードをOSã®ãƒ€ãƒ¼ã‚¯ãƒ¢ãƒ¼ãƒ‰è¨­å®šã¨åŒæœŸã™ã‚‹", 209 "settings.app.form.adaptableDarkMode": "ダークモードをOSã®ãƒ€ãƒ¼ã‚¯ãƒ¢ãƒ¼ãƒ‰è¨­å®šã¨åŒæœŸã™ã‚‹",
@@ -237,7 +232,7 @@
237 "settings.app.form.minimizeToSystemTray": "Ferdiをシステムトレイã«æœ€å°åŒ–ã™ã‚‹", 232 "settings.app.form.minimizeToSystemTray": "Ferdiをシステムトレイã«æœ€å°åŒ–ã™ã‚‹",
238 "settings.app.form.navigationBarBehaviour": "ナビゲーションãƒãƒ¼ã®å‹•ä½œ", 233 "settings.app.form.navigationBarBehaviour": "ナビゲーションãƒãƒ¼ã®å‹•ä½œ",
239 "settings.app.form.notifyTaskBarOnMessage": "æ–°ã—ã„メッセージをタスクãƒãƒ¼ã¾ãŸã¯Dockã«é€šçŸ¥ã™ã‚‹", 234 "settings.app.form.notifyTaskBarOnMessage": "æ–°ã—ã„メッセージをタスクãƒãƒ¼ã¾ãŸã¯Dockã«é€šçŸ¥ã™ã‚‹",
240 "settings.app.form.passwordToggle": "Password toggle", 235 "settings.app.form.passwordToggle": "パスワードã®åˆ‡ã‚Šæ›¿ãˆ",
241 "settings.app.form.predefinedTodoServer": "ToDoサーãƒãƒ¼", 236 "settings.app.form.predefinedTodoServer": "ToDoサーãƒãƒ¼",
242 "settings.app.form.privateNotifications": "通知ã«ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®å†…容を表示ã—ãªã„", 237 "settings.app.form.privateNotifications": "通知ã«ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®å†…容を表示ã—ãªã„",
243 "settings.app.form.reloadAfterResume": "システムã®å†é–‹å¾Œã«Ferdiã‚’å†èª­ã¿è¾¼ã¿ã™ã‚‹", 238 "settings.app.form.reloadAfterResume": "システムã®å†é–‹å¾Œã«Ferdiã‚’å†èª­ã¿è¾¼ã¿ã™ã‚‹",
@@ -255,7 +250,7 @@
255 "settings.app.form.universalDarkMode": "ユニãƒãƒ¼ã‚µãƒ«ãƒ€ãƒ¼ã‚¯ãƒ¢ãƒ¼ãƒ‰ã‚’有効ã«ã™ã‚‹", 250 "settings.app.form.universalDarkMode": "ユニãƒãƒ¼ã‚µãƒ«ãƒ€ãƒ¼ã‚¯ãƒ¢ãƒ¼ãƒ‰ã‚’有効ã«ã™ã‚‹",
256 "settings.app.form.useTouchIdToUnlock": "Touch IDを使用ã—ã¦Ferdiã®ãƒ­ãƒƒã‚¯ã‚’解除ã™ã‚‹", 251 "settings.app.form.useTouchIdToUnlock": "Touch IDを使用ã—ã¦Ferdiã®ãƒ­ãƒƒã‚¯ã‚’解除ã™ã‚‹",
257 "settings.app.form.useVerticalStyle": "垂直レイアウトを使用ã™ã‚‹", 252 "settings.app.form.useVerticalStyle": "垂直レイアウトを使用ã™ã‚‹",
258 "settings.app.form.wakeUpStrategy": "Wake up strategy", 253 "settings.app.form.wakeUpStrategy": "起動方法",
259 "settings.app.headline": "設定", 254 "settings.app.headline": "設定",
260 "settings.app.headlineAdvanced": "詳細", 255 "settings.app.headlineAdvanced": "詳細",
261 "settings.app.headlineAppearance": "表示スタイル", 256 "settings.app.headlineAppearance": "表示スタイル",
@@ -266,15 +261,16 @@
266 "settings.app.hibernateInfo": "デフォルトã§ã¯ã€Ferdiã¯ã™ã¹ã¦ã®ã‚µãƒ¼ãƒ“スをãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã§é–‹ã„ã¦èª­ã¿è¾¼ã‚“ã§ãŠãã®ã§ã€ä½¿ã„ãŸã„ã¨ãã«ã™ãã«ä½¿ãˆã¾ã™ã€‚ サービス休止機能ã¯è¨­å®šã—ãŸæ™‚é–“ãŒçµŒéŽã—ãŸã‚‰èª­ã¿è¾¼ã‚“ã ã‚µãƒ¼ãƒ“スを解放ã—ã¾ã™ã€‚ã“ã‚Œã¯RAMを節約ã—ãŸã‚Šã€ã‚µãƒ¼ãƒ“スã§ã‚³ãƒ³ãƒ”ューターã®å‹•ä½œãŒé‡ããªã‚‹ã®ã‚’防ãã®ã«å½¹ç«‹ã¡ã¾ã™ã€‚", 261 "settings.app.hibernateInfo": "デフォルトã§ã¯ã€Ferdiã¯ã™ã¹ã¦ã®ã‚µãƒ¼ãƒ“スをãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã§é–‹ã„ã¦èª­ã¿è¾¼ã‚“ã§ãŠãã®ã§ã€ä½¿ã„ãŸã„ã¨ãã«ã™ãã«ä½¿ãˆã¾ã™ã€‚ サービス休止機能ã¯è¨­å®šã—ãŸæ™‚é–“ãŒçµŒéŽã—ãŸã‚‰èª­ã¿è¾¼ã‚“ã ã‚µãƒ¼ãƒ“スを解放ã—ã¾ã™ã€‚ã“ã‚Œã¯RAMを節約ã—ãŸã‚Šã€ã‚µãƒ¼ãƒ“スã§ã‚³ãƒ³ãƒ”ューターã®å‹•ä½œãŒé‡ããªã‚‹ã®ã‚’防ãã®ã«å½¹ç«‹ã¡ã¾ã™ã€‚",
267 "settings.app.inactivityLockInfo": "休止状態ã¾ã§ã®æ™‚é–“(分)ã€ã“ã®æ™‚é–“ãŒçµŒéŽå¾ŒFerdiã¯è‡ªå‹•ã§ãƒ­ãƒƒã‚¯ã—ã¾ã™ã€‚0ã§ç„¡åŠ¹åŒ–", 262 "settings.app.inactivityLockInfo": "休止状態ã¾ã§ã®æ™‚é–“(分)ã€ã“ã®æ™‚é–“ãŒçµŒéŽå¾ŒFerdiã¯è‡ªå‹•ã§ãƒ­ãƒƒã‚¯ã—ã¾ã™ã€‚0ã§ç„¡åŠ¹åŒ–",
268 "settings.app.languageDisclaimer": "å…¬å¼ã®è¨€èªžã¯è‹±èªžã¨ãƒ‰ã‚¤ãƒ„語ã§ã™ã€‚ä»–ã®è¨€èªžã¯ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ã«ã‚ˆã‚‹ç¿»è¨³ã§ã™ã€‚", 263 "settings.app.languageDisclaimer": "å…¬å¼ã®è¨€èªžã¯è‹±èªžã¨ãƒ‰ã‚¤ãƒ„語ã§ã™ã€‚ä»–ã®è¨€èªžã¯ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ã«ã‚ˆã‚‹ç¿»è¨³ã§ã™ã€‚",
269 "settings.app.lockInfo": "Password Lock allows you to keep your messages protected.\nUsing Password Lock, you will be prompted to enter your password everytime you start Ferdi or lock Ferdi yourself using the lock symbol in the bottom left corner or the shortcut {lockShortcut}.", 264 "settings.app.lockInfo": "パスワードロックã¯ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’ä¿è­·ã§ãã¾ã™ã€‚\nパスワードロックを使用ã™ã‚‹ã¨ã€Ferdiã®èµ·å‹•æ™‚ã€ã¾ãŸã¯è‡ªåˆ†ã§å·¦ä¸‹ã®ãƒ­ãƒƒã‚¯ãƒœã‚¿ãƒ³ã‚’押ã™ã‹ã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆ{lockShortcut}ã§Ferdiをロックã—ãŸã¨ãã«ã€ãã®éƒ½åº¦ãƒ‘スワードã®å…¥åŠ›ãŒæ±‚ã‚られã¾ã™ã€‚",
270 "settings.app.lockedPassword": "パスワード", 265 "settings.app.lockedPassword": "パスワード",
271 "settings.app.lockedPasswordInfo": "覚ãˆã‚‰ã‚Œã‚‹ãƒ‘スワードを設定ã™ã‚‹ã‚ˆã†ã«ã—ã¦ãã ã•ã„。\nパスワードを紛失ã™ã‚‹ã¨ã€Ferdiã®å†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚", 266 "settings.app.lockedPasswordInfo": "覚ãˆã‚‰ã‚Œã‚‹ãƒ‘スワードを設定ã™ã‚‹ã‚ˆã†ã«ã—ã¦ãã ã•ã„。\nパスワードを紛失ã™ã‚‹ã¨ã€Ferdiã®å†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚",
272 "settings.app.restartRequired": "変更ã«ã¯å†èµ·å‹•ãŒå¿…è¦ã§ã™", 267 "settings.app.restartRequired": "変更ã«ã¯å†èµ·å‹•ãŒå¿…è¦ã§ã™",
273 "settings.app.scheduledDNDInfo": "集中モードã®ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’有効ã«ã™ã‚‹ã¨ã€Ferdiã‹ã‚‰ã®é€šçŸ¥ã‚’å—ã‘å–らãªã„時間帯を設定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚", 268 "settings.app.scheduledDNDInfo": "集中モードã®ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’有効ã«ã™ã‚‹ã¨ã€Ferdiã‹ã‚‰ã®é€šçŸ¥ã‚’å—ã‘å–らãªã„時間帯を設定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚",
274 "settings.app.scheduledDNDTimeInfo": "24時間形å¼ã§å…¥åŠ›ã—ã¦ãã ã•ã„。終了時刻を開始時刻よりも早ã設定ã™ã‚‹ã¨(例: 17:00開始ã€9:00終了)ã€é›†ä¸­ãƒ¢ãƒ¼ãƒ‰ã‚’一晩中有効ã«ã§ãã¾ã™ã€‚", 269 "settings.app.scheduledDNDTimeInfo": "24時間形å¼ã§å…¥åŠ›ã—ã¦ãã ã•ã„。終了時刻を開始時刻よりも早ã設定ã™ã‚‹ã¨(例: 17:00開始ã€9:00終了)ã€é›†ä¸­ãƒ¢ãƒ¼ãƒ‰ã‚’一晩中有効ã«ã§ãã¾ã™ã€‚",
275 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 270 "settings.app.sentryInfo": "統計情報をé€ä¿¡ã™ã‚‹ã¨é–‹ç™ºè€…ãŒFerdiã®ã‚¨ãƒ©ãƒ¼ã‚’発見ã™ã‚‹ã®ã«å½¹ç«‹ã¡ã¾ã™ã€‚メッセージã®ãƒ‡ãƒ¼ã‚¿ã®ã‚ˆã†ãªå€‹äººæƒ…å ±ã¯ä¸€åˆ‡é€ä¿¡ã—ã¾ã›ã‚“。",
276 "settings.app.spellCheckerLanguageInfo": "Ferdiã¯ã‚¹ãƒšãƒ«ãƒã‚§ãƒƒã‚¯ã«macOSシステムã®ã‚¹ãƒšãƒ«ãƒã‚§ãƒƒã‚«ãƒ¼ã‚’使用ã—ã¦ã„ã¾ã™ã€‚スペルãƒã‚§ãƒƒã‚«ãƒ¼ã§ãƒã‚§ãƒƒã‚¯ã™ã‚‹è¨€èªžã‚’変更ã™ã‚‹ã«ã¯ã€macOSã®ã‚·ã‚¹ãƒ†ãƒ ç’°å¢ƒè¨­å®šã‹ã‚‰è¡Œã£ã¦ãã ã•ã„。", 271 "settings.app.spellCheckerLanguageInfo": "Ferdiã¯ã‚¹ãƒšãƒ«ãƒã‚§ãƒƒã‚¯ã«macOSシステムã®ã‚¹ãƒšãƒ«ãƒã‚§ãƒƒã‚«ãƒ¼ã‚’使用ã—ã¦ã„ã¾ã™ã€‚スペルãƒã‚§ãƒƒã‚«ãƒ¼ã§ãƒã‚§ãƒƒã‚¯ã™ã‚‹è¨€èªžã‚’変更ã™ã‚‹ã«ã¯ã€macOSã®ã‚·ã‚¹ãƒ†ãƒ ç’°å¢ƒè¨­å®šã‹ã‚‰è¡Œã£ã¦ãã ã•ã„。",
277 "settings.app.subheadlineCache": "キャッシュ", 272 "settings.app.subheadlineCache": "キャッシュ",
273 "settings.app.subheadlineFerdiProfile": "Ferdiプロフィール",
278 "settings.app.todoServerInfo": "ã“ã®ã‚µãƒ¼ãƒãƒ¼ã¯ã€ŒFerdi ToDoã€ã®æ©Ÿèƒ½ã«ä½¿ç”¨ã•ã‚Œã¾ã™ã€‚", 274 "settings.app.todoServerInfo": "ã“ã®ã‚µãƒ¼ãƒãƒ¼ã¯ã€ŒFerdi ToDoã€ã®æ©Ÿèƒ½ã«ä½¿ç”¨ã•ã‚Œã¾ã™ã€‚",
279 "settings.app.translationHelp": "Ferdiã®ç¿»è¨³ä½œæ¥­ã«ã”å”力をãŠé¡˜ã„ã—ã¾ã™ã€‚", 275 "settings.app.translationHelp": "Ferdiã®ç¿»è¨³ä½œæ¥­ã«ã”å”力をãŠé¡˜ã„ã—ã¾ã™ã€‚",
280 "settings.app.universalDarkModeInfo": "ユニãƒãƒ¼ã‚µãƒ«ãƒ€ãƒ¼ã‚¯ãƒ¢ãƒ¼ãƒ‰ã¯ã€ç¾åœ¨ãƒ€ãƒ¼ã‚¯ãƒ¢ãƒ¼ãƒ‰ãŒã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ãªã„サービスå‘ã‘ã«ãƒ€ãƒ¼ã‚¯ãƒ¢ãƒ¼ãƒ‰ã‚’å‹•çš„ã«ç”Ÿæˆã—ã¾ã™ã€‚", 276 "settings.app.universalDarkModeInfo": "ユニãƒãƒ¼ã‚µãƒ«ãƒ€ãƒ¼ã‚¯ãƒ¢ãƒ¼ãƒ‰ã¯ã€ç¾åœ¨ãƒ€ãƒ¼ã‚¯ãƒ¢ãƒ¼ãƒ‰ãŒã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ãªã„サービスå‘ã‘ã«ãƒ€ãƒ¼ã‚¯ãƒ¢ãƒ¼ãƒ‰ã‚’å‹•çš„ã«ç”Ÿæˆã—ã¾ã™ã€‚",
@@ -378,7 +374,7 @@
378 "settings.team.contentHeadline": "Franzã®ãƒãƒ¼ãƒ ç®¡ç†", 374 "settings.team.contentHeadline": "Franzã®ãƒãƒ¼ãƒ ç®¡ç†",
379 "settings.team.copy": "Franzãƒãƒ¼ãƒ ç®¡ç†ã§ã¯ã€è¤‡æ•°ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®Franzサブスクリプションを管ç†ã§ãã¾ã™ã€‚Franzプレミアムã®ã‚µãƒ–スクリプションã¯ã€Ferdiを使用ã™ã‚‹ä¸Šã§ä½•ã®åˆ©ç‚¹ã‚‚ãªã„ã“ã¨ã«ç•™æ„ã—ã¦ãã ã•ã„。レガシーãªFranzã®ãƒãƒ¼ãƒ ã‚’管ç†ã—ã€ã‚¢ã‚«ã‚¦ãƒ³ãƒˆç®¡ç†æ©Ÿèƒ½ã‚’維æŒã™ã‚‹ãŸã‚ã ã‘ã«ã€ãƒãƒ¼ãƒ ç®¡ç†ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãるよã†ã«ãªã£ã¦ã„ã¾ã™ã€‚", 375 "settings.team.copy": "Franzãƒãƒ¼ãƒ ç®¡ç†ã§ã¯ã€è¤‡æ•°ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®Franzサブスクリプションを管ç†ã§ãã¾ã™ã€‚Franzプレミアムã®ã‚µãƒ–スクリプションã¯ã€Ferdiを使用ã™ã‚‹ä¸Šã§ä½•ã®åˆ©ç‚¹ã‚‚ãªã„ã“ã¨ã«ç•™æ„ã—ã¦ãã ã•ã„。レガシーãªFranzã®ãƒãƒ¼ãƒ ã‚’管ç†ã—ã€ã‚¢ã‚«ã‚¦ãƒ³ãƒˆç®¡ç†æ©Ÿèƒ½ã‚’維æŒã™ã‚‹ãŸã‚ã ã‘ã«ã€ãƒãƒ¼ãƒ ç®¡ç†ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãるよã†ã«ãªã£ã¦ã„ã¾ã™ã€‚",
380 "settings.team.headline": "ãƒãƒ¼ãƒ ", 376 "settings.team.headline": "ãƒãƒ¼ãƒ ",
381 "settings.team.intro": "You are currently using Franz Servers, which is why you have access to Team Management.", 377 "settings.team.intro": "ç¾åœ¨Franzサーãƒãƒ¼ã‚’使用ã—ã¦ã„ã‚‹ãŸã‚ã€ãƒãƒ¼ãƒ ç®¡ç†ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚",
382 "settings.team.manageAction": "meetfranz.com ã§ãƒãƒ¼ãƒ ã‚’管ç†", 378 "settings.team.manageAction": "meetfranz.com ã§ãƒãƒ¼ãƒ ã‚’管ç†",
383 "settings.team.teamsUnavailable": "ãƒãƒ¼ãƒ ã¯åˆ©ç”¨ã§ãã¾ã›ã‚“", 379 "settings.team.teamsUnavailable": "ãƒãƒ¼ãƒ ã¯åˆ©ç”¨ã§ãã¾ã›ã‚“",
384 "settings.team.teamsUnavailableInfo": "ãƒãƒ¼ãƒ ã¯ç¾åœ¨ã€Franzサーãƒãƒ¼ã‚’使用ã—ã¦ã„ã¦ã€Franzプロフェッショナルを契約ã—ãŸæ–¹ã®ã¿ãŒåˆ©ç”¨ã§ãã¾ã™ã€‚ãƒãƒ¼ãƒ ã‚’使用ã™ã‚‹ã«ã¯ã€ã‚µãƒ¼ãƒãƒ¼ã‚’ https://api.franzinfra.com ã«å¤‰æ›´ã—ã¦ãã ã•ã„。", 380 "settings.team.teamsUnavailableInfo": "ãƒãƒ¼ãƒ ã¯ç¾åœ¨ã€Franzサーãƒãƒ¼ã‚’使用ã—ã¦ã„ã¦ã€Franzプロフェッショナルを契約ã—ãŸæ–¹ã®ã¿ãŒåˆ©ç”¨ã§ãã¾ã™ã€‚ãƒãƒ¼ãƒ ã‚’使用ã™ã‚‹ã«ã¯ã€ã‚µãƒ¼ãƒãƒ¼ã‚’ https://api.franzinfra.com ã«å¤‰æ›´ã—ã¦ãã ã•ã„。",
@@ -434,17 +430,17 @@
434 "tabs.item.confirmDeleteService": "本当ã«{serviceName}サービスを削除ã—ã¾ã™ã‹ï¼Ÿ", 430 "tabs.item.confirmDeleteService": "本当ã«{serviceName}サービスを削除ã—ã¾ã™ã‹ï¼Ÿ",
435 "tabs.item.deleteService": "サービスã®å‰Šé™¤", 431 "tabs.item.deleteService": "サービスã®å‰Šé™¤",
436 "tabs.item.disableAudio": "オーディオã®ç„¡åŠ¹åŒ–", 432 "tabs.item.disableAudio": "オーディオã®ç„¡åŠ¹åŒ–",
437 "tabs.item.disableDarkMode": "Disable Dark mode", 433 "tabs.item.disableDarkMode": "ダークモードを無効ã«ã™ã‚‹",
438 "tabs.item.disableNotifications": "通知を無効ã«ã™ã‚‹", 434 "tabs.item.disableNotifications": "通知を無効ã«ã™ã‚‹",
439 "tabs.item.disableService": "サービスを無効ã«ã™ã‚‹", 435 "tabs.item.disableService": "サービスを無効ã«ã™ã‚‹",
440 "tabs.item.edit": "編集", 436 "tabs.item.edit": "編集",
441 "tabs.item.enableAudio": "オーディオを有効ã«ã™ã‚‹", 437 "tabs.item.enableAudio": "オーディオを有効ã«ã™ã‚‹",
442 "tabs.item.enableDarkMode": "Enable Dark mode", 438 "tabs.item.enableDarkMode": "ダークモードを有効ã«ã™ã‚‹",
443 "tabs.item.enableNotification": "通知を有効ã«ã™ã‚‹", 439 "tabs.item.enableNotification": "通知を有効ã«ã™ã‚‹",
444 "tabs.item.enableService": "サービスを有効ã«ã™ã‚‹", 440 "tabs.item.enableService": "サービスを有効ã«ã™ã‚‹",
445 "tabs.item.hibernateService": "Hibernate service", 441 "tabs.item.hibernateService": "サービスã®ä¼‘æ­¢",
446 "tabs.item.reload": "å†èª­ã¿è¾¼ã¿", 442 "tabs.item.reload": "å†èª­ã¿è¾¼ã¿",
447 "tabs.item.wakeUpService": "Wake up service", 443 "tabs.item.wakeUpService": "サービスã®èµ·å‹•",
448 "validation.email": "{field}ã¯æ­£ã—ãã‚ã‚Šã¾ã›ã‚“", 444 "validation.email": "{field}ã¯æ­£ã—ãã‚ã‚Šã¾ã›ã‚“",
449 "validation.minLength": "{field}ã¯å°‘ãªãã¨ã‚‚{length}文字以上ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“", 445 "validation.minLength": "{field}ã¯å°‘ãªãã¨ã‚‚{length}文字以上ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“",
450 "validation.oneRequired": "å°‘ãªãã¨ã‚‚1ã¤ã¯å¿…è¦ã§ã™", 446 "validation.oneRequired": "å°‘ãªãã¨ã‚‚1ã¤ã¯å¿…è¦ã§ã™",
diff --git a/src/i18n/locales/ka.json b/src/i18n/locales/ka.json
index 96480c005..af5e5eb7c 100644
--- a/src/i18n/locales/ka.json
+++ b/src/i18n/locales/ka.json
@@ -26,13 +26,6 @@
26 "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.", 26 "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.",
27 "feature.quickSwitch.search": "Search...", 27 "feature.quickSwitch.search": "Search...",
28 "feature.quickSwitch.title": "QuickSwitch", 28 "feature.quickSwitch.title": "QuickSwitch",
29 "feature.shareFranz.action.email": "Send as email",
30 "feature.shareFranz.action.facebook": "Share on Facebook",
31 "feature.shareFranz.action.twitter": "Share on Twitter",
32 "feature.shareFranz.headline": "Ferdi is better together!",
33 "feature.shareFranz.shareText.email": "I've added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.getferdi.com",
34 "feature.shareFranz.shareText.twitter": "I've added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.getferdi.com /cc @FerdiMessenger",
35 "feature.shareFranz.text": "Tell your friends and colleagues how awesome Ferdi is and help us to spread the word.",
36 "global.api.unhealthy": "Ferdi-ის áƒáƒœáƒšáƒáƒ˜áƒœ სერვისთáƒáƒœ დáƒáƒ™áƒáƒ•áƒ¨áƒ˜áƒ áƒ”ბრვერ მáƒáƒ®áƒ”რხდáƒ", 29 "global.api.unhealthy": "Ferdi-ის áƒáƒœáƒšáƒáƒ˜áƒœ სერვისთáƒáƒœ დáƒáƒ™áƒáƒ•áƒ¨áƒ˜áƒ áƒ”ბრვერ მáƒáƒ®áƒ”რხდáƒ",
37 "global.notConnectedToTheInternet": "თქვენ áƒáƒ  ხáƒáƒ áƒ— ინტერნეტთáƒáƒœ დáƒáƒ™áƒáƒ•áƒ¨áƒ˜áƒ áƒ”ბული.", 30 "global.notConnectedToTheInternet": "თქვენ áƒáƒ  ხáƒáƒ áƒ— ინტერნეტთáƒáƒœ დáƒáƒ™áƒáƒ•áƒ¨áƒ˜áƒ áƒ”ბული.",
38 "global.spellchecker.useDefault": "Use System Default ({default})", 31 "global.spellchecker.useDefault": "Use System Default ({default})",
@@ -205,6 +198,8 @@
205 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", 198 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})",
206 "settings.app.buttonClearAllCache": "Clear cache", 199 "settings.app.buttonClearAllCache": "Clear cache",
207 "settings.app.buttonInstallUpdate": "გáƒáƒ“áƒáƒ¢áƒ•áƒ˜áƒ áƒ—ეთ დრდáƒáƒáƒ§áƒ”ნეთ გáƒáƒœáƒáƒ®áƒšáƒ”ბáƒ", 200 "settings.app.buttonInstallUpdate": "გáƒáƒ“áƒáƒ¢áƒ•áƒ˜áƒ áƒ—ეთ დრდáƒáƒáƒ§áƒ”ნეთ გáƒáƒœáƒáƒ®áƒšáƒ”ბáƒ",
201 "settings.app.buttonOpenFerdiProfileFolder": "Open Profile folder",
202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open Service Recipes folder",
208 "settings.app.buttonSearchForUpdate": "გáƒáƒœáƒáƒ®áƒšáƒ”ბების შემáƒáƒ¬áƒ›áƒ”ბáƒ", 203 "settings.app.buttonSearchForUpdate": "გáƒáƒœáƒáƒ®áƒšáƒ”ბების შემáƒáƒ¬áƒ›áƒ”ბáƒ",
209 "settings.app.cacheInfo": "Ferdi cache is currently using {size} of disk space.", 204 "settings.app.cacheInfo": "Ferdi cache is currently using {size} of disk space.",
210 "settings.app.cacheNotCleared": "Couldn't clear all cache", 205 "settings.app.cacheNotCleared": "Couldn't clear all cache",
@@ -275,6 +270,7 @@
275 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 270 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!",
276 "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.", 271 "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.",
277 "settings.app.subheadlineCache": "Cache", 272 "settings.app.subheadlineCache": "Cache",
273 "settings.app.subheadlineFerdiProfile": "Ferdi Profile",
278 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", 274 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.",
279 "settings.app.translationHelp": "Help us to translate Ferdi into your language.", 275 "settings.app.translationHelp": "Help us to translate Ferdi into your language.",
280 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.", 276 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.",
diff --git a/src/i18n/locales/ko.json b/src/i18n/locales/ko.json
index 4286aa7d9..147e81647 100644
--- a/src/i18n/locales/ko.json
+++ b/src/i18n/locales/ko.json
@@ -26,13 +26,6 @@
26 "feature.quickSwitch.info": "서비스를 TAB, ↑, â†“ì„ ì´ìš©í•´ ì„ íƒí•  수 있습니다. ENTER를 ì´ìš©í•˜ì—¬ 서비스를 ì—´ 수 있습니다.", 26 "feature.quickSwitch.info": "서비스를 TAB, ↑, â†“ì„ ì´ìš©í•´ ì„ íƒí•  수 있습니다. ENTER를 ì´ìš©í•˜ì—¬ 서비스를 ì—´ 수 있습니다.",
27 "feature.quickSwitch.search": "검색...", 27 "feature.quickSwitch.search": "검색...",
28 "feature.quickSwitch.title": "빠른 검색", 28 "feature.quickSwitch.title": "빠른 검색",
29 "feature.shareFranz.action.email": "ì´ë©”ì¼ë¡œ 보내기",
30 "feature.shareFranz.action.facebook": "페ì´ìŠ¤ë¶ì— 공유하기",
31 "feature.shareFranz.action.twitter": "íŠ¸ìœ„í„°ì— ê³µìœ í•˜ê¸°",
32 "feature.shareFranz.headline": "Ferdi는 함께 í• ìˆ˜ë¡ ì¢‹ìŠµë‹ˆë‹¤!",
33 "feature.shareFranz.shareText.email": "I've added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.getferdi.com",
34 "feature.shareFranz.shareText.twitter": "I've added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.getferdi.com /cc @FerdiMessenger",
35 "feature.shareFranz.text": "친구들과 ë™ë£Œë“¤ì—게 Ferdi ê°€ 얼마나 멋지고 좋ì€ì§€ì— 대해 ë„리 알려 ì €í¬ë¥¼ ë„와주세요.",
36 "global.api.unhealthy": "Ferdi 온ë¼ì¸ ì„œë¹„ìŠ¤ì— ì—°ê²°í•  수 없습니다.", 29 "global.api.unhealthy": "Ferdi 온ë¼ì¸ ì„œë¹„ìŠ¤ì— ì—°ê²°í•  수 없습니다.",
37 "global.notConnectedToTheInternet": "ì¸í„°ë„·ì— ì—°ê²°í•  수 없습니다.", 30 "global.notConnectedToTheInternet": "ì¸í„°ë„·ì— ì—°ê²°í•  수 없습니다.",
38 "global.spellchecker.useDefault": "시스템 기본 사용 ({default})", 31 "global.spellchecker.useDefault": "시스템 기본 사용 ({default})",
@@ -205,6 +198,8 @@
205 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", 198 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})",
206 "settings.app.buttonClearAllCache": "ìºì‹œ 지우기", 199 "settings.app.buttonClearAllCache": "ìºì‹œ 지우기",
207 "settings.app.buttonInstallUpdate": "재시작 후 ì—…ë°ì´íŠ¸ 설치", 200 "settings.app.buttonInstallUpdate": "재시작 후 ì—…ë°ì´íŠ¸ 설치",
201 "settings.app.buttonOpenFerdiProfileFolder": "Open Profile folder",
202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open Service Recipes folder",
208 "settings.app.buttonSearchForUpdate": "ì—…ë°ì´íŠ¸ 확ì¸", 203 "settings.app.buttonSearchForUpdate": "ì—…ë°ì´íŠ¸ 확ì¸",
209 "settings.app.cacheInfo": "현재 Ferdi ìºì‹œê°€ ë””ìŠ¤í¬ ê³µê°„ì˜ {size} ë§Œí¼ ì‚¬ìš©í•˜ê³  있습니다.", 204 "settings.app.cacheInfo": "현재 Ferdi ìºì‹œê°€ ë””ìŠ¤í¬ ê³µê°„ì˜ {size} ë§Œí¼ ì‚¬ìš©í•˜ê³  있습니다.",
210 "settings.app.cacheNotCleared": "모든 ìºì‹œë¥¼ 지우지 못했습니다.", 205 "settings.app.cacheNotCleared": "모든 ìºì‹œë¥¼ 지우지 못했습니다.",
@@ -275,6 +270,7 @@
275 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 270 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!",
276 "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.", 271 "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.",
277 "settings.app.subheadlineCache": "ìºì‹œ", 272 "settings.app.subheadlineCache": "ìºì‹œ",
273 "settings.app.subheadlineFerdiProfile": "Ferdi Profile",
278 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", 274 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.",
279 "settings.app.translationHelp": "Ferdi ë²ˆì—­ì„ ë„와주세요.", 275 "settings.app.translationHelp": "Ferdi ë²ˆì—­ì„ ë„와주세요.",
280 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.", 276 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.",
diff --git a/src/i18n/locales/nl-BE.json b/src/i18n/locales/nl-BE.json
index 3d6991d5e..a5a3601f7 100644
--- a/src/i18n/locales/nl-BE.json
+++ b/src/i18n/locales/nl-BE.json
@@ -26,13 +26,6 @@
26 "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.", 26 "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.",
27 "feature.quickSwitch.search": "Search...", 27 "feature.quickSwitch.search": "Search...",
28 "feature.quickSwitch.title": "QuickSwitch", 28 "feature.quickSwitch.title": "QuickSwitch",
29 "feature.shareFranz.action.email": "Verstuur als e-mail",
30 "feature.shareFranz.action.facebook": "Deel op Facebook",
31 "feature.shareFranz.action.twitter": "Deel op Twitter",
32 "feature.shareFranz.headline": "Ferdi is beter samen!",
33 "feature.shareFranz.shareText.email": "Ik heb {telling} diensten toegevoegd aan Ferdi! Download de gratis app voor WhatsApp, Messenger, Slack, Skype, en anderen op www.getferdi.com",
34 "feature.shareFranz.shareText.twitter": "Ik heb {tel} diensten toegevoegd aan Ferdi! Download de gratis app voor WhatsApp, Messenger, Slack, Skype, en anderen op www.getferdi.com /cc @FerdiMessenger",
35 "feature.shareFranz.text": "Vertel je vrienden en collega's hoe geweldig Ferdi is en help ons het woord te verspreiden.",
36 "global.api.unhealthy": "Kan geen verbinding maken met de Ferdi services", 29 "global.api.unhealthy": "Kan geen verbinding maken met de Ferdi services",
37 "global.notConnectedToTheInternet": "Je hebt geen internet verbinding.", 30 "global.notConnectedToTheInternet": "Je hebt geen internet verbinding.",
38 "global.spellchecker.useDefault": "Gebruik Systeemstandaard ({default})", 31 "global.spellchecker.useDefault": "Gebruik Systeemstandaard ({default})",
@@ -205,6 +198,8 @@
205 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", 198 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})",
206 "settings.app.buttonClearAllCache": "Cache wissen", 199 "settings.app.buttonClearAllCache": "Cache wissen",
207 "settings.app.buttonInstallUpdate": "Opnieuw opstarten & update installeren", 200 "settings.app.buttonInstallUpdate": "Opnieuw opstarten & update installeren",
201 "settings.app.buttonOpenFerdiProfileFolder": "Open Profile folder",
202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open Service Recipes folder",
208 "settings.app.buttonSearchForUpdate": "Controleer op updates", 203 "settings.app.buttonSearchForUpdate": "Controleer op updates",
209 "settings.app.cacheInfo": "Ferdi cache gebruikt momenteel {size} schijfruimte.", 204 "settings.app.cacheInfo": "Ferdi cache gebruikt momenteel {size} schijfruimte.",
210 "settings.app.cacheNotCleared": "Couldn't clear all cache", 205 "settings.app.cacheNotCleared": "Couldn't clear all cache",
@@ -275,6 +270,7 @@
275 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 270 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!",
276 "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.", 271 "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.",
277 "settings.app.subheadlineCache": "Cache", 272 "settings.app.subheadlineCache": "Cache",
273 "settings.app.subheadlineFerdiProfile": "Ferdi Profile",
278 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", 274 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.",
279 "settings.app.translationHelp": "Help ons om Ferdi te vertalen naar uw taal.", 275 "settings.app.translationHelp": "Help ons om Ferdi te vertalen naar uw taal.",
280 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.", 276 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.",
diff --git a/src/i18n/locales/nl.json b/src/i18n/locales/nl.json
index 1d639197c..7f1088849 100644
--- a/src/i18n/locales/nl.json
+++ b/src/i18n/locales/nl.json
@@ -26,13 +26,6 @@
26 "feature.quickSwitch.info": "Selecteer een service met TAB, ↑ en ↓. Open een service met ENTER.", 26 "feature.quickSwitch.info": "Selecteer een service met TAB, ↑ en ↓. Open een service met ENTER.",
27 "feature.quickSwitch.search": "Zoeken...", 27 "feature.quickSwitch.search": "Zoeken...",
28 "feature.quickSwitch.title": "QuickSwitch", 28 "feature.quickSwitch.title": "QuickSwitch",
29 "feature.shareFranz.action.email": "Verstuur als e-mail",
30 "feature.shareFranz.action.facebook": "Deel op Facebook",
31 "feature.shareFranz.action.twitter": "Deel op Twitter",
32 "feature.shareFranz.headline": "Ferdi is leuker samen!",
33 "feature.shareFranz.shareText.email": "Ik heb {count} services toegevoegd aan Ferdi! Download de gratis app voor Whatsapp, Messenger, Slack, Skype en co op www.getferdi.com",
34 "feature.shareFranz.shareText.twitter": "Ik heb {count} services toegevoegd aan Ferdi! Download de gratis app voor Whatsapp, Messenger, Slack, Skype en co op www.getferdi.com /cc @FerdiMessenger",
35 "feature.shareFranz.text": "Vertel je vrienden en collega's hoe geweldig Ferdi is en help ons om bekender te worden.",
36 "global.api.unhealthy": "Kan geen verbinding maken met de Ferdi-services.", 29 "global.api.unhealthy": "Kan geen verbinding maken met de Ferdi-services.",
37 "global.notConnectedToTheInternet": "U bent niet verbonden met het internet.", 30 "global.notConnectedToTheInternet": "U bent niet verbonden met het internet.",
38 "global.spellchecker.useDefault": "Gebruik systeemstandaard ({default})", 31 "global.spellchecker.useDefault": "Gebruik systeemstandaard ({default})",
@@ -205,6 +198,8 @@
205 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", 198 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})",
206 "settings.app.buttonClearAllCache": "Cache legen", 199 "settings.app.buttonClearAllCache": "Cache legen",
207 "settings.app.buttonInstallUpdate": "Opnieuw opstarten & update installeren", 200 "settings.app.buttonInstallUpdate": "Opnieuw opstarten & update installeren",
201 "settings.app.buttonOpenFerdiProfileFolder": "Open Profile folder",
202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open Service Recipes folder",
208 "settings.app.buttonSearchForUpdate": "Controleer op updates", 203 "settings.app.buttonSearchForUpdate": "Controleer op updates",
209 "settings.app.cacheInfo": "Ferdi gebruikt op dit moment {size} schijfruimte aan tijdelijke bestanden.", 204 "settings.app.cacheInfo": "Ferdi gebruikt op dit moment {size} schijfruimte aan tijdelijke bestanden.",
210 "settings.app.cacheNotCleared": "Couldn't clear all cache", 205 "settings.app.cacheNotCleared": "Couldn't clear all cache",
@@ -275,6 +270,7 @@
275 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 270 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!",
276 "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.", 271 "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.",
277 "settings.app.subheadlineCache": "Cache", 272 "settings.app.subheadlineCache": "Cache",
273 "settings.app.subheadlineFerdiProfile": "Ferdi Profile",
278 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", 274 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.",
279 "settings.app.translationHelp": "Help ons om Ferdi uw taal te laten spreken.", 275 "settings.app.translationHelp": "Help ons om Ferdi uw taal te laten spreken.",
280 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.", 276 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.",
diff --git a/src/i18n/locales/no.json b/src/i18n/locales/no.json
index 57a4715c3..9c3184edf 100644
--- a/src/i18n/locales/no.json
+++ b/src/i18n/locales/no.json
@@ -26,13 +26,6 @@
26 "feature.quickSwitch.info": "Velg en tjeneste med TAB, ↑ og ↓. Åpne en tjeneste med ENTER.", 26 "feature.quickSwitch.info": "Velg en tjeneste med TAB, ↑ og ↓. Åpne en tjeneste med ENTER.",
27 "feature.quickSwitch.search": "Søk...", 27 "feature.quickSwitch.search": "Søk...",
28 "feature.quickSwitch.title": "Hurtigbytte", 28 "feature.quickSwitch.title": "Hurtigbytte",
29 "feature.shareFranz.action.email": "Send som e-post",
30 "feature.shareFranz.action.facebook": "Del på Facebook",
31 "feature.shareFranz.action.twitter": "Del på Twitter",
32 "feature.shareFranz.headline": "Ferdi er bedre sammen!",
33 "feature.shareFranz.shareText.email": "Jeg har lagt til {count} tjenester i Ferdi! Få den gratis programvaren for WhatsApp, Messenger, Slack, Skype og andre på www.getferdi.com",
34 "feature.shareFranz.shareText.twitter": "Jeg har lagt til {count} tjenester i Ferdi! Få den gratis programvaren for WhatsApp, Messenger, Slack, Skype og andre på www.getferdi.com /cc @FerdiMessenger",
35 "feature.shareFranz.text": "Fortell vennene og kollegene dine om hvor fantastisk Ferdi er og hjelp oss med å spre ordet.",
36 "global.api.unhealthy": "Kan ikke koble til Ferdi online-tjenester", 29 "global.api.unhealthy": "Kan ikke koble til Ferdi online-tjenester",
37 "global.notConnectedToTheInternet": "Du er ikke koblet til Internett.", 30 "global.notConnectedToTheInternet": "Du er ikke koblet til Internett.",
38 "global.spellchecker.useDefault": "Bruk systemstandarden ({default})", 31 "global.spellchecker.useDefault": "Bruk systemstandarden ({default})",
@@ -205,6 +198,8 @@
205 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", 198 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})",
206 "settings.app.buttonClearAllCache": "Tøm hurtiglager", 199 "settings.app.buttonClearAllCache": "Tøm hurtiglager",
207 "settings.app.buttonInstallUpdate": "Start på nytt og installer oppdatering", 200 "settings.app.buttonInstallUpdate": "Start på nytt og installer oppdatering",
201 "settings.app.buttonOpenFerdiProfileFolder": "Open Profile folder",
202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open Service Recipes folder",
208 "settings.app.buttonSearchForUpdate": "Se etter oppdateringer", 203 "settings.app.buttonSearchForUpdate": "Se etter oppdateringer",
209 "settings.app.cacheInfo": "Ferdi hurtiglager bruker for øyeblikket {size} av diskplassen.", 204 "settings.app.cacheInfo": "Ferdi hurtiglager bruker for øyeblikket {size} av diskplassen.",
210 "settings.app.cacheNotCleared": "Kunne ikke slette hurtiglageret", 205 "settings.app.cacheNotCleared": "Kunne ikke slette hurtiglageret",
@@ -275,6 +270,7 @@
275 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 270 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!",
276 "settings.app.spellCheckerLanguageInfo": "Ferdi bruker Mac'en sin innebygde stavekontroll, for å se etter skrivefeil. Hvis du vil endre språket på stavekontrollen, så kan du gjøre det under Mac'ens system-innstillinger.", 271 "settings.app.spellCheckerLanguageInfo": "Ferdi bruker Mac'en sin innebygde stavekontroll, for å se etter skrivefeil. Hvis du vil endre språket på stavekontrollen, så kan du gjøre det under Mac'ens system-innstillinger.",
277 "settings.app.subheadlineCache": "Hurtiglager", 272 "settings.app.subheadlineCache": "Hurtiglager",
273 "settings.app.subheadlineFerdiProfile": "Ferdi Profile",
278 "settings.app.todoServerInfo": "Denne tjeneren vil ble brukt for \"Ferdi gjøremål\" funksjonen.", 274 "settings.app.todoServerInfo": "Denne tjeneren vil ble brukt for \"Ferdi gjøremål\" funksjonen.",
279 "settings.app.translationHelp": "Hjelp oss med å oversette Ferdi til ditt språk.", 275 "settings.app.translationHelp": "Hjelp oss med å oversette Ferdi til ditt språk.",
280 "settings.app.universalDarkModeInfo": "Universelt mørkt tema prøver å dynamisk generere mørke stiler for tjenester som ikke har denne støtten enda.", 276 "settings.app.universalDarkModeInfo": "Universelt mørkt tema prøver å dynamisk generere mørke stiler for tjenester som ikke har denne støtten enda.",
diff --git a/src/i18n/locales/pl.json b/src/i18n/locales/pl.json
index 947c7347c..2bf259c66 100644
--- a/src/i18n/locales/pl.json
+++ b/src/i18n/locales/pl.json
@@ -26,13 +26,6 @@
26 "feature.quickSwitch.info": "Wybierz usługę naciskając TAB, ↑ oraz ↓. Otwórz usługę naciskając ENTER.", 26 "feature.quickSwitch.info": "Wybierz usługę naciskając TAB, ↑ oraz ↓. Otwórz usługę naciskając ENTER.",
27 "feature.quickSwitch.search": "Szukaj...", 27 "feature.quickSwitch.search": "Szukaj...",
28 "feature.quickSwitch.title": "QuickSwitch", 28 "feature.quickSwitch.title": "QuickSwitch",
29 "feature.shareFranz.action.email": "Wyślij jako e-mail",
30 "feature.shareFranz.action.facebook": "Udostępnij na Facebooku",
31 "feature.shareFranz.action.twitter": "Udostępnij na Twitterze",
32 "feature.shareFranz.headline": "Ferdi jest lepszy, gdy tworzymy go razem!",
33 "feature.shareFranz.shareText.email": "Korzystam z {count} usług poprzez Ferdi! Pobierz bezpłatną aplikację do obsługi WhatsApp, Messenger, Slack, Skype i więcej na www.getferdi.com",
34 "feature.shareFranz.shareText.twitter": "Korzystam z {count} usług poprzez Ferdi! Pobierz bezpłatną aplikację do obsługi WhatsApp, Messenger, Slack, Skype i więcej na www.getferdi.com /cc @FerdiMessenger",
35 "feature.shareFranz.text": "Powiedz znajomym i kolegom o tym, jak odlotowy jest Ferdi i pomóż nam go spopularyzować.",
36 "global.api.unhealthy": "Nie można połączyć się z usługami Ferdi online", 29 "global.api.unhealthy": "Nie można połączyć się z usługami Ferdi online",
37 "global.notConnectedToTheInternet": "Nie masz połączenia z Internetem.", 30 "global.notConnectedToTheInternet": "Nie masz połączenia z Internetem.",
38 "global.spellchecker.useDefault": "Użyj domyślnego dla systemu ({default})", 31 "global.spellchecker.useDefault": "Użyj domyślnego dla systemu ({default})",
@@ -205,6 +198,8 @@
205 "settings.app.accentColorInfo": "Zdefiniuj kolor akcentu w formacie zgodnym z CSS. (Domyślnie: {defaultAccentColor})", 198 "settings.app.accentColorInfo": "Zdefiniuj kolor akcentu w formacie zgodnym z CSS. (Domyślnie: {defaultAccentColor})",
206 "settings.app.buttonClearAllCache": "Wyczyść pamięć podręczną (cache)", 199 "settings.app.buttonClearAllCache": "Wyczyść pamięć podręczną (cache)",
207 "settings.app.buttonInstallUpdate": "Uruchom ponownie i zainstaluj aktualizacjÄ™", 200 "settings.app.buttonInstallUpdate": "Uruchom ponownie i zainstaluj aktualizacjÄ™",
201 "settings.app.buttonOpenFerdiProfileFolder": "Open Profile folder",
202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open Service Recipes folder",
208 "settings.app.buttonSearchForUpdate": "Sprawdź aktualizacje", 203 "settings.app.buttonSearchForUpdate": "Sprawdź aktualizacje",
209 "settings.app.cacheInfo": "Pamięć podręczna zajmuje obecnie {size} przestrzeni dyskowej", 204 "settings.app.cacheInfo": "Pamięć podręczna zajmuje obecnie {size} przestrzeni dyskowej",
210 "settings.app.cacheNotCleared": "Błąd czyszczenia pamięci podręcznej", 205 "settings.app.cacheNotCleared": "Błąd czyszczenia pamięci podręcznej",
@@ -275,6 +270,7 @@
275 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 270 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!",
276 "settings.app.spellCheckerLanguageInfo": "Ferdi używa sprawdzania pisowni wbudowanego w Twojego Maca do sprawdzania pomyłek. Aby zmienić języki ze sprawdzaniem pisowni, przejdź do Preferencji systemowych swojego Maca.", 271 "settings.app.spellCheckerLanguageInfo": "Ferdi używa sprawdzania pisowni wbudowanego w Twojego Maca do sprawdzania pomyłek. Aby zmienić języki ze sprawdzaniem pisowni, przejdź do Preferencji systemowych swojego Maca.",
277 "settings.app.subheadlineCache": "Pamięć podręczna", 272 "settings.app.subheadlineCache": "Pamięć podręczna",
273 "settings.app.subheadlineFerdiProfile": "Ferdi Profile",
278 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", 274 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.",
279 "settings.app.translationHelp": "Pomóż nam tłumaczyć Ferdi na Twój język.", 275 "settings.app.translationHelp": "Pomóż nam tłumaczyć Ferdi na Twój język.",
280 "settings.app.universalDarkModeInfo": "Uniwersalny tryb ciemny próbuje dynamicznie generować tryb ciemny dla usług, które jeszcze go nie wspierają.", 276 "settings.app.universalDarkModeInfo": "Uniwersalny tryb ciemny próbuje dynamicznie generować tryb ciemny dla usług, które jeszcze go nie wspierają.",
diff --git a/src/i18n/locales/pt-BR.json b/src/i18n/locales/pt-BR.json
index 15dfc9185..b8865630e 100644
--- a/src/i18n/locales/pt-BR.json
+++ b/src/i18n/locales/pt-BR.json
@@ -10,7 +10,7 @@
10 "connectionLostBanner.cta": "Recarregar serviço", 10 "connectionLostBanner.cta": "Recarregar serviço",
11 "connectionLostBanner.informationLink": "O que aconteceu?", 11 "connectionLostBanner.informationLink": "O que aconteceu?",
12 "connectionLostBanner.message": "Ah não! Ferdi perdeu a conexão com {name}.", 12 "connectionLostBanner.message": "Ah não! Ferdi perdeu a conexão com {name}.",
13 "feature.announcements.changelog.headline": "Alterações no Ferdi {version}", 13 "feature.announcements.changelog.headline": "Mudanças no Ferdi {version}",
14 "feature.debugger.title": "Publicar informações de depuração", 14 "feature.debugger.title": "Publicar informações de depuração",
15 "feature.nightlyBuilds.activate": "Ativar", 15 "feature.nightlyBuilds.activate": "Ativar",
16 "feature.nightlyBuilds.cancel": "Cancelar", 16 "feature.nightlyBuilds.cancel": "Cancelar",
@@ -24,15 +24,8 @@
24 "feature.publishDebugInfo.terms": "Termos do Serviço", 24 "feature.publishDebugInfo.terms": "Termos do Serviço",
25 "feature.publishDebugInfo.title": "Publicar informações de depuração", 25 "feature.publishDebugInfo.title": "Publicar informações de depuração",
26 "feature.quickSwitch.info": "Selecione um serviço com TAB, ↑ e ↓. Abra um serviço com ENTER.", 26 "feature.quickSwitch.info": "Selecione um serviço com TAB, ↑ e ↓. Abra um serviço com ENTER.",
27 "feature.quickSwitch.search": "Buscar...", 27 "feature.quickSwitch.search": "Localizar...",
28 "feature.quickSwitch.title": "Troca Rápida", 28 "feature.quickSwitch.title": "Troca Rápida",
29 "feature.shareFranz.action.email": "Enviar por e-mail",
30 "feature.shareFranz.action.facebook": "Compartilhar no Facebook",
31 "feature.shareFranz.action.twitter": "Compartilhar no Twitter",
32 "feature.shareFranz.headline": "Ferdi é melhor em grupo!",
33 "feature.shareFranz.shareText.email": "Eu adicionei {count} serviços ao Ferdi! Adquira o aplicativo gratuito para WhatsApp, Messenger, Slack, Skype e mais em www.getferdi.com",
34 "feature.shareFranz.shareText.twitter": "Eu adicionei uma contagem de serviços para o Ferdi! Baixe gratuitamente o aplicativo para WhatsApp, Messenger, Slack, Skype e outros em www.getferdi.com /cc @FerdiMessenger",
35 "feature.shareFranz.text": "Conte aos seus amigos e colegas o quanto incrível o Ferdi é e nos ajude a espalhar a mensagem.",
36 "global.api.unhealthy": "Não foi possível estabelecer ligação aos serviços do Ferdi", 29 "global.api.unhealthy": "Não foi possível estabelecer ligação aos serviços do Ferdi",
37 "global.notConnectedToTheInternet": "Você não está conectado à internet.", 30 "global.notConnectedToTheInternet": "Você não está conectado à internet.",
38 "global.spellchecker.useDefault": "Utilizar o Padrão do Sistema ({default})", 31 "global.spellchecker.useDefault": "Utilizar o Padrão do Sistema ({default})",
@@ -42,7 +35,7 @@
42 "global.userAgentHelp": "Use 'https://whatmyuseragent.com/' (para descobrir) ou 'https://developers.whatismybrowser.com/useragents/explore/' (para escolher) o agente de usuário desejado e copie e cole aqui.", 35 "global.userAgentHelp": "Use 'https://whatmyuseragent.com/' (para descobrir) ou 'https://developers.whatismybrowser.com/useragents/explore/' (para escolher) o agente de usuário desejado e copie e cole aqui.",
43 "global.userAgentPref": "User Agent", 36 "global.userAgentPref": "User Agent",
44 "import.headline": "Importar os seus serviços do Ferdi 4", 37 "import.headline": "Importar os seus serviços do Ferdi 4",
45 "import.notSupportedHeadline": "Serviços ainda não são suportados pelo Ferdi 5", 38 "import.notSupportedHeadline": "Estes serviços ainda não são suportados pelo Ferdi 5",
46 "import.skip.label": "Eu quero adicionar serviços manualmente", 39 "import.skip.label": "Eu quero adicionar serviços manualmente",
47 "import.submit.label": "Importar serviços", 40 "import.submit.label": "Importar serviços",
48 "infobar.authRequestFailed": "Ocorreram erros ao tentar autenticar. Por favor, tente desconectar e autenticar novamente se o erro persistir.", 41 "infobar.authRequestFailed": "Ocorreram erros ao tentar autenticar. Por favor, tente desconectar e autenticar novamente se o erro persistir.",
@@ -87,7 +80,7 @@
87 "menu.app.autohideMenuBar": "Auto-ocultar barra de menu", 80 "menu.app.autohideMenuBar": "Auto-ocultar barra de menu",
88 "menu.app.checkForUpdates": "Procurar atualizações", 81 "menu.app.checkForUpdates": "Procurar atualizações",
89 "menu.app.hide": "Ocultar", 82 "menu.app.hide": "Ocultar",
90 "menu.app.hideOthers": "Hide Others", 83 "menu.app.hideOthers": "Ocultar outros",
91 "menu.app.quit": "Sair", 84 "menu.app.quit": "Sair",
92 "menu.app.settings": "Configurações", 85 "menu.app.settings": "Configurações",
93 "menu.app.unhide": "Reexibir", 86 "menu.app.unhide": "Reexibir",
@@ -112,7 +105,7 @@
112 "menu.help.debugInfo": "Copiar a informação Debug", 105 "menu.help.debugInfo": "Copiar a informação Debug",
113 "menu.help.debugInfoCopiedBody": "As Informações de Depuração foram copiadas para a área de transferência.", 106 "menu.help.debugInfoCopiedBody": "As Informações de Depuração foram copiadas para a área de transferência.",
114 "menu.help.debugInfoCopiedHeadline": "Informações de Depuração do Ferdi", 107 "menu.help.debugInfoCopiedHeadline": "Informações de Depuração do Ferdi",
115 "menu.help.importExportData": "Import/Export Configuration Data", 108 "menu.help.importExportData": "Importar/Exportar Dados de Configuração",
116 "menu.help.learnMore": "Saber mais", 109 "menu.help.learnMore": "Saber mais",
117 "menu.help.privacy": "Declaração de privacidade", 110 "menu.help.privacy": "Declaração de privacidade",
118 "menu.help.publishDebugInfo": "Publicar Informações de Depuração", 111 "menu.help.publishDebugInfo": "Publicar Informações de Depuração",
@@ -181,7 +174,7 @@
181 "service.webviewLoader.loading": "Carregando {service}", 174 "service.webviewLoader.loading": "Carregando {service}",
182 "services.getStarted": "Vamos começar", 175 "services.getStarted": "Vamos começar",
183 "services.login": "Por favor, inicie sua sessão para usar Ferdi.", 176 "services.login": "Por favor, inicie sua sessão para usar Ferdi.",
184 "services.serverInfo": "Optionally, you can change your Ferdi server by clicking the cog in the bottom left corner. If you are switching over (from one of the hosted servers) to using Ferdi without an account, please be informed that you can export your data from that server and subsequently import it using the Help menu to resurrect all your workspaces and configured services!", 177 "services.serverInfo": "Opcionalmente, você pode alterar seu servidor Ferdi clicando na engrenagem no canto inferior esquerdo. Se você está mudando (de um dos servidores hospedados) para usar Ferdi sem uma conta, por favor, saiba que você pode exportar seus dados desse servidor e posteriormente, importá-lo usando o menu Ajuda para restaurar todas as suas áreas de trabalho e serviços configurados!",
185 "services.serverless": "Use Ferdi sem uma conta", 178 "services.serverless": "Use Ferdi sem uma conta",
186 "services.welcome": "Bem-vindo ao Ferdi", 179 "services.welcome": "Bem-vindo ao Ferdi",
187 "settings.account.account.editButton": "Editar conta", 180 "settings.account.account.editButton": "Editar conta",
@@ -205,6 +198,8 @@
205 "settings.app.accentColorInfo": "Informe sua cor de destaque em um formato compatível com CSS. (Padrão: {defaultAccentColor})", 198 "settings.app.accentColorInfo": "Informe sua cor de destaque em um formato compatível com CSS. (Padrão: {defaultAccentColor})",
206 "settings.app.buttonClearAllCache": "Limpar cache", 199 "settings.app.buttonClearAllCache": "Limpar cache",
207 "settings.app.buttonInstallUpdate": "Reiniciar e instalar atualizações", 200 "settings.app.buttonInstallUpdate": "Reiniciar e instalar atualizações",
201 "settings.app.buttonOpenFerdiProfileFolder": "Abrir pasta de perfil",
202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Abrir pasta de serviço personalizado",
208 "settings.app.buttonSearchForUpdate": "Procurar atualizações", 203 "settings.app.buttonSearchForUpdate": "Procurar atualizações",
209 "settings.app.cacheInfo": "A cache do Ferdi está a usar {size} de espaço em disco.", 204 "settings.app.cacheInfo": "A cache do Ferdi está a usar {size} de espaço em disco.",
210 "settings.app.cacheNotCleared": "Não foi possível limpar o cache", 205 "settings.app.cacheNotCleared": "Não foi possível limpar o cache",
@@ -255,7 +250,7 @@
255 "settings.app.form.universalDarkMode": "Habilitar modo noturno universal", 250 "settings.app.form.universalDarkMode": "Habilitar modo noturno universal",
256 "settings.app.form.useTouchIdToUnlock": "Permitir usar TouchID para desbloquear Ferdi", 251 "settings.app.form.useTouchIdToUnlock": "Permitir usar TouchID para desbloquear Ferdi",
257 "settings.app.form.useVerticalStyle": "Usar estilo vertical", 252 "settings.app.form.useVerticalStyle": "Usar estilo vertical",
258 "settings.app.form.wakeUpStrategy": "Wake up strategy", 253 "settings.app.form.wakeUpStrategy": "Estratégia de despertar",
259 "settings.app.headline": "Configurações", 254 "settings.app.headline": "Configurações",
260 "settings.app.headlineAdvanced": "Avançado", 255 "settings.app.headlineAdvanced": "Avançado",
261 "settings.app.headlineAppearance": "Aparência", 256 "settings.app.headlineAppearance": "Aparência",
@@ -266,15 +261,16 @@
266 "settings.app.hibernateInfo": "Por padrão, Ferdi manterá todos seus serviços abertos e carregados, assim eles estarão disponíveis quando você for usá-los. O Serviço de Hibernação irá finalizar seus serviços após um período específico. Isso é útil para evitar consumo excessivo de memória RAM evitando também que seu computador fique lento.", 261 "settings.app.hibernateInfo": "Por padrão, Ferdi manterá todos seus serviços abertos e carregados, assim eles estarão disponíveis quando você for usá-los. O Serviço de Hibernação irá finalizar seus serviços após um período específico. Isso é útil para evitar consumo excessivo de memória RAM evitando também que seu computador fique lento.",
267 "settings.app.inactivityLockInfo": "Minutos de inatividade, após este tempo Ferdi irá automaticamente bloquear. Utilize 0 para desabilitar", 262 "settings.app.inactivityLockInfo": "Minutos de inatividade, após este tempo Ferdi irá automaticamente bloquear. Utilize 0 para desabilitar",
268 "settings.app.languageDisclaimer": "As traduções oficiais são em inglês e alemão. As demais traduções são baseadas na ajuda da comunidade.", 263 "settings.app.languageDisclaimer": "As traduções oficiais são em inglês e alemão. As demais traduções são baseadas na ajuda da comunidade.",
269 "settings.app.lockInfo": "Password Lock allows you to keep your messages protected.\nUsing Password Lock, you will be prompted to enter your password everytime you start Ferdi or lock Ferdi yourself using the lock symbol in the bottom left corner or the shortcut {lockShortcut}.", 264 "settings.app.lockInfo": "O bloqueio por senha permite a você proteger suas mensagens.\nUsando o bloqueio por senha, será necessário informar sua senha toda vez que o Ferdi for iniciado ou você solicite o bloqueio.",
270 "settings.app.lockedPassword": "Senha", 265 "settings.app.lockedPassword": "Senha",
271 "settings.app.lockedPasswordInfo": "Tenha certeza que a senha definida será lembrada.\nCaso você esqueça a senha, será necessário reinstalar o Ferdi.", 266 "settings.app.lockedPasswordInfo": "Tenha certeza que a senha definida será lembrada.\nCaso você esqueça a senha, será necessário reinstalar o Ferdi.",
272 "settings.app.restartRequired": "Essa alteração requer uma reinicialização", 267 "settings.app.restartRequired": "Essa alteração requer uma reinicialização",
273 "settings.app.scheduledDNDInfo": "O modo Não perturbe agendado permite definir um período de tempo em que você não deseja receber notificações do Ferdi.", 268 "settings.app.scheduledDNDInfo": "O modo Não perturbe agendado permite definir um período de tempo em que você não deseja receber notificações do Ferdi.",
274 "settings.app.scheduledDNDTimeInfo": "Horários no formato de 24 horas. O horário de término pode ser anterior ao horário de início (por exemplo, início às 17:00 e término às 09:00) para ativar a opção Não perturbe da noite para o dia.", 269 "settings.app.scheduledDNDTimeInfo": "Horários no formato de 24 horas. O horário de término pode ser anterior ao horário de início (por exemplo, início às 17:00 e término às 09:00) para ativar a opção Não perturbe da noite para o dia.",
275 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 270 "settings.app.sentryInfo": "O envio de dados de telemetria nos permite encontrar erros no Ferdi. Não enviaremos nenhuma informação pessoal como seus dados de mensagem. Alterar esta opção requer que você reinicie o Ferdi.",
276 "settings.app.spellCheckerLanguageInfo": "O Ferdi utiliza o corretor ortográfico integrado do Mac para verificar se há erros de digitação. Se quiser alterar os idiomas que o corretor ortográfico verifica, você pode fazer isso nas Preferências do Sistema do Mac.", 271 "settings.app.spellCheckerLanguageInfo": "O Ferdi utiliza o corretor ortográfico integrado do Mac para verificar se há erros de digitação. Se quiser alterar os idiomas que o corretor ortográfico verifica, você pode fazer isso nas Preferências do Sistema do Mac.",
277 "settings.app.subheadlineCache": "Memória Cache", 272 "settings.app.subheadlineCache": "Memória Cache",
273 "settings.app.subheadlineFerdiProfile": "Perfil do Ferdi",
278 "settings.app.todoServerInfo": "Este servidor será usado para o recurso \"Tarefas do Ferdi\".", 274 "settings.app.todoServerInfo": "Este servidor será usado para o recurso \"Tarefas do Ferdi\".",
279 "settings.app.translationHelp": "Ajude-nos a traduzir a Ferdi para a sua língua.", 275 "settings.app.translationHelp": "Ajude-nos a traduzir a Ferdi para a sua língua.",
280 "settings.app.universalDarkModeInfo": "O Modo Noturno Universal tenta gerar dinamicamente estilos para serviços que, de outra forma, não são suportados no momento.", 276 "settings.app.universalDarkModeInfo": "O Modo Noturno Universal tenta gerar dinamicamente estilos para serviços que, de outra forma, não são suportados no momento.",
@@ -434,17 +430,17 @@
434 "tabs.item.confirmDeleteService": "Tem certeza de que deseja excluir o serviço {serviceName}?", 430 "tabs.item.confirmDeleteService": "Tem certeza de que deseja excluir o serviço {serviceName}?",
435 "tabs.item.deleteService": "Apagar serviço", 431 "tabs.item.deleteService": "Apagar serviço",
436 "tabs.item.disableAudio": "Desativar áudio", 432 "tabs.item.disableAudio": "Desativar áudio",
437 "tabs.item.disableDarkMode": "Disable Dark mode", 433 "tabs.item.disableDarkMode": "Desativar o modo escuro",
438 "tabs.item.disableNotifications": "Desativar notificações", 434 "tabs.item.disableNotifications": "Desativar notificações",
439 "tabs.item.disableService": "Desativar serviço", 435 "tabs.item.disableService": "Desativar serviço",
440 "tabs.item.edit": "Editar", 436 "tabs.item.edit": "Editar",
441 "tabs.item.enableAudio": "Ativar áudio", 437 "tabs.item.enableAudio": "Ativar áudio",
442 "tabs.item.enableDarkMode": "Enable Dark mode", 438 "tabs.item.enableDarkMode": "Ativar o modo escuro",
443 "tabs.item.enableNotification": "Ativar notificações", 439 "tabs.item.enableNotification": "Ativar notificações",
444 "tabs.item.enableService": "Ativar serviço", 440 "tabs.item.enableService": "Ativar serviço",
445 "tabs.item.hibernateService": "Hibernate service", 441 "tabs.item.hibernateService": "Serviço de hibernação",
446 "tabs.item.reload": "Recarregar", 442 "tabs.item.reload": "Recarregar",
447 "tabs.item.wakeUpService": "Wake up service", 443 "tabs.item.wakeUpService": "Iniciar serviço",
448 "validation.email": "{field} não é válido", 444 "validation.email": "{field} não é válido",
449 "validation.minLength": "{field} deveria ter pelo menos {length} caracteres", 445 "validation.minLength": "{field} deveria ter pelo menos {length} caracteres",
450 "validation.oneRequired": "É necessário pelo menos um", 446 "validation.oneRequired": "É necessário pelo menos um",
diff --git a/src/i18n/locales/pt.json b/src/i18n/locales/pt.json
index 61f97f3b4..56661cdfd 100644
--- a/src/i18n/locales/pt.json
+++ b/src/i18n/locales/pt.json
@@ -26,13 +26,6 @@
26 "feature.quickSwitch.info": "Seleccione um serviço com TAB, ↑ e ↓. Abra um serviço com ENTER.", 26 "feature.quickSwitch.info": "Seleccione um serviço com TAB, ↑ e ↓. Abra um serviço com ENTER.",
27 "feature.quickSwitch.search": "A procurar...", 27 "feature.quickSwitch.search": "A procurar...",
28 "feature.quickSwitch.title": "Troca Rápida", 28 "feature.quickSwitch.title": "Troca Rápida",
29 "feature.shareFranz.action.email": "Enviar por e-mail",
30 "feature.shareFranz.action.facebook": "Compartilhar no Facebook",
31 "feature.shareFranz.action.twitter": "Compartilhar no Twitter",
32 "feature.shareFranz.headline": "Ferdi é melhor em grupo!",
33 "feature.shareFranz.shareText.email": "Eu adicionei {count} serviços ao Ferdi! Adquira a aplicação gratuita para WhatsApp, Messenger, Slack, Skype e mais em www.getferdi.com",
34 "feature.shareFranz.shareText.twitter": "Adicionei {count} serviços no Ferdi! Faça o download da aplicação para WhatsApp, Messenger, Slack, Skype e outros em www.getferdi.com /cc @FerdiMessenger",
35 "feature.shareFranz.text": "Diga aos seus amigos e colegas o quão incrível é Ferdi e ajude-nos a espalhar a mensagem.",
36 "global.api.unhealthy": "Não é possível ligar aos serviços online de Ferdi", 29 "global.api.unhealthy": "Não é possível ligar aos serviços online de Ferdi",
37 "global.notConnectedToTheInternet": "Não está ligado à internet.", 30 "global.notConnectedToTheInternet": "Não está ligado à internet.",
38 "global.spellchecker.useDefault": "Use o padrão de sistema ({default})", 31 "global.spellchecker.useDefault": "Use o padrão de sistema ({default})",
@@ -205,6 +198,8 @@
205 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", 198 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})",
206 "settings.app.buttonClearAllCache": "Limpar cache", 199 "settings.app.buttonClearAllCache": "Limpar cache",
207 "settings.app.buttonInstallUpdate": "Reiniciar e instalar atualizações", 200 "settings.app.buttonInstallUpdate": "Reiniciar e instalar atualizações",
201 "settings.app.buttonOpenFerdiProfileFolder": "Open Profile folder",
202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open Service Recipes folder",
208 "settings.app.buttonSearchForUpdate": "Procurar atualizações", 203 "settings.app.buttonSearchForUpdate": "Procurar atualizações",
209 "settings.app.cacheInfo": "De momento, a cache de Ferdi está a usar {size} de espaço de disco.", 204 "settings.app.cacheInfo": "De momento, a cache de Ferdi está a usar {size} de espaço de disco.",
210 "settings.app.cacheNotCleared": "Não foi possível limpar toda a cache", 205 "settings.app.cacheNotCleared": "Não foi possível limpar toda a cache",
@@ -275,6 +270,7 @@
275 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 270 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!",
276 "settings.app.spellCheckerLanguageInfo": "Ferdi usa o corretor ortográfico do seu Mac para verificar se há erros ortográficos. Se você quiser alterar os idiomas que o corretor ortográfico verifica, pode fazê-lo nas Preferências do Sistema do Mac.", 271 "settings.app.spellCheckerLanguageInfo": "Ferdi usa o corretor ortográfico do seu Mac para verificar se há erros ortográficos. Se você quiser alterar os idiomas que o corretor ortográfico verifica, pode fazê-lo nas Preferências do Sistema do Mac.",
277 "settings.app.subheadlineCache": "Memória cache", 272 "settings.app.subheadlineCache": "Memória cache",
273 "settings.app.subheadlineFerdiProfile": "Ferdi Profile",
278 "settings.app.todoServerInfo": "Este servidor será usado para a funcionalidade \"Tarefas Ferdi\".", 274 "settings.app.todoServerInfo": "Este servidor será usado para a funcionalidade \"Tarefas Ferdi\".",
279 "settings.app.translationHelp": "Ajude-nos a traduzir o Ferdi para o seu idioma.", 275 "settings.app.translationHelp": "Ajude-nos a traduzir o Ferdi para o seu idioma.",
280 "settings.app.universalDarkModeInfo": "O Modo Noturno Universal tenta gerar dinamicamente os estilos do modo noturno para serviços que não o suportem de outra forma atualmente.", 276 "settings.app.universalDarkModeInfo": "O Modo Noturno Universal tenta gerar dinamicamente os estilos do modo noturno para serviços que não o suportem de outra forma atualmente.",
diff --git a/src/i18n/locales/ro.json b/src/i18n/locales/ro.json
index f86d2c280..056e41e4e 100644
--- a/src/i18n/locales/ro.json
+++ b/src/i18n/locales/ro.json
@@ -26,13 +26,6 @@
26 "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.", 26 "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.",
27 "feature.quickSwitch.search": "Căutare...", 27 "feature.quickSwitch.search": "Căutare...",
28 "feature.quickSwitch.title": "QuickSwitch", 28 "feature.quickSwitch.title": "QuickSwitch",
29 "feature.shareFranz.action.email": "Trimite ca email",
30 "feature.shareFranz.action.facebook": "Distribuiți pe Facebook",
31 "feature.shareFranz.action.twitter": "Distribuiți pe Twitter",
32 "feature.shareFranz.headline": "Ferdi este mai bun împreună!",
33 "feature.shareFranz.shareText.email": "Am adăugat {count} servicii la Ferdi! Obține aplicația gratuită pentru WhatsApp, Messenger, Slack, Skype și co pe www.getferdi.com",
34 "feature.shareFranz.shareText.twitter": "Am adăugat {count} servicii la Ferdi! Obține aplicația gratuită pentru WhatsApp, Messenger, Slack, Skype și co pe www.getferdi.com /cc @FerdiMessenger",
35 "feature.shareFranz.text": "Spuneți-le prietenilor și colegilor cât de minunat este Ferdi și ajutați-ne să răspândim cuvântul.",
36 "global.api.unhealthy": "Nu se pot conecta la Ferdi servicii online", 29 "global.api.unhealthy": "Nu se pot conecta la Ferdi servicii online",
37 "global.notConnectedToTheInternet": "Nu ești conectat la internet.", 30 "global.notConnectedToTheInternet": "Nu ești conectat la internet.",
38 "global.spellchecker.useDefault": "Folosește sistemul implicit ({default})", 31 "global.spellchecker.useDefault": "Folosește sistemul implicit ({default})",
@@ -205,6 +198,8 @@
205 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", 198 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})",
206 "settings.app.buttonClearAllCache": "Clear cache", 199 "settings.app.buttonClearAllCache": "Clear cache",
207 "settings.app.buttonInstallUpdate": "Restart & install update", 200 "settings.app.buttonInstallUpdate": "Restart & install update",
201 "settings.app.buttonOpenFerdiProfileFolder": "Open Profile folder",
202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open Service Recipes folder",
208 "settings.app.buttonSearchForUpdate": "Check for updates", 203 "settings.app.buttonSearchForUpdate": "Check for updates",
209 "settings.app.cacheInfo": "Ferdi cache is currently using {size} of disk space.", 204 "settings.app.cacheInfo": "Ferdi cache is currently using {size} of disk space.",
210 "settings.app.cacheNotCleared": "Couldn't clear all cache", 205 "settings.app.cacheNotCleared": "Couldn't clear all cache",
@@ -275,6 +270,7 @@
275 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 270 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!",
276 "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.", 271 "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.",
277 "settings.app.subheadlineCache": "Cache", 272 "settings.app.subheadlineCache": "Cache",
273 "settings.app.subheadlineFerdiProfile": "Ferdi Profile",
278 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", 274 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.",
279 "settings.app.translationHelp": "Help us to translate Ferdi into your language.", 275 "settings.app.translationHelp": "Help us to translate Ferdi into your language.",
280 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.", 276 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.",
diff --git a/src/i18n/locales/ru.json b/src/i18n/locales/ru.json
index bb7ed8abe..dc63aaf2c 100644
--- a/src/i18n/locales/ru.json
+++ b/src/i18n/locales/ru.json
@@ -26,13 +26,6 @@
26 "feature.quickSwitch.info": "Выберите ÑÐµÑ€Ð²Ð¸Ñ Ñ Tab, вверх и вниз. Откройте ÑÐµÑ€Ð²Ð¸Ñ Ð½Ð°Ð¶Ð°Ð² на ENTER.", 26 "feature.quickSwitch.info": "Выберите ÑÐµÑ€Ð²Ð¸Ñ Ñ Tab, вверх и вниз. Откройте ÑÐµÑ€Ð²Ð¸Ñ Ð½Ð°Ð¶Ð°Ð² на ENTER.",
27 "feature.quickSwitch.search": "ПоиÑк...", 27 "feature.quickSwitch.search": "ПоиÑк...",
28 "feature.quickSwitch.title": "БыÑтрое переключение", 28 "feature.quickSwitch.title": "БыÑтрое переключение",
29 "feature.shareFranz.action.email": "Отправить по email",
30 "feature.shareFranz.action.facebook": "ПоделитьÑÑ Ð½Ð° Facebook",
31 "feature.shareFranz.action.twitter": "ПоделитьÑÑ Ð² Twitter",
32 "feature.shareFranz.headline": "Сделаем Ferdi лучше вмеÑте!",
33 "feature.shareFranz.shareText.email": "Я добавил {count} ÑервиÑов во Ferdi! Теперь доÑтупны такие меÑÑенджеры как WhatsApp, Messenger, Slack, Skype и другие. Полый ÑпиÑок вы найдете на www.getferdi.com",
34 "feature.shareFranz.shareText.twitter": "Я добавил {count} ÑервиÑ(ов) в Ferdi! Скачай беÑплатную аппку Ð´Ð»Ñ WhatsApp, Messenger, Slack, Skype и иже на www.getferdi.com /cc @FerdiMessenger",
35 "feature.shareFranz.text": "РаÑÑкажи Ñвоим друзьÑм и коллегам наÑколько прелеÑтен Ferdi и помоги нам развитьÑÑ",
36 "global.api.unhealthy": "Ðевозможно подключитьÑÑ Ðº онлайн-ÑервиÑам Ferdi", 29 "global.api.unhealthy": "Ðевозможно подключитьÑÑ Ðº онлайн-ÑервиÑам Ferdi",
37 "global.notConnectedToTheInternet": "Ð’Ñ‹ не подключены к Ñети Интернет", 30 "global.notConnectedToTheInternet": "Ð’Ñ‹ не подключены к Ñети Интернет",
38 "global.spellchecker.useDefault": "ИÑпользовать ÑиÑтемные параметры по умолчанию ({default})", 31 "global.spellchecker.useDefault": "ИÑпользовать ÑиÑтемные параметры по умолчанию ({default})",
@@ -205,6 +198,8 @@
205 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", 198 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})",
206 "settings.app.buttonClearAllCache": "ОчиÑтить кÑш", 199 "settings.app.buttonClearAllCache": "ОчиÑтить кÑш",
207 "settings.app.buttonInstallUpdate": "ПерезапуÑтить и уÑтановить обновлениÑ", 200 "settings.app.buttonInstallUpdate": "ПерезапуÑтить и уÑтановить обновлениÑ",
201 "settings.app.buttonOpenFerdiProfileFolder": "Open Profile folder",
202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open Service Recipes folder",
208 "settings.app.buttonSearchForUpdate": "Проверить обновлениÑ", 203 "settings.app.buttonSearchForUpdate": "Проверить обновлениÑ",
209 "settings.app.cacheInfo": "КÑш занимает {size} на диÑке.", 204 "settings.app.cacheInfo": "КÑш занимает {size} на диÑке.",
210 "settings.app.cacheNotCleared": "Ðе удалоÑÑŒ очиÑтить веÑÑŒ кÑш", 205 "settings.app.cacheNotCleared": "Ðе удалоÑÑŒ очиÑтить веÑÑŒ кÑш",
@@ -275,6 +270,7 @@
275 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 270 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!",
276 "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.", 271 "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.",
277 "settings.app.subheadlineCache": "КÑш", 272 "settings.app.subheadlineCache": "КÑш",
273 "settings.app.subheadlineFerdiProfile": "Ferdi Profile",
278 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", 274 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.",
279 "settings.app.translationHelp": "Помогите нам перевеÑти Ferdi на ваш Ñзык.", 275 "settings.app.translationHelp": "Помогите нам перевеÑти Ferdi на ваш Ñзык.",
280 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.", 276 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.",
diff --git a/src/i18n/locales/sk.json b/src/i18n/locales/sk.json
index 03bd0d976..a5ddfaea2 100644
--- a/src/i18n/locales/sk.json
+++ b/src/i18n/locales/sk.json
@@ -26,13 +26,6 @@
26 "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.", 26 "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.",
27 "feature.quickSwitch.search": "Hľadať...", 27 "feature.quickSwitch.search": "Hľadať...",
28 "feature.quickSwitch.title": "QuickSwitch", 28 "feature.quickSwitch.title": "QuickSwitch",
29 "feature.shareFranz.action.email": "Odoslať ako e-mail",
30 "feature.shareFranz.action.facebook": "Zdielať na Facebook-u",
31 "feature.shareFranz.action.twitter": "Zdieľať na Twitter-i",
32 "feature.shareFranz.headline": "Ferdi je lepší spolu!",
33 "feature.shareFranz.shareText.email": "Pridali sme {count} služieb do Ferdi! Získajte zadarmo aplikáciu pre WhatsApp, Messenger, Slack, Skype a iné na www.getferdi.com",
34 "feature.shareFranz.shareText.twitter": "Pridal som {count} služieb do Ferdi! Získajte zadarmo aplikáciu pre WhatsApp, Messenger, Slack, Skype a iné na www.getferdi.com /cc @FerdiMessenger",
35 "feature.shareFranz.text": "Povedzte vašim priateľom a známym aký je Ferdi skvelý a pomôžte nám rozšíriť sa do sveta.",
36 "global.api.unhealthy": "Nedá sa pripojiť k online službám Ferdi", 29 "global.api.unhealthy": "Nedá sa pripojiť k online službám Ferdi",
37 "global.notConnectedToTheInternet": "Nie ste pripojení k internetu.", 30 "global.notConnectedToTheInternet": "Nie ste pripojení k internetu.",
38 "global.spellchecker.useDefault": "Použiť predvolené nastavenie systému ({default})", 31 "global.spellchecker.useDefault": "Použiť predvolené nastavenie systému ({default})",
@@ -205,6 +198,8 @@
205 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", 198 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})",
206 "settings.app.buttonClearAllCache": "VyÄistiÅ¥ vyrovnávaciu pamäť", 199 "settings.app.buttonClearAllCache": "VyÄistiÅ¥ vyrovnávaciu pamäť",
207 "settings.app.buttonInstallUpdate": "Reštartovať a nainštalovať aktualizáciu", 200 "settings.app.buttonInstallUpdate": "Reštartovať a nainštalovať aktualizáciu",
201 "settings.app.buttonOpenFerdiProfileFolder": "Open Profile folder",
202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open Service Recipes folder",
208 "settings.app.buttonSearchForUpdate": "Skontrolovať aktualizácie", 203 "settings.app.buttonSearchForUpdate": "Skontrolovať aktualizácie",
209 "settings.app.cacheInfo": "Vyrovnávacia pamäť Ferdi momentálne používa {size} miesta na disku.", 204 "settings.app.cacheInfo": "Vyrovnávacia pamäť Ferdi momentálne používa {size} miesta na disku.",
210 "settings.app.cacheNotCleared": "Couldn't clear all cache", 205 "settings.app.cacheNotCleared": "Couldn't clear all cache",
@@ -275,6 +270,7 @@
275 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 270 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!",
276 "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.", 271 "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.",
277 "settings.app.subheadlineCache": "Vyrovnávacia pamäť", 272 "settings.app.subheadlineCache": "Vyrovnávacia pamäť",
273 "settings.app.subheadlineFerdiProfile": "Ferdi Profile",
278 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", 274 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.",
279 "settings.app.translationHelp": "Pomôžte nám preložiť Ferdi do svojho jazyka.", 275 "settings.app.translationHelp": "Pomôžte nám preložiť Ferdi do svojho jazyka.",
280 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.", 276 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.",
diff --git a/src/i18n/locales/sl.json b/src/i18n/locales/sl.json
index 3e185e73b..89060b506 100644
--- a/src/i18n/locales/sl.json
+++ b/src/i18n/locales/sl.json
@@ -26,13 +26,6 @@
26 "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.", 26 "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.",
27 "feature.quickSwitch.search": "Search...", 27 "feature.quickSwitch.search": "Search...",
28 "feature.quickSwitch.title": "QuickSwitch", 28 "feature.quickSwitch.title": "QuickSwitch",
29 "feature.shareFranz.action.email": "Send as email",
30 "feature.shareFranz.action.facebook": "Share on Facebook",
31 "feature.shareFranz.action.twitter": "Share on Twitter",
32 "feature.shareFranz.headline": "Ferdi is better together!",
33 "feature.shareFranz.shareText.email": "I've added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.getferdi.com",
34 "feature.shareFranz.shareText.twitter": "I've added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.getferdi.com /cc @FerdiMessenger",
35 "feature.shareFranz.text": "Tell your friends and colleagues how awesome Ferdi is and help us to spread the word.",
36 "global.api.unhealthy": "Can't connect to Ferdi online services", 29 "global.api.unhealthy": "Can't connect to Ferdi online services",
37 "global.notConnectedToTheInternet": "You are not connected to the internet.", 30 "global.notConnectedToTheInternet": "You are not connected to the internet.",
38 "global.spellchecker.useDefault": "Use System Default ({default})", 31 "global.spellchecker.useDefault": "Use System Default ({default})",
@@ -205,6 +198,8 @@
205 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", 198 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})",
206 "settings.app.buttonClearAllCache": "Clear cache", 199 "settings.app.buttonClearAllCache": "Clear cache",
207 "settings.app.buttonInstallUpdate": "Restart & install update", 200 "settings.app.buttonInstallUpdate": "Restart & install update",
201 "settings.app.buttonOpenFerdiProfileFolder": "Open Profile folder",
202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open Service Recipes folder",
208 "settings.app.buttonSearchForUpdate": "Check for updates", 203 "settings.app.buttonSearchForUpdate": "Check for updates",
209 "settings.app.cacheInfo": "Ferdi cache is currently using {size} of disk space.", 204 "settings.app.cacheInfo": "Ferdi cache is currently using {size} of disk space.",
210 "settings.app.cacheNotCleared": "Couldn't clear all cache", 205 "settings.app.cacheNotCleared": "Couldn't clear all cache",
@@ -275,6 +270,7 @@
275 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 270 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!",
276 "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.", 271 "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.",
277 "settings.app.subheadlineCache": "Cache", 272 "settings.app.subheadlineCache": "Cache",
273 "settings.app.subheadlineFerdiProfile": "Ferdi Profile",
278 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", 274 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.",
279 "settings.app.translationHelp": "Help us to translate Ferdi into your language.", 275 "settings.app.translationHelp": "Help us to translate Ferdi into your language.",
280 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.", 276 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.",
diff --git a/src/i18n/locales/sr.json b/src/i18n/locales/sr.json
index e92dd141f..54045d340 100644
--- a/src/i18n/locales/sr.json
+++ b/src/i18n/locales/sr.json
@@ -26,13 +26,6 @@
26 "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.", 26 "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.",
27 "feature.quickSwitch.search": "Search...", 27 "feature.quickSwitch.search": "Search...",
28 "feature.quickSwitch.title": "QuickSwitch", 28 "feature.quickSwitch.title": "QuickSwitch",
29 "feature.shareFranz.action.email": "Пошаљите као Е-мејл",
30 "feature.shareFranz.action.facebook": "Поделите на ФејÑбуку",
31 "feature.shareFranz.action.twitter": "Поделите на Твитеру",
32 "feature.shareFranz.headline": "Ferdi is better together!",
33 "feature.shareFranz.shareText.email": "I've added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.getferdi.com",
34 "feature.shareFranz.shareText.twitter": "I've added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.getferdi.com /cc @FerdiMessenger",
35 "feature.shareFranz.text": "Tell your friends and colleagues how awesome Ferdi is and help us to spread the word.",
36 "global.api.unhealthy": "Nije moguće pristupiti Ferdi-ovim on-line servisima. ", 29 "global.api.unhealthy": "Nije moguće pristupiti Ferdi-ovim on-line servisima. ",
37 "global.notConnectedToTheInternet": "Niste povezani sa serverom.", 30 "global.notConnectedToTheInternet": "Niste povezani sa serverom.",
38 "global.spellchecker.useDefault": "Use System Default ({default})", 31 "global.spellchecker.useDefault": "Use System Default ({default})",
@@ -205,6 +198,8 @@
205 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", 198 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})",
206 "settings.app.buttonClearAllCache": "ОчиÑти кеш", 199 "settings.app.buttonClearAllCache": "ОчиÑти кеш",
207 "settings.app.buttonInstallUpdate": "Ponovo pokreni i instaliraj ažuriranje ", 200 "settings.app.buttonInstallUpdate": "Ponovo pokreni i instaliraj ažuriranje ",
201 "settings.app.buttonOpenFerdiProfileFolder": "Open Profile folder",
202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open Service Recipes folder",
208 "settings.app.buttonSearchForUpdate": "Potraži ažuriranja", 203 "settings.app.buttonSearchForUpdate": "Potraži ažuriranja",
209 "settings.app.cacheInfo": "Франз кеш тренутно кориÑти {size} проÑтора на диÑку.", 204 "settings.app.cacheInfo": "Франз кеш тренутно кориÑти {size} проÑтора на диÑку.",
210 "settings.app.cacheNotCleared": "Couldn't clear all cache", 205 "settings.app.cacheNotCleared": "Couldn't clear all cache",
@@ -275,6 +270,7 @@
275 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 270 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!",
276 "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.", 271 "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.",
277 "settings.app.subheadlineCache": "Кеш", 272 "settings.app.subheadlineCache": "Кеш",
273 "settings.app.subheadlineFerdiProfile": "Ferdi Profile",
278 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", 274 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.",
279 "settings.app.translationHelp": "Pomozite nam prevesti aplikaciju na Vaš jezik. ", 275 "settings.app.translationHelp": "Pomozite nam prevesti aplikaciju na Vaš jezik. ",
280 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.", 276 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.",
diff --git a/src/i18n/locales/sv.json b/src/i18n/locales/sv.json
index 9545511b4..5dcd42154 100644
--- a/src/i18n/locales/sv.json
+++ b/src/i18n/locales/sv.json
@@ -26,13 +26,6 @@
26 "feature.quickSwitch.info": "Välj en tjänst med TAB, ↑ and ↓. Öppna en tjänst med ENTER.", 26 "feature.quickSwitch.info": "Välj en tjänst med TAB, ↑ and ↓. Öppna en tjänst med ENTER.",
27 "feature.quickSwitch.search": "Sök...", 27 "feature.quickSwitch.search": "Sök...",
28 "feature.quickSwitch.title": "Snabbväxling", 28 "feature.quickSwitch.title": "Snabbväxling",
29 "feature.shareFranz.action.email": "Skicka som e-post",
30 "feature.shareFranz.action.facebook": "Dela på Facebook",
31 "feature.shareFranz.action.twitter": "Dela på Twitter",
32 "feature.shareFranz.headline": "Ferdi är bättre tillsammans!",
33 "feature.shareFranz.shareText.email": "Jag har lagt till {count} tjänster till Ferdi! Skaffa en gratis app för WhatsApp, Messenger, Slack, Skype och många fler på www.getferdi.com",
34 "feature.shareFranz.shareText.twitter": "Jag har lagt till {count} tjänster till Ferdi! Skaffa en gratis app för WhatsApp, Messenger, Slack, Skype och många fler på www.getferdi.com /cc @FerdiMessenger",
35 "feature.shareFranz.text": "Berätta för dina vänner och kollegor hur grymt Ferdi är och hjälp oss att sprida ordet.",
36 "global.api.unhealthy": "Kan inte ansluta till Ferdis onlinetjänster", 29 "global.api.unhealthy": "Kan inte ansluta till Ferdis onlinetjänster",
37 "global.notConnectedToTheInternet": "Du är inte ansluten till Internet.", 30 "global.notConnectedToTheInternet": "Du är inte ansluten till Internet.",
38 "global.spellchecker.useDefault": "Använd systemstandard ({default})", 31 "global.spellchecker.useDefault": "Använd systemstandard ({default})",
@@ -205,6 +198,8 @@
205 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", 198 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})",
206 "settings.app.buttonClearAllCache": "Rensa cache", 199 "settings.app.buttonClearAllCache": "Rensa cache",
207 "settings.app.buttonInstallUpdate": "Starta om & installera uppdatering", 200 "settings.app.buttonInstallUpdate": "Starta om & installera uppdatering",
201 "settings.app.buttonOpenFerdiProfileFolder": "Open Profile folder",
202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open Service Recipes folder",
208 "settings.app.buttonSearchForUpdate": "Sök efter uppdateringar", 203 "settings.app.buttonSearchForUpdate": "Sök efter uppdateringar",
209 "settings.app.cacheInfo": "Ferdis cache använder för närvarande {size} diskutrymme.", 204 "settings.app.cacheInfo": "Ferdis cache använder för närvarande {size} diskutrymme.",
210 "settings.app.cacheNotCleared": "Kunde inte rensa alla temporära filer", 205 "settings.app.cacheNotCleared": "Kunde inte rensa alla temporära filer",
@@ -275,6 +270,7 @@
275 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 270 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!",
276 "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.", 271 "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.",
277 "settings.app.subheadlineCache": "Cache", 272 "settings.app.subheadlineCache": "Cache",
273 "settings.app.subheadlineFerdiProfile": "Ferdi Profile",
278 "settings.app.todoServerInfo": "Denna server kommer att användas för \"Ferdi Todo\"-funktionen.", 274 "settings.app.todoServerInfo": "Denna server kommer att användas för \"Ferdi Todo\"-funktionen.",
279 "settings.app.translationHelp": "Hjälp oss att översätta Ferdi till ditt språk.", 275 "settings.app.translationHelp": "Hjälp oss att översätta Ferdi till ditt språk.",
280 "settings.app.universalDarkModeInfo": "Globalt mörkt läge försöker att dynamiskt generera en mörk stil för tjänster som ännu inte stöds.", 276 "settings.app.universalDarkModeInfo": "Globalt mörkt läge försöker att dynamiskt generera en mörk stil för tjänster som ännu inte stöds.",
diff --git a/src/i18n/locales/tr.json b/src/i18n/locales/tr.json
index 651f0da50..b29ab81fc 100644
--- a/src/i18n/locales/tr.json
+++ b/src/i18n/locales/tr.json
@@ -18,21 +18,14 @@
18 "feature.nightlyBuilds.title": "Nightly Yapılar", 18 "feature.nightlyBuilds.title": "Nightly Yapılar",
19 "feature.publishDebugInfo.error": "There was an error while trying to publish the debug information. Please try again later or view the console for more information.", 19 "feature.publishDebugInfo.error": "There was an error while trying to publish the debug information. Please try again later or view the console for more information.",
20 "feature.publishDebugInfo.info": "Publishing your debug information helps us find issues and errors in Ferdi. By publishing your debug information you accept Ferdi Debugger's privacy policy and terms of service", 20 "feature.publishDebugInfo.info": "Publishing your debug information helps us find issues and errors in Ferdi. By publishing your debug information you accept Ferdi Debugger's privacy policy and terms of service",
21 "feature.publishDebugInfo.privacy": "Privacy policy", 21 "feature.publishDebugInfo.privacy": "Gizlilik ilkesi",
22 "feature.publishDebugInfo.publish": "Accept and publish", 22 "feature.publishDebugInfo.publish": "Onayla ve yayımla",
23 "feature.publishDebugInfo.published": "Your debug log was published and is now availible at", 23 "feature.publishDebugInfo.published": "Your debug log was published and is now availible at",
24 "feature.publishDebugInfo.terms": "Kullanım Koşulları", 24 "feature.publishDebugInfo.terms": "Kullanım Koşulları",
25 "feature.publishDebugInfo.title": "Publish debug information", 25 "feature.publishDebugInfo.title": "Publish debug information",
26 "feature.quickSwitch.info": "TAB, ↑ ve ↓ ile bir servis seç. ENTER ile bir servisi aç.", 26 "feature.quickSwitch.info": "TAB, ↑ ve ↓ ile bir servis seç. ENTER ile bir servisi aç.",
27 "feature.quickSwitch.search": "Ara...", 27 "feature.quickSwitch.search": "Ara...",
28 "feature.quickSwitch.title": "QuickSwitch", 28 "feature.quickSwitch.title": "QuickSwitch",
29 "feature.shareFranz.action.email": "Mail olarak gönder",
30 "feature.shareFranz.action.facebook": "Facebook'ta PaylaÅŸ",
31 "feature.shareFranz.action.twitter": "Twitter'da PaylaÅŸ",
32 "feature.shareFranz.headline": "Ferdi birlikte daha iyi!",
33 "feature.shareFranz.shareText.email": "Ferdi'a {count} tane servis ekledim! WhatsApp, Messenger, Slack ve fazlasını içeren ücretsiz uygulamayı www.getferdi.com adresinden edinin.",
34 "feature.shareFranz.shareText.twitter": "I've added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.getferdi.com /cc @FerdiMessenger",
35 "feature.shareFranz.text": "Arkadaşlarına ve meslektaşlarına Ferdi'ın ne kadar harika olduğunu söyle ve bize bu kelimeyi yaymamızda yardım et.",
36 "global.api.unhealthy": "Ferdi hizmetlerine ÅŸu anda eriÅŸilemiyor", 29 "global.api.unhealthy": "Ferdi hizmetlerine ÅŸu anda eriÅŸilemiyor",
37 "global.notConnectedToTheInternet": "İnternete bağlı değilsiniz.", 30 "global.notConnectedToTheInternet": "İnternete bağlı değilsiniz.",
38 "global.spellchecker.useDefault": "Sistem Dilini Kullan ({default})", 31 "global.spellchecker.useDefault": "Sistem Dilini Kullan ({default})",
@@ -53,7 +46,7 @@
53 "infobar.requiredRequestsFailed": "Hizmetler ve kullanıcı bilgileri yüklenemedi", 46 "infobar.requiredRequestsFailed": "Hizmetler ve kullanıcı bilgileri yüklenemedi",
54 "infobar.servicesUpdated": "Hizmetleriniz güncellendi.", 47 "infobar.servicesUpdated": "Hizmetleriniz güncellendi.",
55 "infobar.updateAvailable": "Yeni Ferdi güncellemesi mevcut.", 48 "infobar.updateAvailable": "Yeni Ferdi güncellemesi mevcut.",
56 "infobox.dismiss": "Dismiss", 49 "infobox.dismiss": "Yok say",
57 "invite.email.label": "E-posta adresi", 50 "invite.email.label": "E-posta adresi",
58 "invite.headline.friends": "3 arkadaşını ya da çalışma arkadaşını davet et", 51 "invite.headline.friends": "3 arkadaşını ya da çalışma arkadaşını davet et",
59 "invite.name.label": "Ad", 52 "invite.name.label": "Ad",
@@ -65,9 +58,9 @@
65 "locked.invalidCredentials": "Geçersiz şifre", 58 "locked.invalidCredentials": "Geçersiz şifre",
66 "locked.password.label": "Åžifre", 59 "locked.password.label": "Åžifre",
67 "locked.submit.label": "Kilidi aç", 60 "locked.submit.label": "Kilidi aç",
68 "locked.touchId": "Unlock with Touch ID", 61 "locked.touchId": "Kilidi parmak iziyle aç",
69 "locked.touchIdPrompt": "unlock via Touch ID", 62 "locked.touchIdPrompt": "kilidi parmak iziyle aç",
70 "locked.unlockWithPassword": "Unlock with Password", 63 "locked.unlockWithPassword": "Kilidi parola ile aç",
71 "login.changeServer": "Sunucuyu deÄŸiÅŸtir", 64 "login.changeServer": "Sunucuyu deÄŸiÅŸtir",
72 "login.customServerQuestion": "Using a custom Ferdi server?", 65 "login.customServerQuestion": "Using a custom Ferdi server?",
73 "login.customServerSuggestion": "Try importing your Franz account", 66 "login.customServerSuggestion": "Try importing your Franz account",
@@ -87,32 +80,32 @@
87 "menu.app.autohideMenuBar": "Menü çubuğunu otomatik otomatik olarak gizle", 80 "menu.app.autohideMenuBar": "Menü çubuğunu otomatik otomatik olarak gizle",
88 "menu.app.checkForUpdates": "Güncellemeleri kontrol et", 81 "menu.app.checkForUpdates": "Güncellemeleri kontrol et",
89 "menu.app.hide": "Gizle", 82 "menu.app.hide": "Gizle",
90 "menu.app.hideOthers": "Hide Others", 83 "menu.app.hideOthers": "DiÄŸerlerini Gizle",
91 "menu.app.quit": "Quit", 84 "menu.app.quit": "Çık",
92 "menu.app.settings": "Ayarlar", 85 "menu.app.settings": "Ayarlar",
93 "menu.app.unhide": "Unhide", 86 "menu.app.unhide": "Göster",
94 "menu.edit": "Düzenle", 87 "menu.edit": "Düzenle",
95 "menu.edit.copy": "Copy", 88 "menu.edit.copy": "Kopyala",
96 "menu.edit.cut": "Cut", 89 "menu.edit.cut": "Kes",
97 "menu.edit.delete": "Sil", 90 "menu.edit.delete": "Sil",
98 "menu.edit.emojiSymbols": "Emoji & Semboller", 91 "menu.edit.emojiSymbols": "Emoji & Semboller",
99 "menu.edit.findInPage": "Find in Page", 92 "menu.edit.findInPage": "Sayfada Bul",
100 "menu.edit.paste": "Paste", 93 "menu.edit.paste": "Yapıştır",
101 "menu.edit.pasteAndMatchStyle": "Paste And Match Style", 94 "menu.edit.pasteAndMatchStyle": "Yapıştır ve Biçemi Eşleştir",
102 "menu.edit.redo": "Redo", 95 "menu.edit.redo": "Yeniden Yap",
103 "menu.edit.selectAll": "Select All", 96 "menu.edit.selectAll": "Tümünü Seç",
104 "menu.edit.speech": "KonuÅŸma", 97 "menu.edit.speech": "KonuÅŸma",
105 "menu.edit.startDictation": "Ä°mlaya BaÅŸla", 98 "menu.edit.startDictation": "Ä°mlaya BaÅŸla",
106 "menu.edit.startSpeaking": "KonuÅŸmaya BaÅŸla", 99 "menu.edit.startSpeaking": "KonuÅŸmaya BaÅŸla",
107 "menu.edit.stopSpeaking": "Konuşmayı Bırak/Durdur", 100 "menu.edit.stopSpeaking": "Konuşmayı Bırak/Durdur",
108 "menu.edit.undo": "Undo", 101 "menu.edit.undo": "Geri Al",
109 "menu.file": "Dosya", 102 "menu.file": "Dosya",
110 "menu.help": "Help", 103 "menu.help": "Yardım",
111 "menu.help.changelog": "Değişim Günlüğü", 104 "menu.help.changelog": "Değişim Günlüğü",
112 "menu.help.debugInfo": "Hata ayıklama bilgisini kopyala", 105 "menu.help.debugInfo": "Hata ayıklama bilgisini kopyala",
113 "menu.help.debugInfoCopiedBody": "Hata ayıklama bilgilerin panoya kopyalandı.", 106 "menu.help.debugInfoCopiedBody": "Hata ayıklama bilgilerin panoya kopyalandı.",
114 "menu.help.debugInfoCopiedHeadline": "Ferdi Hata Ayıklama Bilgisi", 107 "menu.help.debugInfoCopiedHeadline": "Ferdi Hata Ayıklama Bilgisi",
115 "menu.help.importExportData": "Import/Export Configuration Data", 108 "menu.help.importExportData": "Ayarları İçe veya Dışa Aktar",
116 "menu.help.learnMore": "Daha Fazlasını Öğrenin", 109 "menu.help.learnMore": "Daha Fazlasını Öğrenin",
117 "menu.help.privacy": "Gizlilik Sözleşmesi", 110 "menu.help.privacy": "Gizlilik Sözleşmesi",
118 "menu.help.publishDebugInfo": "Publish Debug Information", 111 "menu.help.publishDebugInfo": "Publish Debug Information",
@@ -120,7 +113,7 @@
120 "menu.help.tos": "Kullanım Şartları", 113 "menu.help.tos": "Kullanım Şartları",
121 "menu.services": "Hizmetler", 114 "menu.services": "Hizmetler",
122 "menu.services.activatePreviousService": "Bir önceki servisi aktive et", 115 "menu.services.activatePreviousService": "Bir önceki servisi aktive et",
123 "menu.services.addNewService": "Add New Service", 116 "menu.services.addNewService": "Yeni Servis Ekle",
124 "menu.services.goHome": "Ana Sayfa", 117 "menu.services.goHome": "Ana Sayfa",
125 "menu.services.setNextServiceActive": "Bir sonraki servisi aktive et", 118 "menu.services.setNextServiceActive": "Bir sonraki servisi aktive et",
126 "menu.todos": "Yapılacaklar", 119 "menu.todos": "Yapılacaklar",
@@ -130,20 +123,20 @@
130 "menu.view.forward": "Ä°leri", 123 "menu.view.forward": "Ä°leri",
131 "menu.view.lockFerdi": "Ferdi'yi Kilitle", 124 "menu.view.lockFerdi": "Ferdi'yi Kilitle",
132 "menu.view.openQuickSwitch": "QuickSwitch'i aç", 125 "menu.view.openQuickSwitch": "QuickSwitch'i aç",
133 "menu.view.reloadFerdi": "Reload Ferdi", 126 "menu.view.reloadFerdi": "Ferdi'yi Yeniden Yükle",
134 "menu.view.reloadService": "Servisi Tekrar Yükle", 127 "menu.view.reloadService": "Servisi Tekrar Yükle",
135 "menu.view.reloadTodos": "Reload ToDos", 128 "menu.view.reloadTodos": "Yapılacaklar'ı Yeniden Yükle",
136 "menu.view.resetZoom": "Actual Size", 129 "menu.view.resetZoom": "Gerçek Boyut",
137 "menu.view.toggleDarkMode": "Gece Modunu kapat", 130 "menu.view.toggleDarkMode": "Gece Modunu kapat",
138 "menu.view.toggleDevTools": "Geliştirici Araçlarına Geç", 131 "menu.view.toggleDevTools": "Geliştirici Araçlarına Geç",
139 "menu.view.toggleFullScreen": "Toggle Full Screen", 132 "menu.view.toggleFullScreen": "Tam Ekrana Geç",
140 "menu.view.toggleServiceDevTools": "Hizmet Geliştirici Araçlarını Değiştir", 133 "menu.view.toggleServiceDevTools": "Hizmet Geliştirici Araçlarını Değiştir",
141 "menu.view.toggleTodosDevTools": "Yapılacaklar Listesi Geliştirici Araçlarını Aç", 134 "menu.view.toggleTodosDevTools": "Yapılacaklar Listesi Geliştirici Araçlarını Aç",
142 "menu.view.zoomIn": "Zoom In", 135 "menu.view.zoomIn": "Yakınlaştır",
143 "menu.view.zoomOut": "Zoom Out", 136 "menu.view.zoomOut": "Uzaklaştır",
144 "menu.window": "Window", 137 "menu.window": "Pencere",
145 "menu.window.close": "Close", 138 "menu.window.close": "Kapat",
146 "menu.window.minimize": "Minimize", 139 "menu.window.minimize": "Küçült",
147 "menu.workspaces": "Çalışma Alanları", 140 "menu.workspaces": "Çalışma Alanları",
148 "menu.workspaces.addNewWorkspace": "Yeni Çalışma Alanı ekle...", 141 "menu.workspaces.addNewWorkspace": "Yeni Çalışma Alanı ekle...",
149 "menu.workspaces.closeWorkspaceDrawer": "Çalışma alanı çekmecesini kapat", 142 "menu.workspaces.closeWorkspaceDrawer": "Çalışma alanı çekmecesini kapat",
@@ -156,9 +149,9 @@
156 "password.noUser": "Bu e-posta adresinde bir kullanıcı bulunamadı", 149 "password.noUser": "Bu e-posta adresinde bir kullanıcı bulunamadı",
157 "password.submit.label": "Gönder", 150 "password.submit.label": "Gönder",
158 "password.successInfo": "E-postanızı kontrol ediniz", 151 "password.successInfo": "E-postanızı kontrol ediniz",
159 "pricing.features.accountSync": "Account Synchronisation", 152 "pricing.features.accountSync": "Hesap EÅŸitleme",
160 "pricing.features.customWebsites": "Özel Siteler Ekle", 153 "pricing.features.customWebsites": "Özel Siteler Ekle",
161 "pricing.features.desktopNotifications": "Desktop Notifications", 154 "pricing.features.desktopNotifications": "Masaüstü Bildirimleri",
162 "pricing.features.onPremise": "On-premise & other Hosted Services", 155 "pricing.features.onPremise": "On-premise & other Hosted Services",
163 "pricing.features.recipes": "Choose from more than 70 Services", 156 "pricing.features.recipes": "Choose from more than 70 Services",
164 "pricing.features.serviceProxies": "Servis proxy'leri", 157 "pricing.features.serviceProxies": "Servis proxy'leri",
@@ -180,12 +173,12 @@
180 "service.errorHandler.text": "{name} yüklenemedi.", 173 "service.errorHandler.text": "{name} yüklenemedi.",
181 "service.webviewLoader.loading": "Loading {service}", 174 "service.webviewLoader.loading": "Loading {service}",
182 "services.getStarted": "Haydi başlayalım", 175 "services.getStarted": "Haydi başlayalım",
183 "services.login": "Please login to use Ferdi.", 176 "services.login": "Ferdi'yi kullanmak için lütfen oturum açın.",
184 "services.serverInfo": "Optionally, you can change your Ferdi server by clicking the cog in the bottom left corner. If you are switching over (from one of the hosted servers) to using Ferdi without an account, please be informed that you can export your data from that server and subsequently import it using the Help menu to resurrect all your workspaces and configured services!", 177 "services.serverInfo": "Optionally, you can change your Ferdi server by clicking the cog in the bottom left corner. If you are switching over (from one of the hosted servers) to using Ferdi without an account, please be informed that you can export your data from that server and subsequently import it using the Help menu to resurrect all your workspaces and configured services!",
185 "services.serverless": "Ferdi'yi bir hesap olmadan kullan", 178 "services.serverless": "Ferdi'yi bir hesap olmadan kullan",
186 "services.welcome": "Ferdi'a HoÅŸgeldiniz", 179 "services.welcome": "Ferdi'a HoÅŸgeldiniz",
187 "settings.account.account.editButton": "Hesabı düzenle", 180 "settings.account.account.editButton": "Hesabı düzenle",
188 "settings.account.accountUnavailable": "Account is unavailable", 181 "settings.account.accountUnavailable": "Hesap kullanılamıyor",
189 "settings.account.accountUnavailableInfo": "You are using Ferdi without an account. If you want to use Ferdi with an account and keep your services synchronized across installations, please select a server in the Settings tab then login.", 182 "settings.account.accountUnavailableInfo": "You are using Ferdi without an account. If you want to use Ferdi with an account and keep your services synchronized across installations, please select a server in the Settings tab then login.",
190 "settings.account.buttonSave": "Profili güncelle", 183 "settings.account.buttonSave": "Profili güncelle",
191 "settings.account.deleteAccount": "Hesabı sil", 184 "settings.account.deleteAccount": "Hesabı sil",
@@ -201,14 +194,16 @@
201 "settings.account.tryReloadServices": "Tekrar deneyin", 194 "settings.account.tryReloadServices": "Tekrar deneyin",
202 "settings.account.tryReloadUserInfoRequest": "Tekrar deneyin", 195 "settings.account.tryReloadUserInfoRequest": "Tekrar deneyin",
203 "settings.account.userInfoRequestFailed": "Kullanıcı bilgisi yüklenemedi", 196 "settings.account.userInfoRequestFailed": "Kullanıcı bilgisi yüklenemedi",
204 "settings.account.yourLicense": "Your Ferdi License", 197 "settings.account.yourLicense": "Ferdi Lisansınız",
205 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", 198 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})",
206 "settings.app.buttonClearAllCache": "Önbelleği temizle", 199 "settings.app.buttonClearAllCache": "Önbelleği temizle",
207 "settings.app.buttonInstallUpdate": "Yeniden Başlat ve Güncelleştirmeleri Kur", 200 "settings.app.buttonInstallUpdate": "Yeniden Başlat ve Güncelleştirmeleri Kur",
201 "settings.app.buttonOpenFerdiProfileFolder": "Open Profile folder",
202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open Service Recipes folder",
208 "settings.app.buttonSearchForUpdate": "Güncellemeleri kontrol et", 203 "settings.app.buttonSearchForUpdate": "Güncellemeleri kontrol et",
209 "settings.app.cacheInfo": "Ferdi önbelleği şu anda {size} disk alanı kullanıyor.", 204 "settings.app.cacheInfo": "Ferdi önbelleği şu anda {size} disk alanı kullanıyor.",
210 "settings.app.cacheNotCleared": "Couldn't clear all cache", 205 "settings.app.cacheNotCleared": "Önbellek tamamen temizlenemedi",
211 "settings.app.closeSettings": "Close settings", 206 "settings.app.closeSettings": "Ayarları kapat",
212 "settings.app.currentVersion": "Geçerli sürüm:", 207 "settings.app.currentVersion": "Geçerli sürüm:",
213 "settings.app.form.accentColor": "Accent color", 208 "settings.app.form.accentColor": "Accent color",
214 "settings.app.form.adaptableDarkMode": "Synchronize dark mode with my OS's dark mode setting", 209 "settings.app.form.adaptableDarkMode": "Synchronize dark mode with my OS's dark mode setting",
@@ -275,6 +270,7 @@
275 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 270 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!",
276 "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.", 271 "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.",
277 "settings.app.subheadlineCache": "Önbellek", 272 "settings.app.subheadlineCache": "Önbellek",
273 "settings.app.subheadlineFerdiProfile": "Ferdi Profile",
278 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", 274 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.",
279 "settings.app.translationHelp": "Ferdi'ı senin diline tercüme etmemiz için yardım et.", 275 "settings.app.translationHelp": "Ferdi'ı senin diline tercüme etmemiz için yardım et.",
280 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.", 276 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.",
@@ -297,7 +293,7 @@
297 "settings.recipes.customService.headline.devRecipes": "Your Development Service Recipes", 293 "settings.recipes.customService.headline.devRecipes": "Your Development Service Recipes",
298 "settings.recipes.customService.intro": "To add a custom service, copy the service recipe to:", 294 "settings.recipes.customService.intro": "To add a custom service, copy the service recipe to:",
299 "settings.recipes.customService.openDevDocs": "Developer Documentation", 295 "settings.recipes.customService.openDevDocs": "Developer Documentation",
300 "settings.recipes.customService.openFolder": "Open folder", 296 "settings.recipes.customService.openFolder": "Klasör aç",
301 "settings.recipes.headline": "Mevcut servisler", 297 "settings.recipes.headline": "Mevcut servisler",
302 "settings.recipes.missingService": "Aradığın servisi bulamadın mı?", 298 "settings.recipes.missingService": "Aradığın servisi bulamadın mı?",
303 "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.", 299 "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.",
diff --git a/src/i18n/locales/uk.json b/src/i18n/locales/uk.json
index 3c6a01397..7a1609dfb 100644
--- a/src/i18n/locales/uk.json
+++ b/src/i18n/locales/uk.json
@@ -26,13 +26,6 @@
26 "feature.quickSwitch.info": "Виберіть ÑÐµÑ€Ð²Ñ–Ñ Ð·Ð° допомогою TAB, Ñтрілок ↑ та ↓. ÐатиÑніть ENTER, щоб відкрити.", 26 "feature.quickSwitch.info": "Виберіть ÑÐµÑ€Ð²Ñ–Ñ Ð·Ð° допомогою TAB, Ñтрілок ↑ та ↓. ÐатиÑніть ENTER, щоб відкрити.",
27 "feature.quickSwitch.search": "Пошук...", 27 "feature.quickSwitch.search": "Пошук...",
28 "feature.quickSwitch.title": "QuickSwitch", 28 "feature.quickSwitch.title": "QuickSwitch",
29 "feature.shareFranz.action.email": "ÐадіÑлати електронною поштою",
30 "feature.shareFranz.action.facebook": "ПоділитиÑÑ Ð½Ð° Facebook",
31 "feature.shareFranz.action.twitter": "ПоділитиÑÑŒ у Twitter",
32 "feature.shareFranz.headline": "Ferdi is better together!",
33 "feature.shareFranz.shareText.email": "Я додав {count} Ñлужб до Ферді! Завантажте безкоштовний додаток на WhatsApp, Messenger, Slack, Skype та co на www.getferdi.com",
34 "feature.shareFranz.shareText.twitter": "Я додав {count} Ñлужб до Ферді! Завантажте безкоштовний додаток на WhatsApp, Messenger, Slack, Skype та co на www.getferdi.com",
35 "feature.shareFranz.text": "Tell your friends and colleagues how awesome Ferdi is and help us to spread the word.",
36 "global.api.unhealthy": "Ðе можливо підключитиÑÑŒ до онлайн ÑервіÑів Ferdi", 29 "global.api.unhealthy": "Ðе можливо підключитиÑÑŒ до онлайн ÑервіÑів Ferdi",
37 "global.notConnectedToTheInternet": "Ви не підключені до Інтернету.", 30 "global.notConnectedToTheInternet": "Ви не підключені до Інтернету.",
38 "global.spellchecker.useDefault": "ВикориÑтовувати ÑиÑтемні параметри за змовчуваннÑм ({default})", 31 "global.spellchecker.useDefault": "ВикориÑтовувати ÑиÑтемні параметри за змовчуваннÑм ({default})",
@@ -205,6 +198,8 @@
205 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", 198 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})",
206 "settings.app.buttonClearAllCache": "ОчиÑтити кеш", 199 "settings.app.buttonClearAllCache": "ОчиÑтити кеш",
207 "settings.app.buttonInstallUpdate": "Перезавантажити Ñ– вÑтановити оновленнÑ", 200 "settings.app.buttonInstallUpdate": "Перезавантажити Ñ– вÑтановити оновленнÑ",
201 "settings.app.buttonOpenFerdiProfileFolder": "Open Profile folder",
202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open Service Recipes folder",
208 "settings.app.buttonSearchForUpdate": "Перевірити наÑвніÑÑ‚ÑŒ оновлень", 203 "settings.app.buttonSearchForUpdate": "Перевірити наÑвніÑÑ‚ÑŒ оновлень",
209 "settings.app.cacheInfo": "Кеш, Ñкий викориÑтовує Ferdi, займає {size} диÑкового проÑтору.", 204 "settings.app.cacheInfo": "Кеш, Ñкий викориÑтовує Ferdi, займає {size} диÑкового проÑтору.",
210 "settings.app.cacheNotCleared": "Couldn't clear all cache", 205 "settings.app.cacheNotCleared": "Couldn't clear all cache",
@@ -275,6 +270,7 @@
275 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 270 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!",
276 "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.", 271 "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.",
277 "settings.app.subheadlineCache": "Кеш", 272 "settings.app.subheadlineCache": "Кеш",
273 "settings.app.subheadlineFerdiProfile": "Ferdi Profile",
278 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", 274 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.",
279 "settings.app.translationHelp": "Допоможіть переклаÑти Ferdi на Вашу мову.", 275 "settings.app.translationHelp": "Допоможіть переклаÑти Ferdi на Вашу мову.",
280 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.", 276 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.",
diff --git a/src/i18n/locales/vi.json b/src/i18n/locales/vi.json
index c67e9a067..01512a522 100644
--- a/src/i18n/locales/vi.json
+++ b/src/i18n/locales/vi.json
@@ -26,13 +26,6 @@
26 "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.", 26 "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.",
27 "feature.quickSwitch.search": "Tìm kiếm...", 27 "feature.quickSwitch.search": "Tìm kiếm...",
28 "feature.quickSwitch.title": "Chuyển đổi nhanh", 28 "feature.quickSwitch.title": "Chuyển đổi nhanh",
29 "feature.shareFranz.action.email": "Gửi dưới dạng E-mail",
30 "feature.shareFranz.action.facebook": "Chia sẻ lên Facebook",
31 "feature.shareFranz.action.twitter": "Chia sẻ lên Twitter",
32 "feature.shareFranz.headline": "Ferdi is better together!",
33 "feature.shareFranz.shareText.email": "I've added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.getferdi.com",
34 "feature.shareFranz.shareText.twitter": "I've added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.getferdi.com /cc @FerdiMessenger",
35 "feature.shareFranz.text": "Tell your friends and colleagues how awesome Ferdi is and help us to spread the word.",
36 "global.api.unhealthy": "Không thể kết nối đến máy chủ trực tuyến của Ferdi", 29 "global.api.unhealthy": "Không thể kết nối đến máy chủ trực tuyến của Ferdi",
37 "global.notConnectedToTheInternet": "You are not connected to the internet.", 30 "global.notConnectedToTheInternet": "You are not connected to the internet.",
38 "global.spellchecker.useDefault": "Dùng mặc định hệ thống ({default})", 31 "global.spellchecker.useDefault": "Dùng mặc định hệ thống ({default})",
@@ -205,6 +198,8 @@
205 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", 198 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})",
206 "settings.app.buttonClearAllCache": "Xóa bộ nhớ cache", 199 "settings.app.buttonClearAllCache": "Xóa bộ nhớ cache",
207 "settings.app.buttonInstallUpdate": "Khởi động lại và cài đặt bản cập nhật", 200 "settings.app.buttonInstallUpdate": "Khởi động lại và cài đặt bản cập nhật",
201 "settings.app.buttonOpenFerdiProfileFolder": "Open Profile folder",
202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open Service Recipes folder",
208 "settings.app.buttonSearchForUpdate": "Kiểm tra cập nhật", 203 "settings.app.buttonSearchForUpdate": "Kiểm tra cập nhật",
209 "settings.app.cacheInfo": "Ferdi cache is currently using {size} of disk space.", 204 "settings.app.cacheInfo": "Ferdi cache is currently using {size} of disk space.",
210 "settings.app.cacheNotCleared": "Couldn't clear all cache", 205 "settings.app.cacheNotCleared": "Couldn't clear all cache",
@@ -275,6 +270,7 @@
275 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 270 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!",
276 "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.", 271 "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.",
277 "settings.app.subheadlineCache": "Cache", 272 "settings.app.subheadlineCache": "Cache",
273 "settings.app.subheadlineFerdiProfile": "Ferdi Profile",
278 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", 274 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.",
279 "settings.app.translationHelp": "Help us to translate Ferdi into your language.", 275 "settings.app.translationHelp": "Help us to translate Ferdi into your language.",
280 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.", 276 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.",
diff --git a/src/i18n/locales/zh-HANT.json b/src/i18n/locales/zh-HANT.json
index 97b2e155a..407f134cb 100644
--- a/src/i18n/locales/zh-HANT.json
+++ b/src/i18n/locales/zh-HANT.json
@@ -26,13 +26,6 @@
26 "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.", 26 "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.",
27 "feature.quickSwitch.search": "æœå°‹...", 27 "feature.quickSwitch.search": "æœå°‹...",
28 "feature.quickSwitch.title": "QuickSwitch", 28 "feature.quickSwitch.title": "QuickSwitch",
29 "feature.shareFranz.action.email": "é€ä½œç‚ºé›»å­éƒµä»¶",
30 "feature.shareFranz.action.facebook": "在 Facebook 上分享",
31 "feature.shareFranz.action.twitter": "在 Twitter 上分享",
32 "feature.shareFranz.headline": "Ferdi is better together!",
33 "feature.shareFranz.shareText.email": "I've added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.getferdi.com",
34 "feature.shareFranz.shareText.twitter": "I've added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.getferdi.com /cc @FerdiMessenger",
35 "feature.shareFranz.text": "Tell your friends and colleagues how awesome Ferdi is and help us to spread the word.",
36 "global.api.unhealthy": "無法連接到Ferdi網路æœå‹™", 29 "global.api.unhealthy": "無法連接到Ferdi網路æœå‹™",
37 "global.notConnectedToTheInternet": "您未連上網際網路", 30 "global.notConnectedToTheInternet": "您未連上網際網路",
38 "global.spellchecker.useDefault": "使用系統é è¨­å€¼({default})", 31 "global.spellchecker.useDefault": "使用系統é è¨­å€¼({default})",
@@ -205,6 +198,8 @@
205 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", 198 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})",
206 "settings.app.buttonClearAllCache": "清除緩存", 199 "settings.app.buttonClearAllCache": "清除緩存",
207 "settings.app.buttonInstallUpdate": "é‡æ–°å•Ÿå‹•ä¸¦ä¸”æ›´æ–°", 200 "settings.app.buttonInstallUpdate": "é‡æ–°å•Ÿå‹•ä¸¦ä¸”æ›´æ–°",
201 "settings.app.buttonOpenFerdiProfileFolder": "Open Profile folder",
202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open Service Recipes folder",
208 "settings.app.buttonSearchForUpdate": "檢查更新", 203 "settings.app.buttonSearchForUpdate": "檢查更新",
209 "settings.app.cacheInfo": "Ferdi cache is currently using {size} of disk space.", 204 "settings.app.cacheInfo": "Ferdi cache is currently using {size} of disk space.",
210 "settings.app.cacheNotCleared": "Couldn't clear all cache", 205 "settings.app.cacheNotCleared": "Couldn't clear all cache",
@@ -275,6 +270,7 @@
275 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 270 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!",
276 "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.", 271 "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.",
277 "settings.app.subheadlineCache": "Cache", 272 "settings.app.subheadlineCache": "Cache",
273 "settings.app.subheadlineFerdiProfile": "Ferdi Profile",
278 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", 274 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.",
279 "settings.app.translationHelp": "Help us to translate Ferdi into your language.", 275 "settings.app.translationHelp": "Help us to translate Ferdi into your language.",
280 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.", 276 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.",
diff --git a/src/i18n/locales/zh.json b/src/i18n/locales/zh.json
index 590d5093e..f33f67f8f 100644
--- a/src/i18n/locales/zh.json
+++ b/src/i18n/locales/zh.json
@@ -13,52 +13,45 @@
13 "feature.announcements.changelog.headline": "Ferdiçš„å˜åŒ–", 13 "feature.announcements.changelog.headline": "Ferdiçš„å˜åŒ–",
14 "feature.debugger.title": "å‘布调试信æ¯", 14 "feature.debugger.title": "å‘布调试信æ¯",
15 "feature.nightlyBuilds.activate": "激活", 15 "feature.nightlyBuilds.activate": "激活",
16 "feature.nightlyBuilds.cancel": "Cancel", 16 "feature.nightlyBuilds.cancel": "å–消",
17 "feature.nightlyBuilds.info": "Nightly builds are highly experimental versions of Ferdi that may contain unpolished or uncompleted features. These nightly builds are mainly used by developers to test their newly developed features and how they will perform in the final build. If you don't know what you are doing, we suggest not activating nightly builds.", 17 "feature.nightlyBuilds.info": "æ¯å¤œç‰ˆ(Nightly builds) 是Ferdi的实验性版本,å¯èƒ½åŒ…å«æœªå®Œå–„或未完æˆçš„功能。这些æ¯å¤œç‰ˆä¸»è¦ç”±å¼€å‘人员æ¥æµ‹è¯•ä»–们新开å‘的功能åŠå®ƒä»¬åœ¨æœ€ç»ˆç‰ˆæœ¬çš„的表现。如果您ä¸çŸ¥é“自己在åšä»€ä¹ˆï¼Œæˆ‘们建议您ä¸è¦æ¿€æ´»æ¯å¤œç‰ˆã€‚",
18 "feature.nightlyBuilds.title": "Nightly Builds", 18 "feature.nightlyBuilds.title": "æ¯å¤œç‰ˆ",
19 "feature.publishDebugInfo.error": "å‘布调试信æ¯æ—¶å‡ºé”™ã€‚请ç¨åŽå†è¯•æˆ–查看控制å°ä»¥èŽ·å–更多信æ¯ã€‚", 19 "feature.publishDebugInfo.error": "å‘布调试信æ¯æ—¶å‡ºé”™ã€‚请ç¨åŽå†è¯•æˆ–查看控制å°ä»¥èŽ·å–更多信æ¯ã€‚",
20 "feature.publishDebugInfo.info": "Publishing your debug information helps us find issues and errors in Ferdi. By publishing your debug information you accept Ferdi Debugger's privacy policy and terms of service", 20 "feature.publishDebugInfo.info": "å‘布您的调试信æ¯æœ‰åŠ©äºŽæˆ‘们å‘现Ferdi中的问题和错误。å‘布您的调试信æ¯å³è¡¨ç¤ºæ‚¨æŽ¥å—Ferdi Debuggerçš„éšç§æ”¿ç­–å’ŒæœåŠ¡æ¡æ¬¾",
21 "feature.publishDebugInfo.privacy": "éšç§æƒæ”¿ç­–", 21 "feature.publishDebugInfo.privacy": "éšç§æƒæ”¿ç­–",
22 "feature.publishDebugInfo.publish": "接å—并å‘布", 22 "feature.publishDebugInfo.publish": "接å—并å‘布",
23 "feature.publishDebugInfo.published": "您的调试日志已ç»å‘布,现在å¯ç”¨äºŽ", 23 "feature.publishDebugInfo.published": "您的调试日志已ç»å‘布,现在å¯ç”¨äºŽ",
24 "feature.publishDebugInfo.terms": "Terms of service", 24 "feature.publishDebugInfo.terms": "Terms of service",
25 "feature.publishDebugInfo.title": "å‘布调试信æ¯", 25 "feature.publishDebugInfo.title": "å‘布调试信æ¯",
26 "feature.quickSwitch.info": "Select a service with TAB, ↑ and ↓. Open a service with ENTER.", 26 "feature.quickSwitch.info": "使用 TAB ,↑ å’Œ ↓ 选择æœåŠ¡ã€‚使用回车键(ENTER)打开æœåŠ¡",
27 "feature.quickSwitch.search": "æœç´¢...", 27 "feature.quickSwitch.search": "æœç´¢...",
28 "feature.quickSwitch.title": "快速切æ¢", 28 "feature.quickSwitch.title": "快速切æ¢",
29 "feature.shareFranz.action.email": "以邮件形å¼å‘é€", 29 "global.api.unhealthy": "无法链接到 Ferdi 在线æœåŠ¡",
30 "feature.shareFranz.action.facebook": "在 Facebook 上分享", 30 "global.notConnectedToTheInternet": "您没有连接到互è”网。",
31 "feature.shareFranz.action.twitter": "在Twitter上分享", 31 "global.spellchecker.useDefault": "使用系统默认值 ({default})",
32 "feature.shareFranz.headline": "Ferdi is better together!", 32 "global.spellchecking.autodetect": "自动检测语言",
33 "feature.shareFranz.shareText.email": "I've added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.getferdi.com", 33 "global.spellchecking.autodetect.short": "自动",
34 "feature.shareFranz.shareText.twitter": "I've added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.getferdi.com /cc @FerdiMessenger", 34 "global.spellchecking.language": "拼写检查语言",
35 "feature.shareFranz.text": "Tell your friends and colleagues how awesome Ferdi is and help us to spread the word.", 35 "global.userAgentHelp": "使用 'https://whatmyuseragent.com/' (以å‘现)或 'https://developers.whatismybrowser.com/useragents/explore/' (以选择) 你所需è¦çš„用户代ç†å¹¶å¤åˆ¶ç²˜è´´åˆ°è¿™é‡Œã€‚",
36 "global.api.unhealthy": "Can't connect to Ferdi online services", 36 "global.userAgentPref": "æµè§ˆå™¨æ ‡è¯†ï¼ˆç”¨æˆ·ä»£ç†ï¼‰",
37 "global.notConnectedToTheInternet": "You are not connected to the internet.", 37 "import.headline": "导入你的 Ferdi 4 æœåŠ¡",
38 "global.spellchecker.useDefault": "Use System Default ({default})", 38 "import.notSupportedHeadline": "Ferdi 5尚未支æŒçš„æœåŠ¡",
39 "global.spellchecking.autodetect": "Detect language automatically", 39 "import.skip.label": "我想手动添加æœåŠ¡",
40 "global.spellchecking.autodetect.short": "Automatic", 40 "import.submit.label": "导入æœåŠ¡",
41 "global.spellchecking.language": "Spell checking language", 41 "infobar.authRequestFailed": "å°è¯•è¿›è¡Œèº«ä»½éªŒè¯æ—¶å‡ºé”™ã€‚如果此错误ä»å­˜åœ¨ï¼Œè¯·å°è¯•æ³¨é”€å¹¶é‡æ–°ç™»å½•ã€‚",
42 "global.userAgentHelp": "Use 'https://whatmyuseragent.com/' (to discover) or 'https://developers.whatismybrowser.com/useragents/explore/' (to choose) your desired user agent and copy-paste it here.", 42 "infobar.buttonChangelog": "有什么新鲜事?",
43 "global.userAgentPref": "User Agent", 43 "infobar.buttonInstallUpdate": "é‡å¯å¹¶å®‰è£…æ›´æ–°",
44 "import.headline": "Import your Ferdi 4 services", 44 "infobar.buttonReloadServices": "é‡è½½æœåŠ¡",
45 "import.notSupportedHeadline": "Services not yet supported in Ferdi 5",
46 "import.skip.label": "I want to add services manually",
47 "import.submit.label": "Import services",
48 "infobar.authRequestFailed": "There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.",
49 "infobar.buttonChangelog": "What is new?",
50 "infobar.buttonInstallUpdate": "Restart & install update",
51 "infobar.buttonReloadServices": "Reload services",
52 "infobar.hide": "éšè—", 45 "infobar.hide": "éšè—",
53 "infobar.requiredRequestsFailed": "Could not load services and user information", 46 "infobar.requiredRequestsFailed": "无法加载æœåŠ¡å’Œç”¨æˆ·ä¿¡æ¯",
54 "infobar.servicesUpdated": "Your services have been updated.", 47 "infobar.servicesUpdated": "您的软件æœåŠ¡å·²æ›´æ–°ã€‚",
55 "infobar.updateAvailable": "A new update for Ferdi is available.", 48 "infobar.updateAvailable": "æ–°çš„ Ferdi æ›´æ–°å¯ç”¨",
56 "infobox.dismiss": "Dismiss", 49 "infobox.dismiss": "关闭",
57 "invite.email.label": "Email address", 50 "invite.email.label": "电å­é‚®ç®±åœ°å€",
58 "invite.headline.friends": "Invite 3 of your friends or colleagues", 51 "invite.headline.friends": "邀请3ä½ä½ çš„朋å‹æˆ–朋å‹",
59 "invite.name.label": "Name", 52 "invite.name.label": "å称",
60 "invite.skip.label": "I want to do this later", 53 "invite.skip.label": "ç¨åŽå†åš",
61 "invite.submit.label": "Send invites", 54 "invite.submit.label": "å‘é€é‚€è¯·",
62 "invite.successInfo": "Invitations sent successfully", 55 "invite.successInfo": "Invitations sent successfully",
63 "locked.headline": "å·²é”定", 56 "locked.headline": "å·²é”定",
64 "locked.info": "Ferdi is currently locked. Please unlock Ferdi with your password to see your messages.", 57 "locked.info": "Ferdi is currently locked. Please unlock Ferdi with your password to see your messages.",
@@ -71,7 +64,7 @@
71 "login.changeServer": "Change server", 64 "login.changeServer": "Change server",
72 "login.customServerQuestion": "Using a custom Ferdi server?", 65 "login.customServerQuestion": "Using a custom Ferdi server?",
73 "login.customServerSuggestion": "Try importing your Franz account", 66 "login.customServerSuggestion": "Try importing your Franz account",
74 "login.email.label": "Email address", 67 "login.email.label": "电å­é‚®ç®±åœ°å€",
75 "login.headline": "Sign in", 68 "login.headline": "Sign in",
76 "login.invalidCredentials": "Email or password not valid", 69 "login.invalidCredentials": "Email or password not valid",
77 "login.link.password": "Reset password", 70 "login.link.password": "Reset password",
@@ -149,7 +142,7 @@
149 "menu.workspaces.closeWorkspaceDrawer": "Close workspace drawer", 142 "menu.workspaces.closeWorkspaceDrawer": "Close workspace drawer",
150 "menu.workspaces.defaultWorkspace": "All services", 143 "menu.workspaces.defaultWorkspace": "All services",
151 "menu.workspaces.openWorkspaceDrawer": "Open workspace drawer", 144 "menu.workspaces.openWorkspaceDrawer": "Open workspace drawer",
152 "password.email.label": "Email address", 145 "password.email.label": "电å­é‚®ç®±åœ°å€",
153 "password.headline": "Reset password", 146 "password.headline": "Reset password",
154 "password.link.login": "Sign in to your account", 147 "password.link.login": "Sign in to your account",
155 "password.link.signup": "Create a free account", 148 "password.link.signup": "Create a free account",
@@ -204,7 +197,9 @@
204 "settings.account.yourLicense": "Your Ferdi License", 197 "settings.account.yourLicense": "Your Ferdi License",
205 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", 198 "settings.app.accentColorInfo": "Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})",
206 "settings.app.buttonClearAllCache": "Clear cache", 199 "settings.app.buttonClearAllCache": "Clear cache",
207 "settings.app.buttonInstallUpdate": "Restart & install update", 200 "settings.app.buttonInstallUpdate": "é‡å¯å¹¶å®‰è£…æ›´æ–°",
201 "settings.app.buttonOpenFerdiProfileFolder": "Open Profile folder",
202 "settings.app.buttonOpenFerdiServiceRecipesFolder": "Open Service Recipes folder",
208 "settings.app.buttonSearchForUpdate": "Check for updates", 203 "settings.app.buttonSearchForUpdate": "Check for updates",
209 "settings.app.cacheInfo": "Ferdi cache is currently using {size} of disk space.", 204 "settings.app.cacheInfo": "Ferdi cache is currently using {size} of disk space.",
210 "settings.app.cacheNotCleared": "Couldn't clear all cache", 205 "settings.app.cacheNotCleared": "Couldn't clear all cache",
@@ -275,6 +270,7 @@
275 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 270 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!",
276 "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.", 271 "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.",
277 "settings.app.subheadlineCache": "Cache", 272 "settings.app.subheadlineCache": "Cache",
273 "settings.app.subheadlineFerdiProfile": "Ferdi Profile",
278 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.", 274 "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature.",
279 "settings.app.translationHelp": "Help us to translate Ferdi into your language.", 275 "settings.app.translationHelp": "Help us to translate Ferdi into your language.",
280 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.", 276 "settings.app.universalDarkModeInfo": "Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.",
@@ -332,7 +328,7 @@
332 "settings.service.form.indirectMessages": "Show message badge for all new messages", 328 "settings.service.form.indirectMessages": "Show message badge for all new messages",
333 "settings.service.form.isHibernatedEnabledInfo": "When enabled, a service will be shut down after a period of time to save system resources.", 329 "settings.service.form.isHibernatedEnabledInfo": "When enabled, a service will be shut down after a period of time to save system resources.",
334 "settings.service.form.isMutedInfo": "When disabled, all notification sounds and audio playback are muted", 330 "settings.service.form.isMutedInfo": "When disabled, all notification sounds and audio playback are muted",
335 "settings.service.form.name": "Name", 331 "settings.service.form.name": "å称",
336 "settings.service.form.openDarkmodeCss": "Open darkmode.css", 332 "settings.service.form.openDarkmodeCss": "Open darkmode.css",
337 "settings.service.form.openUserCss": "Open user.css", 333 "settings.service.form.openUserCss": "Open user.css",
338 "settings.service.form.openUserJs": "Open user.js", 334 "settings.service.form.openUserJs": "Open user.js",
@@ -391,13 +387,13 @@
391 "settings.user.form.firstname": "First Name", 387 "settings.user.form.firstname": "First Name",
392 "settings.user.form.lastname": "Last Name", 388 "settings.user.form.lastname": "Last Name",
393 "settings.user.form.newPassword": "New password", 389 "settings.user.form.newPassword": "New password",
394 "settings.workspace.add.form.name": "Name", 390 "settings.workspace.add.form.name": "å称",
395 "settings.workspace.add.form.submitButton": "Create workspace", 391 "settings.workspace.add.form.submitButton": "Create workspace",
396 "settings.workspace.form.buttonDelete": "Delete workspace", 392 "settings.workspace.form.buttonDelete": "Delete workspace",
397 "settings.workspace.form.buttonSave": "Save workspace", 393 "settings.workspace.form.buttonSave": "Save workspace",
398 "settings.workspace.form.keepLoaded": "Keep this workspace loaded*", 394 "settings.workspace.form.keepLoaded": "Keep this workspace loaded*",
399 "settings.workspace.form.keepLoadedInfo": "*This option will be overwritten by the global \"Keep all workspaces loaded\" option.", 395 "settings.workspace.form.keepLoadedInfo": "*This option will be overwritten by the global \"Keep all workspaces loaded\" option.",
400 "settings.workspace.form.name": "Name", 396 "settings.workspace.form.name": "å称",
401 "settings.workspace.form.servicesInWorkspaceHeadline": "Services in this Workspace", 397 "settings.workspace.form.servicesInWorkspaceHeadline": "Services in this Workspace",
402 "settings.workspace.form.yourWorkspaces": "Your workspaces", 398 "settings.workspace.form.yourWorkspaces": "Your workspaces",
403 "settings.workspaces.deletedInfo": "Workspace has been deleted", 399 "settings.workspaces.deletedInfo": "Workspace has been deleted",
@@ -420,7 +416,7 @@
420 "sidebar.openWorkspaceDrawer": "Open workspace drawer", 416 "sidebar.openWorkspaceDrawer": "Open workspace drawer",
421 "sidebar.settings": "设置", 417 "sidebar.settings": "设置",
422 "sidebar.unmuteApp": "Enable notifications & audio", 418 "sidebar.unmuteApp": "Enable notifications & audio",
423 "signup.email.label": "Email address", 419 "signup.email.label": "电å­é‚®ç®±åœ°å€",
424 "signup.emailDuplicate": "A user with that email address already exists", 420 "signup.emailDuplicate": "A user with that email address already exists",
425 "signup.firstname.label": "First Name", 421 "signup.firstname.label": "First Name",
426 "signup.headline": "Sign up", 422 "signup.headline": "Sign up",
diff --git a/src/i18n/messages/src/components/layout/AppLayout.json b/src/i18n/messages/src/components/layout/AppLayout.json
index e3f5658b2..807490a4f 100644
--- a/src/i18n/messages/src/components/layout/AppLayout.json
+++ b/src/i18n/messages/src/components/layout/AppLayout.json
@@ -4,11 +4,11 @@
4 "defaultMessage": "!!!Your services have been updated.", 4 "defaultMessage": "!!!Your services have been updated.",
5 "file": "src/components/layout/AppLayout.js", 5 "file": "src/components/layout/AppLayout.js",
6 "start": { 6 "start": {
7 "line": 29, 7 "line": 28,
8 "column": 19 8 "column": 19
9 }, 9 },
10 "end": { 10 "end": {
11 "line": 32, 11 "line": 31,
12 "column": 3 12 "column": 3
13 } 13 }
14 }, 14 },
@@ -17,11 +17,11 @@
17 "defaultMessage": "!!!Reload services", 17 "defaultMessage": "!!!Reload services",
18 "file": "src/components/layout/AppLayout.js", 18 "file": "src/components/layout/AppLayout.js",
19 "start": { 19 "start": {
20 "line": 33, 20 "line": 32,
21 "column": 24 21 "column": 24
22 }, 22 },
23 "end": { 23 "end": {
24 "line": 36, 24 "line": 35,
25 "column": 3 25 "column": 3
26 } 26 }
27 }, 27 },
@@ -30,11 +30,11 @@
30 "defaultMessage": "!!!Could not load services and user information", 30 "defaultMessage": "!!!Could not load services and user information",
31 "file": "src/components/layout/AppLayout.js", 31 "file": "src/components/layout/AppLayout.js",
32 "start": { 32 "start": {
33 "line": 37, 33 "line": 36,
34 "column": 26 34 "column": 26
35 }, 35 },
36 "end": { 36 "end": {
37 "line": 40, 37 "line": 39,
38 "column": 3 38 "column": 3
39 } 39 }
40 }, 40 },
@@ -43,11 +43,11 @@
43 "defaultMessage": "!!!There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.", 43 "defaultMessage": "!!!There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.",
44 "file": "src/components/layout/AppLayout.js", 44 "file": "src/components/layout/AppLayout.js",
45 "start": { 45 "start": {
46 "line": 41, 46 "line": 40,
47 "column": 21 47 "column": 21
48 }, 48 },
49 "end": { 49 "end": {
50 "line": 45, 50 "line": 44,
51 "column": 3 51 "column": 3
52 } 52 }
53 } 53 }
diff --git a/src/i18n/messages/src/components/settings/settings/EditSettingsForm.json b/src/i18n/messages/src/components/settings/settings/EditSettingsForm.json
index 548d52af9..da1581864 100644
--- a/src/i18n/messages/src/components/settings/settings/EditSettingsForm.json
+++ b/src/i18n/messages/src/components/settings/settings/EditSettingsForm.json
@@ -4,11 +4,11 @@
4 "defaultMessage": "!!!Settings", 4 "defaultMessage": "!!!Settings",
5 "file": "src/components/settings/settings/EditSettingsForm.js", 5 "file": "src/components/settings/settings/EditSettingsForm.js",
6 "start": { 6 "start": {
7 "line": 23, 7 "line": 21,
8 "column": 12 8 "column": 12
9 }, 9 },
10 "end": { 10 "end": {
11 "line": 26, 11 "line": 24,
12 "column": 3 12 "column": 3
13 } 13 }
14 }, 14 },
@@ -17,11 +17,11 @@
17 "defaultMessage": "!!!General", 17 "defaultMessage": "!!!General",
18 "file": "src/components/settings/settings/EditSettingsForm.js", 18 "file": "src/components/settings/settings/EditSettingsForm.js",
19 "start": { 19 "start": {
20 "line": 27, 20 "line": 25,
21 "column": 19 21 "column": 19
22 }, 22 },
23 "end": { 23 "end": {
24 "line": 30, 24 "line": 28,
25 "column": 3 25 "column": 3
26 } 26 }
27 }, 27 },
@@ -30,11 +30,11 @@
30 "defaultMessage": "!!!Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!", 30 "defaultMessage": "!!!Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data!",
31 "file": "src/components/settings/settings/EditSettingsForm.js", 31 "file": "src/components/settings/settings/EditSettingsForm.js",
32 "start": { 32 "start": {
33 "line": 31, 33 "line": 29,
34 "column": 14 34 "column": 14
35 }, 35 },
36 "end": { 36 "end": {
37 "line": 34, 37 "line": 32,
38 "column": 3 38 "column": 3
39 } 39 }
40 }, 40 },
@@ -43,11 +43,11 @@
43 "defaultMessage": "!!!By default, Ferdi will keep all your services open and loaded in the background so they are ready when you want to use them. Service Hibernation will unload your services after a specified amount. This is useful to save RAM or keeping services from slowing down your computer.", 43 "defaultMessage": "!!!By default, Ferdi will keep all your services open and loaded in the background so they are ready when you want to use them. Service Hibernation will unload your services after a specified amount. This is useful to save RAM or keeping services from slowing down your computer.",
44 "file": "src/components/settings/settings/EditSettingsForm.js", 44 "file": "src/components/settings/settings/EditSettingsForm.js",
45 "start": { 45 "start": {
46 "line": 35, 46 "line": 33,
47 "column": 17 47 "column": 17
48 }, 48 },
49 "end": { 49 "end": {
50 "line": 38, 50 "line": 36,
51 "column": 3 51 "column": 3
52 } 52 }
53 }, 53 },
@@ -56,11 +56,11 @@
56 "defaultMessage": "!!!Minutes of inactivity, after which Ferdi should automatically lock. Use 0 to disable", 56 "defaultMessage": "!!!Minutes of inactivity, after which Ferdi should automatically lock. Use 0 to disable",
57 "file": "src/components/settings/settings/EditSettingsForm.js", 57 "file": "src/components/settings/settings/EditSettingsForm.js",
58 "start": { 58 "start": {
59 "line": 39, 59 "line": 37,
60 "column": 22 60 "column": 22
61 }, 61 },
62 "end": { 62 "end": {
63 "line": 42, 63 "line": 40,
64 "column": 3 64 "column": 3
65 } 65 }
66 }, 66 },
@@ -69,11 +69,11 @@
69 "defaultMessage": "!!!This server will be used for the \"Franz Todo\" feature. (default: https://app.franztodos.com)", 69 "defaultMessage": "!!!This server will be used for the \"Franz Todo\" feature. (default: https://app.franztodos.com)",
70 "file": "src/components/settings/settings/EditSettingsForm.js", 70 "file": "src/components/settings/settings/EditSettingsForm.js",
71 "start": { 71 "start": {
72 "line": 43, 72 "line": 41,
73 "column": 18 73 "column": 18
74 }, 74 },
75 "end": { 75 "end": {
76 "line": 46, 76 "line": 44,
77 "column": 3 77 "column": 3
78 } 78 }
79 }, 79 },
@@ -82,11 +82,11 @@
82 "defaultMessage": "!!!Password", 82 "defaultMessage": "!!!Password",
83 "file": "src/components/settings/settings/EditSettingsForm.js", 83 "file": "src/components/settings/settings/EditSettingsForm.js",
84 "start": { 84 "start": {
85 "line": 47, 85 "line": 45,
86 "column": 18 86 "column": 18
87 }, 87 },
88 "end": { 88 "end": {
89 "line": 50, 89 "line": 48,
90 "column": 3 90 "column": 3
91 } 91 }
92 }, 92 },
@@ -95,11 +95,11 @@
95 "defaultMessage": "!!!Please make sure to set a password you'll remember.\nIf you loose this password, you will have to reinstall Ferdi.", 95 "defaultMessage": "!!!Please make sure to set a password you'll remember.\nIf you loose this password, you will have to reinstall Ferdi.",
96 "file": "src/components/settings/settings/EditSettingsForm.js", 96 "file": "src/components/settings/settings/EditSettingsForm.js",
97 "start": { 97 "start": {
98 "line": 51, 98 "line": 49,
99 "column": 22 99 "column": 22
100 }, 100 },
101 "end": { 101 "end": {
102 "line": 54, 102 "line": 52,
103 "column": 3 103 "column": 3
104 } 104 }
105 }, 105 },
@@ -108,11 +108,11 @@
108 "defaultMessage": "!!!Password Lock allows you to keep your messages protected.\nUsing Password Lock, you will be prompted to enter your password everytime you start Ferdi or lock Ferdi yourself using the lock symbol in the bottom left corner or the shortcut {lockShortcut}.", 108 "defaultMessage": "!!!Password Lock allows you to keep your messages protected.\nUsing Password Lock, you will be prompted to enter your password everytime you start Ferdi or lock Ferdi yourself using the lock symbol in the bottom left corner or the shortcut {lockShortcut}.",
109 "file": "src/components/settings/settings/EditSettingsForm.js", 109 "file": "src/components/settings/settings/EditSettingsForm.js",
110 "start": { 110 "start": {
111 "line": 55, 111 "line": 53,
112 "column": 12 112 "column": 12
113 }, 113 },
114 "end": { 114 "end": {
115 "line": 58, 115 "line": 56,
116 "column": 3 116 "column": 3
117 } 117 }
118 }, 118 },
@@ -121,11 +121,11 @@
121 "defaultMessage": "!!!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.", 121 "defaultMessage": "!!!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.",
122 "file": "src/components/settings/settings/EditSettingsForm.js", 122 "file": "src/components/settings/settings/EditSettingsForm.js",
123 "start": { 123 "start": {
124 "line": 59, 124 "line": 57,
125 "column": 24 125 "column": 24
126 }, 126 },
127 "end": { 127 "end": {
128 "line": 62, 128 "line": 60,
129 "column": 3 129 "column": 3
130 } 130 }
131 }, 131 },
@@ -134,11 +134,11 @@
134 "defaultMessage": "!!!Scheduled Do-not-Disturb allows you to define a period of time in which you do not want to get Notifications from Ferdi.", 134 "defaultMessage": "!!!Scheduled Do-not-Disturb allows you to define a period of time in which you do not want to get Notifications from Ferdi.",
135 "file": "src/components/settings/settings/EditSettingsForm.js", 135 "file": "src/components/settings/settings/EditSettingsForm.js",
136 "start": { 136 "start": {
137 "line": 63, 137 "line": 61,
138 "column": 20 138 "column": 20
139 }, 139 },
140 "end": { 140 "end": {
141 "line": 66, 141 "line": 64,
142 "column": 3 142 "column": 3
143 } 143 }
144 }, 144 },
@@ -147,11 +147,11 @@
147 "defaultMessage": "!!!Language", 147 "defaultMessage": "!!!Language",
148 "file": "src/components/settings/settings/EditSettingsForm.js", 148 "file": "src/components/settings/settings/EditSettingsForm.js",
149 "start": { 149 "start": {
150 "line": 67, 150 "line": 65,
151 "column": 20 151 "column": 20
152 }, 152 },
153 "end": { 153 "end": {
154 "line": 70, 154 "line": 68,
155 "column": 3 155 "column": 3
156 } 156 }
157 }, 157 },
@@ -160,11 +160,11 @@
160 "defaultMessage": "!!!Updates", 160 "defaultMessage": "!!!Updates",
161 "file": "src/components/settings/settings/EditSettingsForm.js", 161 "file": "src/components/settings/settings/EditSettingsForm.js",
162 "start": { 162 "start": {
163 "line": 71, 163 "line": 69,
164 "column": 19 164 "column": 19
165 }, 165 },
166 "end": { 166 "end": {
167 "line": 74, 167 "line": 72,
168 "column": 3 168 "column": 3
169 } 169 }
170 }, 170 },
@@ -173,11 +173,11 @@
173 "defaultMessage": "!!!Appearance", 173 "defaultMessage": "!!!Appearance",
174 "file": "src/components/settings/settings/EditSettingsForm.js", 174 "file": "src/components/settings/settings/EditSettingsForm.js",
175 "start": { 175 "start": {
176 "line": 75, 176 "line": 73,
177 "column": 22 177 "column": 22
178 }, 178 },
179 "end": { 179 "end": {
180 "line": 78, 180 "line": 76,
181 "column": 3 181 "column": 3
182 } 182 }
183 }, 183 },
@@ -186,11 +186,11 @@
186 "defaultMessage": "!!!Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.", 186 "defaultMessage": "!!!Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.",
187 "file": "src/components/settings/settings/EditSettingsForm.js", 187 "file": "src/components/settings/settings/EditSettingsForm.js",
188 "start": { 188 "start": {
189 "line": 79, 189 "line": 77,
190 "column": 25 190 "column": 25
191 }, 191 },
192 "end": { 192 "end": {
193 "line": 82, 193 "line": 80,
194 "column": 3 194 "column": 3
195 } 195 }
196 }, 196 },
@@ -199,11 +199,11 @@
199 "defaultMessage": "!!!Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})", 199 "defaultMessage": "!!!Write your accent color in a CSS-compatible format. (Default: {defaultAccentColor})",
200 "file": "src/components/settings/settings/EditSettingsForm.js", 200 "file": "src/components/settings/settings/EditSettingsForm.js",
201 "start": { 201 "start": {
202 "line": 83, 202 "line": 81,
203 "column": 19 203 "column": 19
204 }, 204 },
205 "end": { 205 "end": {
206 "line": 86, 206 "line": 84,
207 "column": 3 207 "column": 3
208 } 208 }
209 }, 209 },
@@ -212,11 +212,11 @@
212 "defaultMessage": "!!!Privacy", 212 "defaultMessage": "!!!Privacy",
213 "file": "src/components/settings/settings/EditSettingsForm.js", 213 "file": "src/components/settings/settings/EditSettingsForm.js",
214 "start": { 214 "start": {
215 "line": 87, 215 "line": 85,
216 "column": 19 216 "column": 19
217 }, 217 },
218 "end": { 218 "end": {
219 "line": 90, 219 "line": 88,
220 "column": 3 220 "column": 3
221 } 221 }
222 }, 222 },
@@ -225,11 +225,11 @@
225 "defaultMessage": "!!!Advanced", 225 "defaultMessage": "!!!Advanced",
226 "file": "src/components/settings/settings/EditSettingsForm.js", 226 "file": "src/components/settings/settings/EditSettingsForm.js",
227 "start": { 227 "start": {
228 "line": 91, 228 "line": 89,
229 "column": 20 229 "column": 20
230 }, 230 },
231 "end": { 231 "end": {
232 "line": 94, 232 "line": 92,
233 "column": 3 233 "column": 3
234 } 234 }
235 }, 235 },
@@ -238,11 +238,11 @@
238 "defaultMessage": "!!!Help us to translate Ferdi into your language.", 238 "defaultMessage": "!!!Help us to translate Ferdi into your language.",
239 "file": "src/components/settings/settings/EditSettingsForm.js", 239 "file": "src/components/settings/settings/EditSettingsForm.js",
240 "start": { 240 "start": {
241 "line": 95, 241 "line": 93,
242 "column": 19 242 "column": 19
243 }, 243 },
244 "end": { 244 "end": {
245 "line": 98, 245 "line": 96,
246 "column": 3 246 "column": 3
247 } 247 }
248 }, 248 },
@@ -251,11 +251,11 @@
251 "defaultMessage": "!!!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.", 251 "defaultMessage": "!!!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.",
252 "file": "src/components/settings/settings/EditSettingsForm.js", 252 "file": "src/components/settings/settings/EditSettingsForm.js",
253 "start": { 253 "start": {
254 "line": 99, 254 "line": 97,
255 "column": 28 255 "column": 28
256 }, 256 },
257 "end": { 257 "end": {
258 "line": 102, 258 "line": 100,
259 "column": 3 259 "column": 3
260 } 260 }
261 }, 261 },
@@ -264,11 +264,11 @@
264 "defaultMessage": "!!!Cache", 264 "defaultMessage": "!!!Cache",
265 "file": "src/components/settings/settings/EditSettingsForm.js", 265 "file": "src/components/settings/settings/EditSettingsForm.js",
266 "start": { 266 "start": {
267 "line": 103, 267 "line": 101,
268 "column": 20 268 "column": 20
269 }, 269 },
270 "end": { 270 "end": {
271 "line": 106, 271 "line": 104,
272 "column": 3 272 "column": 3
273 } 273 }
274 }, 274 },
@@ -277,11 +277,11 @@
277 "defaultMessage": "!!!Ferdi cache is currently using {size} of disk space.", 277 "defaultMessage": "!!!Ferdi cache is currently using {size} of disk space.",
278 "file": "src/components/settings/settings/EditSettingsForm.js", 278 "file": "src/components/settings/settings/EditSettingsForm.js",
279 "start": { 279 "start": {
280 "line": 107, 280 "line": 105,
281 "column": 13 281 "column": 13
282 }, 282 },
283 "end": { 283 "end": {
284 "line": 110, 284 "line": 108,
285 "column": 3 285 "column": 3
286 } 286 }
287 }, 287 },
@@ -290,11 +290,11 @@
290 "defaultMessage": "!!!Couldn't clear all cache", 290 "defaultMessage": "!!!Couldn't clear all cache",
291 "file": "src/components/settings/settings/EditSettingsForm.js", 291 "file": "src/components/settings/settings/EditSettingsForm.js",
292 "start": { 292 "start": {
293 "line": 111, 293 "line": 109,
294 "column": 19 294 "column": 19
295 }, 295 },
296 "end": { 296 "end": {
297 "line": 114, 297 "line": 112,
298 "column": 3 298 "column": 3
299 } 299 }
300 }, 300 },
@@ -303,11 +303,50 @@
303 "defaultMessage": "!!!Clear cache", 303 "defaultMessage": "!!!Clear cache",
304 "file": "src/components/settings/settings/EditSettingsForm.js", 304 "file": "src/components/settings/settings/EditSettingsForm.js",
305 "start": { 305 "start": {
306 "line": 115, 306 "line": 113,
307 "column": 23 307 "column": 23
308 }, 308 },
309 "end": { 309 "end": {
310 "line": 118, 310 "line": 116,
311 "column": 3
312 }
313 },
314 {
315 "id": "settings.app.subheadlineFerdiProfile",
316 "defaultMessage": "!!!Ferdi Profile",
317 "file": "src/components/settings/settings/EditSettingsForm.js",
318 "start": {
319 "line": 117,
320 "column": 27
321 },
322 "end": {
323 "line": 120,
324 "column": 3
325 }
326 },
327 {
328 "id": "settings.app.buttonOpenFerdiProfileFolder",
329 "defaultMessage": "!!!Open Profile folder",
330 "file": "src/components/settings/settings/EditSettingsForm.js",
331 "start": {
332 "line": 121,
333 "column": 32
334 },
335 "end": {
336 "line": 124,
337 "column": 3
338 }
339 },
340 {
341 "id": "settings.app.buttonOpenFerdiServiceRecipesFolder",
342 "defaultMessage": "!!!Open Service Recipes folder",
343 "file": "src/components/settings/settings/EditSettingsForm.js",
344 "start": {
345 "line": 125,
346 "column": 39
347 },
348 "end": {
349 "line": 128,
311 "column": 3 350 "column": 3
312 } 351 }
313 }, 352 },
@@ -316,11 +355,11 @@
316 "defaultMessage": "!!!Check for updates", 355 "defaultMessage": "!!!Check for updates",
317 "file": "src/components/settings/settings/EditSettingsForm.js", 356 "file": "src/components/settings/settings/EditSettingsForm.js",
318 "start": { 357 "start": {
319 "line": 119, 358 "line": 129,
320 "column": 25 359 "column": 25
321 }, 360 },
322 "end": { 361 "end": {
323 "line": 122, 362 "line": 132,
324 "column": 3 363 "column": 3
325 } 364 }
326 }, 365 },
@@ -329,11 +368,11 @@
329 "defaultMessage": "!!!Restart & install update", 368 "defaultMessage": "!!!Restart & install update",
330 "file": "src/components/settings/settings/EditSettingsForm.js", 369 "file": "src/components/settings/settings/EditSettingsForm.js",
331 "start": { 370 "start": {
332 "line": 123, 371 "line": 133,
333 "column": 23 372 "column": 23
334 }, 373 },
335 "end": { 374 "end": {
336 "line": 126, 375 "line": 136,
337 "column": 3 376 "column": 3
338 } 377 }
339 }, 378 },
@@ -342,11 +381,11 @@
342 "defaultMessage": "!!!Is searching for update", 381 "defaultMessage": "!!!Is searching for update",
343 "file": "src/components/settings/settings/EditSettingsForm.js", 382 "file": "src/components/settings/settings/EditSettingsForm.js",
344 "start": { 383 "start": {
345 "line": 127, 384 "line": 137,
346 "column": 25 385 "column": 25
347 }, 386 },
348 "end": { 387 "end": {
349 "line": 130, 388 "line": 140,
350 "column": 3 389 "column": 3
351 } 390 }
352 }, 391 },
@@ -355,11 +394,11 @@
355 "defaultMessage": "!!!Update available, downloading...", 394 "defaultMessage": "!!!Update available, downloading...",
356 "file": "src/components/settings/settings/EditSettingsForm.js", 395 "file": "src/components/settings/settings/EditSettingsForm.js",
357 "start": { 396 "start": {
358 "line": 131, 397 "line": 141,
359 "column": 25 398 "column": 25
360 }, 399 },
361 "end": { 400 "end": {
362 "line": 134, 401 "line": 144,
363 "column": 3 402 "column": 3
364 } 403 }
365 }, 404 },
@@ -368,11 +407,11 @@
368 "defaultMessage": "!!!You are using the latest version of Ferdi", 407 "defaultMessage": "!!!You are using the latest version of Ferdi",
369 "file": "src/components/settings/settings/EditSettingsForm.js", 408 "file": "src/components/settings/settings/EditSettingsForm.js",
370 "start": { 409 "start": {
371 "line": 135, 410 "line": 145,
372 "column": 24 411 "column": 24
373 }, 412 },
374 "end": { 413 "end": {
375 "line": 138, 414 "line": 148,
376 "column": 3 415 "column": 3
377 } 416 }
378 }, 417 },
@@ -381,11 +420,11 @@
381 "defaultMessage": "!!!Current version:", 420 "defaultMessage": "!!!Current version:",
382 "file": "src/components/settings/settings/EditSettingsForm.js", 421 "file": "src/components/settings/settings/EditSettingsForm.js",
383 "start": { 422 "start": {
384 "line": 139, 423 "line": 149,
385 "column": 18 424 "column": 18
386 }, 425 },
387 "end": { 426 "end": {
388 "line": 142, 427 "line": 152,
389 "column": 3 428 "column": 3
390 } 429 }
391 }, 430 },
@@ -394,11 +433,11 @@
394 "defaultMessage": "!!!Changes require restart", 433 "defaultMessage": "!!!Changes require restart",
395 "file": "src/components/settings/settings/EditSettingsForm.js", 434 "file": "src/components/settings/settings/EditSettingsForm.js",
396 "start": { 435 "start": {
397 "line": 143, 436 "line": 153,
398 "column": 22 437 "column": 22
399 }, 438 },
400 "end": { 439 "end": {
401 "line": 146, 440 "line": 156,
402 "column": 3 441 "column": 3
403 } 442 }
404 }, 443 },
@@ -407,11 +446,11 @@
407 "defaultMessage": "!!!Official translations are English & German. All other languages are community based translations.", 446 "defaultMessage": "!!!Official translations are English & German. All other languages are community based translations.",
408 "file": "src/components/settings/settings/EditSettingsForm.js", 447 "file": "src/components/settings/settings/EditSettingsForm.js",
409 "start": { 448 "start": {
410 "line": 147, 449 "line": 157,
411 "column": 22 450 "column": 22
412 }, 451 },
413 "end": { 452 "end": {
414 "line": 150, 453 "line": 160,
415 "column": 3 454 "column": 3
416 } 455 }
417 } 456 }
diff --git a/src/i18n/messages/src/features/shareFranz/Component.json b/src/i18n/messages/src/features/shareFranz/Component.json
deleted file mode 100644
index 428bd5fbc..000000000
--- a/src/i18n/messages/src/features/shareFranz/Component.json
+++ /dev/null
@@ -1,93 +0,0 @@
1[
2 {
3 "id": "feature.shareFranz.headline",
4 "defaultMessage": "!!!Ferdi is better together!",
5 "file": "src/features/shareFranz/Component.js",
6 "start": {
7 "line": 17,
8 "column": 12
9 },
10 "end": {
11 "line": 20,
12 "column": 3
13 }
14 },
15 {
16 "id": "feature.shareFranz.text",
17 "defaultMessage": "!!!Tell your friends and colleagues how awesome Ferdi is and help us to spread the word.",
18 "file": "src/features/shareFranz/Component.js",
19 "start": {
20 "line": 21,
21 "column": 8
22 },
23 "end": {
24 "line": 24,
25 "column": 3
26 }
27 },
28 {
29 "id": "feature.shareFranz.action.email",
30 "defaultMessage": "!!!Share as email",
31 "file": "src/features/shareFranz/Component.js",
32 "start": {
33 "line": 25,
34 "column": 16
35 },
36 "end": {
37 "line": 28,
38 "column": 3
39 }
40 },
41 {
42 "id": "feature.shareFranz.action.facebook",
43 "defaultMessage": "!!!Share on Facebook",
44 "file": "src/features/shareFranz/Component.js",
45 "start": {
46 "line": 29,
47 "column": 19
48 },
49 "end": {
50 "line": 32,
51 "column": 3
52 }
53 },
54 {
55 "id": "feature.shareFranz.action.twitter",
56 "defaultMessage": "!!!Share on Twitter",
57 "file": "src/features/shareFranz/Component.js",
58 "start": {
59 "line": 33,
60 "column": 18
61 },
62 "end": {
63 "line": 36,
64 "column": 3
65 }
66 },
67 {
68 "id": "feature.shareFranz.shareText.email",
69 "defaultMessage": "!!! I've added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com",
70 "file": "src/features/shareFranz/Component.js",
71 "start": {
72 "line": 37,
73 "column": 18
74 },
75 "end": {
76 "line": 40,
77 "column": 3
78 }
79 },
80 {
81 "id": "feature.shareFranz.shareText.twitter",
82 "defaultMessage": "!!! I've added {count} services to Ferdi! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com /cc @FranzMessenger",
83 "file": "src/features/shareFranz/Component.js",
84 "start": {
85 "line": 41,
86 "column": 20
87 },
88 "end": {
89 "line": 44,
90 "column": 3
91 }
92 }
93] \ No newline at end of file
diff --git a/src/i18n/messages/src/lib/Menu.json b/src/i18n/messages/src/lib/Menu.json
index e8fa0d10b..373c3a64b 100644
--- a/src/i18n/messages/src/lib/Menu.json
+++ b/src/i18n/messages/src/lib/Menu.json
@@ -4,11 +4,11 @@
4 "defaultMessage": "!!!Edit", 4 "defaultMessage": "!!!Edit",
5 "file": "src/lib/Menu.js", 5 "file": "src/lib/Menu.js",
6 "start": { 6 "start": {
7 "line": 20, 7 "line": 19,
8 "column": 8 8 "column": 8
9 }, 9 },
10 "end": { 10 "end": {
11 "line": 23, 11 "line": 22,
12 "column": 3 12 "column": 3
13 } 13 }
14 }, 14 },
@@ -17,11 +17,11 @@
17 "defaultMessage": "!!!Undo", 17 "defaultMessage": "!!!Undo",
18 "file": "src/lib/Menu.js", 18 "file": "src/lib/Menu.js",
19 "start": { 19 "start": {
20 "line": 24, 20 "line": 23,
21 "column": 8 21 "column": 8
22 }, 22 },
23 "end": { 23 "end": {
24 "line": 27, 24 "line": 26,
25 "column": 3 25 "column": 3
26 } 26 }
27 }, 27 },
@@ -30,11 +30,11 @@
30 "defaultMessage": "!!!Redo", 30 "defaultMessage": "!!!Redo",
31 "file": "src/lib/Menu.js", 31 "file": "src/lib/Menu.js",
32 "start": { 32 "start": {
33 "line": 28, 33 "line": 27,
34 "column": 8 34 "column": 8
35 }, 35 },
36 "end": { 36 "end": {
37 "line": 31, 37 "line": 30,
38 "column": 3 38 "column": 3
39 } 39 }
40 }, 40 },
@@ -43,11 +43,11 @@
43 "defaultMessage": "!!!Cut", 43 "defaultMessage": "!!!Cut",
44 "file": "src/lib/Menu.js", 44 "file": "src/lib/Menu.js",
45 "start": { 45 "start": {
46 "line": 32, 46 "line": 31,
47 "column": 7 47 "column": 7
48 }, 48 },
49 "end": { 49 "end": {
50 "line": 35, 50 "line": 34,
51 "column": 3 51 "column": 3
52 } 52 }
53 }, 53 },
@@ -56,11 +56,11 @@
56 "defaultMessage": "!!!Copy", 56 "defaultMessage": "!!!Copy",
57 "file": "src/lib/Menu.js", 57 "file": "src/lib/Menu.js",
58 "start": { 58 "start": {
59 "line": 36, 59 "line": 35,
60 "column": 8 60 "column": 8
61 }, 61 },
62 "end": { 62 "end": {
63 "line": 39, 63 "line": 38,
64 "column": 3 64 "column": 3
65 } 65 }
66 }, 66 },
@@ -69,11 +69,11 @@
69 "defaultMessage": "!!!Paste", 69 "defaultMessage": "!!!Paste",
70 "file": "src/lib/Menu.js", 70 "file": "src/lib/Menu.js",
71 "start": { 71 "start": {
72 "line": 40, 72 "line": 39,
73 "column": 9 73 "column": 9
74 }, 74 },
75 "end": { 75 "end": {
76 "line": 43, 76 "line": 42,
77 "column": 3 77 "column": 3
78 } 78 }
79 }, 79 },
@@ -82,11 +82,11 @@
82 "defaultMessage": "!!!Paste And Match Style", 82 "defaultMessage": "!!!Paste And Match Style",
83 "file": "src/lib/Menu.js", 83 "file": "src/lib/Menu.js",
84 "start": { 84 "start": {
85 "line": 44, 85 "line": 43,
86 "column": 22 86 "column": 22
87 }, 87 },
88 "end": { 88 "end": {
89 "line": 47, 89 "line": 46,
90 "column": 3 90 "column": 3
91 } 91 }
92 }, 92 },
@@ -95,11 +95,11 @@
95 "defaultMessage": "!!!Delete", 95 "defaultMessage": "!!!Delete",
96 "file": "src/lib/Menu.js", 96 "file": "src/lib/Menu.js",
97 "start": { 97 "start": {
98 "line": 48, 98 "line": 47,
99 "column": 10 99 "column": 10
100 }, 100 },
101 "end": { 101 "end": {
102 "line": 51, 102 "line": 50,
103 "column": 3 103 "column": 3
104 } 104 }
105 }, 105 },
@@ -108,11 +108,11 @@
108 "defaultMessage": "!!!Select All", 108 "defaultMessage": "!!!Select All",
109 "file": "src/lib/Menu.js", 109 "file": "src/lib/Menu.js",
110 "start": { 110 "start": {
111 "line": 52, 111 "line": 51,
112 "column": 13 112 "column": 13
113 }, 113 },
114 "end": { 114 "end": {
115 "line": 55, 115 "line": 54,
116 "column": 3 116 "column": 3
117 } 117 }
118 }, 118 },
@@ -121,11 +121,11 @@
121 "defaultMessage": "!!!Find in Page", 121 "defaultMessage": "!!!Find in Page",
122 "file": "src/lib/Menu.js", 122 "file": "src/lib/Menu.js",
123 "start": { 123 "start": {
124 "line": 56, 124 "line": 55,
125 "column": 14 125 "column": 14
126 }, 126 },
127 "end": { 127 "end": {
128 "line": 59, 128 "line": 58,
129 "column": 3 129 "column": 3
130 } 130 }
131 }, 131 },
@@ -134,11 +134,11 @@
134 "defaultMessage": "!!!Speech", 134 "defaultMessage": "!!!Speech",
135 "file": "src/lib/Menu.js", 135 "file": "src/lib/Menu.js",
136 "start": { 136 "start": {
137 "line": 60, 137 "line": 59,
138 "column": 10 138 "column": 10
139 }, 139 },
140 "end": { 140 "end": {
141 "line": 63, 141 "line": 62,
142 "column": 3 142 "column": 3
143 } 143 }
144 }, 144 },
@@ -147,11 +147,11 @@
147 "defaultMessage": "!!!Start Speaking", 147 "defaultMessage": "!!!Start Speaking",
148 "file": "src/lib/Menu.js", 148 "file": "src/lib/Menu.js",
149 "start": { 149 "start": {
150 "line": 64, 150 "line": 63,
151 "column": 17 151 "column": 17
152 }, 152 },
153 "end": { 153 "end": {
154 "line": 67, 154 "line": 66,
155 "column": 3 155 "column": 3
156 } 156 }
157 }, 157 },
@@ -160,11 +160,11 @@
160 "defaultMessage": "!!!Stop Speaking", 160 "defaultMessage": "!!!Stop Speaking",
161 "file": "src/lib/Menu.js", 161 "file": "src/lib/Menu.js",
162 "start": { 162 "start": {
163 "line": 68, 163 "line": 67,
164 "column": 16 164 "column": 16
165 }, 165 },
166 "end": { 166 "end": {
167 "line": 71, 167 "line": 70,
168 "column": 3 168 "column": 3
169 } 169 }
170 }, 170 },
@@ -173,11 +173,11 @@
173 "defaultMessage": "!!!Start Dictation", 173 "defaultMessage": "!!!Start Dictation",
174 "file": "src/lib/Menu.js", 174 "file": "src/lib/Menu.js",
175 "start": { 175 "start": {
176 "line": 72, 176 "line": 71,
177 "column": 18 177 "column": 18
178 }, 178 },
179 "end": { 179 "end": {
180 "line": 75, 180 "line": 74,
181 "column": 3 181 "column": 3
182 } 182 }
183 }, 183 },
@@ -186,11 +186,11 @@
186 "defaultMessage": "!!!Emoji & Symbols", 186 "defaultMessage": "!!!Emoji & Symbols",
187 "file": "src/lib/Menu.js", 187 "file": "src/lib/Menu.js",
188 "start": { 188 "start": {
189 "line": 76, 189 "line": 75,
190 "column": 16 190 "column": 16
191 }, 191 },
192 "end": { 192 "end": {
193 "line": 79, 193 "line": 78,
194 "column": 3 194 "column": 3
195 } 195 }
196 }, 196 },
@@ -199,11 +199,11 @@
199 "defaultMessage": "!!!Open Quick Switch", 199 "defaultMessage": "!!!Open Quick Switch",
200 "file": "src/lib/Menu.js", 200 "file": "src/lib/Menu.js",
201 "start": { 201 "start": {
202 "line": 80, 202 "line": 79,
203 "column": 19 203 "column": 19
204 }, 204 },
205 "end": { 205 "end": {
206 "line": 83, 206 "line": 82,
207 "column": 3 207 "column": 3
208 } 208 }
209 }, 209 },
@@ -212,11 +212,11 @@
212 "defaultMessage": "!!!Back", 212 "defaultMessage": "!!!Back",
213 "file": "src/lib/Menu.js", 213 "file": "src/lib/Menu.js",
214 "start": { 214 "start": {
215 "line": 84, 215 "line": 83,
216 "column": 8 216 "column": 8
217 }, 217 },
218 "end": { 218 "end": {
219 "line": 87, 219 "line": 86,
220 "column": 3 220 "column": 3
221 } 221 }
222 }, 222 },
@@ -225,11 +225,11 @@
225 "defaultMessage": "!!!Forward", 225 "defaultMessage": "!!!Forward",
226 "file": "src/lib/Menu.js", 226 "file": "src/lib/Menu.js",
227 "start": { 227 "start": {
228 "line": 88, 228 "line": 87,
229 "column": 11 229 "column": 11
230 }, 230 },
231 "end": { 231 "end": {
232 "line": 91, 232 "line": 90,
233 "column": 3 233 "column": 3
234 } 234 }
235 }, 235 },
@@ -238,11 +238,11 @@
238 "defaultMessage": "!!!Actual Size", 238 "defaultMessage": "!!!Actual Size",
239 "file": "src/lib/Menu.js", 239 "file": "src/lib/Menu.js",
240 "start": { 240 "start": {
241 "line": 92, 241 "line": 91,
242 "column": 13 242 "column": 13
243 }, 243 },
244 "end": { 244 "end": {
245 "line": 95, 245 "line": 94,
246 "column": 3 246 "column": 3
247 } 247 }
248 }, 248 },
@@ -251,11 +251,11 @@
251 "defaultMessage": "!!!Zoom In", 251 "defaultMessage": "!!!Zoom In",
252 "file": "src/lib/Menu.js", 252 "file": "src/lib/Menu.js",
253 "start": { 253 "start": {
254 "line": 96, 254 "line": 95,
255 "column": 10 255 "column": 10
256 }, 256 },
257 "end": { 257 "end": {
258 "line": 99, 258 "line": 98,
259 "column": 3 259 "column": 3
260 } 260 }
261 }, 261 },
@@ -264,11 +264,11 @@
264 "defaultMessage": "!!!Zoom Out", 264 "defaultMessage": "!!!Zoom Out",
265 "file": "src/lib/Menu.js", 265 "file": "src/lib/Menu.js",
266 "start": { 266 "start": {
267 "line": 100, 267 "line": 99,
268 "column": 11 268 "column": 11
269 }, 269 },
270 "end": { 270 "end": {
271 "line": 103, 271 "line": 102,
272 "column": 3 272 "column": 3
273 } 273 }
274 }, 274 },
@@ -277,11 +277,11 @@
277 "defaultMessage": "!!!Toggle Full Screen", 277 "defaultMessage": "!!!Toggle Full Screen",
278 "file": "src/lib/Menu.js", 278 "file": "src/lib/Menu.js",
279 "start": { 279 "start": {
280 "line": 104, 280 "line": 103,
281 "column": 20 281 "column": 20
282 }, 282 },
283 "end": { 283 "end": {
284 "line": 107, 284 "line": 106,
285 "column": 3 285 "column": 3
286 } 286 }
287 }, 287 },
@@ -290,11 +290,11 @@
290 "defaultMessage": "!!!Toggle Dark Mode", 290 "defaultMessage": "!!!Toggle Dark Mode",
291 "file": "src/lib/Menu.js", 291 "file": "src/lib/Menu.js",
292 "start": { 292 "start": {
293 "line": 108, 293 "line": 107,
294 "column": 18 294 "column": 18
295 }, 295 },
296 "end": { 296 "end": {
297 "line": 111, 297 "line": 110,
298 "column": 3 298 "column": 3
299 } 299 }
300 }, 300 },
@@ -303,11 +303,11 @@
303 "defaultMessage": "!!!Toggle Developer Tools", 303 "defaultMessage": "!!!Toggle Developer Tools",
304 "file": "src/lib/Menu.js", 304 "file": "src/lib/Menu.js",
305 "start": { 305 "start": {
306 "line": 112, 306 "line": 111,
307 "column": 18 307 "column": 18
308 }, 308 },
309 "end": { 309 "end": {
310 "line": 115, 310 "line": 114,
311 "column": 3 311 "column": 3
312 } 312 }
313 }, 313 },
@@ -316,11 +316,11 @@
316 "defaultMessage": "!!!Toggle Todos Developer Tools", 316 "defaultMessage": "!!!Toggle Todos Developer Tools",
317 "file": "src/lib/Menu.js", 317 "file": "src/lib/Menu.js",
318 "start": { 318 "start": {
319 "line": 116, 319 "line": 115,
320 "column": 23 320 "column": 23
321 }, 321 },
322 "end": { 322 "end": {
323 "line": 119, 323 "line": 118,
324 "column": 3 324 "column": 3
325 } 325 }
326 }, 326 },
@@ -329,11 +329,11 @@
329 "defaultMessage": "!!!Toggle Service Developer Tools", 329 "defaultMessage": "!!!Toggle Service Developer Tools",
330 "file": "src/lib/Menu.js", 330 "file": "src/lib/Menu.js",
331 "start": { 331 "start": {
332 "line": 120, 332 "line": 119,
333 "column": 25 333 "column": 25
334 }, 334 },
335 "end": { 335 "end": {
336 "line": 123, 336 "line": 122,
337 "column": 3 337 "column": 3
338 } 338 }
339 }, 339 },
@@ -342,11 +342,11 @@
342 "defaultMessage": "!!!Reload Service", 342 "defaultMessage": "!!!Reload Service",
343 "file": "src/lib/Menu.js", 343 "file": "src/lib/Menu.js",
344 "start": { 344 "start": {
345 "line": 124, 345 "line": 123,
346 "column": 17 346 "column": 17
347 }, 347 },
348 "end": { 348 "end": {
349 "line": 127, 349 "line": 126,
350 "column": 3 350 "column": 3
351 } 351 }
352 }, 352 },
@@ -355,11 +355,11 @@
355 "defaultMessage": "!!!Reload Ferdi", 355 "defaultMessage": "!!!Reload Ferdi",
356 "file": "src/lib/Menu.js", 356 "file": "src/lib/Menu.js",
357 "start": { 357 "start": {
358 "line": 128, 358 "line": 127,
359 "column": 15 359 "column": 15
360 }, 360 },
361 "end": { 361 "end": {
362 "line": 131, 362 "line": 130,
363 "column": 3 363 "column": 3
364 } 364 }
365 }, 365 },
@@ -368,11 +368,11 @@
368 "defaultMessage": "!!!Lock Ferdi", 368 "defaultMessage": "!!!Lock Ferdi",
369 "file": "src/lib/Menu.js", 369 "file": "src/lib/Menu.js",
370 "start": { 370 "start": {
371 "line": 132, 371 "line": 131,
372 "column": 13 372 "column": 13
373 }, 373 },
374 "end": { 374 "end": {
375 "line": 135, 375 "line": 134,
376 "column": 3 376 "column": 3
377 } 377 }
378 }, 378 },
@@ -381,11 +381,11 @@
381 "defaultMessage": "!!!Reload ToDos", 381 "defaultMessage": "!!!Reload ToDos",
382 "file": "src/lib/Menu.js", 382 "file": "src/lib/Menu.js",
383 "start": { 383 "start": {
384 "line": 136, 384 "line": 135,
385 "column": 15 385 "column": 15
386 }, 386 },
387 "end": { 387 "end": {
388 "line": 139, 388 "line": 138,
389 "column": 3 389 "column": 3
390 } 390 }
391 }, 391 },
@@ -394,11 +394,11 @@
394 "defaultMessage": "!!!Minimize", 394 "defaultMessage": "!!!Minimize",
395 "file": "src/lib/Menu.js", 395 "file": "src/lib/Menu.js",
396 "start": { 396 "start": {
397 "line": 140, 397 "line": 139,
398 "column": 12 398 "column": 12
399 }, 399 },
400 "end": { 400 "end": {
401 "line": 143, 401 "line": 142,
402 "column": 3 402 "column": 3
403 } 403 }
404 }, 404 },
@@ -407,11 +407,11 @@
407 "defaultMessage": "!!!Close", 407 "defaultMessage": "!!!Close",
408 "file": "src/lib/Menu.js", 408 "file": "src/lib/Menu.js",
409 "start": { 409 "start": {
410 "line": 144, 410 "line": 143,
411 "column": 9 411 "column": 9
412 }, 412 },
413 "end": { 413 "end": {
414 "line": 147, 414 "line": 146,
415 "column": 3 415 "column": 3
416 } 416 }
417 }, 417 },
@@ -420,11 +420,11 @@
420 "defaultMessage": "!!!Learn More", 420 "defaultMessage": "!!!Learn More",
421 "file": "src/lib/Menu.js", 421 "file": "src/lib/Menu.js",
422 "start": { 422 "start": {
423 "line": 148, 423 "line": 147,
424 "column": 13 424 "column": 13
425 }, 425 },
426 "end": { 426 "end": {
427 "line": 151, 427 "line": 150,
428 "column": 3 428 "column": 3
429 } 429 }
430 }, 430 },
@@ -433,11 +433,11 @@
433 "defaultMessage": "!!!Changelog", 433 "defaultMessage": "!!!Changelog",
434 "file": "src/lib/Menu.js", 434 "file": "src/lib/Menu.js",
435 "start": { 435 "start": {
436 "line": 152, 436 "line": 151,
437 "column": 13 437 "column": 13
438 }, 438 },
439 "end": { 439 "end": {
440 "line": 155, 440 "line": 154,
441 "column": 3 441 "column": 3
442 } 442 }
443 }, 443 },
@@ -446,11 +446,11 @@
446 "defaultMessage": "!!!Import/Export Configuration Data", 446 "defaultMessage": "!!!Import/Export Configuration Data",
447 "file": "src/lib/Menu.js", 447 "file": "src/lib/Menu.js",
448 "start": { 448 "start": {
449 "line": 156, 449 "line": 155,
450 "column": 20 450 "column": 20
451 }, 451 },
452 "end": { 452 "end": {
453 "line": 159, 453 "line": 158,
454 "column": 3 454 "column": 3
455 } 455 }
456 }, 456 },
@@ -459,11 +459,11 @@
459 "defaultMessage": "!!!Support", 459 "defaultMessage": "!!!Support",
460 "file": "src/lib/Menu.js", 460 "file": "src/lib/Menu.js",
461 "start": { 461 "start": {
462 "line": 160, 462 "line": 159,
463 "column": 11 463 "column": 11
464 }, 464 },
465 "end": { 465 "end": {
466 "line": 163, 466 "line": 162,
467 "column": 3 467 "column": 3
468 } 468 }
469 }, 469 },
@@ -472,11 +472,11 @@
472 "defaultMessage": "!!!Copy Debug Information", 472 "defaultMessage": "!!!Copy Debug Information",
473 "file": "src/lib/Menu.js", 473 "file": "src/lib/Menu.js",
474 "start": { 474 "start": {
475 "line": 164, 475 "line": 163,
476 "column": 13 476 "column": 13
477 }, 477 },
478 "end": { 478 "end": {
479 "line": 167, 479 "line": 166,
480 "column": 3 480 "column": 3
481 } 481 }
482 }, 482 },
@@ -485,11 +485,11 @@
485 "defaultMessage": "!!!Publish Debug Information", 485 "defaultMessage": "!!!Publish Debug Information",
486 "file": "src/lib/Menu.js", 486 "file": "src/lib/Menu.js",
487 "start": { 487 "start": {
488 "line": 168, 488 "line": 167,
489 "column": 20 489 "column": 20
490 }, 490 },
491 "end": { 491 "end": {
492 "line": 171, 492 "line": 170,
493 "column": 3 493 "column": 3
494 } 494 }
495 }, 495 },
@@ -498,11 +498,11 @@
498 "defaultMessage": "!!!Ferdi Debug Information", 498 "defaultMessage": "!!!Ferdi Debug Information",
499 "file": "src/lib/Menu.js", 499 "file": "src/lib/Menu.js",
500 "start": { 500 "start": {
501 "line": 172, 501 "line": 171,
502 "column": 27 502 "column": 27
503 }, 503 },
504 "end": { 504 "end": {
505 "line": 175, 505 "line": 174,
506 "column": 3 506 "column": 3
507 } 507 }
508 }, 508 },
@@ -511,11 +511,11 @@
511 "defaultMessage": "!!!Your Debug Information has been copied to your clipboard.", 511 "defaultMessage": "!!!Your Debug Information has been copied to your clipboard.",
512 "file": "src/lib/Menu.js", 512 "file": "src/lib/Menu.js",
513 "start": { 513 "start": {
514 "line": 176, 514 "line": 175,
515 "column": 23 515 "column": 23
516 }, 516 },
517 "end": { 517 "end": {
518 "line": 179, 518 "line": 178,
519 "column": 3 519 "column": 3
520 } 520 }
521 }, 521 },
@@ -524,11 +524,11 @@
524 "defaultMessage": "!!!Unlock with Touch ID", 524 "defaultMessage": "!!!Unlock with Touch ID",
525 "file": "src/lib/Menu.js", 525 "file": "src/lib/Menu.js",
526 "start": { 526 "start": {
527 "line": 180, 527 "line": 179,
528 "column": 11 528 "column": 11
529 }, 529 },
530 "end": { 530 "end": {
531 "line": 183, 531 "line": 182,
532 "column": 3 532 "column": 3
533 } 533 }
534 }, 534 },
@@ -537,11 +537,11 @@
537 "defaultMessage": "!!!unlock via Touch ID", 537 "defaultMessage": "!!!unlock via Touch ID",
538 "file": "src/lib/Menu.js", 538 "file": "src/lib/Menu.js",
539 "start": { 539 "start": {
540 "line": 184, 540 "line": 183,
541 "column": 17 541 "column": 17
542 }, 542 },
543 "end": { 543 "end": {
544 "line": 187, 544 "line": 186,
545 "column": 3 545 "column": 3
546 } 546 }
547 }, 547 },
@@ -550,11 +550,11 @@
550 "defaultMessage": "!!!Terms of Service", 550 "defaultMessage": "!!!Terms of Service",
551 "file": "src/lib/Menu.js", 551 "file": "src/lib/Menu.js",
552 "start": { 552 "start": {
553 "line": 188, 553 "line": 187,
554 "column": 7 554 "column": 7
555 }, 555 },
556 "end": { 556 "end": {
557 "line": 191, 557 "line": 190,
558 "column": 3 558 "column": 3
559 } 559 }
560 }, 560 },
@@ -563,11 +563,11 @@
563 "defaultMessage": "!!!Privacy Statement", 563 "defaultMessage": "!!!Privacy Statement",
564 "file": "src/lib/Menu.js", 564 "file": "src/lib/Menu.js",
565 "start": { 565 "start": {
566 "line": 192, 566 "line": 191,
567 "column": 11 567 "column": 11
568 }, 568 },
569 "end": { 569 "end": {
570 "line": 195, 570 "line": 194,
571 "column": 3 571 "column": 3
572 } 572 }
573 }, 573 },
@@ -576,11 +576,11 @@
576 "defaultMessage": "!!!File", 576 "defaultMessage": "!!!File",
577 "file": "src/lib/Menu.js", 577 "file": "src/lib/Menu.js",
578 "start": { 578 "start": {
579 "line": 196, 579 "line": 195,
580 "column": 8 580 "column": 8
581 }, 581 },
582 "end": { 582 "end": {
583 "line": 199, 583 "line": 198,
584 "column": 3 584 "column": 3
585 } 585 }
586 }, 586 },
@@ -589,11 +589,11 @@
589 "defaultMessage": "!!!View", 589 "defaultMessage": "!!!View",
590 "file": "src/lib/Menu.js", 590 "file": "src/lib/Menu.js",
591 "start": { 591 "start": {
592 "line": 200, 592 "line": 199,
593 "column": 8 593 "column": 8
594 }, 594 },
595 "end": { 595 "end": {
596 "line": 203, 596 "line": 202,
597 "column": 3 597 "column": 3
598 } 598 }
599 }, 599 },
@@ -602,11 +602,11 @@
602 "defaultMessage": "!!!Services", 602 "defaultMessage": "!!!Services",
603 "file": "src/lib/Menu.js", 603 "file": "src/lib/Menu.js",
604 "start": { 604 "start": {
605 "line": 204, 605 "line": 203,
606 "column": 12 606 "column": 12
607 }, 607 },
608 "end": { 608 "end": {
609 "line": 207, 609 "line": 206,
610 "column": 3 610 "column": 3
611 } 611 }
612 }, 612 },
@@ -615,11 +615,11 @@
615 "defaultMessage": "!!!Window", 615 "defaultMessage": "!!!Window",
616 "file": "src/lib/Menu.js", 616 "file": "src/lib/Menu.js",
617 "start": { 617 "start": {
618 "line": 208, 618 "line": 207,
619 "column": 10 619 "column": 10
620 }, 620 },
621 "end": { 621 "end": {
622 "line": 211, 622 "line": 210,
623 "column": 3 623 "column": 3
624 } 624 }
625 }, 625 },
@@ -628,11 +628,11 @@
628 "defaultMessage": "!!!Help", 628 "defaultMessage": "!!!Help",
629 "file": "src/lib/Menu.js", 629 "file": "src/lib/Menu.js",
630 "start": { 630 "start": {
631 "line": 212, 631 "line": 211,
632 "column": 8 632 "column": 8
633 }, 633 },
634 "end": { 634 "end": {
635 "line": 215, 635 "line": 214,
636 "column": 3 636 "column": 3
637 } 637 }
638 }, 638 },
@@ -641,11 +641,11 @@
641 "defaultMessage": "!!!About Ferdi", 641 "defaultMessage": "!!!About Ferdi",
642 "file": "src/lib/Menu.js", 642 "file": "src/lib/Menu.js",
643 "start": { 643 "start": {
644 "line": 216, 644 "line": 215,
645 "column": 9 645 "column": 9
646 }, 646 },
647 "end": { 647 "end": {
648 "line": 219, 648 "line": 218,
649 "column": 3 649 "column": 3
650 } 650 }
651 }, 651 },
@@ -654,11 +654,11 @@
654 "defaultMessage": "!!!What's new?", 654 "defaultMessage": "!!!What's new?",
655 "file": "src/lib/Menu.js", 655 "file": "src/lib/Menu.js",
656 "start": { 656 "start": {
657 "line": 220, 657 "line": 219,
658 "column": 16 658 "column": 16
659 }, 659 },
660 "end": { 660 "end": {
661 "line": 223, 661 "line": 222,
662 "column": 3 662 "column": 3
663 } 663 }
664 }, 664 },
@@ -667,11 +667,11 @@
667 "defaultMessage": "!!!Settings", 667 "defaultMessage": "!!!Settings",
668 "file": "src/lib/Menu.js", 668 "file": "src/lib/Menu.js",
669 "start": { 669 "start": {
670 "line": 224, 670 "line": 223,
671 "column": 12 671 "column": 12
672 }, 672 },
673 "end": { 673 "end": {
674 "line": 227, 674 "line": 226,
675 "column": 3 675 "column": 3
676 } 676 }
677 }, 677 },
@@ -680,11 +680,11 @@
680 "defaultMessage": "!!!Check for updates", 680 "defaultMessage": "!!!Check for updates",
681 "file": "src/lib/Menu.js", 681 "file": "src/lib/Menu.js",
682 "start": { 682 "start": {
683 "line": 228, 683 "line": 227,
684 "column": 19 684 "column": 19
685 }, 685 },
686 "end": { 686 "end": {
687 "line": 231, 687 "line": 230,
688 "column": 3 688 "column": 3
689 } 689 }
690 }, 690 },
@@ -693,11 +693,11 @@
693 "defaultMessage": "!!!Hide", 693 "defaultMessage": "!!!Hide",
694 "file": "src/lib/Menu.js", 694 "file": "src/lib/Menu.js",
695 "start": { 695 "start": {
696 "line": 232, 696 "line": 231,
697 "column": 8 697 "column": 8
698 }, 698 },
699 "end": { 699 "end": {
700 "line": 235, 700 "line": 234,
701 "column": 3 701 "column": 3
702 } 702 }
703 }, 703 },
@@ -706,11 +706,11 @@
706 "defaultMessage": "!!!Hide Others", 706 "defaultMessage": "!!!Hide Others",
707 "file": "src/lib/Menu.js", 707 "file": "src/lib/Menu.js",
708 "start": { 708 "start": {
709 "line": 236, 709 "line": 235,
710 "column": 14 710 "column": 14
711 }, 711 },
712 "end": { 712 "end": {
713 "line": 239, 713 "line": 238,
714 "column": 3 714 "column": 3
715 } 715 }
716 }, 716 },
@@ -719,11 +719,11 @@
719 "defaultMessage": "!!!Unhide", 719 "defaultMessage": "!!!Unhide",
720 "file": "src/lib/Menu.js", 720 "file": "src/lib/Menu.js",
721 "start": { 721 "start": {
722 "line": 240, 722 "line": 239,
723 "column": 10 723 "column": 10
724 }, 724 },
725 "end": { 725 "end": {
726 "line": 243, 726 "line": 242,
727 "column": 3 727 "column": 3
728 } 728 }
729 }, 729 },
@@ -732,11 +732,11 @@
732 "defaultMessage": "!!!Auto-hide menu bar", 732 "defaultMessage": "!!!Auto-hide menu bar",
733 "file": "src/lib/Menu.js", 733 "file": "src/lib/Menu.js",
734 "start": { 734 "start": {
735 "line": 244, 735 "line": 243,
736 "column": 19 736 "column": 19
737 }, 737 },
738 "end": { 738 "end": {
739 "line": 247, 739 "line": 246,
740 "column": 3 740 "column": 3
741 } 741 }
742 }, 742 },
@@ -745,11 +745,11 @@
745 "defaultMessage": "!!!Quit", 745 "defaultMessage": "!!!Quit",
746 "file": "src/lib/Menu.js", 746 "file": "src/lib/Menu.js",
747 "start": { 747 "start": {
748 "line": 248, 748 "line": 247,
749 "column": 8 749 "column": 8
750 }, 750 },
751 "end": { 751 "end": {
752 "line": 251, 752 "line": 250,
753 "column": 3 753 "column": 3
754 } 754 }
755 }, 755 },
@@ -758,11 +758,11 @@
758 "defaultMessage": "!!!Add New Service...", 758 "defaultMessage": "!!!Add New Service...",
759 "file": "src/lib/Menu.js", 759 "file": "src/lib/Menu.js",
760 "start": { 760 "start": {
761 "line": 252, 761 "line": 251,
762 "column": 17 762 "column": 17
763 }, 763 },
764 "end": { 764 "end": {
765 "line": 255, 765 "line": 254,
766 "column": 3 766 "column": 3
767 } 767 }
768 }, 768 },
@@ -771,11 +771,11 @@
771 "defaultMessage": "!!!Add New Workspace...", 771 "defaultMessage": "!!!Add New Workspace...",
772 "file": "src/lib/Menu.js", 772 "file": "src/lib/Menu.js",
773 "start": { 773 "start": {
774 "line": 256, 774 "line": 255,
775 "column": 19 775 "column": 19
776 }, 776 },
777 "end": { 777 "end": {
778 "line": 259, 778 "line": 258,
779 "column": 3 779 "column": 3
780 } 780 }
781 }, 781 },
@@ -784,11 +784,11 @@
784 "defaultMessage": "!!!Open workspace drawer", 784 "defaultMessage": "!!!Open workspace drawer",
785 "file": "src/lib/Menu.js", 785 "file": "src/lib/Menu.js",
786 "start": { 786 "start": {
787 "line": 260, 787 "line": 259,
788 "column": 23 788 "column": 23
789 }, 789 },
790 "end": { 790 "end": {
791 "line": 263, 791 "line": 262,
792 "column": 3 792 "column": 3
793 } 793 }
794 }, 794 },
@@ -797,11 +797,11 @@
797 "defaultMessage": "!!!Close workspace drawer", 797 "defaultMessage": "!!!Close workspace drawer",
798 "file": "src/lib/Menu.js", 798 "file": "src/lib/Menu.js",
799 "start": { 799 "start": {
800 "line": 264, 800 "line": 263,
801 "column": 24 801 "column": 24
802 }, 802 },
803 "end": { 803 "end": {
804 "line": 267, 804 "line": 266,
805 "column": 3 805 "column": 3
806 } 806 }
807 }, 807 },
@@ -810,11 +810,11 @@
810 "defaultMessage": "!!!Activate next service...", 810 "defaultMessage": "!!!Activate next service...",
811 "file": "src/lib/Menu.js", 811 "file": "src/lib/Menu.js",
812 "start": { 812 "start": {
813 "line": 268, 813 "line": 267,
814 "column": 23 814 "column": 23
815 }, 815 },
816 "end": { 816 "end": {
817 "line": 271, 817 "line": 270,
818 "column": 3 818 "column": 3
819 } 819 }
820 }, 820 },
@@ -823,11 +823,11 @@
823 "defaultMessage": "!!!Activate previous service...", 823 "defaultMessage": "!!!Activate previous service...",
824 "file": "src/lib/Menu.js", 824 "file": "src/lib/Menu.js",
825 "start": { 825 "start": {
826 "line": 272, 826 "line": 271,
827 "column": 27 827 "column": 27
828 }, 828 },
829 "end": { 829 "end": {
830 "line": 275, 830 "line": 274,
831 "column": 3 831 "column": 3
832 } 832 }
833 }, 833 },
@@ -836,11 +836,11 @@
836 "defaultMessage": "!!!Disable notifications & audio", 836 "defaultMessage": "!!!Disable notifications & audio",
837 "file": "src/lib/Menu.js", 837 "file": "src/lib/Menu.js",
838 "start": { 838 "start": {
839 "line": 276, 839 "line": 275,
840 "column": 11 840 "column": 11
841 }, 841 },
842 "end": { 842 "end": {
843 "line": 279, 843 "line": 278,
844 "column": 3 844 "column": 3
845 } 845 }
846 }, 846 },
@@ -849,11 +849,11 @@
849 "defaultMessage": "!!!Enable notifications & audio", 849 "defaultMessage": "!!!Enable notifications & audio",
850 "file": "src/lib/Menu.js", 850 "file": "src/lib/Menu.js",
851 "start": { 851 "start": {
852 "line": 280, 852 "line": 279,
853 "column": 13 853 "column": 13
854 }, 854 },
855 "end": { 855 "end": {
856 "line": 283, 856 "line": 282,
857 "column": 3 857 "column": 3
858 } 858 }
859 }, 859 },
@@ -862,11 +862,11 @@
862 "defaultMessage": "!!!Workspaces", 862 "defaultMessage": "!!!Workspaces",
863 "file": "src/lib/Menu.js", 863 "file": "src/lib/Menu.js",
864 "start": { 864 "start": {
865 "line": 284, 865 "line": 283,
866 "column": 14 866 "column": 14
867 }, 867 },
868 "end": { 868 "end": {
869 "line": 287, 869 "line": 286,
870 "column": 3 870 "column": 3
871 } 871 }
872 }, 872 },
@@ -875,11 +875,11 @@
875 "defaultMessage": "!!!Default", 875 "defaultMessage": "!!!Default",
876 "file": "src/lib/Menu.js", 876 "file": "src/lib/Menu.js",
877 "start": { 877 "start": {
878 "line": 288, 878 "line": 287,
879 "column": 20 879 "column": 20
880 }, 880 },
881 "end": { 881 "end": {
882 "line": 291, 882 "line": 290,
883 "column": 3 883 "column": 3
884 } 884 }
885 }, 885 },
@@ -888,11 +888,11 @@
888 "defaultMessage": "!!!Todos", 888 "defaultMessage": "!!!Todos",
889 "file": "src/lib/Menu.js", 889 "file": "src/lib/Menu.js",
890 "start": { 890 "start": {
891 "line": 292, 891 "line": 291,
892 "column": 9 892 "column": 9
893 }, 893 },
894 "end": { 894 "end": {
895 "line": 295, 895 "line": 294,
896 "column": 3 896 "column": 3
897 } 897 }
898 }, 898 },
@@ -901,11 +901,11 @@
901 "defaultMessage": "!!!Open Todos drawer", 901 "defaultMessage": "!!!Open Todos drawer",
902 "file": "src/lib/Menu.js", 902 "file": "src/lib/Menu.js",
903 "start": { 903 "start": {
904 "line": 296, 904 "line": 295,
905 "column": 19 905 "column": 19
906 }, 906 },
907 "end": { 907 "end": {
908 "line": 299, 908 "line": 298,
909 "column": 3 909 "column": 3
910 } 910 }
911 }, 911 },
@@ -914,11 +914,11 @@
914 "defaultMessage": "!!!Close Todos drawer", 914 "defaultMessage": "!!!Close Todos drawer",
915 "file": "src/lib/Menu.js", 915 "file": "src/lib/Menu.js",
916 "start": { 916 "start": {
917 "line": 300, 917 "line": 299,
918 "column": 20 918 "column": 20
919 }, 919 },
920 "end": { 920 "end": {
921 "line": 303, 921 "line": 302,
922 "column": 3 922 "column": 3
923 } 923 }
924 }, 924 },
@@ -927,11 +927,11 @@
927 "defaultMessage": "!!!Enable Todos", 927 "defaultMessage": "!!!Enable Todos",
928 "file": "src/lib/Menu.js", 928 "file": "src/lib/Menu.js",
929 "start": { 929 "start": {
930 "line": 304, 930 "line": 303,
931 "column": 15 931 "column": 15
932 }, 932 },
933 "end": { 933 "end": {
934 "line": 307, 934 "line": 306,
935 "column": 3 935 "column": 3
936 } 936 }
937 }, 937 },
@@ -940,11 +940,11 @@
940 "defaultMessage": "!!!Home", 940 "defaultMessage": "!!!Home",
941 "file": "src/lib/Menu.js", 941 "file": "src/lib/Menu.js",
942 "start": { 942 "start": {
943 "line": 308, 943 "line": 307,
944 "column": 17 944 "column": 17
945 }, 945 },
946 "end": { 946 "end": {
947 "line": 311, 947 "line": 310,
948 "column": 3 948 "column": 3
949 } 949 }
950 } 950 }
diff --git a/src/index.js b/src/index.js
index 9146a23da..d2b0f56f4 100644
--- a/src/index.js
+++ b/src/index.js
@@ -1,6 +1,6 @@
1/* eslint-disable import/first */ 1/* eslint-disable import/first */
2 2
3import { app, BrowserWindow, shell, ipcMain, session } from 'electron'; 3import { app, BrowserWindow, ipcMain, session } from 'electron';
4 4
5import { emptyDirSync, ensureFileSync } from 'fs-extra'; 5import { emptyDirSync, ensureFileSync } from 'fs-extra';
6import { join } from 'path'; 6import { join } from 'path';
@@ -34,7 +34,7 @@ import { appId } from './package.json'; // eslint-disable-line import/no-unresol
34import './electron/exception'; 34import './electron/exception';
35 35
36import { asarPath } from './helpers/asar-helpers'; 36import { asarPath } from './helpers/asar-helpers';
37import { isValidExternalURL } from './helpers/url-helpers'; 37import { openExternalUrl } from './helpers/url-helpers';
38import userAgent from './helpers/userAgent-helpers'; 38import userAgent from './helpers/userAgent-helpers';
39 39
40const debug = require('debug')('Ferdi:App'); 40const debug = require('debug')('Ferdi:App');
@@ -342,12 +342,8 @@ const createWindow = () => {
342 app.isMaximized = mainWindow.isMaximized(); 342 app.isMaximized = mainWindow.isMaximized();
343 343
344 mainWindow.webContents.on('new-window', (e, url) => { 344 mainWindow.webContents.on('new-window', (e, url) => {
345 debug('Open url', url);
346 e.preventDefault(); 345 e.preventDefault();
347 346 openExternalUrl(url);
348 if (isValidExternalURL(url)) {
349 shell.openExternal(url);
350 }
351 }); 347 });
352 348
353 if (settings.get('startMinimized')) { 349 if (settings.get('startMinimized')) {
@@ -392,10 +388,9 @@ app.on('ready', () => {
392 enforceMacOSAppLocation(); 388 enforceMacOSAppLocation();
393 389
394 // Register App URL 390 // Register App URL
395 if (isDevMode) { 391 const protocolClient = isDevMode ? 'ferdi-dev' : 'ferdi';
396 app.setAsDefaultProtocolClient('ferdi-dev'); 392 if (!app.isDefaultProtocolClient(protocolClient)) {
397 } else { 393 app.setAsDefaultProtocolClient(protocolClient);
398 app.setAsDefaultProtocolClient('ferdi');
399 } 394 }
400 395
401 if (isWindows) { 396 if (isWindows) {
@@ -455,7 +450,12 @@ ipcMain.on('open-browser-window', (e, { url, serviceId }) => {
455 const serviceSession = session.fromPartition(`persist:service-${serviceId}`); 450 const serviceSession = session.fromPartition(`persist:service-${serviceId}`);
456 const child = new BrowserWindow({ 451 const child = new BrowserWindow({
457 parent: mainWindow, 452 parent: mainWindow,
458 webPreferences: { session: serviceSession }, 453 webPreferences: {
454 session: serviceSession,
455 // TODO: Aren't these needed here?
456 // contextIsolation: false,
457 // enableRemoteModule: true,
458 },
459 }); 459 });
460 child.show(); 460 child.show();
461 child.loadURL(url); 461 child.loadURL(url);
diff --git a/src/internal-server/app/Controllers/Http/RecipeController.js b/src/internal-server/app/Controllers/Http/RecipeController.js
index 8a6b4f684..1a7595a9d 100644
--- a/src/internal-server/app/Controllers/Http/RecipeController.js
+++ b/src/internal-server/app/Controllers/Http/RecipeController.js
@@ -6,8 +6,11 @@ const {
6const Env = use('Env'); 6const Env = use('Env');
7 7
8const fetch = require('node-fetch'); 8const fetch = require('node-fetch');
9const debug = require('debug')('Ferdi:internalServer:RecipeController');
10const { LIVE_FERDI_API } = require('../../../../config');
11const { API_VERSION } = require('../../../../environment');
9 12
10const RECIPES_URL = 'https://api.getferdi.com/v1/recipes'; 13const RECIPES_URL = `${LIVE_FERDI_API}/${API_VERSION}/recipes`;
11 14
12class RecipeController { 15class RecipeController {
13 // List official and custom recipes 16 // List official and custom recipes
@@ -64,6 +67,9 @@ class RecipeController {
64 if (Env.get('CONNECT_WITH_FRANZ') == 'true') { // eslint-disable-line eqeqeq 67 if (Env.get('CONNECT_WITH_FRANZ') == 'true') { // eslint-disable-line eqeqeq
65 remoteResults = JSON.parse(await (await fetch(`${RECIPES_URL}/search?needle=${encodeURIComponent(needle)}`)).text()); 68 remoteResults = JSON.parse(await (await fetch(`${RECIPES_URL}/search?needle=${encodeURIComponent(needle)}`)).text());
66 } 69 }
70
71 debug('remoteResults:', remoteResults);
72
67 const localResultsArray = (await Recipe.query().where('name', 'LIKE', `%${needle}%`).fetch()).toJSON(); 73 const localResultsArray = (await Recipe.query().where('name', 'LIKE', `%${needle}%`).fetch()).toJSON();
68 const localResults = localResultsArray.map(recipe => ({ 74 const localResults = localResultsArray.map(recipe => ({
69 id: recipe.recipeId, 75 id: recipe.recipeId,
@@ -71,6 +77,8 @@ class RecipeController {
71 ...JSON.parse(recipe.data), 77 ...JSON.parse(recipe.data),
72 })); 78 }));
73 79
80 debug('localResults:', localResults);
81
74 results = [ 82 results = [
75 ...localResults, 83 ...localResults,
76 ...remoteResults || [], 84 ...remoteResults || [],
diff --git a/src/internal-server/app/Controllers/Http/ServiceController.js b/src/internal-server/app/Controllers/Http/ServiceController.js
index c76a287f7..f2af9d411 100644
--- a/src/internal-server/app/Controllers/Http/ServiceController.js
+++ b/src/internal-server/app/Controllers/Http/ServiceController.js
@@ -5,7 +5,8 @@ const Env = use('Env');
5const uuid = require('uuid/v4'); 5const uuid = require('uuid/v4');
6const path = require('path'); 6const path = require('path');
7const fs = require('fs-extra'); 7const fs = require('fs-extra');
8const { LOCAL_HOSTNAME } = require('../../../../config'); 8const { LOCAL_HOSTNAME, DEFAULT_SERVICE_ORDER } = require('../../../../config');
9const { API_VERSION } = require('../../../../environment');
9 10
10const hostname = LOCAL_HOSTNAME; 11const hostname = LOCAL_HOSTNAME;
11const port = Env.get('PORT'); 12const port = Env.get('PORT');
@@ -54,7 +55,7 @@ class ServiceController {
54 isMuted: false, 55 isMuted: false,
55 isDarkModeEnabled: '', // TODO: This should ideally be a boolean (false). But, changing it caused the sidebar toggle to not work. 56 isDarkModeEnabled: '', // TODO: This should ideally be a boolean (false). But, changing it caused the sidebar toggle to not work.
56 spellcheckerLanguage: '', 57 spellcheckerLanguage: '',
57 order: 1, 58 order: DEFAULT_SERVICE_ORDER,
58 customRecipe: false, 59 customRecipe: false,
59 hasCustomIcon: false, 60 hasCustomIcon: false,
60 workspaces: [], 61 workspaces: [],
@@ -83,12 +84,12 @@ class ServiceController {
83 isEnabled: true, 84 isEnabled: true,
84 isMuted: false, 85 isMuted: false,
85 isNotificationEnabled: true, 86 isNotificationEnabled: true,
86 order: 1, 87 order: DEFAULT_SERVICE_ORDER,
87 spellcheckerLanguage: '', 88 spellcheckerLanguage: '',
88 workspaces: [], 89 workspaces: [],
89 ...JSON.parse(service.settings), 90 ...JSON.parse(service.settings),
90 iconUrl: settings.iconId 91 iconUrl: settings.iconId
91 ? `http://${hostname}:${port}/v1/icon/${settings.iconId}` 92 ? `http://${hostname}:${port}/${API_VERSION}/icon/${settings.iconId}`
92 : null, 93 : null,
93 id: service.serviceId, 94 id: service.serviceId,
94 name: service.name, 95 name: service.name,
@@ -156,7 +157,7 @@ class ServiceController {
156 id, 157 id,
157 name: service.name, 158 name: service.name,
158 ...newSettings, 159 ...newSettings,
159 iconUrl: `http://${hostname}:${port}/v1/icon/${ 160 iconUrl: `http://${hostname}:${port}/${API_VERSION}/icon/${
160 newSettings.iconId 161 newSettings.iconId
161 }`, 162 }`,
162 userId: 1, 163 userId: 1,
@@ -196,7 +197,7 @@ class ServiceController {
196 id, 197 id,
197 name: service.name, 198 name: service.name,
198 ...settings, 199 ...settings,
199 iconUrl: `${Env.get('APP_URL')}/v1/icon/${settings.iconId}`, 200 iconUrl: `${Env.get('APP_URL')}/${API_VERSION}/icon/${settings.iconId}`,
200 userId: 1, 201 userId: 1,
201 }, 202 },
202 status: ['updated'], 203 status: ['updated'],
@@ -257,12 +258,12 @@ class ServiceController {
257 isEnabled: true, 258 isEnabled: true,
258 isMuted: false, 259 isMuted: false,
259 isNotificationEnabled: true, 260 isNotificationEnabled: true,
260 order: 1, 261 order: DEFAULT_SERVICE_ORDER,
261 spellcheckerLanguage: '', 262 spellcheckerLanguage: '',
262 workspaces: [], 263 workspaces: [],
263 ...JSON.parse(service.settings), 264 ...JSON.parse(service.settings),
264 iconUrl: settings.iconId 265 iconUrl: settings.iconId
265 ? `http://${hostname}:${port}/v1/icon/${settings.iconId}` 266 ? `http://${hostname}:${port}/${API_VERSION}/icon/${settings.iconId}`
266 : null, 267 : null,
267 id: service.serviceId, 268 id: service.serviceId,
268 name: service.name, 269 name: service.name,
diff --git a/src/internal-server/app/Controllers/Http/UserController.js b/src/internal-server/app/Controllers/Http/UserController.js
index a3ad736fa..57aea6fc1 100644
--- a/src/internal-server/app/Controllers/Http/UserController.js
+++ b/src/internal-server/app/Controllers/Http/UserController.js
@@ -9,18 +9,16 @@ const btoa = require('btoa');
9const fetch = require('node-fetch'); 9const fetch = require('node-fetch');
10const uuid = require('uuid/v4'); 10const uuid = require('uuid/v4');
11const crypto = require('crypto'); 11const crypto = require('crypto');
12const { DEFAULT_APP_SETTINGS } = require('../../../../environment'); 12const { DEFAULT_APP_SETTINGS, API_VERSION } = require('../../../../environment');
13const { default: userAgent } = require('../../../../helpers/userAgent-helpers');
13 14
14const apiRequest = (url, route, method, auth) => new Promise((resolve, reject) => { 15const apiRequest = (url, route, method, auth) => new Promise((resolve, reject) => {
15 const base = `${url}/v1/`;
16 const user = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Ferdi/5.3.0-beta.1 Chrome/69.0.3497.128 Electron/4.2.4 Safari/537.36';
17
18 try { 16 try {
19 fetch(base + route, { 17 fetch(`${url}/${API_VERSION}/${route}`, {
20 method, 18 method,
21 headers: { 19 headers: {
22 Authorization: `Bearer ${auth}`, 20 Authorization: `Bearer ${auth}`,
23 'User-Agent': user, 21 'User-Agent': userAgent(),
24 }, 22 },
25 }) 23 })
26 .then(data => data.json()) 24 .then(data => data.json())
@@ -30,6 +28,8 @@ const apiRequest = (url, route, method, auth) => new Promise((resolve, reject) =
30 } 28 }
31}); 29});
32 30
31const LOGIN_SUCCESS_TOKEN = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJGZXJkaSBJbnRlcm5hbCBTZXJ2ZXIiLCJpYXQiOjE1NzEwNDAyMTUsImV4cCI6MjUzMzk1NDE3ODQ0LCJhdWQiOiJnZXRmZXJkaS5jb20iLCJzdWIiOiJmZXJkaUBsb2NhbGhvc3QiLCJ1c2VySWQiOiIxIn0.9_TWFGp6HROv8Yg82Rt6i1-95jqWym40a-HmgrdMC6M';
32
33class UserController { 33class UserController {
34 // Register a new user 34 // Register a new user
35 async signup({ 35 async signup({
@@ -52,7 +52,7 @@ class UserController {
52 52
53 return response.send({ 53 return response.send({
54 message: 'Successfully created account', 54 message: 'Successfully created account',
55 token: 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJGZXJkaSBJbnRlcm5hbCBTZXJ2ZXIiLCJpYXQiOjE1NzEwNDAyMTUsImV4cCI6MjUzMzk1NDE3ODQ0LCJhdWQiOiJnZXRmZXJkaS5jb20iLCJzdWIiOiJmZXJkaUBsb2NhbGhvc3QiLCJ1c2VySWQiOiIxIn0.9_TWFGp6HROv8Yg82Rt6i1-95jqWym40a-HmgrdMC6M', 55 token: LOGIN_SUCCESS_TOKEN,
56 }); 56 });
57 } 57 }
58 58
@@ -70,7 +70,7 @@ class UserController {
70 70
71 return response.send({ 71 return response.send({
72 message: 'Successfully logged in', 72 message: 'Successfully logged in',
73 token: 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJGZXJkaSBJbnRlcm5hbCBTZXJ2ZXIiLCJpYXQiOjE1NzEwNDAyMTUsImV4cCI6MjUzMzk1NDE3ODQ0LCJhdWQiOiJnZXRmZXJkaS5jb20iLCJzdWIiOiJmZXJkaUBsb2NhbGhvc3QiLCJ1c2VySWQiOiIxIn0.9_TWFGp6HROv8Yg82Rt6i1-95jqWym40a-HmgrdMC6M', 73 token: LOGIN_SUCCESS_TOKEN,
74 }); 74 });
75 } 75 }
76 76
@@ -85,7 +85,6 @@ class UserController {
85 return response.send({ 85 return response.send({
86 accountType: 'individual', 86 accountType: 'individual',
87 beta: false, 87 beta: false,
88 donor: {},
89 email: '', 88 email: '',
90 emailValidated: true, 89 emailValidated: true,
91 features: {}, 90 features: {},
@@ -121,7 +120,6 @@ class UserController {
121 data: { 120 data: {
122 accountType: 'individual', 121 accountType: 'individual',
123 beta: false, 122 beta: false,
124 donor: {},
125 email: '', 123 email: '',
126 emailValidated: true, 124 emailValidated: true,
127 features: {}, 125 features: {},
@@ -170,19 +168,16 @@ class UserController {
170 168
171 const hashedPassword = crypto.createHash('sha256').update(password).digest('base64'); 169 const hashedPassword = crypto.createHash('sha256').update(password).digest('base64');
172 170
173 const base = `${server}/v1/`;
174 const userAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Ferdi/5.3.0-beta.1 Chrome/69.0.3497.128 Electron/4.2.4 Safari/537.36';
175
176 // Try to get an authentication token 171 // Try to get an authentication token
177 let token; 172 let token;
178 try { 173 try {
179 const basicToken = btoa(`${email}:${hashedPassword}`); 174 const basicToken = btoa(`${email}:${hashedPassword}`);
180 175
181 const rawResponse = await fetch(`${base}auth/login`, { 176 const rawResponse = await fetch(`${server}/${API_VERSION}/auth/login`, {
182 method: 'POST', 177 method: 'POST',
183 headers: { 178 headers: {
184 Authorization: `Basic ${basicToken}`, 179 Authorization: `Basic ${basicToken}`,
185 'User-Agent': userAgent, 180 'User-Agent': userAgent(),
186 }, 181 },
187 }); 182 });
188 const content = await rawResponse.json(); 183 const content = await rawResponse.json();
diff --git a/src/internal-server/start/routes.js b/src/internal-server/start/routes.js
index 6668f3062..b32b094ee 100644
--- a/src/internal-server/start/routes.js
+++ b/src/internal-server/start/routes.js
@@ -8,6 +8,7 @@
8/** @type {typeof import('@adonisjs/framework/src/Route/Manager')} */ 8/** @type {typeof import('@adonisjs/framework/src/Route/Manager')} */
9const Route = use('Route'); 9const Route = use('Route');
10 10
11const { API_VERSION } = require('../../environment');
11// Run latest database migration 12// Run latest database migration
12const migrate = require('./migrate'); 13const migrate = require('./migrate');
13 14
@@ -67,11 +68,11 @@ Route.group(() => {
67 Route.get('services', 'StaticController.emptyArray'); 68 Route.get('services', 'StaticController.emptyArray');
68 Route.get('news', 'StaticController.emptyArray'); 69 Route.get('news', 'StaticController.emptyArray');
69 Route.get('announcements/:version', 'StaticController.announcement'); 70 Route.get('announcements/:version', 'StaticController.announcement');
70}).prefix('v1').middleware(OnlyAllowFerdi); 71}).prefix(API_VERSION).middleware(OnlyAllowFerdi);
71 72
72Route.group(() => { 73Route.group(() => {
73 Route.get('icon/:id', 'ServiceController.icon'); 74 Route.get('icon/:id', 'ServiceController.icon');
74}).prefix('v1'); 75}).prefix(API_VERSION);
75 76
76// Franz account import 77// Franz account import
77Route.post('import', 'UserController.import'); 78Route.post('import', 'UserController.import');
diff --git a/src/lib/Menu.js b/src/lib/Menu.js
index e4056e536..5a99299c5 100644
--- a/src/lib/Menu.js
+++ b/src/lib/Menu.js
@@ -1,12 +1,10 @@
1import { clipboard, shell } from 'electron'; 1import { clipboard } from 'electron';
2import { 2import { app, Menu, dialog, systemPreferences } from '@electron/remote';
3 app, Menu, dialog, systemPreferences,
4} from '@electron/remote';
5import { autorun, observable } from 'mobx'; 3import { autorun, observable } from 'mobx';
6import { defineMessages } from 'react-intl'; 4import { defineMessages } from 'react-intl';
7import { CUSTOM_WEBSITE_RECIPE_ID, GITHUB_FERDI_URL, LIVE_API_FERDI_WEBSITE } from '../config'; 5import { CUSTOM_WEBSITE_RECIPE_ID, GITHUB_FERDI_URL, LIVE_API_FERDI_WEBSITE } from '../config';
8import { 6import {
9 shortcutKey, altKey, shiftKey, settingsShortcutKey, isLinux, isMac, aboutAppDetails, lockFerdiShortcutKey, todosToggleShortcutKey, workspaceToggleShortcutKey, addNewServiceShortcutKey, muteFerdiShortcutKey, 7 cmdOrCtrlShortcutKey, altKey, shiftKey, settingsShortcutKey, isLinux, isMac, aboutAppDetails, lockFerdiShortcutKey, todosToggleShortcutKey, workspaceToggleShortcutKey, addNewServiceShortcutKey, muteFerdiShortcutKey,
10} from '../environment'; 8} from '../environment';
11import { announcementsStore } from '../features/announcements'; 9import { announcementsStore } from '../features/announcements';
12import { announcementActions } from '../features/announcements/actions'; 10import { announcementActions } from '../features/announcements/actions';
@@ -15,6 +13,7 @@ import { todoActions } from '../features/todos/actions';
15import { workspaceActions } from '../features/workspaces/actions'; 13import { workspaceActions } from '../features/workspaces/actions';
16import { workspaceStore } from '../features/workspaces/index'; 14import { workspaceStore } from '../features/workspaces/index';
17import apiBase, { termsBase } from '../api/apiBase'; 15import apiBase, { termsBase } from '../api/apiBase';
16import { openExternalUrl } from '../helpers/url-helpers';
18 17
19const menuItems = defineMessages({ 18const menuItems = defineMessages({
20 edit: { 19 edit: {
@@ -318,7 +317,7 @@ function getActiveWebview() {
318const _titleBarTemplateFactory = (intl, locked) => [ 317const _titleBarTemplateFactory = (intl, locked) => [
319 { 318 {
320 label: intl.formatMessage(menuItems.edit), 319 label: intl.formatMessage(menuItems.edit),
321 accelerator: `${altKey}+E`, 320 accelerator: `${altKey()}+E`,
322 submenu: [ 321 submenu: [
323 { 322 {
324 label: intl.formatMessage(menuItems.undo), 323 label: intl.formatMessage(menuItems.undo),
@@ -333,22 +332,22 @@ const _titleBarTemplateFactory = (intl, locked) => [
333 }, 332 },
334 { 333 {
335 label: intl.formatMessage(menuItems.cut), 334 label: intl.formatMessage(menuItems.cut),
336 accelerator: `${shortcutKey()}+X`, 335 accelerator: `${cmdOrCtrlShortcutKey()}+X`,
337 role: 'cut', 336 role: 'cut',
338 }, 337 },
339 { 338 {
340 label: intl.formatMessage(menuItems.copy), 339 label: intl.formatMessage(menuItems.copy),
341 accelerator: `${shortcutKey()}+C`, 340 accelerator: `${cmdOrCtrlShortcutKey()}+C`,
342 role: 'copy', 341 role: 'copy',
343 }, 342 },
344 { 343 {
345 label: intl.formatMessage(menuItems.paste), 344 label: intl.formatMessage(menuItems.paste),
346 accelerator: `${shortcutKey()}+V`, 345 accelerator: `${cmdOrCtrlShortcutKey()}+V`,
347 role: 'paste', 346 role: 'paste',
348 }, 347 },
349 { 348 {
350 label: intl.formatMessage(menuItems.pasteAndMatchStyle), 349 label: intl.formatMessage(menuItems.pasteAndMatchStyle),
351 accelerator: `${shortcutKey()}+${shiftKey}+V`, // Override the accelerator since this adds new key combo in macos 350 accelerator: `${cmdOrCtrlShortcutKey()}+${shiftKey()}+V`, // Override the accelerator since this adds new key combo in macos
352 role: 'pasteAndMatchStyle', 351 role: 'pasteAndMatchStyle',
353 click() { 352 click() {
354 getActiveWebview().pasteAndMatchStyle(); 353 getActiveWebview().pasteAndMatchStyle();
@@ -360,14 +359,14 @@ const _titleBarTemplateFactory = (intl, locked) => [
360 }, 359 },
361 { 360 {
362 label: intl.formatMessage(menuItems.selectAll), 361 label: intl.formatMessage(menuItems.selectAll),
363 accelerator: `${shortcutKey()}+A`, 362 accelerator: `${cmdOrCtrlShortcutKey()}+A`,
364 role: 'selectall', 363 role: 'selectall',
365 }, 364 },
366 ], 365 ],
367 }, 366 },
368 { 367 {
369 label: intl.formatMessage(menuItems.view), 368 label: intl.formatMessage(menuItems.view),
370 accelerator: `${altKey}+V`, 369 accelerator: `${altKey()}+V`,
371 visible: !locked, 370 visible: !locked,
372 submenu: [ 371 submenu: [
373 { 372 {
@@ -375,7 +374,7 @@ const _titleBarTemplateFactory = (intl, locked) => [
375 }, 374 },
376 { 375 {
377 label: intl.formatMessage(menuItems.openQuickSwitch), 376 label: intl.formatMessage(menuItems.openQuickSwitch),
378 accelerator: `${shortcutKey()}+S`, 377 accelerator: `${cmdOrCtrlShortcutKey()}+S`,
379 click() { 378 click() {
380 window.ferdi.features.quickSwitch.state.isModalVisible = true; 379 window.ferdi.features.quickSwitch.state.isModalVisible = true;
381 }, 380 },
@@ -385,7 +384,7 @@ const _titleBarTemplateFactory = (intl, locked) => [
385 }, 384 },
386 { 385 {
387 label: intl.formatMessage(menuItems.findInPage), 386 label: intl.formatMessage(menuItems.findInPage),
388 accelerator: `${shortcutKey()}+F`, 387 accelerator: `${cmdOrCtrlShortcutKey()}+F`,
389 click() { 388 click() {
390 // Check if there is a service active 389 // Check if there is a service active
391 if (!window.ferdi.stores.services.active) return; 390 if (!window.ferdi.stores.services.active) return;
@@ -406,14 +405,14 @@ const _titleBarTemplateFactory = (intl, locked) => [
406 }, 405 },
407 { 406 {
408 label: intl.formatMessage(menuItems.back), 407 label: intl.formatMessage(menuItems.back),
409 accelerator: `${shortcutKey()}+Left`, 408 accelerator: `${cmdOrCtrlShortcutKey()}+Left`,
410 click() { 409 click() {
411 getActiveWebview().goBack(); 410 getActiveWebview().goBack();
412 }, 411 },
413 }, 412 },
414 { 413 {
415 label: intl.formatMessage(menuItems.forward), 414 label: intl.formatMessage(menuItems.forward),
416 accelerator: `${shortcutKey()}+Right`, 415 accelerator: `${cmdOrCtrlShortcutKey()}+Right`,
417 click() { 416 click() {
418 getActiveWebview().goForward(); 417 getActiveWebview().goForward();
419 }, 418 },
@@ -423,7 +422,7 @@ const _titleBarTemplateFactory = (intl, locked) => [
423 }, 422 },
424 { 423 {
425 label: intl.formatMessage(menuItems.resetZoom), 424 label: intl.formatMessage(menuItems.resetZoom),
426 accelerator: `${shortcutKey()}+0`, 425 accelerator: `${cmdOrCtrlShortcutKey()}+0`,
427 role: 'resetZoom', 426 role: 'resetZoom',
428 click() { 427 click() {
429 getActiveWebview().setZoomLevel(0); 428 getActiveWebview().setZoomLevel(0);
@@ -431,7 +430,7 @@ const _titleBarTemplateFactory = (intl, locked) => [
431 }, 430 },
432 { 431 {
433 label: intl.formatMessage(menuItems.zoomIn), 432 label: intl.formatMessage(menuItems.zoomIn),
434 accelerator: `${shortcutKey()}+plus`, 433 accelerator: `${cmdOrCtrlShortcutKey()}+plus`,
435 role: 'zoomIn', 434 role: 'zoomIn',
436 click() { 435 click() {
437 const activeService = getActiveWebview(); 436 const activeService = getActiveWebview();
@@ -443,7 +442,7 @@ const _titleBarTemplateFactory = (intl, locked) => [
443 }, 442 },
444 { 443 {
445 label: intl.formatMessage(menuItems.zoomOut), 444 label: intl.formatMessage(menuItems.zoomOut),
446 accelerator: `${shortcutKey()}+-`, 445 accelerator: `${cmdOrCtrlShortcutKey()}+-`,
447 role: 'zoomOut', 446 role: 'zoomOut',
448 click() { 447 click() {
449 const activeService = getActiveWebview(); 448 const activeService = getActiveWebview();
@@ -463,7 +462,7 @@ const _titleBarTemplateFactory = (intl, locked) => [
463 { 462 {
464 label: intl.formatMessage(menuItems.toggleDarkMode), 463 label: intl.formatMessage(menuItems.toggleDarkMode),
465 type: 'checkbox', 464 type: 'checkbox',
466 accelerator: `${shortcutKey()}+${shiftKey}+D`, 465 accelerator: `${cmdOrCtrlShortcutKey()}+${shiftKey()}+D`,
467 checked: window.ferdi.stores.settings.app.darkMode, 466 checked: window.ferdi.stores.settings.app.darkMode,
468 click: () => { 467 click: () => {
469 window.ferdi.actions.settings.update({ 468 window.ferdi.actions.settings.update({
@@ -478,13 +477,13 @@ const _titleBarTemplateFactory = (intl, locked) => [
478 }, 477 },
479 { 478 {
480 label: intl.formatMessage(menuItems.services), 479 label: intl.formatMessage(menuItems.services),
481 accelerator: `${altKey}+S`, 480 accelerator: `${altKey()}+S`,
482 visible: !locked, 481 visible: !locked,
483 submenu: [], 482 submenu: [],
484 }, 483 },
485 { 484 {
486 label: intl.formatMessage(menuItems.workspaces), 485 label: intl.formatMessage(menuItems.workspaces),
487 accelerator: `${altKey}+W`, 486 accelerator: `${altKey()}+W`,
488 submenu: [], 487 submenu: [],
489 visible: !locked && workspaceStore.isFeatureEnabled, 488 visible: !locked && workspaceStore.isFeatureEnabled,
490 }, 489 },
@@ -509,20 +508,20 @@ const _titleBarTemplateFactory = (intl, locked) => [
509 }, 508 },
510 { 509 {
511 label: intl.formatMessage(menuItems.help), 510 label: intl.formatMessage(menuItems.help),
512 accelerator: `${altKey}+H`, 511 accelerator: `${altKey()}+H`,
513 role: 'help', 512 role: 'help',
514 submenu: [ 513 submenu: [
515 { 514 {
516 label: intl.formatMessage(menuItems.learnMore), 515 label: intl.formatMessage(menuItems.learnMore),
517 click() { shell.openExternal(LIVE_API_FERDI_WEBSITE); }, 516 click() { openExternalUrl(LIVE_API_FERDI_WEBSITE, true); },
518 }, 517 },
519 { 518 {
520 label: intl.formatMessage(menuItems.changelog), 519 label: intl.formatMessage(menuItems.changelog),
521 click() { shell.openExternal(`${GITHUB_FERDI_URL}/ferdi/blob/master/CHANGELOG.md`); }, 520 click() { openExternalUrl(`${GITHUB_FERDI_URL}/ferdi/blob/develop/CHANGELOG.md`, true); },
522 }, 521 },
523 { 522 {
524 label: intl.formatMessage(menuItems.importExportData), 523 label: intl.formatMessage(menuItems.importExportData),
525 click() { shell.openExternal(apiBase(false)); }, 524 click() { openExternalUrl(apiBase(false), true); },
526 enabled: !locked, 525 enabled: !locked,
527 }, 526 },
528 { 527 {
@@ -540,18 +539,18 @@ const _titleBarTemplateFactory = (intl, locked) => [
540 }, 539 },
541 { 540 {
542 label: intl.formatMessage(menuItems.support), 541 label: intl.formatMessage(menuItems.support),
543 click() { shell.openExternal(`${LIVE_API_FERDI_WEBSITE}/contact`); }, 542 click() { openExternalUrl(`${LIVE_API_FERDI_WEBSITE}/contact`, true); },
544 }, 543 },
545 { 544 {
546 type: 'separator', 545 type: 'separator',
547 }, 546 },
548 { 547 {
549 label: intl.formatMessage(menuItems.tos), 548 label: intl.formatMessage(menuItems.tos),
550 click() { shell.openExternal(`${termsBase()}/terms`); }, 549 click() { openExternalUrl(`${termsBase()}/terms`, true); },
551 }, 550 },
552 { 551 {
553 label: intl.formatMessage(menuItems.privacy), 552 label: intl.formatMessage(menuItems.privacy),
554 click() { shell.openExternal(`${termsBase()}/privacy`); }, 553 click() { openExternalUrl(`${termsBase()}/privacy`, true); },
555 }, 554 },
556 ], 555 ],
557 }, 556 },
@@ -612,13 +611,13 @@ export default class FranzMenu {
612 type: 'separator', 611 type: 'separator',
613 }, { 612 }, {
614 label: intl.formatMessage(menuItems.toggleDevTools), 613 label: intl.formatMessage(menuItems.toggleDevTools),
615 accelerator: `${shortcutKey()}+${altKey}+I`, 614 accelerator: `${cmdOrCtrlShortcutKey()}+${altKey()}+I`,
616 click: (menuItem, browserWindow) => { 615 click: (menuItem, browserWindow) => {
617 browserWindow.webContents.toggleDevTools(); 616 browserWindow.webContents.toggleDevTools();
618 }, 617 },
619 }, { 618 }, {
620 label: intl.formatMessage(menuItems.toggleServiceDevTools), 619 label: intl.formatMessage(menuItems.toggleServiceDevTools),
621 accelerator: `${shortcutKey()}+${shiftKey}+${altKey}+I`, 620 accelerator: `${cmdOrCtrlShortcutKey()}+${shiftKey()}+${altKey()}+I`,
622 click: () => { 621 click: () => {
623 this.actions.service.openDevToolsForActiveService(); 622 this.actions.service.openDevToolsForActiveService();
624 }, 623 },
@@ -628,7 +627,7 @@ export default class FranzMenu {
628 if (this.stores.features.features.isTodosEnabled) { 627 if (this.stores.features.features.isTodosEnabled) {
629 tpl[1].submenu.push({ 628 tpl[1].submenu.push({
630 label: intl.formatMessage(menuItems.toggleTodosDevTools), 629 label: intl.formatMessage(menuItems.toggleTodosDevTools),
631 accelerator: `${shortcutKey()}+${shiftKey}+${altKey}+O`, 630 accelerator: `${cmdOrCtrlShortcutKey()}+${shiftKey()}+${altKey()}+O`,
632 click: () => { 631 click: () => {
633 const webview = document.querySelector('#todos-panel webview'); 632 const webview = document.querySelector('#todos-panel webview');
634 if (webview) this.actions.todos.openDevTools(); 633 if (webview) this.actions.todos.openDevTools();
@@ -639,7 +638,7 @@ export default class FranzMenu {
639 tpl[1].submenu.unshift({ 638 tpl[1].submenu.unshift({
640 label: intl.formatMessage(menuItems.reloadService), 639 label: intl.formatMessage(menuItems.reloadService),
641 id: 'reloadService', // TODO: needed? 640 id: 'reloadService', // TODO: needed?
642 accelerator: `${shortcutKey()}+R`, 641 accelerator: `${cmdOrCtrlShortcutKey()}+R`,
643 click: () => { 642 click: () => {
644 if (this.stores.user.isLoggedIn 643 if (this.stores.user.isLoggedIn
645 && this.stores.services.enabled.length > 0) { 644 && this.stores.services.enabled.length > 0) {
@@ -654,13 +653,13 @@ export default class FranzMenu {
654 }, 653 },
655 }, { 654 }, {
656 label: intl.formatMessage(menuItems.reloadFerdi), 655 label: intl.formatMessage(menuItems.reloadFerdi),
657 accelerator: `${shortcutKey()}+${shiftKey}+R`, 656 accelerator: `${cmdOrCtrlShortcutKey()}+${shiftKey()}+R`,
658 click: () => { 657 click: () => {
659 window.location.reload(); 658 window.location.reload();
660 }, 659 },
661 }, { 660 }, {
662 label: intl.formatMessage(menuItems.reloadTodos), 661 label: intl.formatMessage(menuItems.reloadTodos),
663 accelerator: `${shortcutKey()}+${shiftKey}+${altKey}+R`, 662 accelerator: `${cmdOrCtrlShortcutKey()}+${shiftKey()}+${altKey()}+R`,
664 click: () => { 663 click: () => {
665 this.actions.todos.reload(); 664 this.actions.todos.reload();
666 }, 665 },
@@ -716,7 +715,7 @@ export default class FranzMenu {
716 715
717 tpl.unshift({ 716 tpl.unshift({
718 label: isMac ? app.name : intl.formatMessage(menuItems.file), 717 label: isMac ? app.name : intl.formatMessage(menuItems.file),
719 accelerator: `${altKey}+F`, 718 accelerator: `${altKey()}+F`,
720 submenu: [ 719 submenu: [
721 { 720 {
722 label: intl.formatMessage(menuItems.about), 721 label: intl.formatMessage(menuItems.about),
@@ -832,7 +831,7 @@ export default class FranzMenu {
832 { 831 {
833 label: intl.formatMessage(menuItems.quit), 832 label: intl.formatMessage(menuItems.quit),
834 role: 'quit', 833 role: 'quit',
835 accelerator: `${shortcutKey()}+Q`, 834 accelerator: `${cmdOrCtrlShortcutKey()}+Q`,
836 click() { 835 click() {
837 app.quit(); 836 app.quit();
838 }, 837 },
@@ -883,22 +882,22 @@ export default class FranzMenu {
883 type: 'separator', 882 type: 'separator',
884 }, { 883 }, {
885 label: intl.formatMessage(menuItems.activateNextService), 884 label: intl.formatMessage(menuItems.activateNextService),
886 accelerator: `${shortcutKey()}+tab`, 885 accelerator: `${cmdOrCtrlShortcutKey()}+tab`,
887 click: () => this.actions.service.setActiveNext(), 886 click: () => this.actions.service.setActiveNext(),
888 visible: !cmdAltShortcutsVisibile, 887 visible: !cmdAltShortcutsVisibile,
889 }, { 888 }, {
890 label: intl.formatMessage(menuItems.activateNextService), 889 label: intl.formatMessage(menuItems.activateNextService),
891 accelerator: `${shortcutKey()}+${altKey}+right`, 890 accelerator: `${cmdOrCtrlShortcutKey()}+${altKey()}+right`,
892 click: () => this.actions.service.setActiveNext(), 891 click: () => this.actions.service.setActiveNext(),
893 visible: cmdAltShortcutsVisibile, 892 visible: cmdAltShortcutsVisibile,
894 }, { 893 }, {
895 label: intl.formatMessage(menuItems.activatePreviousService), 894 label: intl.formatMessage(menuItems.activatePreviousService),
896 accelerator: `${shortcutKey()}+${shiftKey}+tab`, 895 accelerator: `${cmdOrCtrlShortcutKey()}+${shiftKey()}+tab`,
897 click: () => this.actions.service.setActivePrev(), 896 click: () => this.actions.service.setActivePrev(),
898 visible: !cmdAltShortcutsVisibile, 897 visible: !cmdAltShortcutsVisibile,
899 }, { 898 }, {
900 label: intl.formatMessage(menuItems.activatePreviousService), 899 label: intl.formatMessage(menuItems.activatePreviousService),
901 accelerator: `${shortcutKey()}+${altKey}+left`, 900 accelerator: `${cmdOrCtrlShortcutKey()}+${altKey()}+left`,
902 click: () => this.actions.service.setActivePrev(), 901 click: () => this.actions.service.setActivePrev(),
903 visible: cmdAltShortcutsVisibile, 902 visible: cmdAltShortcutsVisibile,
904 }, { 903 }, {
@@ -913,7 +912,7 @@ export default class FranzMenu {
913 912
914 services.allDisplayed.forEach((service, i) => (menu.push({ 913 services.allDisplayed.forEach((service, i) => (menu.push({
915 label: this._getServiceName(service), 914 label: this._getServiceName(service),
916 accelerator: i < 9 ? `${shortcutKey()}+${i + 1}` : null, 915 accelerator: i < 9 ? `${cmdOrCtrlShortcutKey()}+${i + 1}` : null,
917 type: 'radio', 916 type: 'radio',
918 checked: service.isActive, 917 checked: service.isActive,
919 click: () => { 918 click: () => {
@@ -930,7 +929,7 @@ export default class FranzMenu {
930 type: 'separator', 929 type: 'separator',
931 }, { 930 }, {
932 label: intl.formatMessage(menuItems.serviceGoHome), 931 label: intl.formatMessage(menuItems.serviceGoHome),
933 accelerator: `${shortcutKey()}+${shiftKey}+H`, 932 accelerator: `${cmdOrCtrlShortcutKey()}+${shiftKey()}+H`,
934 click: () => this.actions.service.reloadActive(), 933 click: () => this.actions.service.reloadActive(),
935 }); 934 });
936 } 935 }
@@ -946,7 +945,7 @@ export default class FranzMenu {
946 // Add new workspace item: 945 // Add new workspace item:
947 menu.push({ 946 menu.push({
948 label: intl.formatMessage(menuItems.addNewWorkspace), 947 label: intl.formatMessage(menuItems.addNewWorkspace),
949 accelerator: `${shortcutKey()}+${shiftKey}+N`, 948 accelerator: `${cmdOrCtrlShortcutKey()}+${shiftKey()}+N`,
950 click: () => { 949 click: () => {
951 workspaceActions.openWorkspaceSettings(); 950 workspaceActions.openWorkspaceSettings();
952 }, 951 },
@@ -975,7 +974,7 @@ export default class FranzMenu {
975 // Default workspace 974 // Default workspace
976 menu.push({ 975 menu.push({
977 label: intl.formatMessage(menuItems.defaultWorkspace), 976 label: intl.formatMessage(menuItems.defaultWorkspace),
978 accelerator: `${shortcutKey()}+${altKey}+0`, 977 accelerator: `${cmdOrCtrlShortcutKey()}+${altKey()}+0`,
979 type: 'radio', 978 type: 'radio',
980 checked: !activeWorkspace, 979 checked: !activeWorkspace,
981 click: () => { 980 click: () => {
@@ -986,7 +985,7 @@ export default class FranzMenu {
986 // Workspace items 985 // Workspace items
987 workspaces.forEach((workspace, i) => menu.push({ 986 workspaces.forEach((workspace, i) => menu.push({
988 label: workspace.name, 987 label: workspace.name,
989 accelerator: i < 9 ? `${shortcutKey()}+${altKey}+${i + 1}` : null, 988 accelerator: i < 9 ? `${cmdOrCtrlShortcutKey()}+${altKey()}+${i + 1}` : null,
990 type: 'radio', 989 type: 'radio',
991 checked: activeWorkspace ? workspace.id === activeWorkspace.id : false, 990 checked: activeWorkspace ? workspace.id === activeWorkspace.id : false,
992 click: () => { 991 click: () => {
diff --git a/src/models/News.js b/src/models/News.ts
index acacb97dd..3db812937 100644
--- a/src/models/News.js
+++ b/src/models/News.ts
@@ -1,15 +1,22 @@
1// @flow 1// @flow
2 2
3interface INews {
4 id: string;
5 message: string;
6 type: string;
7 sticky: boolean | undefined;
8}
9
3export default class News { 10export default class News {
4 id = ''; 11 id: string = '';
5 12
6 message = ''; 13 message: string = '';
7 14
8 type = 'primary'; 15 type: string = 'primary';
9 16
10 sticky = false; 17 sticky: boolean = false;
11 18
12 constructor(data) { 19 constructor(data: INews) {
13 if (!data.id) { 20 if (!data.id) {
14 throw Error('News requires Id'); 21 throw Error('News requires Id');
15 } 22 }
diff --git a/src/models/Order.js b/src/models/Order.js
deleted file mode 100644
index f7624c627..000000000
--- a/src/models/Order.js
+++ /dev/null
@@ -1,22 +0,0 @@
1export default class Order {
2 id = '';
3
4 subscriptionId = '';
5
6 name = '';
7
8 invoiceUrl = '';
9
10 price = '';
11
12 date = '';
13
14 constructor(data) {
15 this.id = data.id;
16 this.subscriptionId = data.subscriptionId;
17 this.name = data.name || this.name;
18 this.invoiceUrl = data.invoiceUrl || this.invoiceUrl;
19 this.price = data.price || this.price;
20 this.date = data.date || this.date;
21 }
22}
diff --git a/src/models/Recipe.js b/src/models/Recipe.ts
index 0d97d4472..0a93fbc5a 100644
--- a/src/models/Recipe.js
+++ b/src/models/Recipe.ts
@@ -2,47 +2,71 @@ import semver from 'semver';
2import { pathExistsSync } from 'fs-extra'; 2import { pathExistsSync } from 'fs-extra';
3import { join } from 'path'; 3import { join } from 'path';
4 4
5interface IRecipe {
6 id: string;
7 name: string;
8 version: string;
9 aliases?: string[];
10 path: string;
11 config: {
12 serviceURL?: string;
13 hasDirectMessages?: boolean;
14 hasIndirectMessages?: boolean;
15 hasNotificationSound?: boolean;
16 hasTeamId?: boolean;
17 hasCustomUrl?: boolean;
18 hasHostedOption?: boolean;
19 urlInputPrefix?: string;
20 urlInputSuffix?: string;
21 disablewebsecurity?: boolean;
22 autoHibernate?: boolean;
23 partition?: string;
24 message?: string;
25 };
26}
27
5export default class Recipe { 28export default class Recipe {
6 // Note: Do NOT change these default values. If they change, then the corresponding changes in the recipes needs to be done 29 // Note: Do NOT change these default values. If they change, then the corresponding changes in the recipes needs to be done
7 id = ''; 30 id: string = '';
8 31
9 name = ''; 32 name: string = '';
10 33
11 description = ''; 34 description = '';
12 35
13 version = ''; 36 version: string = '';
14 37
15 aliases = []; 38 aliases: string[] = [];
16 39
17 path = ''; 40 path: string = '';
18 41
19 serviceURL = ''; 42 serviceURL: string = '';
20 43
21 hasDirectMessages = true; 44 hasDirectMessages: boolean = true;
22 45
23 hasIndirectMessages = false; 46 hasIndirectMessages: boolean = false;
24 47
25 hasNotificationSound = false; 48 hasNotificationSound: boolean = false;
26 49
27 hasTeamId = false; 50 hasTeamId: boolean = false;
28 51
29 hasCustomUrl = false; 52 hasCustomUrl: boolean = false;
30 53
31 hasHostedOption = false; 54 hasHostedOption: boolean = false;
32 55
33 urlInputPrefix = ''; 56 urlInputPrefix: string = '';
34 57
35 urlInputSuffix = ''; 58 urlInputSuffix: string = '';
36 59
37 message = ''; 60 message: string = '';
38 61
39 disablewebsecurity = false; 62 disablewebsecurity: boolean = false;
40 63
41 autoHibernate = false; 64 autoHibernate: boolean = false;
42 65
43 partition = ''; 66 partition: string = '';
44 67
45 constructor(data) { 68 // TODO: Need to reconcile which of these are optional/mandatory
69 constructor(data: IRecipe) {
46 if (!data) { 70 if (!data) {
47 throw Error('Recipe config not valid'); 71 throw Error('Recipe config not valid');
48 } 72 }
@@ -52,12 +76,8 @@ export default class Recipe {
52 throw Error(`Recipe '${data.name}' requires Id`); 76 throw Error(`Recipe '${data.name}' requires Id`);
53 } 77 }
54 78
55 try { 79 if (!semver.valid(data.version)) {
56 if (!semver.valid(data.version)) { 80 throw Error(`Version ${data.version} of recipe '${data.name}' is not a valid semver version`);
57 throw Error(`Version ${data.version} of recipe '${data.name}' is not a valid semver version`);
58 }
59 } catch (e) {
60 console.warn(e.message);
61 } 81 }
62 82
63 this.id = data.id || this.id; 83 this.id = data.id || this.id;
@@ -88,11 +108,11 @@ export default class Recipe {
88 } 108 }
89 109
90 // TODO: Need to remove this if its not used anywhere 110 // TODO: Need to remove this if its not used anywhere
91 get author() { 111 get author(): string[] {
92 return []; 112 return [];
93 } 113 }
94 114
95 get hasDarkMode() { 115 get hasDarkMode(): boolean {
96 return pathExistsSync(join(this.path, 'darkmode.css')); 116 return pathExistsSync(join(this.path, 'darkmode.css'));
97 } 117 }
98} 118}
diff --git a/src/models/RecipePreview.js b/src/models/RecipePreview.ts
index 6a9ce3080..351ecf765 100644
--- a/src/models/RecipePreview.js
+++ b/src/models/RecipePreview.ts
@@ -1,17 +1,17 @@
1// @flow 1// @flow
2 2
3export default class RecipePreview { 3export default class RecipePreview {
4 id = ''; 4 id: string = '';
5 5
6 name = ''; 6 name: string = '';
7 7
8 icon = ''; 8 icon: string = '';
9 9
10 featured = false; 10 featured: boolean = false;
11 11
12 aliases = []; 12 aliases: string[] = [];
13 13
14 constructor(data) { 14 constructor(data: { id: any; }) {
15 if (!data.id) { 15 if (!data.id) {
16 throw Error('RecipePreview requires Id'); 16 throw Error('RecipePreview requires Id');
17 } 17 }
diff --git a/src/models/Service.js b/src/models/Service.js
index fe56e5a76..4b78b9a40 100644
--- a/src/models/Service.js
+++ b/src/models/Service.js
@@ -7,13 +7,14 @@ import { join } from 'path';
7import { todosStore } from '../features/todos'; 7import { todosStore } from '../features/todos';
8import { isValidExternalURL } from '../helpers/url-helpers'; 8import { isValidExternalURL } from '../helpers/url-helpers';
9import UserAgent from './UserAgent'; 9import UserAgent from './UserAgent';
10import { DEFAULT_SERVICE_ORDER } from '../config';
10 11
11const debug = require('debug')('Ferdi:Service'); 12const debug = require('debug')('Ferdi:Service');
12 13
13export default class Service { 14export default class Service {
14 id = ''; 15 id = '';
15 16
16 recipe = ''; 17 recipe = null;
17 18
18 _webview = null; 19 _webview = null;
19 20
@@ -31,7 +32,7 @@ export default class Service {
31 32
32 @observable unreadIndirectMessageCount = 0; 33 @observable unreadIndirectMessageCount = 0;
33 34
34 @observable order = 99; 35 @observable order = DEFAULT_SERVICE_ORDER;
35 36
36 @observable isEnabled = true; 37 @observable isEnabled = true;
37 38
@@ -93,13 +94,11 @@ export default class Service {
93 94
94 constructor(data, recipe) { 95 constructor(data, recipe) {
95 if (!data) { 96 if (!data) {
96 console.error('Service config not valid'); 97 throw Error('Service config not valid');
97 return null;
98 } 98 }
99 99
100 if (!recipe) { 100 if (!recipe) {
101 console.error('Service recipe not valid'); 101 throw Error('Service recipe not valid');
102 return null;
103 } 102 }
104 103
105 this.userAgentModel = new UserAgent(recipe.overrideUserAgent); 104 this.userAgentModel = new UserAgent(recipe.overrideUserAgent);
diff --git a/src/models/User.js b/src/models/User.ts
index d864dde0c..771d11955 100644
--- a/src/models/User.js
+++ b/src/models/User.ts
@@ -1,42 +1,47 @@
1import { observable } from 'mobx'; 1import { observable } from 'mobx';
2 2
3interface IUser {
4 id: string | null;
5 email: string | null;
6 firstname: string | null;
7 lastname: string | null;
8 organization: string | null;
9 accountType: string | null;
10 beta: boolean;
11 locale: boolean;
12 isSubscriptionOwner: boolean;
13 team: object;
14}
15
16// TODO: Need to cleanup these fields since we have removed the tiers of the paid plans from Ferdi
3export default class User { 17export default class User {
4 id = null; 18 id: string | null = null;
5 19
6 @observable email = null; 20 @observable email: string | null = null;
7 21
8 @observable firstname = null; 22 @observable firstname: string | null = null;
9 23
10 @observable lastname = null; 24 @observable lastname: string | null = null;
11 25
12 @observable organization = null; 26 @observable organization: string | null = null;
13 27
14 @observable accountType = null; 28 @observable accountType: string | null = null;
15 29
16 @observable emailIsConfirmed = true; 30 @observable emailIsConfirmed = true;
17 31
32 // Note: Kept around to be able to handle the response from Franz server
18 // better assume it's confirmed to avoid noise 33 // better assume it's confirmed to avoid noise
19 @observable subscription = {}; 34 @observable subscription = {};
20 35
21 @observable isSubscriptionOwner = false; 36 @observable isSubscriptionOwner = false;
22 37
23 @observable hasSubscription = true;
24
25 @observable hadSubscription = false;
26
27 @observable beta = false; 38 @observable beta = false;
28 39
29 @observable donor = {};
30
31 @observable isDonor = false;
32
33 @observable isMiner = false;
34
35 @observable locale = false; 40 @observable locale = false;
36 41
37 @observable team = {}; 42 @observable team = {};
38 43
39 constructor(data) { 44 constructor(data: IUser) {
40 if (!data.id) { 45 if (!data.id) {
41 throw Error('User requires Id'); 46 throw Error('User requires Id');
42 } 47 }
@@ -48,14 +53,9 @@ export default class User {
48 this.organization = data.organization || this.organization; 53 this.organization = data.organization || this.organization;
49 this.accountType = data.accountType || this.accountType; 54 this.accountType = data.accountType || this.accountType;
50 this.beta = data.beta || this.beta; 55 this.beta = data.beta || this.beta;
51 this.donor = data.donor || this.donor;
52 this.isDonor = data.isDonor || this.isDonor;
53 this.isMiner = data.isMiner || this.isMiner;
54 this.locale = data.locale || this.locale; 56 this.locale = data.locale || this.locale;
55 57
56 this.isSubscriptionOwner = data.isSubscriptionOwner || this.isSubscriptionOwner; 58 this.isSubscriptionOwner = data.isSubscriptionOwner || this.isSubscriptionOwner;
57 this.hasSubscription = data.hasSubscription || this.hasSubscription;
58 this.hadSubscription = data.hadSubscription || this.hadSubscription;
59 59
60 this.team = data.team || this.team; 60 this.team = data.team || this.team;
61 } 61 }
diff --git a/src/prop-types.js b/src/prop-types.ts
index 459b9a7b9..459b9a7b9 100644
--- a/src/prop-types.js
+++ b/src/prop-types.ts
diff --git a/src/sentry.js b/src/sentry.ts
index 4f6d7205d..4f6d7205d 100644
--- a/src/sentry.js
+++ b/src/sentry.ts
diff --git a/src/stores/AppStore.js b/src/stores/AppStore.js
index 1d706f1ef..9c8cce679 100644
--- a/src/stores/AppStore.js
+++ b/src/stores/AppStore.js
@@ -1,4 +1,4 @@
1import { ipcRenderer, shell } from 'electron'; 1import { ipcRenderer } from 'electron';
2import { 2import {
3 app, 3 app,
4 screen, 4 screen,
@@ -24,16 +24,16 @@ import {
24 electronVersion, 24 electronVersion,
25 osRelease, 25 osRelease,
26 userDataPath, 26 userDataPath,
27 ferdiLocale,
27} from '../environment'; 28} from '../environment';
28import locales from '../i18n/translations'; 29import locales from '../i18n/translations';
29import { onVisibilityChange } from '../helpers/visibility-helper';
30import { getLocale } from '../helpers/i18n-helpers'; 30import { getLocale } from '../helpers/i18n-helpers';
31 31
32import { 32import {
33 getServiceIdsFromPartitions, 33 getServiceIdsFromPartitions,
34 removeServicePartitionDirectory, 34 removeServicePartitionDirectory,
35} from '../helpers/service-helpers'; 35} from '../helpers/service-helpers';
36import { isValidExternalURL } from '../helpers/url-helpers'; 36import { openExternalUrl } from '../helpers/url-helpers';
37import { sleep } from '../helpers/async-helpers'; 37import { sleep } from '../helpers/async-helpers';
38 38
39const debug = require('debug')('Ferdi:AppStore'); 39const debug = require('debug')('Ferdi:AppStore');
@@ -220,10 +220,9 @@ export default class AppStore extends Store {
220 220
221 this.isSystemDarkModeEnabled = nativeTheme.shouldUseDarkColors; 221 this.isSystemDarkModeEnabled = nativeTheme.shouldUseDarkColors;
222 222
223 onVisibilityChange((isVisible) => { 223 ipcRenderer.on('isWindowFocused', (event, isFocused) => {
224 this.isFocused = isVisible; 224 debug('Setting is focused to', isFocused);
225 225 this.isFocused = isFocused;
226 debug('Window is visible/focused', isVisible);
227 }); 226 });
228 227
229 powerMonitor.on('suspend', () => { 228 powerMonitor.on('suspend', () => {
@@ -389,13 +388,9 @@ export default class AppStore extends Store {
389 } 388 }
390 } 389 }
391 390
391 // Ideally(?) this should be merged with the 'shell-helpers' functionality
392 @action _openExternalUrl({ url }) { 392 @action _openExternalUrl({ url }) {
393 const parsedUrl = new URL(url); 393 openExternalUrl(new URL(url));
394 debug('open external url', parsedUrl);
395
396 if (isValidExternalURL(url)) {
397 shell.openExternal(url);
398 }
399 } 394 }
400 395
401 @action _checkForUpdates() { 396 @action _checkForUpdates() {
@@ -509,7 +504,7 @@ export default class AppStore extends Store {
509 504
510 _getDefaultLocale() { 505 _getDefaultLocale() {
511 return getLocale({ 506 return getLocale({
512 locale: app.getLocale(), 507 locale: ferdiLocale,
513 locales, 508 locales,
514 defaultLocale, 509 defaultLocale,
515 fallbackLocale: DEFAULT_APP_SETTINGS.fallbackLocale, 510 fallbackLocale: DEFAULT_APP_SETTINGS.fallbackLocale,
diff --git a/src/stores/FeaturesStore.js b/src/stores/FeaturesStore.js
index ac623c258..0dff2fda2 100644
--- a/src/stores/FeaturesStore.js
+++ b/src/stores/FeaturesStore.js
@@ -13,7 +13,6 @@ import workspaces from '../features/workspaces';
13import quickSwitch from '../features/quickSwitch'; 13import quickSwitch from '../features/quickSwitch';
14import nightlyBuilds from '../features/nightlyBuilds'; 14import nightlyBuilds from '../features/nightlyBuilds';
15import publishDebugInfo from '../features/publishDebugInfo'; 15import publishDebugInfo from '../features/publishDebugInfo';
16import shareFranz from '../features/shareFranz';
17import announcements from '../features/announcements'; 16import announcements from '../features/announcements';
18import settingsWS from '../features/settingsWS'; 17import settingsWS from '../features/settingsWS';
19import communityRecipes from '../features/communityRecipes'; 18import communityRecipes from '../features/communityRecipes';
@@ -73,7 +72,6 @@ export default class FeaturesStore extends Store {
73 quickSwitch(this.stores, this.actions); 72 quickSwitch(this.stores, this.actions);
74 nightlyBuilds(this.stores, this.actions); 73 nightlyBuilds(this.stores, this.actions);
75 publishDebugInfo(this.stores, this.actions); 74 publishDebugInfo(this.stores, this.actions);
76 shareFranz(this.stores, this.actions);
77 announcements(this.stores, this.actions); 75 announcements(this.stores, this.actions);
78 settingsWS(this.stores, this.actions); 76 settingsWS(this.stores, this.actions);
79 communityRecipes(this.stores, this.actions); 77 communityRecipes(this.stores, this.actions);
diff --git a/src/stores/ServicesStore.js b/src/stores/ServicesStore.js
index 4ccb995ae..8598c6234 100644
--- a/src/stores/ServicesStore.js
+++ b/src/stores/ServicesStore.js
@@ -2,7 +2,6 @@ import { shell } from 'electron';
2import { action, reaction, computed, observable } from 'mobx'; 2import { action, reaction, computed, observable } from 'mobx';
3import { debounce, remove } from 'lodash'; 3import { debounce, remove } from 'lodash';
4import ms from 'ms'; 4import ms from 'ms';
5import { app } from '@electron/remote';
6import { ensureFileSync, pathExistsSync, writeFileSync } from 'fs-extra'; 5import { ensureFileSync, pathExistsSync, writeFileSync } from 'fs-extra';
7import { join } from 'path'; 6import { join } from 'path';
8 7
@@ -11,13 +10,11 @@ import Request from './lib/Request';
11import CachedRequest from './lib/CachedRequest'; 10import CachedRequest from './lib/CachedRequest';
12import { matchRoute } from '../helpers/routing-helpers'; 11import { matchRoute } from '../helpers/routing-helpers';
13import { isInTimeframe } from '../helpers/schedule-helpers'; 12import { isInTimeframe } from '../helpers/schedule-helpers';
14import { 13import { getRecipeDirectory, getDevRecipeDirectory } from '../helpers/recipe-helpers';
15 getRecipeDirectory,
16 getDevRecipeDirectory,
17} from '../helpers/recipe-helpers';
18import { workspaceStore } from '../features/workspaces'; 14import { workspaceStore } from '../features/workspaces';
19import { KEEP_WS_LOADED_USID } from '../config'; 15import { KEEP_WS_LOADED_USID } from '../config';
20import { SPELLCHECKER_LOCALES } from '../i18n/languages'; 16import { SPELLCHECKER_LOCALES } from '../i18n/languages';
17import { ferdiVersion } from '../environment';
21 18
22const debug = require('debug')('Ferdi:ServiceStore'); 19const debug = require('debug')('Ferdi:ServiceStore');
23 20
@@ -128,38 +125,66 @@ export default class ServicesStore extends Store {
128 setup() { 125 setup() {
129 // Single key reactions for the sake of your CPU 126 // Single key reactions for the sake of your CPU
130 reaction( 127 reaction(
131 () => this.stores.settings.app.enableSpellchecking, 128 () => (
132 () => this._shareSettingsWithServiceProcess(), 129 this.stores.settings.app.enableSpellchecking
130 ),
131 () => {
132 this._shareSettingsWithServiceProcess();
133 },
133 ); 134 );
134 135
135 reaction( 136 reaction(
136 () => this.stores.settings.app.spellcheckerLanguage, 137 () => (
137 () => this._shareSettingsWithServiceProcess(), 138 this.stores.settings.app.spellcheckerLanguage
139 ),
140 () => {
141 this._shareSettingsWithServiceProcess();
142 },
138 ); 143 );
139 144
140 reaction( 145 reaction(
141 () => this.stores.settings.app.darkMode, 146 () => (
142 () => this._shareSettingsWithServiceProcess(), 147 this.stores.settings.app.darkMode
148 ),
149 () => {
150 this._shareSettingsWithServiceProcess();
151 },
143 ); 152 );
144 153
145 reaction( 154 reaction(
146 () => this.stores.settings.app.adaptableDarkMode, 155 () => (
147 () => this._shareSettingsWithServiceProcess(), 156 this.stores.settings.app.adaptableDarkMode
157 ),
158 () => {
159 this._shareSettingsWithServiceProcess();
160 },
148 ); 161 );
149 162
150 reaction( 163 reaction(
151 () => this.stores.settings.app.universalDarkMode, 164 () => (
152 () => this._shareSettingsWithServiceProcess(), 165 this.stores.settings.app.universalDarkMode
166 ),
167 () => {
168 this._shareSettingsWithServiceProcess();
169 },
153 ); 170 );
154 171
155 reaction( 172 reaction(
156 () => this.stores.settings.app.searchEngine, 173 () => (
157 () => this._shareSettingsWithServiceProcess(), 174 this.stores.settings.app.searchEngine
175 ),
176 () => {
177 this._shareSettingsWithServiceProcess();
178 },
158 ); 179 );
159 180
160 reaction( 181 reaction(
161 () => this.stores.settings.app.clipboardNotifications, 182 () => (
162 () => this._shareSettingsWithServiceProcess(), 183 this.stores.settings.app.clipboardNotifications
184 ),
185 () => {
186 this._shareSettingsWithServiceProcess();
187 },
163 ); 188 );
164 } 189 }
165 190
@@ -190,12 +215,12 @@ export default class ServicesStore extends Store {
190 * Run various maintenance tasks on services 215 * Run various maintenance tasks on services
191 */ 216 */
192 _serviceMaintenance() { 217 _serviceMaintenance() {
193 this.all.forEach(service => { 218 this.enabled.forEach(service => {
194 // Defines which services should be hibernated or woken up 219 // Defines which services should be hibernated or woken up
195 if (!service.isActive) { 220 if (!service.isActive) {
196 if ( 221 if (
197 !service.lastHibernated && 222 !service.lastHibernated &&
198 Date.now() - service.lastUsed > 223 (Date.now() - service.lastUsed) >
199 ms(`${this.stores.settings.all.app.hibernationStrategy}s`) 224 ms(`${this.stores.settings.all.app.hibernationStrategy}s`)
200 ) { 225 ) {
201 // If service is stale, hibernate it. 226 // If service is stale, hibernate it.
@@ -204,21 +229,18 @@ export default class ServicesStore extends Store {
204 229
205 if ( 230 if (
206 service.lastHibernated && 231 service.lastHibernated &&
207 Number(this.stores.settings.all.app.wakeUpStrategy) > 0 232 Number(this.stores.settings.all.app.wakeUpStrategy) > 0 &&
233 (Date.now() - service.lastHibernated) >
234 ms(`${this.stores.settings.all.app.wakeUpStrategy}s`)
208 ) { 235 ) {
209 // If service is in hibernation and the wakeup time has elapsed, wake it. 236 // If service is in hibernation and the wakeup time has elapsed, wake it.
210 if ( 237 this._awake({ serviceId: service.id });
211 Date.now() - service.lastHibernated >
212 ms(`${this.stores.settings.all.app.wakeUpStrategy}s`)
213 ) {
214 this._awake({ serviceId: service.id });
215 }
216 } 238 }
217 } 239 }
218 240
219 if ( 241 if (
220 service.lastPoll && 242 service.lastPoll &&
221 service.lastPoll - service.lastPollAnswer > ms('1m') 243 (service.lastPoll - service.lastPollAnswer) > ms('1m')
222 ) { 244 ) {
223 // If service did not reply for more than 1m try to reload. 245 // If service did not reply for more than 1m try to reload.
224 if (!service.isActive) { 246 if (!service.isActive) {
@@ -378,27 +400,22 @@ export default class ServicesStore extends Store {
378 400
379 // set default values for serviceData 401 // set default values for serviceData
380 // eslint-disable-next-line prefer-object-spread 402 // eslint-disable-next-line prefer-object-spread
381 Object.assign( 403 // TODO: How is this different from the defaults of the recipe in 'src/models/Recipe' file?
382 { 404 serviceData = {
383 isEnabled: true, 405 isEnabled: true,
384 isHibernationEnabled: false, 406 isHibernationEnabled: false,
385 isNotificationEnabled: true, 407 isNotificationEnabled: true,
386 isBadgeEnabled: true, 408 isBadgeEnabled: true,
387 isMuted: false, 409 isMuted: false,
388 customIcon: false, 410 customIcon: false,
389 isDarkModeEnabled: false, 411 isDarkModeEnabled: false,
390 spellcheckerLanguage: 412 spellcheckerLanguage:
391 SPELLCHECKER_LOCALES[this.stores.settings.app.spellcheckerLanguage], 413 SPELLCHECKER_LOCALES[this.stores.settings.app.spellcheckerLanguage],
392 userAgentPref: '', 414 userAgentPref: '',
393 }, 415 ...serviceData,
394 serviceData, 416 };
395 );
396
397 let data = serviceData;
398 417
399 if (!skipCleanup) { 418 const data = skipCleanup ? serviceData : this._cleanUpTeamIdAndCustomUrl(recipeId, serviceData);
400 data = this._cleanUpTeamIdAndCustomUrl(recipeId, serviceData);
401 }
402 419
403 const response = await this.createServiceRequest.execute(recipeId, data) 420 const response = await this.createServiceRequest.execute(recipeId, data)
404 ._promise; 421 ._promise;
@@ -430,12 +447,13 @@ export default class ServicesStore extends Store {
430 serviceData.name = data.name; 447 serviceData.name = data.name;
431 } 448 }
432 449
433 if (data.team && !data.customURL) { 450 if (data.team) {
434 serviceData.team = data.team; 451 if (!data.customURL) {
435 } 452 serviceData.team = data.team;
436 453 } else {
437 if (data.team && data.customURL) { 454 // TODO: Is this correct?
438 serviceData.customUrl = data.team; 455 serviceData.customUrl = data.team;
456 }
439 } 457 }
440 458
441 this.actions.service.createService({ 459 this.actions.service.createService({
@@ -596,9 +614,8 @@ export default class ServicesStore extends Store {
596 this.allDisplayed.length, 614 this.allDisplayed.length,
597 ); 615 );
598 616
599 // TODO: simplify this; 617 this.all.forEach(s => {
600 this.all.forEach((s, index) => { 618 s.isActive = false;
601 this.all[index].isActive = false;
602 }); 619 });
603 this.allDisplayed[nextIndex].isActive = true; 620 this.allDisplayed[nextIndex].isActive = true;
604 } 621 }
@@ -610,9 +627,8 @@ export default class ServicesStore extends Store {
610 this.allDisplayed.length, 627 this.allDisplayed.length,
611 ); 628 );
612 629
613 // TODO: simplify this; 630 this.all.forEach(s => {
614 this.all.forEach((s, index) => { 631 s.isActive = false;
615 this.all[index].isActive = false;
616 }); 632 });
617 this.allDisplayed[prevIndex].isActive = true; 633 this.allDisplayed[prevIndex].isActive = true;
618 } 634 }
@@ -877,6 +893,7 @@ export default class ServicesStore extends Store {
877 ); 893 );
878 894
879 const services = {}; 895 const services = {};
896 // TODO: simplify this
880 this.all.forEach((s, index) => { 897 this.all.forEach((s, index) => {
881 services[this.all[index].id] = index; 898 services[this.all[index].id] = index;
882 }); 899 });
@@ -893,6 +910,7 @@ export default class ServicesStore extends Store {
893 910
894 @action _toggleNotifications({ serviceId }) { 911 @action _toggleNotifications({ serviceId }) {
895 const service = this.one(serviceId); 912 const service = this.one(serviceId);
913 service.isNotificationEnabled = !service.isNotificationEnabled;
896 914
897 this.actions.service.updateService({ 915 this.actions.service.updateService({
898 serviceId, 916 serviceId,
@@ -905,8 +923,7 @@ export default class ServicesStore extends Store {
905 923
906 @action _toggleAudio({ serviceId }) { 924 @action _toggleAudio({ serviceId }) {
907 const service = this.one(serviceId); 925 const service = this.one(serviceId);
908 926 service.isMuted = !service.isMuted;
909 service.isNotificationEnabled = !service.isNotificationEnabled;
910 927
911 this.actions.service.updateService({ 928 this.actions.service.updateService({
912 serviceId, 929 serviceId,
@@ -919,6 +936,7 @@ export default class ServicesStore extends Store {
919 936
920 @action _toggleDarkMode({ serviceId }) { 937 @action _toggleDarkMode({ serviceId }) {
921 const service = this.one(serviceId); 938 const service = this.one(serviceId);
939 service.isDarkModeEnabled = !service.isDarkModeEnabled;
922 940
923 this.actions.service.updateService({ 941 this.actions.service.updateService({
924 serviceId, 942 serviceId,
@@ -1149,7 +1167,7 @@ export default class ServicesStore extends Store {
1149 'initialize-recipe', 1167 'initialize-recipe',
1150 { 1168 {
1151 ...shareWithWebview, 1169 ...shareWithWebview,
1152 franzVersion: app.getVersion(), 1170 franzVersion: ferdiVersion,
1153 }, 1171 },
1154 service.recipe, 1172 service.recipe,
1155 ); 1173 );
diff --git a/src/stores/SettingsStore.js b/src/stores/SettingsStore.js
index cd627c2b8..f551e1e49 100644
--- a/src/stores/SettingsStore.js
+++ b/src/stores/SettingsStore.js
@@ -40,7 +40,9 @@ export default class SettingsStore extends Store {
40 await this._migrate(); 40 await this._migrate();
41 41
42 reaction( 42 reaction(
43 () => this.all.app.autohideMenuBar, 43 () => (
44 this.all.app.autohideMenuBar
45 ),
44 () => { 46 () => {
45 const currentWindow = getCurrentWindow(); 47 const currentWindow = getCurrentWindow();
46 currentWindow.setMenuBarVisibility(!this.all.app.autohideMenuBar); 48 currentWindow.setMenuBarVisibility(!this.all.app.autohideMenuBar);
@@ -49,15 +51,15 @@ export default class SettingsStore extends Store {
49 ); 51 );
50 52
51 reaction( 53 reaction(
52 () => this.all.app.server, 54 () => (
55 this.all.app.server
56 ),
53 (server) => { 57 (server) => {
54 if (server === LOCAL_SERVER) { 58 if (server === LOCAL_SERVER) {
55 ipcRenderer.send('startLocalServer'); 59 ipcRenderer.send('startLocalServer');
56 } 60 }
57 }, 61 },
58 { 62 { fireImmediately: true },
59 fireImmediately: true,
60 },
61 ); 63 );
62 64
63 // Inactivity lock timer 65 // Inactivity lock timer
diff --git a/src/stores/UIStore.js b/src/stores/UIStore.js
index adcd776c1..be675d5ed 100644
--- a/src/stores/UIStore.js
+++ b/src/stores/UIStore.js
@@ -43,8 +43,12 @@ export default class UIStore extends Store {
43 43
44 setup() { 44 setup() {
45 reaction( 45 reaction(
46 () => this.isDarkThemeActive, 46 () => (
47 () => this._setupThemeInDOM(), 47 this.isDarkThemeActive
48 ),
49 () => {
50 this._setupThemeInDOM();
51 },
48 { fireImmediately: true }, 52 { fireImmediately: true },
49 ); 53 );
50 } 54 }
diff --git a/src/stores/index.js b/src/stores/index.ts
index b6e481e8a..e980f2c5b 100644
--- a/src/stores/index.js
+++ b/src/stores/index.ts
@@ -34,9 +34,12 @@ export default (api, actions, router) => {
34 communityRecipes: communityRecipesStore, 34 communityRecipes: communityRecipesStore,
35 todos: todosStore, 35 todos: todosStore,
36 }); 36 });
37
37 // Initialize all stores 38 // Initialize all stores
38 Object.keys(stores).forEach((name) => { 39 Object.keys(stores).forEach((name) => {
39 if (stores[name] && stores[name].initialize) stores[name].initialize(); 40 if (stores[name] && stores[name].initialize) {
41 stores[name].initialize();
42 }
40 }); 43 });
41 return stores; 44 return stores;
42}; 45};
diff --git a/src/styles/settings.scss b/src/styles/settings.scss
index 501f97b98..f06ed7ef8 100644
--- a/src/styles/settings.scss
+++ b/src/styles/settings.scss
@@ -361,11 +361,11 @@
361 .settings__delete-button { 361 .settings__delete-button {
362 right: 0; 362 right: 0;
363 } 363 }
364 .settings__open-recipe-file-button { 364 .settings__open-recipe-file-button, .settings__open-settings-file-button {
365 cursor: pointer; 365 cursor: pointer;
366 margin-right: 10px; 366 margin-right: 10px;
367 } 367 }
368 .settings__open-recipe-file-container { 368 .settings__open-recipe-file-container, .settings__open-settings-file-container {
369 margin-top: 20px; 369 margin-top: 20px;
370 display: flex; 370 display: flex;
371 height: auto !important; 371 height: auto !important;
diff --git a/src/webview/badge.js b/src/webview/badge.ts
index 1e02fb56a..fc420b903 100644
--- a/src/webview/badge.js
+++ b/src/webview/badge.ts
@@ -1,8 +1,10 @@
1const { ipcRenderer } = require('electron'); 1import { ipcRenderer } from 'electron';
2 2
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
6 constructor() { 8 constructor() {
7 this.countCache = { 9 this.countCache = {
8 direct: 0, 10 direct: 0,
@@ -10,24 +12,29 @@ export class BadgeHandler {
10 }; 12 };
11 } 13 }
12 14
13 setBadge(direct, indirect) { 15 _normalizeNumber(count: string | number) {
14 if (this.countCache.direct === direct
15 && this.countCache.indirect === indirect) return;
16
17 // Parse number to integer 16 // Parse number to integer
18 // This will correct errors that recipes may introduce, e.g. 17 // This will correct errors that recipes may introduce, e.g.
19 // by sending a String instead of an integer 18 // by sending a String instead of an integer
20 const directInt = parseInt(direct, 10); 19 const parsedNumber = parseInt(count.toString(), 10);
21 const indirectInt = parseInt(indirect, 10); 20 const adjustedNumber = Number.isNaN(parsedNumber) ? 0 : parsedNumber;
21 return Math.max(adjustedNumber, 0);
22 }
23
24 setBadge(direct: number, indirect: number) {
25 if (this.countCache.direct === direct
26 && this.countCache.indirect === indirect) {
27 return;
28 }
22 29
23 const count = { 30 const count = {
24 direct: Math.max(directInt, 0), 31 direct: this._normalizeNumber(direct),
25 indirect: Math.max(indirectInt, 0), 32 indirect: this._normalizeNumber(indirect),
26 }; 33 };
27 34
35 debug('Sending badge count to host', count);
28 ipcRenderer.sendToHost('message-counts', count); 36 ipcRenderer.sendToHost('message-counts', count);
29 Object.assign(this.countCache, count);
30 37
31 debug('Sending badge count to host', count); 38 Object.assign(this.countCache, count);
32 } 39 }
33} 40}
diff --git a/src/webview/contextMenuBuilder.js b/src/webview/contextMenuBuilder.js
index 602ce06f5..8c39e6d04 100644
--- a/src/webview/contextMenuBuilder.js
+++ b/src/webview/contextMenuBuilder.js
@@ -6,13 +6,12 @@
6 * 6 *
7 * Source: https://github.com/electron-userland/electron-spellchecker/blob/master/src/context-menu-builder.js 7 * Source: https://github.com/electron-userland/electron-spellchecker/blob/master/src/context-menu-builder.js
8 */ 8 */
9import { 9import { clipboard, ipcRenderer, nativeImage } from 'electron';
10 clipboard, ipcRenderer, nativeImage, shell,
11} from 'electron';
12import { Menu, MenuItem } from '@electron/remote'; 10import { Menu, MenuItem } from '@electron/remote';
13import { shortcutKey, isMac } from '../environment'; 11import { cmdOrCtrlShortcutKey, isMac } from '../environment';
14 12
15import { SEARCH_ENGINE_NAMES, SEARCH_ENGINE_URLS } from '../config'; 13import { SEARCH_ENGINE_NAMES, SEARCH_ENGINE_URLS } from '../config';
14import { openExternalUrl } from '../helpers/url-helpers';
16 15
17const { URL } = require('url'); 16const { URL } = require('url');
18 17
@@ -170,7 +169,7 @@ module.exports = class ContextMenuBuilder {
170 const openLink = new MenuItem({ 169 const openLink = new MenuItem({
171 label: this.stringTable.openLinkUrl(), 170 label: this.stringTable.openLinkUrl(),
172 click: () => { 171 click: () => {
173 shell.openExternal(menuInfo.linkURL); 172 openExternalUrl(menuInfo.linkURL, true);
174 }, 173 },
175 }); 174 });
176 175
@@ -299,7 +298,7 @@ module.exports = class ContextMenuBuilder {
299 label: this.stringTable.searchWith({ searchEngine: SEARCH_ENGINE_NAMES[menuInfo.searchEngine] }), 298 label: this.stringTable.searchWith({ searchEngine: SEARCH_ENGINE_NAMES[menuInfo.searchEngine] }),
300 click: () => { 299 click: () => {
301 const url = SEARCH_ENGINE_URLS[menuInfo.searchEngine]({ searchTerm: encodeURIComponent(menuInfo.selectionText) }); 300 const url = SEARCH_ENGINE_URLS[menuInfo.searchEngine]({ searchTerm: encodeURIComponent(menuInfo.selectionText) });
302 shell.openExternal(url); 301 openExternalUrl(url, true);
303 }, 302 },
304 }); 303 });
305 304
@@ -376,7 +375,7 @@ module.exports = class ContextMenuBuilder {
376 const webContents = this.getWebContents(); 375 const webContents = this.getWebContents();
377 menu.append(new MenuItem({ 376 menu.append(new MenuItem({
378 label: this.stringTable.cut(), 377 label: this.stringTable.cut(),
379 accelerator: `${shortcutKey()}+X`, 378 accelerator: `${cmdOrCtrlShortcutKey()}+X`,
380 enabled: menuInfo.editFlags.canCut, 379 enabled: menuInfo.editFlags.canCut,
381 click: () => webContents.cut(), 380 click: () => webContents.cut(),
382 })); 381 }));
@@ -391,7 +390,7 @@ module.exports = class ContextMenuBuilder {
391 const webContents = this.getWebContents(); 390 const webContents = this.getWebContents();
392 menu.append(new MenuItem({ 391 menu.append(new MenuItem({
393 label: this.stringTable.copy(), 392 label: this.stringTable.copy(),
394 accelerator: `${shortcutKey()}+C`, 393 accelerator: `${cmdOrCtrlShortcutKey()}+C`,
395 enabled: menuInfo.editFlags.canCopy, 394 enabled: menuInfo.editFlags.canCopy,
396 click: () => webContents.copy(), 395 click: () => webContents.copy(),
397 })); 396 }));
@@ -406,7 +405,7 @@ module.exports = class ContextMenuBuilder {
406 const webContents = this.getWebContents(); 405 const webContents = this.getWebContents();
407 menu.append(new MenuItem({ 406 menu.append(new MenuItem({
408 label: this.stringTable.paste(), 407 label: this.stringTable.paste(),
409 accelerator: `${shortcutKey()}+V`, 408 accelerator: `${cmdOrCtrlShortcutKey()}+V`,
410 enabled: menuInfo.editFlags.canPaste, 409 enabled: menuInfo.editFlags.canPaste,
411 click: () => webContents.paste(), 410 click: () => webContents.paste(),
412 })); 411 }));
@@ -424,7 +423,7 @@ module.exports = class ContextMenuBuilder {
424 menu.append( 423 menu.append(
425 new MenuItem({ 424 new MenuItem({
426 label: this.stringTable.pasteAndMatchStyle(), 425 label: this.stringTable.pasteAndMatchStyle(),
427 accelerator: `${shortcutKey()}+Shift+V`, 426 accelerator: `${cmdOrCtrlShortcutKey()}+Shift+V`,
428 click: () => webContents.pasteAndMatchStyle(), 427 click: () => webContents.pasteAndMatchStyle(),
429 }), 428 }),
430 ); 429 );
@@ -490,7 +489,7 @@ module.exports = class ContextMenuBuilder {
490 const webContents = this.getWebContents(); 489 const webContents = this.getWebContents();
491 menu.append(new MenuItem({ 490 menu.append(new MenuItem({
492 label: this.stringTable.goBack(), 491 label: this.stringTable.goBack(),
493 accelerator: `${shortcutKey()}+left`, 492 accelerator: `${cmdOrCtrlShortcutKey()}+left`,
494 enabled: webContents.canGoBack(), 493 enabled: webContents.canGoBack(),
495 click: () => webContents.goBack(), 494 click: () => webContents.goBack(),
496 })); 495 }));
@@ -505,7 +504,7 @@ module.exports = class ContextMenuBuilder {
505 const webContents = this.getWebContents(); 504 const webContents = this.getWebContents();
506 menu.append(new MenuItem({ 505 menu.append(new MenuItem({
507 label: this.stringTable.goForward(), 506 label: this.stringTable.goForward(),
508 accelerator: `${shortcutKey()}+right`, 507 accelerator: `${cmdOrCtrlShortcutKey()}+right`,
509 enabled: webContents.canGoForward(), 508 enabled: webContents.canGoForward(),
510 click: () => webContents.goForward(), 509 click: () => webContents.goForward(),
511 })); 510 }));
@@ -536,7 +535,7 @@ module.exports = class ContextMenuBuilder {
536 const baseURL = new URL(menuInfo.pageURL); 535 const baseURL = new URL(menuInfo.pageURL);
537 menu.append(new MenuItem({ 536 menu.append(new MenuItem({
538 label: this.stringTable.goToHomePage(), 537 label: this.stringTable.goToHomePage(),
539 accelerator: `${shortcutKey()}+Home`, 538 accelerator: `${cmdOrCtrlShortcutKey()}+Home`,
540 enabled: true, 539 enabled: true,
541 click: () => { 540 click: () => {
542 // webContents.loadURL(baseURL.origin); 541 // webContents.loadURL(baseURL.origin);
@@ -555,7 +554,7 @@ module.exports = class ContextMenuBuilder {
555 label: this.stringTable.openInBrowser(), 554 label: this.stringTable.openInBrowser(),
556 enabled: true, 555 enabled: true,
557 click: () => { 556 click: () => {
558 shell.openExternal(menuInfo.pageURL); 557 openExternalUrl(menuInfo.pageURL, true);
559 }, 558 },
560 })); 559 }));
561 560
diff --git a/src/webview/darkmode.js b/src/webview/darkmode.ts
index 7435d6404..e06c22f11 100644
--- a/src/webview/darkmode.js
+++ b/src/webview/darkmode.ts
@@ -7,9 +7,9 @@ const debug = require('debug')('Ferdi:DarkMode');
7 7
8const chars = [...'abcdefghijklmnopqrstuvwxyz']; 8const chars = [...'abcdefghijklmnopqrstuvwxyz'];
9 9
10const ID = [...Array(20)].map(() => chars[Math.random() * chars.length | 0]).join``; 10const ID = [...Array(20)].map(() => chars[Math.random() * chars.length | 0]).join('');
11 11
12export function injectDarkModeStyle(recipePath) { 12export function injectDarkModeStyle(recipePath: string) {
13 const darkModeStyle = join(recipePath, 'darkmode.css'); 13 const darkModeStyle = join(recipePath, 'darkmode.css');
14 if (pathExistsSync(darkModeStyle)) { 14 if (pathExistsSync(darkModeStyle)) {
15 const data = readFileSync(darkModeStyle); 15 const data = readFileSync(darkModeStyle);
@@ -17,7 +17,7 @@ export function injectDarkModeStyle(recipePath) {
17 styles.id = ID; 17 styles.id = ID;
18 styles.innerHTML = data.toString(); 18 styles.innerHTML = data.toString();
19 19
20 document.querySelector('head').appendChild(styles); 20 document.querySelector('head')?.appendChild(styles);
21 21
22 debug('Injected Dark Mode style with ID', ID); 22 debug('Injected Dark Mode style with ID', ID);
23 } 23 }
diff --git a/src/webview/recipe.js b/src/webview/recipe.js
index a45c34002..f88b94cfe 100644
--- a/src/webview/recipe.js
+++ b/src/webview/recipe.js
@@ -101,7 +101,7 @@ window.open = (url, frameName, features) => {
101contextBridge.exposeInMainWorld('ferdi', { 101contextBridge.exposeInMainWorld('ferdi', {
102 open: window.open, 102 open: window.open,
103 setBadge: (direct, indirect) => 103 setBadge: (direct, indirect) =>
104 badgeHandler.setBadge(direct || 0, indirect || 0), 104 badgeHandler.setBadge(direct, indirect),
105 displayNotification: (title, options) => 105 displayNotification: (title, options) =>
106 notificationsHandler.displayNotification(title, options), 106 notificationsHandler.displayNotification(title, options),
107 getDisplayMediaSelector, 107 getDisplayMediaSelector,
diff --git a/src/webview/spellchecker.js b/src/webview/spellchecker.ts
index 0f4715207..aa9a2350f 100644
--- a/src/webview/spellchecker.js
+++ b/src/webview/spellchecker.ts
@@ -8,17 +8,13 @@ const webContents = getCurrentWebContents();
8const [defaultLocale] = webContents.session.getSpellCheckerLanguages(); 8const [defaultLocale] = webContents.session.getSpellCheckerLanguages();
9debug('Spellchecker default locale is', defaultLocale); 9debug('Spellchecker default locale is', defaultLocale);
10 10
11export function getSpellcheckerLocaleByFuzzyIdentifier(identifier) { 11export function getSpellcheckerLocaleByFuzzyIdentifier(identifier: string) {
12 const locales = Object.keys(SPELLCHECKER_LOCALES).filter((key) => key.toLocaleLowerCase() === identifier.toLowerCase() || key.split('-')[0] === identifier.toLowerCase()); 12 const locales = Object.keys(SPELLCHECKER_LOCALES).filter((key) => key.toLocaleLowerCase() === identifier.toLowerCase() || key.split('-')[0] === identifier.toLowerCase());
13 13
14 if (locales.length >= 1) { 14 return locales.length >= 1 ? locales[0] : null;
15 return locales[0];
16 }
17
18 return null;
19} 15}
20 16
21export function switchDict(locale) { 17export function switchDict(locale: string) {
22 if (isMac) { 18 if (isMac) {
23 debug('Ignoring dictionary changes on macOS'); 19 debug('Ignoring dictionary changes on macOS');
24 return; 20 return;
@@ -26,9 +22,9 @@ export function switchDict(locale) {
26 22
27 debug('Setting spellchecker locale to', locale); 23 debug('Setting spellchecker locale to', locale);
28 24
29 const locales = []; 25 const locales: string[] = [];
30 const foundLocale = getSpellcheckerLocaleByFuzzyIdentifier(locale);
31 26
27 const foundLocale = getSpellcheckerLocaleByFuzzyIdentifier(locale);
32 if (foundLocale) { 28 if (foundLocale) {
33 locales.push(foundLocale); 29 locales.push(foundLocale);
34 } 30 }
diff --git a/src/webview/zoom.js b/src/webview/zoom.ts
index 3ad88916e..53ddf46c6 100644
--- a/src/webview/zoom.js
+++ b/src/webview/zoom.ts
@@ -1,6 +1,4 @@
1import electron from 'electron'; 1import { ipcRenderer, webFrame } from 'electron';
2
3const { ipcRenderer, webFrame } = electron;
4 2
5const maxZoomLevel = 9; 3const maxZoomLevel = 9;
6const minZoomLevel = -8; 4const minZoomLevel = -8;
@@ -31,7 +29,7 @@ ipcRenderer.on('zoomReset', () => {
31 ipcRenderer.sendToHost('zoomLevel', { zoom: zoomLevel }); 29 ipcRenderer.sendToHost('zoomLevel', { zoom: zoomLevel });
32}); 30});
33 31
34ipcRenderer.on('setZoom', (e, arg) => { 32ipcRenderer.on('setZoom', (_e, arg) => {
35 zoomLevel = arg; 33 zoomLevel = arg;
36 webFrame.setZoomLevel(zoomLevel); 34 webFrame.setZoomLevel(zoomLevel);
37}); 35});
diff --git a/tsconfig.json b/tsconfig.json
index 46e0e6cfa..2676f392d 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,7 +1,7 @@
1{ 1{
2 "extends": "./tsconfig.settings.json", 2 "extends": "./tsconfig.settings.json",
3 "compilerOptions": { 3 "compilerOptions": {
4 "outDir": ".tstmp", 4 "outDir": ".tmp",
5 "rootDir": "./" 5 "rootDir": "./"
6 }, 6 }
7} 7}
diff --git a/tsconfig.settings.json b/tsconfig.settings.json
index eb2207533..bd4669e01 100644
--- a/tsconfig.settings.json
+++ b/tsconfig.settings.json
@@ -1,20 +1,28 @@
1{ 1{
2 "extends": "@tsconfig/node14/tsconfig.json",
2 "compilerOptions": { 3 "compilerOptions": {
3 "baseUrl": ".", 4 "baseUrl": ".",
4 "target": "esnext", 5 "target": "esnext",
5 "module": "commonjs",
6 "lib": ["es2015", "es2017", "dom"], 6 "lib": ["es2015", "es2017", "dom"],
7 "jsx": "react", 7 "jsx": "react",
8 "typeRoots": ["node_modules/@types"],
9 "moduleResolution": "node",
10 "types": ["node"],
8 "sourceMap": true, 11 "sourceMap": true,
9 "strict": true, 12 "noImplicitAny": false, // TODO: Need to switch
10 "noImplicitAny": false,
11 "allowSyntheticDefaultImports": true, 13 "allowSyntheticDefaultImports": true,
12 "experimentalDecorators": true, 14 "experimentalDecorators": true,
13 "composite": true, 15 "composite": true,
14 "esModuleInterop": true, 16 "esModuleInterop": true,
15 "forceConsistentCasingInFileNames": true,
16 "importHelpers": true, 17 "importHelpers": true,
17 "removeComments": true, 18 "removeComments": true,
18 "typeRoots": ["node_modules/@types"] 19 "allowUnreachableCode": false,
20 "allowUnusedLabels": false,
21 "noUnusedLocals": true,
22 "noUnusedParameters": true,
23 "noImplicitReturns": true,
24 "noImplicitThis": true,
25 "preserveConstEnums": true,
26 "strictNullChecks": true,
19 } 27 }
20} 28}
diff --git a/uidev/src/app.tsx b/uidev/src/app.tsx
index ecc7020c1..970cb40e3 100644
--- a/uidev/src/app.tsx
+++ b/uidev/src/app.tsx
@@ -1,7 +1,6 @@
1import { Property } from 'csstype'; 1import { Property } from 'csstype';
2import { Classes } from 'jss'; 2import { Classes } from 'jss';
3import { observer } from 'mobx-react'; 3import { observer } from 'mobx-react';
4import DevTools from 'mobx-react-devtools';
5import React from 'react'; 4import React from 'react';
6import injectSheet from 'react-jss'; 5import injectSheet from 'react-jss';
7 6
@@ -122,7 +121,6 @@ export const App = injectSheet(styles)(
122 </div> 121 </div>
123 ))} 122 ))}
124 </div> 123 </div>
125 <DevTools />
126 </div> 124 </div>
127 )), 125 )),
128); 126);