From 1e5cfd1d4bd5a6dd23da60adc6ea1b6b5fd29e65 Mon Sep 17 00:00:00 2001 From: Eugene Date: Sun, 26 Feb 2023 20:42:31 +0100 Subject: [PATCH] bootstrap 5 WIP (#7891) New standard theme that follows your chosen terminal colors, Bootstrap 5 & Angular 15 upgrade --- .eslintrc.yml | 278 +-- .github/workflows/build.yml | 30 +- app/index.pug | 1 + app/lib/window.ts | 4 +- app/package.json | 10 +- app/src/app.module.ts | 10 +- app/src/entry.preload.ts | 1 - app/src/entry.ts | 4 +- app/src/global.scss | 16 +- app/src/root.component.ts | 6 - app/src/toastr.scss | 4 + ...main.config.js => webpack.config.main.mjs} | 18 +- app/{webpack.config.js => webpack.config.mjs} | 50 +- app/yarn.lock | 40 +- .../{afterBuildHook.js => afterBuildHook.cjs} | 2 +- .../{afterSignHook.js => afterSignHook.cjs} | 0 electron-builder.yml | 4 +- locale/app.pot | 351 ++-- package.json | 65 +- scripts/{build-docs.js => build-docs.mjs} | 6 +- scripts/{build-linux.js => build-linux.mjs} | 4 +- scripts/{build-macos.js => build-macos.mjs} | 4 +- scripts/build-modules.js | 22 - scripts/build-modules.mjs | 22 + scripts/{build-native.js => build-native.mjs} | 10 +- .../{build-typings.js => build-typings.mjs} | 6 +- .../{build-windows.js => build-windows.mjs} | 4 +- ...metadata.js => generate-icon-metadata.mjs} | 11 +- scripts/{i18n-extract.js => i18n-extract.mjs} | 10 +- scripts/{install-deps.js => install-deps.mjs} | 6 +- ...kage-plugins.js => prepackage-plugins.mjs} | 16 +- ...publish-plugins.js => publish-plugins.mjs} | 8 +- .../{sentry-upload.js => sentry-upload.mjs} | 4 +- scripts/{vars.js => vars.mjs} | 37 +- .../webpack.config.js | 6 - .../webpack.config.mjs | 14 + tabby-core/package.json | 8 +- tabby-core/src/api/index.ts | 3 +- tabby-core/src/api/theme.ts | 1 + .../src/components/appRoot.component.ts | 5 +- .../src/components/baseTab.component.ts | 1 + .../src/components/checkbox.component.ts | 6 +- .../src/components/profileIcon.component.pug | 2 +- .../src/components/profileIcon.component.ts | 4 +- .../src/components/promptModal.component.pug | 2 +- .../src/components/promptModal.component.ts | 3 +- .../components/renameTabModal.component.ts | 2 +- .../src/components/safeModeModal.component.ts | 2 +- .../components/selectorModal.component.pug | 12 +- .../src/components/selectorModal.component.ts | 4 +- .../components/selfPositioning.component.ts | 11 +- .../src/components/splitTab.component.ts | 2 +- .../components/splitTabDropZone.component.ts | 2 +- .../components/splitTabPaneLabel.component.ts | 4 +- .../components/splitTabSpanner.component.scss | 5 - .../components/splitTabSpanner.component.ts | 2 +- .../src/components/startPage.component.pug | 10 +- .../src/components/startPage.component.ts | 7 +- .../src/components/tabBody.component.scss | 5 - .../src/components/tabBody.component.ts | 6 +- .../src/components/tabHeader.component.pug | 2 +- .../src/components/tabHeader.component.scss | 1 - .../src/components/tabHeader.component.ts | 4 +- .../src/components/titleBar.component.pug | 2 +- .../src/components/titleBar.component.ts | 9 +- .../src/components/toggle.component.scss | 10 +- tabby-core/src/components/toggle.component.ts | 8 +- .../components/transfersMenu.component.pug | 2 +- .../src/components/transfersMenu.component.ts | 4 +- .../components/unlockVaultModal.component.pug | 7 +- .../components/unlockVaultModal.component.ts | 2 +- .../src/components/welcomeTab.component.ts | 4 +- .../components/windowControls.component.ts | 4 +- tabby-core/src/config.ts | 10 +- tabby-core/src/configDefaults.macos.yaml | 3 +- tabby-core/src/icons.json | 2 +- tabby-core/src/index.ts | 47 +- tabby-core/src/services/commands.service.ts | 2 +- tabby-core/src/services/config.service.ts | 8 +- tabby-core/src/services/locale.service.ts | 37 +- tabby-core/src/services/themes.service.ts | 107 +- tabby-core/src/theme.new.scss | 568 +++++++ tabby-core/src/theme.paper.scss | 29 +- tabby-core/src/theme.scss | 29 +- tabby-core/src/theme.ts | 19 +- tabby-core/src/theme.vars.scss | 23 +- tabby-core/src/theme.vendor.scss | 3 + tabby-core/webpack.config.js | 5 - tabby-core/webpack.config.mjs | 10 + tabby-core/yarn.lock | 95 +- tabby-electron/webpack.config.js | 5 - tabby-electron/webpack.config.mjs | 10 + tabby-linkifier/webpack.config.js | 5 - tabby-linkifier/webpack.config.mjs | 10 + .../commandLineEditor.component.pug | 39 +- .../components/commandLineEditor.component.ts | 2 +- .../environmentEditor.component.pug | 16 +- .../components/environmentEditor.component.ts | 4 +- .../localProfileSettings.component.pug | 9 +- .../localProfileSettings.component.ts | 2 +- .../components/shellSettingsTab.component.pug | 4 +- .../components/shellSettingsTab.component.ts | 2 +- tabby-local/src/index.ts | 9 +- tabby-local/webpack.config.js | 5 - tabby-local/webpack.config.mjs | 10 + .../pluginsSettingsTab.component.pug | 32 +- .../pluginsSettingsTab.component.ts | 4 +- tabby-plugin-manager/src/index.ts | 7 +- tabby-plugin-manager/webpack.config.js | 5 - tabby-plugin-manager/webpack.config.mjs | 10 + .../serialProfileSettings.component.pug | 4 +- .../serialProfileSettings.component.ts | 2 +- .../src/components/serialTab.component.pug | 8 +- .../src/components/serialTab.component.ts | 2 +- tabby-serial/src/index.ts | 4 - tabby-serial/src/services/serial.service.ts | 6 +- tabby-serial/webpack.config.js | 5 - tabby-serial/webpack.config.mjs | 10 + tabby-settings/package.json | 6 +- .../configSyncSettingsTab.component.pug | 43 +- .../configSyncSettingsTab.component.ts | 2 +- .../components/editProfileModal.component.pug | 19 +- .../components/editProfileModal.component.ts | 2 +- .../components/hotkeyInputModal.component.ts | 4 +- .../hotkeySettingsTab.component.pug | 11 +- .../components/hotkeySettingsTab.component.ts | 2 +- .../components/multiHotkeyInput.component.pug | 2 +- .../components/multiHotkeyInput.component.ts | 7 +- .../profilesSettingsTab.component.pug | 27 +- .../profilesSettingsTab.component.ts | 4 +- .../components/releaseNotesTab.component.ts | 8 +- .../setVaultPassphraseModal.component.pug | 5 +- .../setVaultPassphraseModal.component.ts | 3 +- .../src/components/settingsTab.component.pug | 20 +- .../src/components/settingsTab.component.scss | 7 +- .../src/components/settingsTab.component.ts | 11 +- .../components/settingsTabBody.component.ts | 3 +- .../components/vaultSettingsTab.component.pug | 12 +- .../components/vaultSettingsTab.component.ts | 4 +- .../windowSettingsTab.component.pug | 320 ++-- .../components/windowSettingsTab.component.ts | 2 +- tabby-settings/src/index.ts | 16 +- tabby-settings/webpack.config.js | 5 - tabby-settings/webpack.config.mjs | 10 + tabby-settings/yarn.lock | 40 +- .../hostKeyPromptModal.component.pug | 8 +- .../hostKeyPromptModal.component.ts | 2 +- ...keyboardInteractiveAuthPanel.component.pug | 4 +- .../keyboardInteractiveAuthPanel.component.ts | 4 +- .../sftpCreateDirectoryModal.component.pug | 2 +- .../sftpCreateDirectoryModal.component.ts | 2 +- .../components/sftpDeleteModal.component.ts | 2 +- .../src/components/sftpPanel.component.pug | 18 +- .../src/components/sftpPanel.component.ts | 4 +- .../sshPortForwardingConfig.component.pug | 91 +- .../sshPortForwardingConfig.component.ts | 2 +- .../sshPortForwardingModal.component.ts | 2 +- .../sshProfileSettings.component.pug | 95 +- .../sshProfileSettings.component.ts | 2 +- .../components/sshSettingsTab.component.ts | 2 +- tabby-ssh/src/components/sshTab.component.pug | 16 +- tabby-ssh/src/components/sshTab.component.ts | 5 +- tabby-ssh/src/index.ts | 9 - tabby-ssh/webpack.config.js | 10 - tabby-ssh/webpack.config.mjs | 15 + .../telnetProfileSettings.component.pug | 4 +- .../telnetProfileSettings.component.ts | 2 +- .../src/components/telnetTab.component.pug | 8 +- .../src/components/telnetTab.component.ts | 2 +- tabby-telnet/src/index.ts | 4 - tabby-telnet/webpack.config.js | 5 - tabby-telnet/webpack.config.mjs | 10 + tabby-terminal/package.json | 2 +- tabby-terminal/patches/ansi-color+0.2.1.patch | 15 + ...+5.2.0-beta.10.patch => xterm+5.1.0.patch} | 0 .../src/api/baseTerminalTab.component.ts | 13 +- .../appearanceSettingsTab.component.pug | 99 +- .../appearanceSettingsTab.component.ts | 7 +- .../src/components/colorPicker.component.scss | 4 + .../src/components/colorPicker.component.ts | 4 +- .../colorSchemePreview.component.ts | 4 +- .../colorSchemeSelector.component.pug | 18 +- .../colorSchemeSelector.component.ts | 4 +- .../colorSchemeSettingsTab.component.pug | 25 +- .../colorSchemeSettingsTab.component.ts | 4 +- .../loginScriptsSettings.component.pug | 5 +- .../loginScriptsSettings.component.ts | 2 +- .../src/components/searchPanel.component.pug | 7 +- .../src/components/searchPanel.component.ts | 4 +- .../streamProcessingSettings.component.ts | 2 +- .../terminalSettingsTab.component.pug | 53 +- .../terminalSettingsTab.component.ts | 2 +- .../components/terminalToolbar.component.scss | 13 +- .../components/terminalToolbar.component.ts | 4 +- tabby-terminal/src/frontends/xtermFrontend.ts | 6 +- tabby-terminal/src/index.ts | 10 +- tabby-terminal/webpack.config.js | 15 - tabby-terminal/webpack.config.mjs | 23 + tabby-terminal/yarn.lock | 8 +- tabby-web-demo/src/index.ts | 7 +- tabby-web-demo/webpack.config.js | 5 - tabby-web-demo/webpack.config.mjs | 10 + .../components/messageBoxModal.component.pug | 2 +- .../components/messageBoxModal.component.ts | 2 +- tabby-web/src/index.ts | 3 - tabby-web/webpack.config.js | 5 - tabby-web/webpack.config.mjs | 10 + tsconfig.json | 2 +- typedoc.js => typedoc.mjs | 0 web/entry.preload.ts | 1 - web/{webpack.config.js => webpack.config.mjs} | 17 +- webpack.config.js | 14 - webpack.config.mjs | 15 + ...gin.config.js => webpack.plugin.config.mjs | 72 +- yarn.lock | 1506 ++++++----------- 215 files changed, 2982 insertions(+), 2447 deletions(-) delete mode 100644 app/src/root.component.ts rename app/{webpack.main.config.js => webpack.config.main.mjs} (82%) rename app/{webpack.config.js => webpack.config.mjs} (57%) rename build/mac/{afterBuildHook.js => afterBuildHook.cjs} (90%) rename build/mac/{afterSignHook.js => afterSignHook.cjs} (100%) rename scripts/{build-docs.js => build-docs.mjs} (71%) rename scripts/{build-linux.js => build-linux.mjs} (91%) rename scripts/{build-macos.js => build-macos.mjs} (92%) delete mode 100755 scripts/build-modules.js create mode 100755 scripts/build-modules.mjs rename scripts/{build-native.js => build-native.mjs} (81%) rename scripts/{build-typings.js => build-typings.mjs} (66%) rename scripts/{build-windows.js => build-windows.mjs} (90%) rename scripts/{generate-icon-metadata.js => generate-icon-metadata.mjs} (66%) rename scripts/{i18n-extract.js => i18n-extract.mjs} (87%) rename scripts/{install-deps.js => install-deps.mjs} (88%) rename scripts/{prepackage-plugins.js => prepackage-plugins.mjs} (75%) rename scripts/{publish-plugins.js => publish-plugins.mjs} (65%) rename scripts/{sentry-upload.js => sentry-upload.mjs} (93%) rename scripts/{vars.js => vars.mjs} (66%) delete mode 100644 tabby-community-color-schemes/webpack.config.js create mode 100644 tabby-community-color-schemes/webpack.config.mjs create mode 100644 tabby-core/src/theme.new.scss create mode 100644 tabby-core/src/theme.vendor.scss delete mode 100644 tabby-core/webpack.config.js create mode 100644 tabby-core/webpack.config.mjs delete mode 100644 tabby-electron/webpack.config.js create mode 100644 tabby-electron/webpack.config.mjs delete mode 100644 tabby-linkifier/webpack.config.js create mode 100644 tabby-linkifier/webpack.config.mjs delete mode 100644 tabby-local/webpack.config.js create mode 100644 tabby-local/webpack.config.mjs delete mode 100644 tabby-plugin-manager/webpack.config.js create mode 100644 tabby-plugin-manager/webpack.config.mjs delete mode 100644 tabby-serial/webpack.config.js create mode 100644 tabby-serial/webpack.config.mjs delete mode 100644 tabby-settings/webpack.config.js create mode 100644 tabby-settings/webpack.config.mjs delete mode 100644 tabby-ssh/webpack.config.js create mode 100644 tabby-ssh/webpack.config.mjs delete mode 100644 tabby-telnet/webpack.config.js create mode 100644 tabby-telnet/webpack.config.mjs create mode 100644 tabby-terminal/patches/ansi-color+0.2.1.patch rename tabby-terminal/patches/{xterm+5.2.0-beta.10.patch => xterm+5.1.0.patch} (100%) delete mode 100644 tabby-terminal/webpack.config.js create mode 100644 tabby-terminal/webpack.config.mjs delete mode 100644 tabby-web-demo/webpack.config.js create mode 100644 tabby-web-demo/webpack.config.mjs delete mode 100644 tabby-web/webpack.config.js create mode 100644 tabby-web/webpack.config.mjs rename typedoc.js => typedoc.mjs (100%) rename web/{webpack.config.js => webpack.config.mjs} (77%) delete mode 100644 webpack.config.js create mode 100644 webpack.config.mjs rename webpack.plugin.config.js => webpack.plugin.config.mjs (70%) diff --git a/.eslintrc.yml b/.eslintrc.yml index 551f906e..53b67bed 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -1,15 +1,3 @@ -parser: '@typescript-eslint/parser' -parserOptions: - project: - - tsconfig.json - - '*/tsconfig.typings.json' -extends: - - 'plugin:@typescript-eslint/all' - - plugin:import/recommended - - plugin:import/typescript -plugins: - - '@typescript-eslint' - - 'import' settings: import/resolver: typescript: true @@ -19,126 +7,148 @@ env: es6: true node: true commonjs: true -rules: - '@typescript-eslint/semi': - - error - - never - '@typescript-eslint/indent': - - error - - 4 - '@typescript-eslint/explicit-member-accessibility': - - error - - accessibility: no-public - overrides: - parameterProperties: explicit - '@typescript-eslint/no-require-imports': off - '@typescript-eslint/no-parameter-properties': off - '@typescript-eslint/explicit-function-return-type': off - '@typescript-eslint/no-explicit-any': off - '@typescript-eslint/no-magic-numbers': off - '@typescript-eslint/member-delimiter-style': off - '@typescript-eslint/promise-function-async': off - '@typescript-eslint/require-array-sort-compare': off - '@typescript-eslint/no-floating-promises': off - '@typescript-eslint/prefer-readonly': off - '@typescript-eslint/require-await': off - '@typescript-eslint/strict-boolean-expressions': off - '@typescript-eslint/no-misused-promises': - - error - - checksVoidReturn: false - '@typescript-eslint/typedef': off - '@typescript-eslint/consistent-type-imports': off - '@typescript-eslint/sort-type-union-intersection-members': off - '@typescript-eslint/no-use-before-define': - - error - - classes: false - no-duplicate-imports: error - array-bracket-spacing: - - error - - never - block-scoped-var: error - brace-style: off - '@typescript-eslint/brace-style': - - error - - 1tbs - - allowSingleLine: true - computed-property-spacing: - - error - - never - comma-dangle: off - '@typescript-eslint/comma-dangle': - - error - - always-multiline - curly: error - eol-last: error - eqeqeq: - - error - - smart - max-depth: - - 1 - - 5 - max-statements: - - 1 - - 80 - no-multiple-empty-lines: error - no-mixed-spaces-and-tabs: error - no-trailing-spaces: error - '@typescript-eslint/no-unused-vars': + +overrides: +- files: '*.mjs' + plugins: + - 'import' + parserOptions: + sourceType: module + ecmaVersion: latest + +- files: '*.ts' + parser: '@typescript-eslint/parser' + parserOptions: + project: + - tsconfig.json + - '*/tsconfig.typings.json' + extends: + - 'plugin:@typescript-eslint/all' + - plugin:import/recommended + - plugin:import/typescript + plugins: + - '@typescript-eslint' + - 'import' + rules: + '@typescript-eslint/semi': - error - - vars: all - args: after-used - argsIgnorePattern: ^_ - no-undef: error - no-var: error - object-curly-spacing: off - '@typescript-eslint/object-curly-spacing': - - error - - always - quote-props: - - warn - - as-needed - - keywords: true - numbers: true - quotes: off - '@typescript-eslint/quotes': - - error - - single - - allowTemplateLiterals: true - '@typescript-eslint/no-confusing-void-expression': - - error - - ignoreArrowShorthand: true - '@typescript-eslint/no-non-null-assertion': off - '@typescript-eslint/no-unnecessary-condition': - - error - - allowConstantLoopConditions: true - '@typescript-eslint/restrict-template-expressions': off - '@typescript-eslint/prefer-readonly-parameter-types': off - '@typescript-eslint/no-unsafe-member-access': off - '@typescript-eslint/no-unsafe-call': off - '@typescript-eslint/no-unsafe-return': off - '@typescript-eslint/no-unsafe-assignment': off - '@typescript-eslint/naming-convention': off - '@typescript-eslint/lines-between-class-members': - - error - - exceptAfterSingleLine: true - '@typescript-eslint/dot-notation': off - '@typescript-eslint/no-implicit-any-catch': off - '@typescript-eslint/member-ordering': off - '@typescript-eslint/no-var-requires': off - '@typescript-eslint/no-unsafe-argument': off - '@typescript-eslint/restrict-plus-operands': off - '@typescript-eslint/space-infix-ops': off - '@typescript-eslint/no-type-alias': - - error - - allowAliases: in-unions-and-intersections - allowLiterals: always - allowCallbacks: always - '@typescript-eslint/sort-type-constituents': off - '@typescript-eslint/parameter-properties': - - error - - prefer: parameter-property - 'import/no-named-as-default-member': off - '@typescript-eslint/consistent-type-exports': off - '@typescript-eslint/consistent-generic-constructors': off - 'keyword-spacing': off - '@typescript-eslint/keyword-spacing': off + - never + '@typescript-eslint/indent': + - error + - 4 + '@typescript-eslint/explicit-member-accessibility': + - error + - accessibility: no-public + overrides: + parameterProperties: explicit + '@typescript-eslint/no-require-imports': off + '@typescript-eslint/no-parameter-properties': off + '@typescript-eslint/explicit-function-return-type': off + '@typescript-eslint/no-explicit-any': off + '@typescript-eslint/no-magic-numbers': off + '@typescript-eslint/member-delimiter-style': off + '@typescript-eslint/promise-function-async': off + '@typescript-eslint/require-array-sort-compare': off + '@typescript-eslint/no-floating-promises': off + '@typescript-eslint/prefer-readonly': off + '@typescript-eslint/require-await': off + '@typescript-eslint/strict-boolean-expressions': off + '@typescript-eslint/no-misused-promises': + - error + - checksVoidReturn: false + '@typescript-eslint/typedef': off + '@typescript-eslint/consistent-type-imports': off + '@typescript-eslint/sort-type-union-intersection-members': off + '@typescript-eslint/no-use-before-define': + - error + - classes: false + no-duplicate-imports: error + array-bracket-spacing: + - error + - never + block-scoped-var: error + brace-style: off + '@typescript-eslint/brace-style': + - error + - 1tbs + - allowSingleLine: true + computed-property-spacing: + - error + - never + comma-dangle: off + '@typescript-eslint/comma-dangle': + - error + - always-multiline + curly: error + eol-last: error + eqeqeq: + - error + - smart + max-depth: + - 1 + - 5 + max-statements: + - 1 + - 80 + no-multiple-empty-lines: error + no-mixed-spaces-and-tabs: error + no-trailing-spaces: error + '@typescript-eslint/no-unused-vars': + - error + - vars: all + args: after-used + argsIgnorePattern: ^_ + no-undef: error + no-var: error + object-curly-spacing: off + '@typescript-eslint/object-curly-spacing': + - error + - always + quote-props: + - warn + - as-needed + - keywords: true + numbers: true + quotes: off + '@typescript-eslint/quotes': + - error + - single + - allowTemplateLiterals: true + '@typescript-eslint/no-confusing-void-expression': + - error + - ignoreArrowShorthand: true + '@typescript-eslint/no-non-null-assertion': off + '@typescript-eslint/no-unnecessary-condition': + - error + - allowConstantLoopConditions: true + '@typescript-eslint/restrict-template-expressions': off + '@typescript-eslint/prefer-readonly-parameter-types': off + '@typescript-eslint/no-unsafe-member-access': off + '@typescript-eslint/no-unsafe-call': off + '@typescript-eslint/no-unsafe-return': off + '@typescript-eslint/no-unsafe-assignment': off + '@typescript-eslint/naming-convention': off + '@typescript-eslint/lines-between-class-members': + - error + - exceptAfterSingleLine: true + '@typescript-eslint/dot-notation': off + '@typescript-eslint/no-implicit-any-catch': off + '@typescript-eslint/member-ordering': off + '@typescript-eslint/no-var-requires': off + '@typescript-eslint/no-unsafe-argument': off + '@typescript-eslint/restrict-plus-operands': off + '@typescript-eslint/space-infix-ops': off + '@typescript-eslint/no-type-alias': + - error + - allowAliases: in-unions-and-intersections + allowLiterals: always + allowCallbacks: always + '@typescript-eslint/sort-type-constituents': off + '@typescript-eslint/parameter-properties': + - error + - prefer: parameter-property + 'import/no-named-as-default-member': off + '@typescript-eslint/consistent-type-exports': off + '@typescript-eslint/consistent-generic-constructors': off + 'keyword-spacing': off + '@typescript-eslint/keyword-spacing': off diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 236735cb..4d0d1fd0 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -68,7 +68,7 @@ jobs: run: yarn run build - name: Prepackage plugins - run: scripts/prepackage-plugins.js + run: scripts/prepackage-plugins.mjs env: ARCH: ${{matrix.arch}} @@ -78,7 +78,7 @@ jobs: - run: ln -s ../../node_modules/electron app/node_modules - name: Build and sign packages - run: scripts/build-macos.js + run: scripts/build-macos.mjs if: github.repository == 'Eugeny/tabby' && github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags')) env: ARCH: ${{matrix.arch}} @@ -92,7 +92,7 @@ jobs: # DEBUG: electron-builder,electron-builder:* - name: Build packages without signing - run: scripts/build-macos.js + run: scripts/build-macos.mjs if: "! (github.repository == 'Eugeny/tabby' && github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags')))" env: ARCH: ${{matrix.arch}} @@ -101,7 +101,7 @@ jobs: - name: Upload symbols run: | sudo npm install -g @sentry/cli --unsafe-perm - ./scripts/sentry-upload.js + ./scripts/sentry-upload.mjs env: SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} SENTRY_ORG: ${{ secrets.SENTRY_ORG }} @@ -162,11 +162,11 @@ jobs: if: matrix.build-arch == 'x64' - name: Prepackage plugins (x64) - run: scripts/prepackage-plugins.js + run: scripts/prepackage-plugins.mjs if: ${{matrix.build-arch == 'x64'}} - name: Build packages (x64) - run: scripts/build-linux.js + run: scripts/build-linux.mjs if: ${{matrix.build-arch == 'x64'}} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -193,8 +193,8 @@ jobs: cd /github/workspace && yarn --network-timeout 1000000 && yarn run build && - scripts/prepackage-plugins.js && - USE_SYSTEM_FPM=true scripts/build-linux.js" + scripts/prepackage-plugins.mjs && + USE_SYSTEM_FPM=true scripts/build-linux.mjs" env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} KEYGEN_TOKEN: ${{ secrets.KEYGEN_TOKEN }} @@ -217,8 +217,8 @@ jobs: sed -i '/ \"electron\":/c\ \"electron\": \"17.0.0\",' package.json && yarn --network-timeout 1000000 && yarn run build && - scripts/prepackage-plugins.js && - USE_SYSTEM_FPM=true scripts/build-linux.js" + scripts/prepackage-plugins.mjs && + USE_SYSTEM_FPM=true scripts/build-linux.mjs" env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} KEYGEN_TOKEN: ${{ secrets.KEYGEN_TOKEN }} @@ -228,7 +228,7 @@ jobs: - name: Upload symbols run: | sudo npm install -g @sentry/cli --unsafe-perm - ./scripts/sentry-upload.js + ./scripts/sentry-upload.mjs if: matrix.build-arch == 'x64' env: SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} @@ -308,12 +308,12 @@ jobs: npm i -g yarn@1.19.1 yarn --network-timeout 1000000 yarn run build - node scripts/prepackage-plugins.js + node scripts/prepackage-plugins.mjs env: ARCH: ${{matrix.arch}} - name: Build and sign packages - run: node scripts/build-windows.js + run: node scripts/build-windows.mjs if: github.repository == 'Eugeny/tabby' && github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags')) env: ARCH: ${{matrix.arch}} @@ -324,7 +324,7 @@ jobs: DEBUG: electron-builder,electron-builder:* - name: Build packages without signing - run: node scripts/build-windows.js + run: node scripts/build-windows.mjs if: "!(github.repository == 'Eugeny/tabby' && github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags')))" env: ARCH: ${{matrix.arch}} @@ -332,7 +332,7 @@ jobs: - name: Upload symbols run: | npm install @sentry/cli - node scripts/sentry-upload.js + node scripts/sentry-upload.mjs env: SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} SENTRY_ORG: ${{ secrets.SENTRY_ORG }} diff --git a/app/index.pug b/app/index.pug index 90d1619d..4f0e9419 100644 --- a/app/index.pug +++ b/app/index.pug @@ -12,6 +12,7 @@ html.tabby body { transition: 0.5s background; } body style#custom-css + root app-root .preload-logo div diff --git a/app/lib/window.ts b/app/lib/window.ts index a9fb3028..bafbf40f 100644 --- a/app/lib/window.ts +++ b/app/lib/window.ts @@ -413,7 +413,9 @@ export class Window { this.touchBarControl.selectedIndex = selectedIndex }) - this.window.webContents.on('new-window', event => event.preventDefault()) + this.window.webContents.setWindowOpenHandler(() => { + return { action: 'deny' } + }) ipcMain.on('window-set-disable-vibrancy-while-dragging', (_event, value) => { this.disableVibrancyWhileDragging = value && this.configStore.hacks?.disableVibrancyWhileDragging diff --git a/app/package.json b/app/package.json index 3a916344..251e28c0 100644 --- a/app/package.json +++ b/app/package.json @@ -37,17 +37,19 @@ "optionalDependencies": { "@tabby-gang/windows-blurbehind": "^3.0.0", "macos-native-processlist": "^2.1.0", + "patch-package": "^6.5.0", "serialport": "10.5.0", "serialport-binding-webserialapi": "^1.0.3", "windows-native-registry": "^3.2.1", - "windows-process-tree": "^0.3.4", - "patch-package": "^6.5.0" + "windows-process-tree": "^0.3.4" }, "devDependencies": { + "@ngx-translate/core": "^14.0.0", "@types/mz": "2.7.4", - "@types/node": "18.7.23", + "@types/node": "18.11.19", "atomically": "^1.7.0", - "ngx-filesize": "^2.0.16" + "filesize": "^9", + "ngx-filesize": "^3.0.1" }, "peerDependencies": { "tabby-community-color-schemes": "*", diff --git a/app/src/app.module.ts b/app/src/app.module.ts index 3ad05991..231fa58f 100644 --- a/app/src/app.module.ts +++ b/app/src/app.module.ts @@ -1,14 +1,12 @@ /* eslint-disable @typescript-eslint/explicit-module-boundary-types */ -import { NgModule } from '@angular/core' +import { ApplicationRef, NgModule } from '@angular/core' import { BrowserModule } from '@angular/platform-browser' -import { NgbModule } from '@ng-bootstrap/ng-bootstrap' import { ToastrModule } from 'ngx-toastr' export function getRootModule (plugins: any[]) { const imports = [ BrowserModule, ...plugins, - NgbModule, ToastrModule.forRoot({ positionClass: 'toast-bottom-center', toastClass: 'toast', @@ -27,10 +25,12 @@ export function getRootModule (plugins: any[]) { @NgModule({ imports, - bootstrap, }) class RootModule { - ngDoBootstrap () { + ngDoBootstrap (appRef: ApplicationRef) { (window as any)['requestAnimationFrame'] = window[window['Zone'].__symbol__('requestAnimationFrame')] + + const componentDef = bootstrap[0] + appRef.bootstrap(componentDef) } } diff --git a/app/src/entry.preload.ts b/app/src/entry.preload.ts index 98093172..1e5e5f98 100644 --- a/app/src/entry.preload.ts +++ b/app/src/entry.preload.ts @@ -6,5 +6,4 @@ import '@fortawesome/fontawesome-free/css/solid.css' import '@fortawesome/fontawesome-free/css/brands.css' import '@fortawesome/fontawesome-free/css/regular.css' import '@fortawesome/fontawesome-free/css/fontawesome.css' -import 'ngx-toastr/toastr.css' import './preload.scss' diff --git a/app/src/entry.ts b/app/src/entry.ts index 172f0a8f..108fe8e0 100644 --- a/app/src/entry.ts +++ b/app/src/entry.ts @@ -39,8 +39,10 @@ async function bootstrap (bootstrapData: BootstrapData, plugins: PluginInfo[], s const pluginModules = await loadPlugins(plugins, (current, total) => { (document.querySelector('.progress .bar') as HTMLElement).style.width = `${100 * current / total}%` // eslint-disable-line }) + + window['pluginModules'] = pluginModules + const module = getRootModule(pluginModules) - window['rootModule'] = module const moduleRef = await platformBrowserDynamic([ { provide: BOOTSTRAP_DATA, useValue: bootstrapData }, ]).bootstrapModule(module) diff --git a/app/src/global.scss b/app/src/global.scss index c4c59854..bb0fbd97 100644 --- a/app/src/global.scss +++ b/app/src/global.scss @@ -13,10 +13,6 @@ body { user-select: text; } -[ngbradiogroup] input[type="radio"] { - display: none; -} - a, button { &.btn { display: inline-flex; @@ -53,6 +49,10 @@ a, button { &>.form-control, &>.input-group { width: 33%; } + + &>.form-check { + display: flex; + } } input[type=range] { @@ -175,19 +175,19 @@ ngb-typeahead-window { // Windows high contrast mode @media screen and (forced-colors: active) { - .custom-switch .custom-control-label::before { + .form-switch .form-check-label::before { background: buttonface; } - .custom-switch .custom-control-label::after { + .form-switch .form-check-label::after { background: buttontext; } - .custom-switch .custom-control-input:checked ~ .custom-control-label::before { + .form-switch .form-check-input:checked ~ .form-check-label::before { background: activetext; } - .custom-switch .custom-control-input:checked ~ .custom-control-label::after { + .form-switch .form-check-input:checked ~ .form-check-label::after { background: canvas; } diff --git a/app/src/root.component.ts b/app/src/root.component.ts deleted file mode 100644 index 8d2bd18c..00000000 --- a/app/src/root.component.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Component } from '@angular/core' - -@Component({ - template: '', -}) -export class RootComponent { } // eslint-disable-line @typescript-eslint/no-extraneous-class diff --git a/app/src/toastr.scss b/app/src/toastr.scss index 172e60a5..c85259d3 100644 --- a/app/src/toastr.scss +++ b/app/src/toastr.scss @@ -8,6 +8,8 @@ box-shadow: 0 1px 0 rgba(0,0,0,.25); padding: 7px 12px; background-image: none; + display: block !important; + border: none !important; width: auto; flex-basis: auto; border-radius: 0.5rem; @@ -15,10 +17,12 @@ &.toast-error { background-color: #BD362F; + color: white !important; } &.toast-info { background-color: #555; + color: #eee !important; } } } diff --git a/app/webpack.main.config.js b/app/webpack.config.main.mjs similarity index 82% rename from app/webpack.main.config.js rename to app/webpack.config.main.mjs index d382026d..793f1eb6 100644 --- a/app/webpack.main.config.js +++ b/app/webpack.config.main.mjs @@ -1,8 +1,10 @@ -const path = require('path') -const webpack = require('webpack') -const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin +import * as path from 'path' +import wp from 'webpack' +import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer' +import * as url from 'url' +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)) -module.exports = { +const config = { name: 'tabby-main', target: 'electron-main', entry: { @@ -55,13 +57,15 @@ module.exports = { 'yargs/yargs': 'commonjs yargs/yargs', }, plugins: [ - new webpack.optimize.ModuleConcatenationPlugin(), - new webpack.DefinePlugin({ + new wp.optimize.ModuleConcatenationPlugin(), + new wp.DefinePlugin({ 'process.type': '"main"', }), ], } if (process.env.BUNDLE_ANALYZER) { - module.exports.plugins.push(new BundleAnalyzerPlugin()) + config.plugins.push(new BundleAnalyzerPlugin()) } + +export default () => config diff --git a/app/webpack.config.js b/app/webpack.config.mjs similarity index 57% rename from app/webpack.config.js rename to app/webpack.config.mjs index 3c9d6d0f..bcfa1306 100644 --- a/app/webpack.config.js +++ b/app/webpack.config.mjs @@ -1,7 +1,23 @@ -const path = require('path') -const webpack = require('webpack') +import * as fs from 'fs' +import * as path from 'path' +import wp from 'webpack' +import * as url from 'url' +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)) -module.exports = { +import { AngularWebpackPlugin } from '@ngtools/webpack' +import { createEs2015LinkerPlugin } from '@angular/compiler-cli/linker/babel' +const linkerPlugin = createEs2015LinkerPlugin({ + linkerJitMode: true, + fileSystem: { + resolve: path.resolve, + exists: fs.existsSync, + dirname: path.dirname, + relative: path.relative, + readFile: fs.readFileSync, + }, +}) + +export default () => ({ name: 'tabby', target: 'node', entry: { @@ -28,13 +44,22 @@ module.exports = { }, module: { rules: [ + { + test: /\.(m?)js$/, + loader: 'babel-loader', + options: { + plugins: [linkerPlugin], + compact: false, + cacheDirectory: true, + }, + resolve: { + fullySpecified: false, + }, + }, { test: /\.ts$/, use: { - loader: 'ts-loader', - options: { - configFile: path.resolve(__dirname, 'tsconfig.json'), - }, + loader: '@ngtools/webpack', }, }, { test: /\.scss$/, use: ['style-loader', 'css-loader', 'sass-loader'] }, @@ -56,9 +81,14 @@ module.exports = { path: 'commonjs path', }, plugins: [ - new webpack.optimize.ModuleConcatenationPlugin(), - new webpack.DefinePlugin({ + new wp.optimize.ModuleConcatenationPlugin(), + new wp.DefinePlugin({ 'process.type': '"renderer"', }), + new AngularWebpackPlugin({ + tsconfig: path.resolve(__dirname, 'tsconfig.json'), + directTemplateLoading: false, + jitMode: true, + }) ], -} +}) diff --git a/app/yarn.lock b/app/yarn.lock index 9e9665d7..63b66d57 100644 --- a/app/yarn.lock +++ b/app/yarn.lock @@ -16,6 +16,13 @@ update-notifier "^2.2.0" yargs "^8.0.2" +"@ngx-translate/core@^14.0.0": + version "14.0.0" + resolved "https://registry.yarnpkg.com/@ngx-translate/core/-/core-14.0.0.tgz#af421d0e1a28376843f0fed375cd2fae7630a5ff" + integrity sha512-UevdwNCXMRCdJv//0kC8h2eSfmi02r29xeE8E9gJ1Al4D4jEJ7eiLPdjslTMc21oJNGguqqWeEVjf64SFtvw2w== + dependencies: + tslib "^2.3.0" + "@serialport/binding-abstract@^9.0.2": version "9.2.3" resolved "https://registry.yarnpkg.com/@serialport/binding-abstract/-/binding-abstract-9.2.3.tgz#e7dd273357b6a698af7ad58db6f57f62443a0acb" @@ -140,11 +147,16 @@ dependencies: "@types/node" "*" -"@types/node@*", "@types/node@18.7.23": +"@types/node@*": version "18.7.23" resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.23.tgz#75c580983846181ebe5f4abc40fe9dfb2d65665f" integrity sha512-DWNcCHolDq0ZKGizjx2DZjR/PqsYwAcYUJmfMWqtVU2MBMG5Mo+xFZrhGId5r/O5HOuMPyQEcM6KUBp5lBZZBg== +"@types/node@18.11.19": + version "18.11.19" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.19.tgz#35e26df9ec441ab99d73e99e9aca82935eea216d" + integrity sha512-YUgMWAQBWLObABqrvx8qKO1enAvBUdjZOAWQ5grBAkp5LQv45jBvYKZ3oFS9iKRCQyFjqw6iuEa1vmFqtxYLZw== + "@types/node@^10.12.18": version "10.17.60" resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" @@ -1094,10 +1106,10 @@ figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== -"filesize@>= 4.0.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.3.0.tgz#dff53cfb3f104c9e422f346d53be8dbcc971bf11" - integrity sha512-ytx0ruGpDHKWVoiui6+BY/QMNngtDQ/pJaFwfBpQif0J63+E8DLdFyqS3NkKQn7vIruUEpoGD9JUJSg7Kp+I0g== +filesize@^9: + version "9.0.11" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-9.0.11.tgz#4ac3a42c084232dd9b2a1da0107f32d42fcfa5e4" + integrity sha512-gTAiTtI0STpKa5xesyTA9hA3LX4ga8sm2nWRcffEa1L/5vQwb4mj2MdzMkoHoGv4QzfDshQZuYscQSf8c4TKOA== fill-range@^7.0.1: version "7.0.1" @@ -2261,13 +2273,12 @@ native-process-working-directory@^1.0.2: dependencies: node-addon-api "^3.1.0" -ngx-filesize@^2.0.16: - version "2.0.16" - resolved "https://registry.yarnpkg.com/ngx-filesize/-/ngx-filesize-2.0.16.tgz#fdaba04170edb6cfcdf7be932783cf913b03f016" - integrity sha512-VdaCirE7hSyfQh8ZEmhzNEhbddiTYUHF4V6OX+KyTmnQSVx4hp9kmzDX5YlkIlmClI6wI+LZmH9/q7XS3fsMPA== +ngx-filesize@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ngx-filesize/-/ngx-filesize-3.0.1.tgz#620933ae181a1128905404e43b26abb99accba90" + integrity sha512-792I4fiG9EEPYjGib2+YTYAzfWIlccfy8uXNSXFFepuAntoS+eijLwnl0m7ajcQuNgbTtwEf9VmYIPN8mS3jqQ== dependencies: - filesize ">= 4.0.0" - tslib "^2.0.0" + tslib "^2.3.0" nice-try@^1.0.4: version "1.0.5" @@ -3717,11 +3728,16 @@ tough-cookie@~2.5.0: psl "^1.1.28" punycode "^2.1.1" -tslib@^2.0.0, tslib@^2.1.0: +tslib@^2.1.0: version "2.3.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== +tslib@^2.3.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" + integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz" diff --git a/build/mac/afterBuildHook.js b/build/mac/afterBuildHook.cjs similarity index 90% rename from build/mac/afterBuildHook.js rename to build/mac/afterBuildHook.cjs index ae04bd08..a306e784 100644 --- a/build/mac/afterBuildHook.js +++ b/build/mac/afterBuildHook.cjs @@ -1,5 +1,5 @@ const fs = require('fs') -const signHook = require('./afterSignHook') +const signHook = require('./afterSignHook.cjs') module.exports = async function (params) { // notarize the app on Mac OS only. diff --git a/build/mac/afterSignHook.js b/build/mac/afterSignHook.cjs similarity index 100% rename from build/mac/afterSignHook.js rename to build/mac/afterSignHook.cjs diff --git a/electron-builder.yml b/electron-builder.yml index 80fd9bb2..914147dc 100644 --- a/electron-builder.yml +++ b/electron-builder.yml @@ -3,8 +3,8 @@ appId: org.tabby productName: Tabby compression: normal npmRebuild: false -afterSign: "./build/mac/afterSignHook.js" -afterAllArtifactBuild: "./build/mac/afterBuildHook.js" +afterSign: "./build/mac/afterSignHook.cjs" +afterAllArtifactBuild: "./build/mac/afterBuildHook.cjs" files: - '**/*' - dist diff --git a/locale/app.pot b/locale/app.pot index 6c67b27f..f91b845b 100644 --- a/locale/app.pot +++ b/locale/app.pot @@ -11,7 +11,7 @@ msgstr "" msgid "{name} copy" msgstr "" -#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:82 +#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:77 msgid "A second font family used to display characters missing in the main font" msgstr "" @@ -35,8 +35,8 @@ msgstr "" msgid "Acrylic background" msgstr "" -#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:28 -#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:15 +#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:24 +#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:11 msgid "Add" msgstr "" @@ -52,13 +52,13 @@ msgstr "" msgid "Add..." msgstr "" -#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:89 +#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:84 msgid "Additional space between lines" msgstr "" #: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:22 -#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:65 -#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:52 +#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:61 +#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:50 #: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:124 msgid "Advanced" msgstr "" @@ -79,7 +79,7 @@ msgstr "" msgid "Agent type" msgstr "" -#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:172 +#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:169 msgid "Allows opening .bat files in tabs, but breaks some shells" msgstr "" @@ -104,11 +104,11 @@ msgstr "" msgid "Are you sure you want to close Tabby? You can disable this prompt in Settings -> Window." msgstr "" -#: tabby-core/src/services/config.service.ts:381 +#: tabby-core/src/services/config.service.ts:383 msgid "Are you sure?" msgstr "" -#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:20 +#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:18 msgid "Arguments" msgstr "" @@ -120,7 +120,7 @@ msgstr "" msgid "Ask before closing the browser tab" msgstr "" -#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:143 +#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:141 msgid "Audible" msgstr "" @@ -128,7 +128,7 @@ msgstr "" msgid "Authentication method" msgstr "" -#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:83 +#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:79 msgid "Author" msgstr "" @@ -136,7 +136,7 @@ msgstr "" msgid "Auto" msgstr "" -#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:156 +#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:153 msgid "Auto-open a terminal on app start" msgstr "" @@ -150,7 +150,7 @@ msgstr "" msgid "Automatic Updates" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:58 +#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:54 msgid "Automatically upload changes and check for updates every minute" msgstr "" @@ -172,7 +172,7 @@ msgstr "" msgid "Beginning of the line" msgstr "" -#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:69 +#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:64 msgid "Blink cursor" msgstr "" @@ -188,8 +188,8 @@ msgstr "" msgid "Bold font weight" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:138 -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:82 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:125 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:73 msgid "Bottom" msgstr "" @@ -201,15 +201,15 @@ msgstr "" msgid "Broadcast mode. Click anywhere to cancel." msgstr "" -#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:54 -#: tabby-settings/src/components/profilesSettingsTab.component.ts:175 +#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50 +#: tabby-settings/src/components/profilesSettingsTab.component.ts:182 msgid "Built-in" msgstr "" #: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:7 -#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:55 +#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:53 #: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:14 -#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:14 +#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:12 #: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:10 #: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:7 #: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:32 @@ -219,7 +219,7 @@ msgstr "" #: tabby-settings/src/components/configSyncSettingsTab.component.ts:79 #: tabby-settings/src/components/configSyncSettingsTab.component.ts:99 #: tabby-ssh/src/sftpContextMenu.ts:40 -#: tabby-terminal/src/api/baseTerminalTab.component.ts:478 +#: tabby-terminal/src/api/baseTerminalTab.component.ts:480 msgid "Cancel" msgstr "" @@ -294,20 +294,23 @@ msgstr "" msgid "Close tabs to the right" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:193 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:175 msgid "Close the window after closing the last tab" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:35 +#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:33 #: tabby-core/src/tabContextMenu.ts:132 msgid "Color" msgstr "" -#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:216 #: tabby-terminal/src/settings.ts:29 msgid "Color scheme" msgstr "" +#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:216 +msgid "Colors" +msgstr "" + #: tabby-core/src/hotkeys.ts:73 msgid "Combine all tabs into the current tab" msgstr "" @@ -325,7 +328,7 @@ msgid "Commands" msgstr "" #: tabby-core/src/theme.ts:20 -msgid "Compact" +msgid "Compact (legacy)" msgstr "" #: tabby-settings/src/components/configSyncSettingsTab.component.ts:126 @@ -350,7 +353,7 @@ msgstr "" msgid "Config uploaded" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:35 +#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:31 msgid "Configs" msgstr "" @@ -358,7 +361,7 @@ msgstr "" msgid "Connect through a proxy server" msgstr "" -#: tabby-core/src/index.ts:227 +#: tabby-core/src/index.ts:212 #: tabby-core/src/services/profiles.service.ts:178 msgid "Connect to \"%s\"..." msgstr "" @@ -369,7 +372,7 @@ msgstr "" #: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:19 #: tabby-serial/src/components/serialTab.component.ts:66 -#: tabby-ssh/src/components/sshTab.component.ts:140 +#: tabby-ssh/src/components/sshTab.component.ts:143 #: tabby-telnet/src/components/telnetTab.component.ts:72 msgid "Connecting" msgstr "" @@ -378,11 +381,11 @@ msgstr "" msgid "Connection" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:30 +#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:26 msgid "Connection failed: {error}" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:42 +#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:40 msgid "Connection name will be used instead" msgstr "" @@ -390,10 +393,10 @@ msgstr "" msgid "Context menu" msgstr "" -#: tabby-terminal/src/api/baseTerminalTab.component.ts:223 -#: tabby-terminal/src/api/baseTerminalTab.component.ts:231 -#: tabby-terminal/src/api/baseTerminalTab.component.ts:547 -#: tabby-terminal/src/api/baseTerminalTab.component.ts:768 +#: tabby-terminal/src/api/baseTerminalTab.component.ts:225 +#: tabby-terminal/src/api/baseTerminalTab.component.ts:233 +#: tabby-terminal/src/api/baseTerminalTab.component.ts:549 +#: tabby-terminal/src/api/baseTerminalTab.component.ts:770 #: tabby-terminal/src/tabContextMenu.ts:30 msgid "Copied" msgstr "" @@ -423,7 +426,7 @@ msgstr "" msgid "Copy with formatting" msgstr "" -#: tabby-core/src/services/config.service.ts:366 +#: tabby-core/src/services/config.service.ts:368 msgid "Could not decrypt config" msgstr "" @@ -436,7 +439,7 @@ msgstr "" msgid "Create directory" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:93 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:83 msgid "Current" msgstr "" @@ -452,15 +455,15 @@ msgstr "" msgid "Current process: {name}" msgstr "" -#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:53 +#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:51 msgid "Cursor shape" msgstr "" -#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:49 +#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:47 msgid "Custom" msgstr "" -#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:95 +#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:90 msgid "Custom CSS" msgstr "" @@ -484,7 +487,7 @@ msgstr "" msgid "Default profile for new tabs" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:80 +#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:78 msgid "Default profile settings" msgstr "" @@ -496,13 +499,13 @@ msgstr "" msgid "Defaults for {type}" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:48 +#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:44 #: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:28 #: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:9 #: tabby-settings/src/components/configSyncSettingsTab.component.ts:116 #: tabby-settings/src/components/profilesSettingsTab.component.ts:139 -#: tabby-settings/src/components/profilesSettingsTab.component.ts:204 -#: tabby-settings/src/components/profilesSettingsTab.component.ts:217 +#: tabby-settings/src/components/profilesSettingsTab.component.ts:211 +#: tabby-settings/src/components/profilesSettingsTab.component.ts:224 #: tabby-settings/src/components/vaultSettingsTab.component.ts:49 #: tabby-ssh/src/sftpContextMenu.ts:39 #: tabby-ssh/src/sftpContextMenu.ts:47 @@ -512,7 +515,7 @@ msgid "Delete" msgstr "" #: tabby-settings/src/components/profilesSettingsTab.component.ts:137 -#: tabby-settings/src/components/profilesSettingsTab.component.ts:202 +#: tabby-settings/src/components/profilesSettingsTab.component.ts:209 #: tabby-terminal/src/components/colorSchemeSettingsTab.component.ts:87 msgid "Delete \"{name}\"?" msgstr "" @@ -537,7 +540,7 @@ msgstr "" msgid "Delete the config on the remote side?" msgstr "" -#: tabby-settings/src/components/profilesSettingsTab.component.ts:214 +#: tabby-settings/src/components/profilesSettingsTab.component.ts:221 msgid "Delete the group's profiles?" msgstr "" @@ -561,33 +564,33 @@ msgstr "" msgid "Direct" msgstr "" -#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:61 +#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:57 msgid "Disable" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:41 +#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:39 msgid "Disable dynamic tab title" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:229 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:211 msgid "Disable fluent background while dragging" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:215 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:197 msgid "Disable GPU acceleration" msgstr "" -#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:54 +#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50 msgid "Disabled" msgstr "" #: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:26 -#: tabby-ssh/src/components/sshTab.component.ts:246 +#: tabby-ssh/src/components/sshTab.component.ts:249 #: tabby-telnet/src/components/telnetTab.component.ts:115 msgid "Disconnect" msgstr "" -#: tabby-ssh/src/components/sshTab.component.ts:244 +#: tabby-ssh/src/components/sshTab.component.ts:247 #: tabby-telnet/src/components/telnetTab.component.ts:113 msgid "Disconnect from {host}?" msgstr "" @@ -596,7 +599,7 @@ msgstr "" msgid "Display images via Sixel escape sequences" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:88 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:78 msgid "Display on" msgstr "" @@ -604,7 +607,7 @@ msgstr "" msgid "Do not abort" msgstr "" -#: tabby-ssh/src/components/sshTab.component.ts:247 +#: tabby-ssh/src/components/sshTab.component.ts:250 #: tabby-telnet/src/components/telnetTab.component.ts:116 msgid "Do not close" msgstr "" @@ -614,23 +617,23 @@ msgstr "" msgid "Do not remember" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:102 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:90 msgid "Dock always on top" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:65 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:60 msgid "Dock the terminal" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:109 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:97 msgid "Docked terminal size" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:116 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:104 msgid "Docked terminal space" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:62 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:57 msgid "Docking" msgstr "" @@ -642,7 +645,7 @@ msgstr "" msgid "Down" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:47 +#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:43 msgid "Download" msgstr "" @@ -671,7 +674,7 @@ msgstr "" msgid "Edit locally" msgstr "" -#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:62 +#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:58 msgid "Enable" msgstr "" @@ -688,7 +691,7 @@ msgstr "" msgid "Enable automatic installation of updates when they become available." msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:222 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:204 msgid "Enable fluent background option" msgstr "" @@ -712,12 +715,12 @@ msgstr "" msgid "End of the line" msgstr "" -#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:19 +#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:17 msgid "Environment" msgstr "" -#: tabby-core/src/services/config.service.ts:370 -#: tabby-core/src/services/config.service.ts:384 +#: tabby-core/src/services/config.service.ts:372 +#: tabby-core/src/services/config.service.ts:386 msgid "Erase config" msgstr "" @@ -729,15 +732,15 @@ msgstr "" msgid "Error in {plugin}:" msgstr "" -#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:9 +#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10 msgid "Exact match" msgstr "" -#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:19 +#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:15 msgid "Example:" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:223 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:205 msgid "Experimental Windows 10 background style known to cause issues" msgstr "" @@ -745,7 +748,7 @@ msgstr "" msgid "Export" msgstr "" -#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:81 +#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:76 msgid "Fallback font" msgstr "" @@ -761,11 +764,11 @@ msgstr "" msgid "Filter" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:157 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:140 msgid "Fixed" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:230 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:212 msgid "Fluent background sometimes causes drag lag" msgstr "" @@ -785,7 +788,7 @@ msgstr "" msgid "Focus all tabs at once (broadcast)" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:207 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:189 msgid "Focus follows mouse" msgstr "" @@ -825,11 +828,15 @@ msgstr "" msgid "Focus the pane on the right" msgstr "" +#: tabby-core/src/theme.ts:42 +msgid "Follow the color scheme" +msgstr "" + #: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:7 msgid "Font" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:201 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:183 msgid "For keyboard shortcuts" msgstr "" @@ -853,7 +860,7 @@ msgstr "" msgid "Forget" msgstr "" -#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:58 +#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:45 msgid "Forward port" msgstr "" @@ -861,7 +868,7 @@ msgstr "" msgid "Forwarded ports" msgstr "" -#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:47 +#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:46 msgid "From color scheme" msgstr "" @@ -873,7 +880,7 @@ msgstr "" msgid "Frontend" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:58 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:54 msgid "Full" msgstr "" @@ -887,11 +894,11 @@ msgstr "" msgid "Generate a pre-filled GitHub issue" msgstr "" -#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:27 +#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:25 msgid "Get" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:20 +#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:18 msgid "Get it from the Tabby Web settings window" msgstr "" @@ -911,7 +918,7 @@ msgstr "" msgid "Group" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:212 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:194 msgid "Hacks" msgstr "" @@ -928,27 +935,27 @@ msgstr "" msgid "Hexadecimal" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:187 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:169 msgid "Hide tab close button" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:169 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:151 msgid "Hide tab index" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:181 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:163 msgid "Hide tab options button" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:123 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:111 msgid "Hide window on focus loss" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:124 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:112 msgid "Hides the docked terminal when you click away." msgstr "" -#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:28 +#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:26 msgid "Homepage" msgstr "" @@ -970,7 +977,7 @@ msgstr "" msgid "Hotkeys" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:71 +#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:69 msgid "How Tabby presents itself through environment vars" msgstr "" @@ -990,11 +997,11 @@ msgstr "" msgid "Icon" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:154 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:138 msgid "id.tab-width.dynamic" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:64 +#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:62 msgid "If disabled, only custom profiles will show up in the profile selector" msgstr "" @@ -1022,7 +1029,7 @@ msgstr "" msgid "Input newlines" msgstr "" -#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:41 +#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:39 msgid "Installed" msgstr "" @@ -1056,7 +1063,7 @@ msgid "Jump to previous word" msgstr "" #: tabby-settings/src/components/profilesSettingsTab.component.ts:140 -#: tabby-settings/src/components/profilesSettingsTab.component.ts:205 +#: tabby-settings/src/components/profilesSettingsTab.component.ts:212 #: tabby-settings/src/components/vaultSettingsTab.component.ts:50 #: tabby-terminal/src/components/colorSchemeSettingsTab.component.ts:90 #: tabby-terminal/src/components/loginScriptsSettings.component.ts:33 @@ -1068,7 +1075,7 @@ msgstr "" msgid "Keep Alive Interval (Milliseconds)" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:103 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:91 msgid "Keep docked terminal always on top" msgstr "" @@ -1114,8 +1121,8 @@ msgstr "" msgid "Learn how to allow Tabby to detect remote shell's working directory." msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:141 -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:76 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:127 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:69 #: tabby-core/src/tabContextMenu.ts:80 msgid "Left" msgstr "" @@ -1132,7 +1139,7 @@ msgstr "" msgid "Line editor, input is sent after you press Enter" msgstr "" -#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:88 +#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:83 msgid "Line padding" msgstr "" @@ -1140,11 +1147,11 @@ msgstr "" msgid "Loading" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:38 +#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:34 msgid "Loading configs..." msgstr "" -#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:49 +#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:39 #: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5 msgid "Local" msgstr "" @@ -1179,11 +1186,11 @@ msgstr "" msgid "Maximize the active pane" msgstr "" -#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:75 +#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:70 msgid "Minimum contrast ratio" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:43 +#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:39 msgid "Modified on {date}" msgstr "" @@ -1199,11 +1206,11 @@ msgstr "" msgid "Move tab to the right" msgstr "" -#: tabby-settings/src/components/profilesSettingsTab.component.ts:216 +#: tabby-settings/src/components/profilesSettingsTab.component.ts:223 msgid "Move to \"Ungrouped\"" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:208 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:190 msgid "Moving the mouse over an inactive pane will cause it to activate" msgstr "" @@ -1220,7 +1227,7 @@ msgstr "" msgid "Name for the new directory" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:52 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:50 msgid "Native" msgstr "" @@ -1232,16 +1239,16 @@ msgstr "" msgid "New config on {platform}" msgstr "" -#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:15 +#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:16 msgid "New item" msgstr "" -#: tabby-settings/src/components/profilesSettingsTab.component.ts:186 +#: tabby-settings/src/components/profilesSettingsTab.component.ts:193 #: tabby-settings/src/components/vaultSettingsTab.component.ts:118 msgid "New name" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:22 +#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:20 msgid "New profile" msgstr "" @@ -1316,13 +1323,13 @@ msgstr "" msgid "Number of lines kept in the buffer" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:70 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:65 #: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:137 #: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:60 msgid "Off" msgstr "" -#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:85 +#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:81 msgid "Official" msgstr "" @@ -1330,7 +1337,7 @@ msgstr "" msgid "On GitHub Discussions" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:41 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:39 msgid "Opacity" msgstr "" @@ -1350,7 +1357,7 @@ msgstr "" msgid "Open SFTP panel" msgstr "" -#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:9 +#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10 msgid "Optional" msgstr "" @@ -1407,11 +1414,11 @@ msgstr "" msgid "Overwrite the local config and start syncing?" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:200 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:182 msgid "Pane resize step" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:197 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:179 msgid "Panes" msgstr "" @@ -1419,7 +1426,7 @@ msgstr "" msgid "Parity" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:68 +#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:64 msgid "Partial config sync is not possible when the config is encrypted via Vault." msgstr "" @@ -1433,7 +1440,7 @@ msgid "Password" msgstr "" #: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:62 -#: tabby-terminal/src/api/baseTerminalTab.component.ts:477 +#: tabby-terminal/src/api/baseTerminalTab.component.ts:479 #: tabby-terminal/src/tabContextMenu.ts:35 msgid "Paste" msgstr "" @@ -1446,7 +1453,7 @@ msgstr "" msgid "Paste if no selection, else copy" msgstr "" -#: tabby-terminal/src/api/baseTerminalTab.component.ts:484 +#: tabby-terminal/src/api/baseTerminalTab.component.ts:486 msgid "Paste multiple lines?" msgstr "" @@ -1485,7 +1492,7 @@ msgid "Ports" msgstr "" #: tabby-serial/src/components/serialTab.component.ts:86 -#: tabby-ssh/src/components/sshTab.component.ts:169 +#: tabby-ssh/src/components/sshTab.component.ts:172 #: tabby-telnet/src/components/telnetTab.component.ts:53 msgid "Press any key to reconnect" msgstr "" @@ -1529,7 +1536,7 @@ msgstr "" msgid "Profiles & connections" msgstr "" -#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:13 +#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:12 msgid "Program" msgstr "" @@ -1545,13 +1552,13 @@ msgstr "" msgid "Puts all of Tabby's configuration into the vault" msgstr "" -#: tabby-core/src/index.ts:226 +#: tabby-core/src/index.ts:211 #: tabby-core/src/services/profiles.service.ts:177 msgid "Quick connect" msgstr "" -#: tabby-core/src/services/config.service.ts:371 -#: tabby-core/src/services/config.service.ts:385 +#: tabby-core/src/services/config.service.ts:373 +#: tabby-core/src/services/config.service.ts:387 msgid "Quit" msgstr "" @@ -1579,7 +1586,7 @@ msgstr "" msgid "Red" msgstr "" -#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:9 +#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10 msgid "Regex" msgstr "" @@ -1591,8 +1598,8 @@ msgstr "" msgid "Remember for {time}" msgstr "" +#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:41 #: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5 -#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:52 msgid "Remote" msgstr "" @@ -1618,7 +1625,7 @@ msgstr "" msgid "Reopen last tab" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:46 +#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42 #: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:26 msgid "Replace" msgstr "" @@ -1656,7 +1663,7 @@ msgstr "" msgid "Restart the app to apply changes" msgstr "" -#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:162 +#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:159 msgid "Restore terminal tabs on app start" msgstr "" @@ -1664,8 +1671,8 @@ msgstr "" msgid "Reuse session for multiple tabs" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:144 -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:79 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:129 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:71 #: tabby-core/src/tabContextMenu.ts:78 msgid "Right" msgstr "" @@ -1679,7 +1686,7 @@ msgid "Run as administrator" msgstr "" #: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:6 -#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:54 +#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:52 #: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:30 msgid "Save" msgstr "" @@ -1753,7 +1760,7 @@ msgstr "" msgid "Search plugins" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:19 +#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:17 msgid "Secret sync token" msgstr "" @@ -1774,7 +1781,7 @@ msgstr "" msgid "Select file storage" msgstr "" -#: tabby-core/src/index.ts:238 +#: tabby-core/src/index.ts:223 msgid "Select profile" msgstr "" @@ -1809,7 +1816,7 @@ msgstr "" msgid "Set master passphrase" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:13 +#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:11 msgid "Set passphrase" msgstr "" @@ -1817,11 +1824,11 @@ msgstr "" msgid "Set password" msgstr "" -#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:171 +#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:168 msgid "Set Tabby as %COMSPEC%" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:57 +#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:55 msgid "Set to 0 to disable recent profiles" msgstr "" @@ -1830,7 +1837,7 @@ msgid "Sets the SSH agent's named pipe path." msgstr "" #: tabby-settings/src/buttonProvider.ts:28 -#: tabby-settings/src/components/settingsTab.component.ts:58 +#: tabby-settings/src/components/settingsTab.component.ts:57 msgid "Settings" msgstr "" @@ -1838,7 +1845,7 @@ msgstr "" msgid "Shell" msgstr "" -#: tabby-terminal/src/api/baseTerminalTab.component.ts:549 +#: tabby-terminal/src/api/baseTerminalTab.component.ts:551 msgid "Shell does not support current path detection" msgstr "" @@ -1854,7 +1861,7 @@ msgstr "" msgid "Show a confirmation box when pasting multiple lines" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:63 +#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:61 msgid "Show built-in profiles in selector" msgstr "" @@ -1870,7 +1877,7 @@ msgstr "" msgid "Show defaults" msgstr "" -#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:149 +#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:146 msgid "Show Mixer" msgstr "" @@ -1878,7 +1885,7 @@ msgstr "" msgid "Show pane labels (for rearranging)" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:175 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:157 msgid "Show profile icon on tab" msgstr "" @@ -1886,7 +1893,7 @@ msgstr "" msgid "Show profile selector" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:56 +#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:54 msgid "Show recent profiles in selector" msgstr "" @@ -1898,7 +1905,7 @@ msgstr "" msgid "Show Serial connections" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:163 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:145 msgid "Show tabs in fullscreen mode" msgstr "" @@ -1922,12 +1929,12 @@ msgstr "" msgid "Slow feed" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:66 -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:89 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:61 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:79 msgid "Snaps the window to a side of the screen" msgstr "" -#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:26 +#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:22 #: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:9 #: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:20 msgid "SOCKS proxy" @@ -1992,10 +1999,10 @@ msgid "SSH password for {user}@{host}:{port}" msgstr "" #: tabby-core/src/theme.ts:8 -msgid "Standard" +msgid "Standard (legacy)" msgstr "" -#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:153 +#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:150 msgid "Startup" msgstr "" @@ -2011,7 +2018,7 @@ msgstr "" msgid "Subscribe to updates" msgstr "" -#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:17 +#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:13 msgid "Substitutions allowed." msgstr "" @@ -2031,7 +2038,7 @@ msgstr "" msgid "Sync" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:57 +#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:53 msgid "Sync automatically" msgstr "" @@ -2039,15 +2046,15 @@ msgstr "" msgid "Sync host" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:72 +#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:68 msgid "Sync hotkeys" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:84 +#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:80 msgid "Sync Vault" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:78 +#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:74 msgid "Sync window settings" msgstr "" @@ -2086,15 +2093,15 @@ msgstr "" msgid "Tabby news and updates on Twitter" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:128 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:116 msgid "Tabs" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:131 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:119 msgid "Tabs location" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:150 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:134 msgid "Tabs width" msgstr "" @@ -2102,7 +2109,7 @@ msgstr "" msgid "Telnet session" msgstr "" -#: tabby-terminal/src/api/baseTerminalTab.component.ts:198 +#: tabby-terminal/src/api/baseTerminalTab.component.ts:200 #: tabby-terminal/src/settings.ts:43 msgid "Terminal" msgstr "" @@ -2115,7 +2122,7 @@ msgstr "" msgid "Terminal bell" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:70 +#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:68 msgid "Terminal identification" msgstr "" @@ -2135,15 +2142,15 @@ msgstr "" msgid "There is a saved password for this connection" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:81 +#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:79 msgid "These apply to all profiles of a given type" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:55 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:52 msgid "Thin" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:216 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:198 msgid "Tick this if you're experiencing aliasing, ghosting or other visual issues" msgstr "" @@ -2163,8 +2170,8 @@ msgstr "" msgid "Toggles the Tabby window visibility" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:135 -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:73 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:123 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:67 msgid "Top" msgstr "" @@ -2172,7 +2179,7 @@ msgstr "" msgid "Trim whitespace and newlines" msgstr "" -#: tabby-core/src/services/config.service.ts:369 +#: tabby-core/src/services/config.service.ts:371 msgid "Try again" msgstr "" @@ -2188,11 +2195,11 @@ msgstr "" msgid "Ungrouped" msgstr "" -#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:63 +#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:59 msgid "Uninstall" msgstr "" -#: tabby-settings/src/components/profilesSettingsTab.component.ts:250 +#: tabby-settings/src/components/profilesSettingsTab.component.ts:257 msgid "Unknown" msgstr "" @@ -2213,16 +2220,16 @@ msgstr "" msgid "Update" msgstr "" -#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:56 +#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:52 msgid "Upgrade to {version}" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:46 +#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42 #: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:10 msgid "Upload" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:50 +#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:46 msgid "Upload as a new config" msgstr "" @@ -2280,7 +2287,7 @@ msgstr "" msgid "Verify host keys when connecting" msgstr "" -#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:79 +#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:75 msgid "Version" msgstr "" @@ -2292,7 +2299,7 @@ msgstr "" msgid "Vibrancy" msgstr "" -#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:140 +#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:139 msgid "Visual" msgstr "" @@ -2328,7 +2335,7 @@ msgstr "" msgid "When WinSCP is detected, you can launch an SCP session from the context menu." msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:48 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:46 msgid "Whether a custom window or an OS native window should be used" msgstr "" @@ -2337,19 +2344,19 @@ msgstr "" msgid "Window" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:117 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:105 msgid "Window dimension along the edge" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:110 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:98 msgid "Window dimension away from the edge" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:47 +#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:45 msgid "Window frame" msgstr "" -#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:168 +#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:165 msgid "Windows" msgstr "" @@ -2374,7 +2381,7 @@ msgstr "" msgid "Working directory detection" msgstr "" -#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:148 +#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:145 msgid "WSL terminal bell can only be muted via Volume Mixer" msgstr "" @@ -2406,8 +2413,8 @@ msgstr "" msgid "Zoom out" msgstr "" +#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:43 #: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5 -#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:55 msgctxt "[Dynamic] port forwarding" msgid "id.port-forwarding.dynamic" msgstr "" diff --git a/package.json b/package.json index d63f498f..1c147657 100644 --- a/package.json +++ b/package.json @@ -1,17 +1,19 @@ { "devDependencies": { - "@angular/animations": "^12.0.0", - "@angular/cdk": "^12.2.9", - "@angular/common": "^12.0.0", - "@angular/compiler": "^12.0.0", - "@angular/compiler-cli": "^12.0.0", - "@angular/core": "^12.0.0", - "@angular/forms": "^12.0.0", - "@angular/platform-browser": "^12.0.0", - "@angular/platform-browser-dynamic": "^12.0.0", + "@angular/animations": "^15.1.3", + "@angular/cdk": "^15.1.3", + "@angular/common": "^15.1.3", + "@angular/compiler": "^15.1.3", + "@angular/compiler-cli": "^15.1.3", + "@angular/core": "^15.1.3", + "@angular/forms": "^15.1.3", + "@angular/platform-browser": "^15.1.3", + "@angular/platform-browser-dynamic": "^15.1.3", "@biesbjerg/ngx-translate-extract-marker": "^1.0.0", "@fortawesome/fontawesome-free": "^6.2.0", - "@ng-bootstrap/ng-bootstrap": "^10.0.0", + "@ng-bootstrap/ng-bootstrap": "^14.0.1", + "@ngtools/webpack": "^15.1.4", + "@popperjs/core": "^2.11.6", "@sentry/cli": "^1.74.3", "@sentry/electron": "^2.5.4", "@tabby-gang/to-string-loader": "^1.1.7-beta.2", @@ -21,21 +23,21 @@ "@types/fs-extra": "^9.0.13", "@types/js-yaml": "^4.0.5", "@types/node": "16.0.1", - "@types/sortablejs": "^1.15.0", "@types/webpack-env": "^1.18.0", "@typescript-eslint/eslint-plugin": "^5.45.0", "@typescript-eslint/parser": "^5.45.0", "apply-loader": "2.0.0", "axios": "^0.27.2", + "babel-loader": "^9.1.2", "browserify-sign": "^4.2.1", "clone-deep": "^4.0.1", "compare-versions": "^5", "core-js": "^3.21.1", "core-js-pure": "^3.21.1", "cross-env": "7.0.3", - "css-loader": "^6.7.1", + "css-loader": "^6.7.3", "deep-equal": "2.0.5", - "electron": "21.3.1", + "electron": "22.3.1", "electron-builder": "^24.0.0-alpha.1", "electron-download": "^4.1.1", "electron-installer-snap": "^5.1.0", @@ -51,10 +53,8 @@ "json-loader": "^0.5.7", "lru-cache": "^6.0.0", "macos-release": "^3.1.0", - "ngx-sortablejs": "^11.1.0", - "ngx-toastr": "^14.0.0", - "node-abi": "^3.25.0", - "node-sass": "^7.0.3", + "ngx-toastr": "^16.0.2", + "node-abi": "^3.33.0", "npmlog": "6.0.2", "npx": "^10.2.2", "patch-package": "^6.4.7", @@ -66,49 +66,52 @@ "pug-loader": "^2.4.0", "pug-static-loader": "2.0.0", "raw-loader": "4.0.2", - "sass-loader": "^12.6.0", + "rxjs": "^7.5.7", + "sass": "^1.58.0", + "sass-loader": "^13.2.0", "shell-quote": "^1.7.4", "shelljs": "0.8.5", "slugify": "^1.6.5", - "sortablejs": "^1.15.0", "source-code-pro": "^2.38.0", - "source-map-loader": "^3.0.1", + "source-map-loader": "^4.0.1", "source-sans-pro": "3.6.0", "ssh2": "Eugeny/ssh2#9de907d62907d6d45debdcc0ed8dda5b7b19dc7c", "style-loader": "^3.3.1", "svg-inline-loader": "^0.8.2", "thenby": "^1.3.4", "ts-loader": "^9.4.2", - "tslib": "^2.4.0", + "tsimportlib": "^0.0.3", + "tslib": "^2.5.0", "typedoc": "^0.22.18", - "typescript": "^4.3.5", + "typescript": "^4.9.5", "utils-decorators": "^1.10.4", - "val-loader": "4.0.0", + "val-loader": "5.0.1", "webpack": "^5.75.0", "webpack-bundle-analyzer": "^4.7.0", - "webpack-cli": "^5.0.0", - "yaml-loader": "0.6.0", + "webpack-cli": "^5.0.1", + "yaml-loader": "0.8.0", "zone.js": "^0.11.5" }, "resolutions": { "*/pug": "^3", "lzma-native": "^8.0.0", - "*/node-abi": "^3.25.0", + "*/node-abi": "^3.33.0", "**/graceful-fs": "^4.2.4" }, "scripts": { - "build": "npm run build:typings && node scripts/build-modules.js", - "build:typings": "node scripts/build-typings.js", + "build": "npm run build:typings && node scripts/build-modules.mjs", + "build:typings": "node scripts/build-typings.mjs", "watch": "cross-env TABBY_DEV=1 webpack --progress --color --watch", "start": "cross-env TABBY_DEV=1 electron app -d --inspect", "start:prod": "electron app --debug", "prod": "cross-env TABBY_DEV=1 electron app", - "docs": "node scripts/build-docs.js", + "docs": "node scripts/build-docs.mjs", "lint": "eslint --ext ts */src */lib", - "postinstall": "patch-package && node ./scripts/install-deps.js && node ./scripts/build-native.js", + "postinstall": "patch-package && node ./scripts/install-deps.mjs && node ./scripts/build-native.mjs", "i18n:pull": "crowdin pull --skip-untranslated-strings", - "i18n:extract": "node scripts/i18n-extract.js", + "i18n:extract": "node scripts/i18n-extract.mjs", "i18n:push": "crowdin push" }, + "type": "module", "private": true } diff --git a/scripts/build-docs.js b/scripts/build-docs.mjs similarity index 71% rename from scripts/build-docs.js rename to scripts/build-docs.mjs index 4d5519d6..30c60d78 100755 --- a/scripts/build-docs.js +++ b/scripts/build-docs.mjs @@ -1,7 +1,7 @@ #!/usr/bin/env node -const sh = require('shelljs') -const vars = require('./vars') -const log = require('npmlog') +import sh from 'shelljs' +import * as vars from './vars.mjs' +import log from 'npmlog' vars.packagesWithDocs.forEach(([dest, src]) => { log.info('docs', src) diff --git a/scripts/build-linux.js b/scripts/build-linux.mjs similarity index 91% rename from scripts/build-linux.js rename to scripts/build-linux.mjs index f0196930..6d303575 100755 --- a/scripts/build-linux.js +++ b/scripts/build-linux.mjs @@ -1,7 +1,7 @@ #!/usr/bin/env node /* eslint-disable @typescript-eslint/prefer-nullish-coalescing */ -const builder = require('electron-builder').build -const vars = require('./vars') +import { build as builder } from 'electron-builder' +import * as vars from './vars.mjs' const isTag = (process.env.GITHUB_REF || '').startsWith('refs/tags/') diff --git a/scripts/build-macos.js b/scripts/build-macos.mjs similarity index 92% rename from scripts/build-macos.js rename to scripts/build-macos.mjs index eaaecbfc..1e80a78c 100755 --- a/scripts/build-macos.js +++ b/scripts/build-macos.mjs @@ -1,7 +1,7 @@ #!/usr/bin/env node /* eslint-disable @typescript-eslint/prefer-nullish-coalescing */ -const builder = require('electron-builder').build -const vars = require('./vars') +import { build as builder } from 'electron-builder' +import * as vars from './vars.mjs' const isTag = (process.env.GITHUB_REF || '').startsWith('refs/tags/') diff --git a/scripts/build-modules.js b/scripts/build-modules.js deleted file mode 100755 index 3307837b..00000000 --- a/scripts/build-modules.js +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env node -const vars = require('./vars') -const log = require('npmlog') -const webpack = require('webpack') -const { promisify } = require('util') - -const configs = [ - '../app/webpack.main.config.js', - '../app/webpack.config.js', - ...vars.allPackages.map(x => `../${x}/webpack.config.js`), -] - -;(async () => { - for (const c of configs) { - log.info('build', c) - const stats = await promisify(webpack)(require(c)) - console.log(stats.toString({ colors: true })) - if (stats.hasErrors()) { - process.exit(1) - } - } -})() diff --git a/scripts/build-modules.mjs b/scripts/build-modules.mjs new file mode 100755 index 00000000..2bbb83c0 --- /dev/null +++ b/scripts/build-modules.mjs @@ -0,0 +1,22 @@ +#!/usr/bin/env node +import * as vars from './vars.mjs' +import log from 'npmlog' +import webpack from 'webpack' +import { promisify } from 'node:util' + +const configs = [ + '../app/webpack.config.main.mjs', + '../app/webpack.config.mjs', + ...vars.allPackages.map(x => `../${x}/webpack.config.mjs`), +] + +;(async () => { + for (const c of configs) { + log.info('build', c) + const stats = await promisify(webpack)((await import(c)).default()) + console.log(stats.toString({ colors: true })) + if (stats.hasErrors()) { + process.exit(1) + } + } +})() diff --git a/scripts/build-native.js b/scripts/build-native.mjs similarity index 81% rename from scripts/build-native.js rename to scripts/build-native.mjs index 2745a34e..054a1ee0 100755 --- a/scripts/build-native.js +++ b/scripts/build-native.mjs @@ -1,7 +1,11 @@ #!/usr/bin/env node -const rebuild = require('electron-rebuild').default -const path = require('path') -const vars = require('./vars') +import { rebuild } from 'electron-rebuild' +import * as path from 'path' +import * as vars from './vars.mjs' + +import * as url from 'url' +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)) + if (process.platform === 'win32' || process.platform === 'linux') { process.env.ARCH = ((process.env.ARCH || process.arch) === 'arm') ? 'armv7l' : process.env.ARCH || process.arch diff --git a/scripts/build-typings.js b/scripts/build-typings.mjs similarity index 66% rename from scripts/build-typings.js rename to scripts/build-typings.mjs index 7a28a550..f8b81e7e 100755 --- a/scripts/build-typings.js +++ b/scripts/build-typings.mjs @@ -1,7 +1,7 @@ #!/usr/bin/env node -const sh = require('shelljs') -const vars = require('./vars') -const log = require('npmlog') +import sh from 'shelljs' +import * as vars from './vars.mjs' +import log from 'npmlog' vars.builtinPlugins.forEach(plugin => { log.info('typings', plugin) diff --git a/scripts/build-windows.js b/scripts/build-windows.mjs similarity index 90% rename from scripts/build-windows.js rename to scripts/build-windows.mjs index 9af45241..cc4ea927 100755 --- a/scripts/build-windows.js +++ b/scripts/build-windows.mjs @@ -1,7 +1,7 @@ #!/usr/bin/env node /* eslint-disable @typescript-eslint/prefer-nullish-coalescing */ -const builder = require('electron-builder').build -const vars = require('./vars') +import { build as builder } from 'electron-builder' +import * as vars from './vars.mjs' const isTag = (process.env.GITHUB_REF || process.env.BUILD_SOURCEBRANCH || '').startsWith('refs/tags/') diff --git a/scripts/generate-icon-metadata.js b/scripts/generate-icon-metadata.mjs similarity index 66% rename from scripts/generate-icon-metadata.js rename to scripts/generate-icon-metadata.mjs index 7bbd5e1c..a7b78014 100755 --- a/scripts/generate-icon-metadata.js +++ b/scripts/generate-icon-metadata.mjs @@ -1,7 +1,12 @@ #!/usr/bin/env node -const jsYaml = require('js-yaml') -const fs = require('fs') -const path = require('path') +import jsYaml from 'js-yaml' +import fs from 'node:fs' +import path from 'node:path' + +import * as url from 'url' +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)) + + const metadata = jsYaml.load(fs.readFileSync(path.resolve(__dirname, '../node_modules/@fortawesome/fontawesome-free/metadata/icons.yml'))) let result = {} diff --git a/scripts/i18n-extract.js b/scripts/i18n-extract.mjs similarity index 87% rename from scripts/i18n-extract.js rename to scripts/i18n-extract.mjs index 65ad9fa2..d146300e 100755 --- a/scripts/i18n-extract.js +++ b/scripts/i18n-extract.mjs @@ -1,9 +1,9 @@ #!/usr/bin/env node -const sh = require('shelljs') -const fs = require('fs/promises') -const vars = require('./vars') -const log = require('npmlog') -const { GettextExtractor, JsExtractors, HtmlExtractors } = require('gettext-extractor') +import sh from 'shelljs' +import fs from 'node:fs/promises' +import * as vars from './vars.mjs' +import log from 'npmlog' +import { GettextExtractor, JsExtractors, HtmlExtractors } from 'gettext-extractor' let extractor = new GettextExtractor() diff --git a/scripts/install-deps.js b/scripts/install-deps.mjs similarity index 88% rename from scripts/install-deps.js rename to scripts/install-deps.mjs index 6b65a9ad..6ea9996f 100755 --- a/scripts/install-deps.js +++ b/scripts/install-deps.mjs @@ -1,7 +1,7 @@ #!/usr/bin/env node -const sh = require('shelljs') -const vars = require('./vars') -const log = require('npmlog') +import sh from 'shelljs' +import * as vars from './vars.mjs' +import log from 'npmlog' log.info('patch') sh.exec(`yarn patch-package`, { fatal: true }) diff --git a/scripts/prepackage-plugins.js b/scripts/prepackage-plugins.mjs similarity index 75% rename from scripts/prepackage-plugins.js rename to scripts/prepackage-plugins.mjs index bf579f41..2176c1ed 100755 --- a/scripts/prepackage-plugins.js +++ b/scripts/prepackage-plugins.mjs @@ -1,10 +1,14 @@ #!/usr/bin/env node -const rebuild = require('electron-rebuild').default -const sh = require('shelljs') -const path = require('path') -const fs = require('fs') -const vars = require('./vars') -const log = require('npmlog') +import { rebuild } from 'electron-rebuild' +import sh from 'shelljs' +import path from 'node:path' +import fs from 'node:fs' +import * as vars from './vars.mjs' +import log from 'npmlog' + +import * as url from 'url' +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)) + let target = path.resolve(__dirname, '../builtin-plugins') sh.mkdir('-p', target) diff --git a/scripts/publish-plugins.js b/scripts/publish-plugins.mjs similarity index 65% rename from scripts/publish-plugins.js rename to scripts/publish-plugins.mjs index b020306a..e00185d4 100755 --- a/scripts/publish-plugins.js +++ b/scripts/publish-plugins.mjs @@ -1,8 +1,8 @@ #!/usr/bin/env node -const sh = require('shelljs') -const vars = require('./vars') -const log = require('npmlog') -const { execSync } = require('child_process') +import sh from 'shelljs' +import * as vars from './vars.mjs' +import log from 'npmlog' +import { execSync } from 'child_process' vars.allPackages.forEach(plugin => { log.info('bump', plugin) diff --git a/scripts/sentry-upload.js b/scripts/sentry-upload.mjs similarity index 93% rename from scripts/sentry-upload.js rename to scripts/sentry-upload.mjs index 315f98e0..6a844212 100755 --- a/scripts/sentry-upload.js +++ b/scripts/sentry-upload.mjs @@ -1,6 +1,6 @@ #!/usr/bin/env node -const sh = require('shelljs') -const vars = require('./vars') +import sh from 'shelljs' +import * as vars from './vars.mjs' const sentryCli = process.platform === 'win32' ? 'node_modules\\.bin\\sentry-cli.cmd' : 'sentry-cli' diff --git a/scripts/vars.js b/scripts/vars.mjs similarity index 66% rename from scripts/vars.js rename to scripts/vars.mjs index 0446855a..9f4e2d45 100755 --- a/scripts/vars.js +++ b/scripts/vars.mjs @@ -1,19 +1,22 @@ -const path = require('path') -const fs = require('fs') -const semver = require('semver') -const childProcess = require('child_process') +import * as path from 'path' +import * as fs from 'fs' +import * as semver from 'semver' +import * as childProcess from 'child_process' + +import * as url from 'url' +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)) const electronInfo = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../node_modules/electron/package.json'))) -exports.version = childProcess.execSync('git describe --tags', { encoding:'utf-8' }) -exports.version = exports.version.substring(1).trim() -exports.version = exports.version.replace('-', '-c') +export let version = childProcess.execSync('git describe --tags', { encoding:'utf-8' }) +version = version.substring(1).trim() +version = version.replace('-', '-c') -if (exports.version.includes('-c')) { - exports.version = semver.inc(exports.version, 'prepatch').replace('-0', `-nightly.${process.env.REV ?? 0}`) +if (version.includes('-c')) { + version = semver.inc(version, 'prepatch').replace('-0', `-nightly.${process.env.REV ?? 0}`) } -exports.builtinPlugins = [ +export const builtinPlugins = [ 'tabby-core', 'tabby-settings', 'tabby-terminal', @@ -28,26 +31,26 @@ exports.builtinPlugins = [ 'tabby-linkifier', ] -exports.packagesWithDocs = [ +export const packagesWithDocs = [ ['.', 'tabby-core'], ['terminal', 'tabby-terminal'], ['local', 'tabby-local'], ['settings', 'tabby-settings'], ] -exports.allPackages = [ - ...exports.builtinPlugins, +export const allPackages = [ + ...builtinPlugins, 'web', 'tabby-web-demo', ] -exports.bundledModules = [ +export const bundledModules = [ '@angular', '@ng-bootstrap', ] -exports.electronVersion = electronInfo.version +export const electronVersion = electronInfo.version -exports.keygenConfig = { +export const keygenConfig = { provider: 'keygen', account: 'a06315f2-1031-47c6-9181-e92a20ec815e', channel: 'stable', @@ -70,6 +73,6 @@ exports.keygenConfig = { }[process.platform], } -if (!exports.keygenConfig.product) { +if (!keygenConfig.product) { throw new Error(`Unrecognized platform ${process.platform}/${process.env.ARCH ?? process.arch}`) } diff --git a/tabby-community-color-schemes/webpack.config.js b/tabby-community-color-schemes/webpack.config.js deleted file mode 100644 index 031a4556..00000000 --- a/tabby-community-color-schemes/webpack.config.js +++ /dev/null @@ -1,6 +0,0 @@ -const config = require('../webpack.plugin.config') -module.exports = config({ - name: 'community-color-schemes', - dirname: __dirname, -}) -module.exports.module.rules.push({ test: /[\\\/]schemes[\\\/]/, use: 'raw-loader' }) diff --git a/tabby-community-color-schemes/webpack.config.mjs b/tabby-community-color-schemes/webpack.config.mjs new file mode 100644 index 00000000..15219263 --- /dev/null +++ b/tabby-community-color-schemes/webpack.config.mjs @@ -0,0 +1,14 @@ +import * as path from 'path' +import * as url from 'url' +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)) + +import config from '../webpack.plugin.config.mjs' + +export default () => { + const cfg = config({ + name: 'community-color-schemes', + dirname: __dirname, + }) + cfg.module.rules.push({ test: /[\\\/]schemes[\\\/]/, use: 'raw-loader' }) + return cfg +} diff --git a/tabby-core/package.json b/tabby-core/package.json index 36c3b5df..888080c6 100644 --- a/tabby-core/package.json +++ b/tabby-core/package.json @@ -1,6 +1,6 @@ { "name": "tabby-core", - "version": "1.0.189-nightly.2", + "version": "1.0.189-nightly.0", "description": "Tabby core", "keywords": [ "tabby-builtin-plugin" @@ -17,15 +17,13 @@ "author": "Eugene Pankov", "license": "MIT", "devDependencies": { - "@ngx-translate/core": "^14.0.0", - "bootstrap": "^4.1.3", + "bootstrap": "^5.3.0-alpha.1", + "color": "^4.2.3", "deepmerge": "^4.1.1", "fuzzy-search": "^3.2.1", "js-yaml": "^4.0.0", "messageformat": "^2.3.0", "mixpanel": "^0.17.0", - "ngx-filesize": "^2.0.16", - "ngx-perfect-scrollbar": "^10.1.0", "ngx-translate-messageformat-compiler": "^4.11.0", "readable-stream": "4.2.0", "uuid": "^9.0.0" diff --git a/tabby-core/src/api/index.ts b/tabby-core/src/api/index.ts index f156f8a8..0384396d 100644 --- a/tabby-core/src/api/index.ts +++ b/tabby-core/src/api/index.ts @@ -36,6 +36,7 @@ export { TabsService, NewTabParameters, TabComponentType } from '../services/tab export { UpdaterService } from '../services/updater.service' export { VaultService, Vault, VaultSecret, VaultFileSecret, VAULT_SECRET_TYPE_FILE, StoredVault, VaultSecretKey } from '../services/vault.service' export { FileProvidersService } from '../services/fileProviders.service' -export { LocaleService, TranslateServiceWrapper as TranslateService } from '../services/locale.service' +export { LocaleService } from '../services/locale.service' +export { TranslateService } from '@ngx-translate/core' export * from '../utils' export { UTF8Splitter } from '../utfSplitter' diff --git a/tabby-core/src/api/theme.ts b/tabby-core/src/api/theme.ts index 621ad4a7..bae63c16 100644 --- a/tabby-core/src/api/theme.ts +++ b/tabby-core/src/api/theme.ts @@ -13,4 +13,5 @@ export abstract class Theme { macOSWindowButtonsInsetX?: number macOSWindowButtonsInsetY?: number + followsColorScheme?: boolean } diff --git a/tabby-core/src/components/appRoot.component.ts b/tabby-core/src/components/appRoot.component.ts index cd51c9d9..367ede79 100644 --- a/tabby-core/src/components/appRoot.component.ts +++ b/tabby-core/src/components/appRoot.component.ts @@ -55,8 +55,8 @@ function makeTabAnimation (dimension: string, size: number) { /** @hidden */ @Component({ selector: 'app-root', - template: require('./appRoot.component.pug'), - styles: [require('./appRoot.component.scss')], + templateUrl: './appRoot.component.pug', + styleUrls: ['./appRoot.component.scss'], animations: [ trigger('animateTab', makeTabAnimation('width', 200)), ], @@ -90,6 +90,7 @@ export class AppRootComponent { ngbModal: NgbModal, _themes: ThemesService, ) { + // document.querySelector('app-root')?.remove() this.logger = log.create('main') this.logger.info('v', platform.getAppVersion()) diff --git a/tabby-core/src/components/baseTab.component.ts b/tabby-core/src/components/baseTab.component.ts index 20bacd7e..71d15cda 100644 --- a/tabby-core/src/components/baseTab.component.ts +++ b/tabby-core/src/components/baseTab.component.ts @@ -19,6 +19,7 @@ export interface GetRecoveryTokenOptions { /** * Abstract base class for custom tab components */ +// @Component({ template: '' }) export abstract class BaseTabComponent extends BaseComponent { /** * Parent tab (usually a SplitTabComponent) diff --git a/tabby-core/src/components/checkbox.component.ts b/tabby-core/src/components/checkbox.component.ts index 46a3d532..c0ac49d9 100644 --- a/tabby-core/src/components/checkbox.component.ts +++ b/tabby-core/src/components/checkbox.component.ts @@ -6,9 +6,9 @@ import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms' @Component({ selector: 'checkbox', template: ` -
- - +
+ +
`, providers: [ diff --git a/tabby-core/src/components/profileIcon.component.pug b/tabby-core/src/components/profileIcon.component.pug index 6e5ec137..afdad571 100644 --- a/tabby-core/src/components/profileIcon.component.pug +++ b/tabby-core/src/components/profileIcon.component.pug @@ -5,5 +5,5 @@ i.icon( ) .icon( [fastHtmlBind]='icon', - *ngIf='isHTML' + *ngIf='isHTML && icon' ) diff --git a/tabby-core/src/components/profileIcon.component.ts b/tabby-core/src/components/profileIcon.component.ts index c7bf0649..80d9733d 100644 --- a/tabby-core/src/components/profileIcon.component.ts +++ b/tabby-core/src/components/profileIcon.component.ts @@ -5,8 +5,8 @@ import { BaseComponent } from './base.component' /** @hidden */ @Component({ selector: 'profile-icon', - template: require('./profileIcon.component.pug'), - styles: [require('./profileIcon.component.scss')], + templateUrl:'./profileIcon.component.pug', + styleUrls: ['./profileIcon.component.scss'], }) export class ProfileIconComponent extends BaseComponent { @Input() icon?: string diff --git a/tabby-core/src/components/promptModal.component.pug b/tabby-core/src/components/promptModal.component.pug index a1176dca..9216818c 100644 --- a/tabby-core/src/components/promptModal.component.pug +++ b/tabby-core/src/components/promptModal.component.pug @@ -14,6 +14,6 @@ [(ngModel)]='remember', text='Remember' ) - button.btn.btn-primary.ml-auto( + button.btn.btn-primary.ms-auto( (click)='ok()', ) OK diff --git a/tabby-core/src/components/promptModal.component.ts b/tabby-core/src/components/promptModal.component.ts index 7b23e3ea..84780d64 100644 --- a/tabby-core/src/components/promptModal.component.ts +++ b/tabby-core/src/components/promptModal.component.ts @@ -3,10 +3,11 @@ import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' /** @hidden */ @Component({ - template: require('./promptModal.component.pug'), + templateUrl:'./promptModal.component.pug', }) export class PromptModalComponent { @Input() value: string + @Input() prompt: string|undefined @Input() password: boolean @Input() remember: boolean @Input() showRememberCheckbox: boolean diff --git a/tabby-core/src/components/renameTabModal.component.ts b/tabby-core/src/components/renameTabModal.component.ts index 2f246800..a912efb4 100644 --- a/tabby-core/src/components/renameTabModal.component.ts +++ b/tabby-core/src/components/renameTabModal.component.ts @@ -5,7 +5,7 @@ import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' /** @hidden */ @Component({ selector: 'rename-tab-modal', - template: require('./renameTabModal.component.pug'), + templateUrl:'./renameTabModal.component.pug', }) export class RenameTabModalComponent { @Input() value: string diff --git a/tabby-core/src/components/safeModeModal.component.ts b/tabby-core/src/components/safeModeModal.component.ts index 9c3e344b..b2f3ee5e 100644 --- a/tabby-core/src/components/safeModeModal.component.ts +++ b/tabby-core/src/components/safeModeModal.component.ts @@ -3,7 +3,7 @@ import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' /** @hidden */ @Component({ - template: require('./safeModeModal.component.pug'), + templateUrl:'./safeModeModal.component.pug', }) export class SafeModeModalComponent { @Input() error: Error diff --git a/tabby-core/src/components/selectorModal.component.pug b/tabby-core/src/components/selectorModal.component.pug index c6fa6b6c..fd9c8b05 100644 --- a/tabby-core/src/components/selectorModal.component.pug +++ b/tabby-core/src/components/selectorModal.component.pug @@ -21,14 +21,14 @@ [icon]='option.icon', [color]='option.color' ) - .title.mr-2 {{getOptionText(option)}} + .title.me-2 {{getOptionText(option)}} .description.no-wrap.text-muted( *ngIf='option.description !== getOptionText(option)' ) {{option.description}} - .ml-auto - .no-wrap.badge.badge-secondary.text-muted.ml-2(*ngIf='selectedIndex == i && canEditSelected()') + .ms-auto + .no-wrap.badge.text-bg-secondary.text-muted.ms-2(*ngIf='selectedIndex == i && canEditSelected()') span Backspace - i.fas.fa-pencil.ml-1 - .no-wrap.badge.badge-secondary.text-muted.ml-2(*ngIf='selectedIndex == i') + i.fas.fa-pencil.ms-1 + .no-wrap.badge.text-bg-secondary.text-muted.ms-2(*ngIf='selectedIndex == i') span Enter - i.fas.fa-arrow-right.ml-1 + i.fas.fa-arrow-right.ms-1 diff --git a/tabby-core/src/components/selectorModal.component.ts b/tabby-core/src/components/selectorModal.component.ts index 239b56d2..e40edfd2 100644 --- a/tabby-core/src/components/selectorModal.component.ts +++ b/tabby-core/src/components/selectorModal.component.ts @@ -7,8 +7,8 @@ import { SelectorOption } from '../api/selector' /** @hidden */ @Component({ selector: 'selector-modal', - template: require('./selectorModal.component.pug'), - styles: [require('./selectorModal.component.scss')], + templateUrl:'./selectorModal.component.pug', + styleUrls: ['./selectorModal.component.scss'], }) export class SelectorModalComponent { @Input() options: SelectorOption[] diff --git a/tabby-core/src/components/selfPositioning.component.ts b/tabby-core/src/components/selfPositioning.component.ts index f2d36d26..63130166 100644 --- a/tabby-core/src/components/selfPositioning.component.ts +++ b/tabby-core/src/components/selfPositioning.component.ts @@ -1,11 +1,12 @@ -import { HostBinding, ElementRef } from '@angular/core' +import { HostBinding, ElementRef, Component } from '@angular/core' import { BaseComponent } from './base.component' +@Component({}) export abstract class SelfPositioningComponent extends BaseComponent { - @HostBinding('style.left') cssLeft: string - @HostBinding('style.top') cssTop: string - @HostBinding('style.width') cssWidth: string | null - @HostBinding('style.height') cssHeight: string | null + @HostBinding('style.left') cssLeft = '' + @HostBinding('style.top') cssTop = '' + @HostBinding('style.width') cssWidth: string | null = null + @HostBinding('style.height') cssHeight: string | null = null constructor (protected element: ElementRef) { super() } diff --git a/tabby-core/src/components/splitTab.component.ts b/tabby-core/src/components/splitTab.component.ts index 0f398d40..4dd2db8a 100644 --- a/tabby-core/src/components/splitTab.component.ts +++ b/tabby-core/src/components/splitTab.component.ts @@ -186,7 +186,7 @@ export type SplitDropZoneInfo = { > `, - styles: [require('./splitTab.component.scss')], + styleUrls: ['./splitTab.component.scss'], }) export class SplitTabComponent extends BaseTabComponent implements AfterViewInit, OnDestroy { static DIRECTIONS: SplitDirection[] = ['t', 'r', 'b', 'l'] diff --git a/tabby-core/src/components/splitTabDropZone.component.ts b/tabby-core/src/components/splitTabDropZone.component.ts index d6821c8f..a5b6a4b9 100644 --- a/tabby-core/src/components/splitTabDropZone.component.ts +++ b/tabby-core/src/components/splitTabDropZone.component.ts @@ -18,7 +18,7 @@ import { SplitDropZoneInfo, SplitTabComponent } from './splitTab.component' >
`, - styles: [require('./splitTabDropZone.component.scss')], + styleUrls: ['./splitTabDropZone.component.scss'], }) export class SplitTabDropZoneComponent extends SelfPositioningComponent { @Input() dropZone: SplitDropZoneInfo diff --git a/tabby-core/src/components/splitTabPaneLabel.component.ts b/tabby-core/src/components/splitTabPaneLabel.component.ts index 21f308f3..17544c16 100644 --- a/tabby-core/src/components/splitTabPaneLabel.component.ts +++ b/tabby-core/src/components/splitTabPaneLabel.component.ts @@ -15,11 +15,11 @@ import { SelfPositioningComponent } from './selfPositioning.component' (cdkDragStarted)='onTabDragStart(tab)' (cdkDragEnded)='onTabDragEnd()' > - + `, - styles: [require('./splitTabPaneLabel.component.scss')], + styleUrls: ['./splitTabPaneLabel.component.scss'], }) export class SplitTabPaneLabelComponent extends SelfPositioningComponent { @Input() tab: BaseTabComponent diff --git a/tabby-core/src/components/splitTabSpanner.component.scss b/tabby-core/src/components/splitTabSpanner.component.scss index 93e50835..1bc9cfb9 100644 --- a/tabby-core/src/components/splitTabSpanner.component.scss +++ b/tabby-core/src/components/splitTabSpanner.component.scss @@ -3,7 +3,6 @@ position: absolute; z-index: 5; transition: 0.125s background; - background: rgba(0, 0, 0, .2); &.v { cursor: ns-resize; @@ -16,8 +15,4 @@ width: 10px; margin-left: -5px; } - - &:hover, &.active { - background: rgba(255, 255, 255, .125); - } } diff --git a/tabby-core/src/components/splitTabSpanner.component.ts b/tabby-core/src/components/splitTabSpanner.component.ts index 48f8aff7..76ac8585 100644 --- a/tabby-core/src/components/splitTabSpanner.component.ts +++ b/tabby-core/src/components/splitTabSpanner.component.ts @@ -7,7 +7,7 @@ import { SplitContainer } from './splitTab.component' @Component({ selector: 'split-tab-spanner', template: '', - styles: [require('./splitTabSpanner.component.scss')], + styleUrls: ['./splitTabSpanner.component.scss'], }) export class SplitTabSpannerComponent extends SelfPositioningComponent { @Input() container: SplitContainer diff --git a/tabby-core/src/components/startPage.component.pug b/tabby-core/src/components/startPage.component.pug index 77b9546b..76089062 100644 --- a/tabby-core/src/components/startPage.component.pug +++ b/tabby-core/src/components/startPage.component.pug @@ -1,10 +1,10 @@ -div +.mt-5 .tabby-logo h1.tabby-title Tabby sup α .list-group.mb-4 - a.list-group-item.list-group-item-action.d-flex( + a.list-group-item.list-group-item-action.d-flex.pt-3.pb-3( *ngFor='let command of commands; trackBy: buttonsTrackBy', (click)='command.run()', ) @@ -12,11 +12,11 @@ div span {{command.label}} footer.d-flex.align-items-center - .btn-group.mr-auto - button.btn.btn-dark((click)='homeBase.openGitHub()') + .btn-group.me-auto + button.btn.btn-link((click)='homeBase.openGitHub()') i.fab.fa-github span GitHub - button.btn.btn-dark((click)='homeBase.reportBug()') + button.btn.btn-link((click)='homeBase.reportBug()') i.fas.fa-bug span(translate) Report a problem diff --git a/tabby-core/src/components/startPage.component.ts b/tabby-core/src/components/startPage.component.ts index 07dca71d..2f47c76c 100644 --- a/tabby-core/src/components/startPage.component.ts +++ b/tabby-core/src/components/startPage.component.ts @@ -7,8 +7,8 @@ import { Command, CommandLocation } from '../api/commands' /** @hidden */ @Component({ selector: 'start-page', - template: require('./startPage.component.pug'), - styles: [require('./startPage.component.scss')], + templateUrl:'./startPage.component.pug', + styleUrls: ['./startPage.component.scss'], }) export class StartPageComponent { version: string @@ -28,7 +28,8 @@ export class StartPageComponent { return this.domSanitizer.bypassSecurityTrustHtml(icon ?? '') } - buttonsTrackBy (btn: Command): any { + // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types + buttonsTrackBy (_, btn: Command): any { return btn.label + btn.icon } } diff --git a/tabby-core/src/components/tabBody.component.scss b/tabby-core/src/components/tabBody.component.scss index 4c27b23f..d1dfaacf 100644 --- a/tabby-core/src/components/tabBody.component.scss +++ b/tabby-core/src/components/tabBody.component.scss @@ -7,9 +7,4 @@ >* { flex: auto; } - - > perfect-scrollbar { - width: auto; - height: auto; - } } diff --git a/tabby-core/src/components/tabBody.component.ts b/tabby-core/src/components/tabBody.component.ts index fe65c0e1..3d1562ea 100644 --- a/tabby-core/src/components/tabBody.component.ts +++ b/tabby-core/src/components/tabBody.component.ts @@ -8,9 +8,9 @@ import { BaseTabComponent } from '../components/baseTab.component' template: ` `, - styles: [ - require('./tabBody.component.scss'), - require('./tabBody.deep.component.css'), + styleUrls: [ + './tabBody.component.scss', + './tabBody.deep.component.css', ], }) export class TabBodyComponent implements OnChanges { diff --git a/tabby-core/src/components/tabHeader.component.pug b/tabby-core/src/components/tabHeader.component.pug index 17037998..e77458c9 100644 --- a/tabby-core/src/components/tabHeader.component.pug +++ b/tabby-core/src/components/tabHeader.component.pug @@ -8,7 +8,7 @@ profile-icon( *ngIf='config.store.terminal.showTabProfileIcon && tab.icon', [icon]='tab.icon', - [color]='tab.color' + [color]='tab.color ?? undefined' ) .name( diff --git a/tabby-core/src/components/tabHeader.component.scss b/tabby-core/src/components/tabHeader.component.scss index ad5d9f23..73364ccd 100644 --- a/tabby-core/src/components/tabHeader.component.scss +++ b/tabby-core/src/components/tabHeader.component.scss @@ -144,6 +144,5 @@ $tabs-height: 38px; right: 10px; bottom: 4px; height: 2px; - z-index: -1; } } diff --git a/tabby-core/src/components/tabHeader.component.ts b/tabby-core/src/components/tabHeader.component.ts index b7df24e8..ba53d1e1 100644 --- a/tabby-core/src/components/tabHeader.component.ts +++ b/tabby-core/src/components/tabHeader.component.ts @@ -15,8 +15,8 @@ import { PlatformService } from '../api/platform' /** @hidden */ @Component({ selector: 'tab-header', - template: require('./tabHeader.component.pug'), - styles: [require('./tabHeader.component.scss')], + templateUrl:'./tabHeader.component.pug', + styleUrls: ['./tabHeader.component.scss'], }) export class TabHeaderComponent extends BaseComponent { @Input() index: number diff --git a/tabby-core/src/components/titleBar.component.pug b/tabby-core/src/components/titleBar.component.pug index 50640804..45324e79 100644 --- a/tabby-core/src/components/titleBar.component.pug +++ b/tabby-core/src/components/titleBar.component.pug @@ -1,2 +1,2 @@ -.title((dblclick)='hostApp.toggleMaximize()') Tabby +.title((dblclick)='hostWindow.toggleMaximize()') Tabby window-controls diff --git a/tabby-core/src/components/titleBar.component.ts b/tabby-core/src/components/titleBar.component.ts index 9e8b088b..a6be133f 100644 --- a/tabby-core/src/components/titleBar.component.ts +++ b/tabby-core/src/components/titleBar.component.ts @@ -1,9 +1,12 @@ import { Component } from '@angular/core' +import { HostWindowService } from '../api' /** @hidden */ @Component({ selector: 'title-bar', - template: require('./titleBar.component.pug'), - styles: [require('./titleBar.component.scss')], + templateUrl:'./titleBar.component.pug', + styleUrls: ['./titleBar.component.scss'], }) -export class TitleBarComponent { } // eslint-disable-line @typescript-eslint/no-extraneous-class +export class TitleBarComponent { + constructor (public hostWindow: HostWindowService) { } +} diff --git a/tabby-core/src/components/toggle.component.scss b/tabby-core/src/components/toggle.component.scss index bc1ed495..033449ec 100644 --- a/tabby-core/src/components/toggle.component.scss +++ b/tabby-core/src/components/toggle.component.scss @@ -4,17 +4,19 @@ $height: 30px; $padding: 2px; display: inline-flex; - overflow: visible; border-radius: 3px; line-height: $height; height: $height; transition: 0.25s opacity; align-items: center; - overflow: hidden; padding-right: 10px; padding-left: 10px; margin-left: -10px; + .form-check { + margin: 0; + } + &.disabled { opacity: 0.5; } @@ -22,4 +24,8 @@ * { cursor: pointer; } + + label { + display: none; + } } diff --git a/tabby-core/src/components/toggle.component.ts b/tabby-core/src/components/toggle.component.ts index 3a3d915c..7e251d5c 100644 --- a/tabby-core/src/components/toggle.component.ts +++ b/tabby-core/src/components/toggle.component.ts @@ -6,12 +6,12 @@ import { CheckboxComponent } from './checkbox.component' @Component({ selector: 'toggle', template: ` -
- - +
+ +
`, - styles: [require('./toggle.component.scss')], + styleUrls: ['./toggle.component.scss'], providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: ToggleComponent, multi: true }, ], diff --git a/tabby-core/src/components/transfersMenu.component.pug b/tabby-core/src/components/transfersMenu.component.pug index 77b8cade..7ac952f1 100644 --- a/tabby-core/src/components/transfersMenu.component.pug +++ b/tabby-core/src/components/transfersMenu.component.pug @@ -1,6 +1,6 @@ .d-flex.align-items-center .dropdown-header(translate) File transfers - button.btn.btn-link.ml-auto((click)='removeAll(); $event.stopPropagation()') !{require('../icons/times.svg')} + button.btn.btn-link.ms-auto((click)='removeAll(); $event.stopPropagation()') !{require('../icons/times.svg')} .transfer(*ngFor='let transfer of transfers', (click)='showTransfer(transfer)') .icon(*ngIf='isDownload(transfer)') !{require('../icons/download.svg')} .icon(*ngIf='!isDownload(transfer)') !{require('../icons/upload.svg')} diff --git a/tabby-core/src/components/transfersMenu.component.ts b/tabby-core/src/components/transfersMenu.component.ts index 280602c4..02f3dff9 100644 --- a/tabby-core/src/components/transfersMenu.component.ts +++ b/tabby-core/src/components/transfersMenu.component.ts @@ -5,8 +5,8 @@ import { FileDownload, FileTransfer, PlatformService } from '../api/platform' /** @hidden */ @Component({ selector: 'transfers-menu', - template: require('./transfersMenu.component.pug'), - styles: [require('./transfersMenu.component.scss')], + templateUrl:'./transfersMenu.component.pug', + styleUrls: ['./transfersMenu.component.scss'], }) export class TransfersMenuComponent { @Input() transfers: FileTransfer[] diff --git a/tabby-core/src/components/unlockVaultModal.component.pug b/tabby-core/src/components/unlockVaultModal.component.pug index 44620417..4943110e 100644 --- a/tabby-core/src/components/unlockVaultModal.component.pug +++ b/tabby-core/src/components/unlockVaultModal.component.pug @@ -1,7 +1,7 @@ .modal-body .d-flex.align-items-center.mb-3 h3.m-0(translate) Vault is locked - .ml-auto(ngbDropdown, placement='bottom-right') + .ms-auto(ngbDropdown, placement='bottom-right') button.btn.btn-link(ngbDropdownToggle, (click)='$event.stopPropagation()') span( *ngIf='rememberFor', @@ -29,6 +29,5 @@ (keyup.enter)='ok()', (keyup.esc)='cancel()', ) - .input-group-append - button.btn.btn-secondary((click)='ok()', *ngIf='passphrase') - i.fas.fa-check + button.btn.btn-secondary((click)='ok()', *ngIf='passphrase') + i.fas.fa-check diff --git a/tabby-core/src/components/unlockVaultModal.component.ts b/tabby-core/src/components/unlockVaultModal.component.ts index efe295a2..7a4dcb3c 100644 --- a/tabby-core/src/components/unlockVaultModal.component.ts +++ b/tabby-core/src/components/unlockVaultModal.component.ts @@ -3,7 +3,7 @@ import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' /** @hidden */ @Component({ - template: require('./unlockVaultModal.component.pug'), + templateUrl:'./unlockVaultModal.component.pug', }) export class UnlockVaultModalComponent { passphrase: string diff --git a/tabby-core/src/components/welcomeTab.component.ts b/tabby-core/src/components/welcomeTab.component.ts index 43b71a1d..53f09151 100644 --- a/tabby-core/src/components/welcomeTab.component.ts +++ b/tabby-core/src/components/welcomeTab.component.ts @@ -8,8 +8,8 @@ import { LocaleService } from '../services/locale.service' /** @hidden */ @Component({ selector: 'welcome-page', - template: require('./welcomeTab.component.pug'), - styles: [require('./welcomeTab.component.scss')], + templateUrl:'./welcomeTab.component.pug', + styleUrls: ['./welcomeTab.component.scss'], }) export class WelcomeTabComponent extends BaseTabComponent { enableGlobalHotkey = true diff --git a/tabby-core/src/components/windowControls.component.ts b/tabby-core/src/components/windowControls.component.ts index f6f511f1..d8796231 100644 --- a/tabby-core/src/components/windowControls.component.ts +++ b/tabby-core/src/components/windowControls.component.ts @@ -6,8 +6,8 @@ import { AppService } from '../services/app.service' /** @hidden */ @Component({ selector: 'window-controls', - template: require('./windowControls.component.pug'), - styles: [require('./windowControls.component.scss')], + templateUrl:'./windowControls.component.pug', + styleUrls: ['./windowControls.component.scss'], }) export class WindowControlsComponent { constructor (public hostWindow: HostWindowService, public app: AppService) { } diff --git a/tabby-core/src/config.ts b/tabby-core/src/config.ts index 5ff96a08..4dd0d8dd 100644 --- a/tabby-core/src/config.ts +++ b/tabby-core/src/config.ts @@ -4,10 +4,10 @@ import { Platform } from './api/hostApp' /** @hidden */ export class CoreConfigProvider extends ConfigProvider { platformDefaults = { - [Platform.macOS]: require('./configDefaults.macos.yaml'), - [Platform.Windows]: require('./configDefaults.windows.yaml'), - [Platform.Linux]: require('./configDefaults.linux.yaml'), - [Platform.Web]: require('./configDefaults.web.yaml'), + [Platform.macOS]: require('./configDefaults.macos.yaml').default, + [Platform.Windows]: require('./configDefaults.windows.yaml').default, + [Platform.Linux]: require('./configDefaults.linux.yaml').default, + [Platform.Web]: require('./configDefaults.web.yaml').default, } - defaults = require('./configDefaults.yaml') + defaults = require('./configDefaults.yaml').default } diff --git a/tabby-core/src/configDefaults.macos.yaml b/tabby-core/src/configDefaults.macos.yaml index 6ea35df8..7228a242 100644 --- a/tabby-core/src/configDefaults.macos.yaml +++ b/tabby-core/src/configDefaults.macos.yaml @@ -36,8 +36,7 @@ hotkeys: - '⌘-8' tab-9: - '⌘-9' - tab-10: - - '⌘-0' + tab-10: [] duplicate-tab: [] restart-tab: [] explode-tab: diff --git a/tabby-core/src/icons.json b/tabby-core/src/icons.json index b48f711e..05613008 100644 --- a/tabby-core/src/icons.json +++ b/tabby-core/src/icons.json @@ -1 +1 @@ -{"0":["s"],"1":["s"],"2":["s"],"3":["s"],"4":["s"],"5":["s"],"6":["s"],"7":["s"],"8":["s"],"9":["s"],"42-group":["b"],"500px":["b"],"a":["s"],"accessible-icon":["b"],"accusoft":["b"],"address-book":["s","r"],"address-card":["s","r"],"adn":["b"],"adversal":["b"],"affiliatetheme":["b"],"airbnb":["b"],"algolia":["b"],"align-center":["s"],"align-justify":["s"],"align-left":["s"],"align-right":["s"],"alipay":["b"],"amazon":["b"],"amazon-pay":["b"],"amilia":["b"],"anchor":["s"],"anchor-circle-check":["s"],"anchor-circle-exclamation":["s"],"anchor-circle-xmark":["s"],"anchor-lock":["s"],"android":["b"],"angellist":["b"],"angle-down":["s"],"angle-left":["s"],"angle-right":["s"],"angle-up":["s"],"angles-down":["s"],"angles-left":["s"],"angles-right":["s"],"angles-up":["s"],"angrycreative":["b"],"angular":["b"],"ankh":["s"],"app-store":["b"],"app-store-ios":["b"],"apper":["b"],"apple":["b"],"apple-pay":["b"],"apple-whole":["s"],"archway":["s"],"arrow-down":["s"],"arrow-down-1-9":["s"],"arrow-down-9-1":["s"],"arrow-down-a-z":["s"],"arrow-down-long":["s"],"arrow-down-short-wide":["s"],"arrow-down-up-across-line":["s"],"arrow-down-up-lock":["s"],"arrow-down-wide-short":["s"],"arrow-down-z-a":["s"],"arrow-left":["s"],"arrow-left-long":["s"],"arrow-pointer":["s"],"arrow-right":["s"],"arrow-right-arrow-left":["s"],"arrow-right-from-bracket":["s"],"arrow-right-long":["s"],"arrow-right-to-bracket":["s"],"arrow-right-to-city":["s"],"arrow-rotate-left":["s"],"arrow-rotate-right":["s"],"arrow-trend-down":["s"],"arrow-trend-up":["s"],"arrow-turn-down":["s"],"arrow-turn-up":["s"],"arrow-up":["s"],"arrow-up-1-9":["s"],"arrow-up-9-1":["s"],"arrow-up-a-z":["s"],"arrow-up-from-bracket":["s"],"arrow-up-from-ground-water":["s"],"arrow-up-from-water-pump":["s"],"arrow-up-long":["s"],"arrow-up-right-dots":["s"],"arrow-up-right-from-square":["s"],"arrow-up-short-wide":["s"],"arrow-up-wide-short":["s"],"arrow-up-z-a":["s"],"arrows-down-to-line":["s"],"arrows-down-to-people":["s"],"arrows-left-right":["s"],"arrows-left-right-to-line":["s"],"arrows-rotate":["s"],"arrows-spin":["s"],"arrows-split-up-and-left":["s"],"arrows-to-circle":["s"],"arrows-to-dot":["s"],"arrows-to-eye":["s"],"arrows-turn-right":["s"],"arrows-turn-to-dots":["s"],"arrows-up-down":["s"],"arrows-up-down-left-right":["s"],"arrows-up-to-line":["s"],"artstation":["b"],"asterisk":["s"],"asymmetrik":["b"],"at":["s"],"atlassian":["b"],"atom":["s"],"audible":["b"],"audio-description":["s"],"austral-sign":["s"],"autoprefixer":["b"],"avianex":["b"],"aviato":["b"],"award":["s"],"aws":["b"],"b":["s"],"baby":["s"],"baby-carriage":["s"],"backward":["s"],"backward-fast":["s"],"backward-step":["s"],"bacon":["s"],"bacteria":["s"],"bacterium":["s"],"bag-shopping":["s"],"bahai":["s"],"baht-sign":["s"],"ban":["s"],"ban-smoking":["s"],"bandage":["s"],"bandcamp":["b"],"barcode":["s"],"bars":["s"],"bars-progress":["s"],"bars-staggered":["s"],"baseball":["s"],"baseball-bat-ball":["s"],"basket-shopping":["s"],"basketball":["s"],"bath":["s"],"battery-empty":["s"],"battery-full":["s"],"battery-half":["s"],"battery-quarter":["s"],"battery-three-quarters":["s"],"battle-net":["b"],"bed":["s"],"bed-pulse":["s"],"beer-mug-empty":["s"],"behance":["b"],"behance-square":["b"],"bell":["s","r"],"bell-concierge":["s"],"bell-slash":["s","r"],"bezier-curve":["s"],"bicycle":["s"],"bilibili":["b"],"bimobject":["b"],"binoculars":["s"],"biohazard":["s"],"bitbucket":["b"],"bitcoin":["b"],"bitcoin-sign":["s"],"bity":["b"],"black-tie":["b"],"blackberry":["b"],"blender":["s"],"blender-phone":["s"],"blog":["s"],"blogger":["b"],"blogger-b":["b"],"bluetooth":["b"],"bluetooth-b":["b"],"bold":["s"],"bolt":["s"],"bolt-lightning":["s"],"bomb":["s"],"bone":["s"],"bong":["s"],"book":["s"],"book-atlas":["s"],"book-bible":["s"],"book-bookmark":["s"],"book-journal-whills":["s"],"book-medical":["s"],"book-open":["s"],"book-open-reader":["s"],"book-quran":["s"],"book-skull":["s"],"bookmark":["s","r"],"bootstrap":["b"],"border-all":["s"],"border-none":["s"],"border-top-left":["s"],"bore-hole":["s"],"bots":["b"],"bottle-droplet":["s"],"bottle-water":["s"],"bowl-food":["s"],"bowl-rice":["s"],"bowling-ball":["s"],"box":["s"],"box-archive":["s"],"box-open":["s"],"box-tissue":["s"],"boxes-packing":["s"],"boxes-stacked":["s"],"braille":["s"],"brain":["s"],"brazilian-real-sign":["s"],"bread-slice":["s"],"bridge":["s"],"bridge-circle-check":["s"],"bridge-circle-exclamation":["s"],"bridge-circle-xmark":["s"],"bridge-lock":["s"],"bridge-water":["s"],"briefcase":["s"],"briefcase-medical":["s"],"broom":["s"],"broom-ball":["s"],"brush":["s"],"btc":["b"],"bucket":["s"],"buffer":["b"],"bug":["s"],"bug-slash":["s"],"bugs":["s"],"building":["s","r"],"building-circle-arrow-right":["s"],"building-circle-check":["s"],"building-circle-exclamation":["s"],"building-circle-xmark":["s"],"building-columns":["s"],"building-flag":["s"],"building-lock":["s"],"building-ngo":["s"],"building-shield":["s"],"building-un":["s"],"building-user":["s"],"building-wheat":["s"],"bullhorn":["s"],"bullseye":["s"],"burger":["s"],"buromobelexperte":["b"],"burst":["s"],"bus":["s"],"bus-simple":["s"],"business-time":["s"],"buy-n-large":["b"],"buysellads":["b"],"c":["s"],"cake-candles":["s"],"calculator":["s"],"calendar":["s","r"],"calendar-check":["s","r"],"calendar-day":["s"],"calendar-days":["s","r"],"calendar-minus":["s","r"],"calendar-plus":["s","r"],"calendar-week":["s"],"calendar-xmark":["s","r"],"camera":["s"],"camera-retro":["s"],"camera-rotate":["s"],"campground":["s"],"canadian-maple-leaf":["b"],"candy-cane":["s"],"cannabis":["s"],"capsules":["s"],"car":["s"],"car-battery":["s"],"car-burst":["s"],"car-on":["s"],"car-rear":["s"],"car-side":["s"],"car-tunnel":["s"],"caravan":["s"],"caret-down":["s"],"caret-left":["s"],"caret-right":["s"],"caret-up":["s"],"carrot":["s"],"cart-arrow-down":["s"],"cart-flatbed":["s"],"cart-flatbed-suitcase":["s"],"cart-plus":["s"],"cart-shopping":["s"],"cash-register":["s"],"cat":["s"],"cc-amazon-pay":["b"],"cc-amex":["b"],"cc-apple-pay":["b"],"cc-diners-club":["b"],"cc-discover":["b"],"cc-jcb":["b"],"cc-mastercard":["b"],"cc-paypal":["b"],"cc-stripe":["b"],"cc-visa":["b"],"cedi-sign":["s"],"cent-sign":["s"],"centercode":["b"],"centos":["b"],"certificate":["s"],"chair":["s"],"chalkboard":["s"],"chalkboard-user":["s"],"champagne-glasses":["s"],"charging-station":["s"],"chart-area":["s"],"chart-bar":["s","r"],"chart-column":["s"],"chart-gantt":["s"],"chart-line":["s"],"chart-pie":["s"],"chart-simple":["s"],"check":["s"],"check-double":["s"],"check-to-slot":["s"],"cheese":["s"],"chess":["s"],"chess-bishop":["s","r"],"chess-board":["s"],"chess-king":["s","r"],"chess-knight":["s","r"],"chess-pawn":["s","r"],"chess-queen":["s","r"],"chess-rook":["s","r"],"chevron-down":["s"],"chevron-left":["s"],"chevron-right":["s"],"chevron-up":["s"],"child":["s"],"child-dress":["s"],"child-reaching":["s"],"child-rifle":["s"],"children":["s"],"chrome":["b"],"chromecast":["b"],"church":["s"],"circle":["s","r"],"circle-arrow-down":["s"],"circle-arrow-left":["s"],"circle-arrow-right":["s"],"circle-arrow-up":["s"],"circle-check":["s","r"],"circle-chevron-down":["s"],"circle-chevron-left":["s"],"circle-chevron-right":["s"],"circle-chevron-up":["s"],"circle-dollar-to-slot":["s"],"circle-dot":["s","r"],"circle-down":["s","r"],"circle-exclamation":["s"],"circle-h":["s"],"circle-half-stroke":["s"],"circle-info":["s"],"circle-left":["s","r"],"circle-minus":["s"],"circle-nodes":["s"],"circle-notch":["s"],"circle-pause":["s","r"],"circle-play":["s","r"],"circle-plus":["s"],"circle-question":["s","r"],"circle-radiation":["s"],"circle-right":["s","r"],"circle-stop":["s","r"],"circle-up":["s","r"],"circle-user":["s","r"],"circle-xmark":["s","r"],"city":["s"],"clapperboard":["s"],"clipboard":["s","r"],"clipboard-check":["s"],"clipboard-list":["s"],"clipboard-question":["s"],"clipboard-user":["s"],"clock":["s","r"],"clock-rotate-left":["s"],"clone":["s","r"],"closed-captioning":["s","r"],"cloud":["s"],"cloud-arrow-down":["s"],"cloud-arrow-up":["s"],"cloud-bolt":["s"],"cloud-meatball":["s"],"cloud-moon":["s"],"cloud-moon-rain":["s"],"cloud-rain":["s"],"cloud-showers-heavy":["s"],"cloud-showers-water":["s"],"cloud-sun":["s"],"cloud-sun-rain":["s"],"cloudflare":["b"],"cloudscale":["b"],"cloudsmith":["b"],"cloudversify":["b"],"clover":["s"],"cmplid":["b"],"code":["s"],"code-branch":["s"],"code-commit":["s"],"code-compare":["s"],"code-fork":["s"],"code-merge":["s"],"code-pull-request":["s"],"codepen":["b"],"codiepie":["b"],"coins":["s"],"colon-sign":["s"],"comment":["s","r"],"comment-dollar":["s"],"comment-dots":["s","r"],"comment-medical":["s"],"comment-slash":["s"],"comment-sms":["s"],"comments":["s","r"],"comments-dollar":["s"],"compact-disc":["s"],"compass":["s","r"],"compass-drafting":["s"],"compress":["s"],"computer":["s"],"computer-mouse":["s"],"confluence":["b"],"connectdevelop":["b"],"contao":["b"],"cookie":["s"],"cookie-bite":["s"],"copy":["s","r"],"copyright":["s","r"],"cotton-bureau":["b"],"couch":["s"],"cow":["s"],"cpanel":["b"],"creative-commons":["b"],"creative-commons-by":["b"],"creative-commons-nc":["b"],"creative-commons-nc-eu":["b"],"creative-commons-nc-jp":["b"],"creative-commons-nd":["b"],"creative-commons-pd":["b"],"creative-commons-pd-alt":["b"],"creative-commons-remix":["b"],"creative-commons-sa":["b"],"creative-commons-sampling":["b"],"creative-commons-sampling-plus":["b"],"creative-commons-share":["b"],"creative-commons-zero":["b"],"credit-card":["s","r"],"critical-role":["b"],"crop":["s"],"crop-simple":["s"],"cross":["s"],"crosshairs":["s"],"crow":["s"],"crown":["s"],"crutch":["s"],"cruzeiro-sign":["s"],"css3":["b"],"css3-alt":["b"],"cube":["s"],"cubes":["s"],"cubes-stacked":["s"],"cuttlefish":["b"],"d":["s"],"d-and-d":["b"],"d-and-d-beyond":["b"],"dailymotion":["b"],"dashcube":["b"],"database":["s"],"deezer":["b"],"delete-left":["s"],"delicious":["b"],"democrat":["s"],"deploydog":["b"],"deskpro":["b"],"desktop":["s"],"dev":["b"],"deviantart":["b"],"dharmachakra":["s"],"dhl":["b"],"diagram-next":["s"],"diagram-predecessor":["s"],"diagram-project":["s"],"diagram-successor":["s"],"diamond":["s"],"diamond-turn-right":["s"],"diaspora":["b"],"dice":["s"],"dice-d20":["s"],"dice-d6":["s"],"dice-five":["s"],"dice-four":["s"],"dice-one":["s"],"dice-six":["s"],"dice-three":["s"],"dice-two":["s"],"digg":["b"],"digital-ocean":["b"],"discord":["b"],"discourse":["b"],"disease":["s"],"display":["s"],"divide":["s"],"dna":["s"],"dochub":["b"],"docker":["b"],"dog":["s"],"dollar-sign":["s"],"dolly":["s"],"dong-sign":["s"],"door-closed":["s"],"door-open":["s"],"dove":["s"],"down-left-and-up-right-to-center":["s"],"down-long":["s"],"download":["s"],"draft2digital":["b"],"dragon":["s"],"draw-polygon":["s"],"dribbble":["b"],"dribbble-square":["b"],"dropbox":["b"],"droplet":["s"],"droplet-slash":["s"],"drum":["s"],"drum-steelpan":["s"],"drumstick-bite":["s"],"drupal":["b"],"dumbbell":["s"],"dumpster":["s"],"dumpster-fire":["s"],"dungeon":["s"],"dyalog":["b"],"e":["s"],"ear-deaf":["s"],"ear-listen":["s"],"earlybirds":["b"],"earth-africa":["s"],"earth-americas":["s"],"earth-asia":["s"],"earth-europe":["s"],"earth-oceania":["s"],"ebay":["b"],"edge":["b"],"edge-legacy":["b"],"egg":["s"],"eject":["s"],"elementor":["b"],"elevator":["s"],"ellipsis":["s"],"ellipsis-vertical":["s"],"ello":["b"],"ember":["b"],"empire":["b"],"envelope":["s","r"],"envelope-circle-check":["s"],"envelope-open":["s","r"],"envelope-open-text":["s"],"envelopes-bulk":["s"],"envira":["b"],"equals":["s"],"eraser":["s"],"erlang":["b"],"ethereum":["b"],"ethernet":["s"],"etsy":["b"],"euro-sign":["s"],"evernote":["b"],"exclamation":["s"],"expand":["s"],"expeditedssl":["b"],"explosion":["s"],"eye":["s","r"],"eye-dropper":["s"],"eye-low-vision":["s"],"eye-slash":["s","r"],"f":["s"],"face-angry":["s","r"],"face-dizzy":["s","r"],"face-flushed":["s","r"],"face-frown":["s","r"],"face-frown-open":["s","r"],"face-grimace":["s","r"],"face-grin":["s","r"],"face-grin-beam":["s","r"],"face-grin-beam-sweat":["s","r"],"face-grin-hearts":["s","r"],"face-grin-squint":["s","r"],"face-grin-squint-tears":["s","r"],"face-grin-stars":["s","r"],"face-grin-tears":["s","r"],"face-grin-tongue":["s","r"],"face-grin-tongue-squint":["s","r"],"face-grin-tongue-wink":["s","r"],"face-grin-wide":["s","r"],"face-grin-wink":["s","r"],"face-kiss":["s","r"],"face-kiss-beam":["s","r"],"face-kiss-wink-heart":["s","r"],"face-laugh":["s","r"],"face-laugh-beam":["s","r"],"face-laugh-squint":["s","r"],"face-laugh-wink":["s","r"],"face-meh":["s","r"],"face-meh-blank":["s","r"],"face-rolling-eyes":["s","r"],"face-sad-cry":["s","r"],"face-sad-tear":["s","r"],"face-smile":["s","r"],"face-smile-beam":["s","r"],"face-smile-wink":["s","r"],"face-surprise":["s","r"],"face-tired":["s","r"],"facebook":["b"],"facebook-f":["b"],"facebook-messenger":["b"],"facebook-square":["b"],"fan":["s"],"fantasy-flight-games":["b"],"faucet":["s"],"faucet-drip":["s"],"fax":["s"],"feather":["s"],"feather-pointed":["s"],"fedex":["b"],"fedora":["b"],"ferry":["s"],"figma":["b"],"file":["s","r"],"file-arrow-down":["s"],"file-arrow-up":["s"],"file-audio":["s","r"],"file-circle-check":["s"],"file-circle-exclamation":["s"],"file-circle-minus":["s"],"file-circle-plus":["s"],"file-circle-question":["s"],"file-circle-xmark":["s"],"file-code":["s","r"],"file-contract":["s"],"file-csv":["s"],"file-excel":["s","r"],"file-export":["s"],"file-image":["s","r"],"file-import":["s"],"file-invoice":["s"],"file-invoice-dollar":["s"],"file-lines":["s","r"],"file-medical":["s"],"file-pdf":["s","r"],"file-pen":["s"],"file-powerpoint":["s","r"],"file-prescription":["s"],"file-shield":["s"],"file-signature":["s"],"file-video":["s","r"],"file-waveform":["s"],"file-word":["s","r"],"file-zipper":["s","r"],"fill":["s"],"fill-drip":["s"],"film":["s"],"filter":["s"],"filter-circle-dollar":["s"],"filter-circle-xmark":["s"],"fingerprint":["s"],"fire":["s"],"fire-burner":["s"],"fire-extinguisher":["s"],"fire-flame-curved":["s"],"fire-flame-simple":["s"],"firefox":["b"],"firefox-browser":["b"],"first-order":["b"],"first-order-alt":["b"],"firstdraft":["b"],"fish":["s"],"fish-fins":["s"],"flag":["s","r"],"flag-checkered":["s"],"flag-usa":["s"],"flask":["s"],"flask-vial":["s"],"flickr":["b"],"flipboard":["b"],"floppy-disk":["s","r"],"florin-sign":["s"],"fly":["b"],"folder":["s","r"],"folder-closed":["s","r"],"folder-minus":["s"],"folder-open":["s","r"],"folder-plus":["s"],"folder-tree":["s"],"font":["s"],"font-awesome":["s","r","b"],"fonticons":["b"],"fonticons-fi":["b"],"football":["s"],"fort-awesome":["b"],"fort-awesome-alt":["b"],"forumbee":["b"],"forward":["s"],"forward-fast":["s"],"forward-step":["s"],"foursquare":["b"],"franc-sign":["s"],"free-code-camp":["b"],"freebsd":["b"],"frog":["s"],"fulcrum":["b"],"futbol":["s","r"],"g":["s"],"galactic-republic":["b"],"galactic-senate":["b"],"gamepad":["s"],"gas-pump":["s"],"gauge":["s"],"gauge-high":["s"],"gauge-simple":["s"],"gauge-simple-high":["s"],"gavel":["s"],"gear":["s"],"gears":["s"],"gem":["s","r"],"genderless":["s"],"get-pocket":["b"],"gg":["b"],"gg-circle":["b"],"ghost":["s"],"gift":["s"],"gifts":["s"],"git":["b"],"git-alt":["b"],"git-square":["b"],"github":["b"],"github-alt":["b"],"github-square":["b"],"gitkraken":["b"],"gitlab":["b"],"gitter":["b"],"glass-water":["s"],"glass-water-droplet":["s"],"glasses":["s"],"glide":["b"],"glide-g":["b"],"globe":["s"],"gofore":["b"],"golang":["b"],"golf-ball-tee":["s"],"goodreads":["b"],"goodreads-g":["b"],"google":["b"],"google-drive":["b"],"google-pay":["b"],"google-play":["b"],"google-plus":["b"],"google-plus-g":["b"],"google-plus-square":["b"],"google-wallet":["b"],"gopuram":["s"],"graduation-cap":["s"],"gratipay":["b"],"grav":["b"],"greater-than":["s"],"greater-than-equal":["s"],"grip":["s"],"grip-lines":["s"],"grip-lines-vertical":["s"],"grip-vertical":["s"],"gripfire":["b"],"group-arrows-rotate":["s"],"grunt":["b"],"guarani-sign":["s"],"guilded":["b"],"guitar":["s"],"gulp":["b"],"gun":["s"],"h":["s"],"hacker-news":["b"],"hacker-news-square":["b"],"hackerrank":["b"],"hammer":["s"],"hamsa":["s"],"hand":["s","r"],"hand-back-fist":["s","r"],"hand-dots":["s"],"hand-fist":["s"],"hand-holding":["s"],"hand-holding-dollar":["s"],"hand-holding-droplet":["s"],"hand-holding-hand":["s"],"hand-holding-heart":["s"],"hand-holding-medical":["s"],"hand-lizard":["s","r"],"hand-middle-finger":["s"],"hand-peace":["s","r"],"hand-point-down":["s","r"],"hand-point-left":["s","r"],"hand-point-right":["s","r"],"hand-point-up":["s","r"],"hand-pointer":["s","r"],"hand-scissors":["s","r"],"hand-sparkles":["s"],"hand-spock":["s","r"],"handcuffs":["s"],"hands":["s"],"hands-asl-interpreting":["s"],"hands-bound":["s"],"hands-bubbles":["s"],"hands-clapping":["s"],"hands-holding":["s"],"hands-holding-child":["s"],"hands-holding-circle":["s"],"hands-praying":["s"],"handshake":["s","r"],"handshake-angle":["s"],"handshake-simple":["s"],"handshake-simple-slash":["s"],"handshake-slash":["s"],"hanukiah":["s"],"hard-drive":["s","r"],"hashnode":["b"],"hashtag":["s"],"hat-cowboy":["s"],"hat-cowboy-side":["s"],"hat-wizard":["s"],"head-side-cough":["s"],"head-side-cough-slash":["s"],"head-side-mask":["s"],"head-side-virus":["s"],"heading":["s"],"headphones":["s"],"headphones-simple":["s"],"headset":["s"],"heart":["s","r"],"heart-circle-bolt":["s"],"heart-circle-check":["s"],"heart-circle-exclamation":["s"],"heart-circle-minus":["s"],"heart-circle-plus":["s"],"heart-circle-xmark":["s"],"heart-crack":["s"],"heart-pulse":["s"],"helicopter":["s"],"helicopter-symbol":["s"],"helmet-safety":["s"],"helmet-un":["s"],"highlighter":["s"],"hill-avalanche":["s"],"hill-rockslide":["s"],"hippo":["s"],"hips":["b"],"hire-a-helper":["b"],"hive":["b"],"hockey-puck":["s"],"holly-berry":["s"],"hooli":["b"],"hornbill":["b"],"horse":["s"],"horse-head":["s"],"hospital":["s","r"],"hospital-user":["s"],"hot-tub-person":["s"],"hotdog":["s"],"hotel":["s"],"hotjar":["b"],"hourglass":["s","r"],"hourglass-empty":["s"],"hourglass-end":["s"],"hourglass-start":["s"],"house":["s"],"house-chimney":["s"],"house-chimney-crack":["s"],"house-chimney-medical":["s"],"house-chimney-user":["s"],"house-chimney-window":["s"],"house-circle-check":["s"],"house-circle-exclamation":["s"],"house-circle-xmark":["s"],"house-crack":["s"],"house-fire":["s"],"house-flag":["s"],"house-flood-water":["s"],"house-flood-water-circle-arrow-right":["s"],"house-laptop":["s"],"house-lock":["s"],"house-medical":["s"],"house-medical-circle-check":["s"],"house-medical-circle-exclamation":["s"],"house-medical-circle-xmark":["s"],"house-medical-flag":["s"],"house-signal":["s"],"house-tsunami":["s"],"house-user":["s"],"houzz":["b"],"hryvnia-sign":["s"],"html5":["b"],"hubspot":["b"],"hurricane":["s"],"i":["s"],"i-cursor":["s"],"ice-cream":["s"],"icicles":["s"],"icons":["s"],"id-badge":["s","r"],"id-card":["s","r"],"id-card-clip":["s"],"ideal":["b"],"igloo":["s"],"image":["s","r"],"image-portrait":["s"],"images":["s","r"],"imdb":["b"],"inbox":["s"],"indent":["s"],"indian-rupee-sign":["s"],"industry":["s"],"infinity":["s"],"info":["s"],"instagram":["b"],"instagram-square":["b"],"instalod":["b"],"intercom":["b"],"internet-explorer":["b"],"invision":["b"],"ioxhost":["b"],"italic":["s"],"itch-io":["b"],"itunes":["b"],"itunes-note":["b"],"j":["s"],"jar":["s"],"jar-wheat":["s"],"java":["b"],"jedi":["s"],"jedi-order":["b"],"jenkins":["b"],"jet-fighter":["s"],"jet-fighter-up":["s"],"jira":["b"],"joget":["b"],"joint":["s"],"joomla":["b"],"js":["b"],"js-square":["b"],"jsfiddle":["b"],"jug-detergent":["s"],"k":["s"],"kaaba":["s"],"kaggle":["b"],"key":["s"],"keybase":["b"],"keyboard":["s","r"],"keycdn":["b"],"khanda":["s"],"kickstarter":["b"],"kickstarter-k":["b"],"kip-sign":["s"],"kit-medical":["s"],"kitchen-set":["s"],"kiwi-bird":["s"],"korvue":["b"],"l":["s"],"land-mine-on":["s"],"landmark":["s"],"landmark-dome":["s"],"landmark-flag":["s"],"language":["s"],"laptop":["s"],"laptop-code":["s"],"laptop-file":["s"],"laptop-medical":["s"],"laravel":["b"],"lari-sign":["s"],"lastfm":["b"],"lastfm-square":["b"],"layer-group":["s"],"leaf":["s"],"leanpub":["b"],"left-long":["s"],"left-right":["s"],"lemon":["s","r"],"less":["b"],"less-than":["s"],"less-than-equal":["s"],"life-ring":["s","r"],"lightbulb":["s","r"],"line":["b"],"lines-leaning":["s"],"link":["s"],"link-slash":["s"],"linkedin":["b"],"linkedin-in":["b"],"linode":["b"],"linux":["b"],"lira-sign":["s"],"list":["s"],"list-check":["s"],"list-ol":["s"],"list-ul":["s"],"litecoin-sign":["s"],"location-arrow":["s"],"location-crosshairs":["s"],"location-dot":["s"],"location-pin":["s"],"location-pin-lock":["s"],"lock":["s"],"lock-open":["s"],"locust":["s"],"lungs":["s"],"lungs-virus":["s"],"lyft":["b"],"m":["s"],"magento":["b"],"magnet":["s"],"magnifying-glass":["s"],"magnifying-glass-arrow-right":["s"],"magnifying-glass-chart":["s"],"magnifying-glass-dollar":["s"],"magnifying-glass-location":["s"],"magnifying-glass-minus":["s"],"magnifying-glass-plus":["s"],"mailchimp":["b"],"manat-sign":["s"],"mandalorian":["b"],"map":["s","r"],"map-location":["s"],"map-location-dot":["s"],"map-pin":["s"],"markdown":["b"],"marker":["s"],"mars":["s"],"mars-and-venus":["s"],"mars-and-venus-burst":["s"],"mars-double":["s"],"mars-stroke":["s"],"mars-stroke-right":["s"],"mars-stroke-up":["s"],"martini-glass":["s"],"martini-glass-citrus":["s"],"martini-glass-empty":["s"],"mask":["s"],"mask-face":["s"],"mask-ventilator":["s"],"masks-theater":["s"],"mastodon":["b"],"mattress-pillow":["s"],"maxcdn":["b"],"maximize":["s"],"mdb":["b"],"medal":["s"],"medapps":["b"],"medium":["b"],"medrt":["b"],"meetup":["b"],"megaport":["b"],"memory":["s"],"mendeley":["b"],"menorah":["s"],"mercury":["s"],"message":["s","r"],"meteor":["s"],"microblog":["b"],"microchip":["s"],"microphone":["s"],"microphone-lines":["s"],"microphone-lines-slash":["s"],"microphone-slash":["s"],"microscope":["s"],"microsoft":["b"],"mill-sign":["s"],"minimize":["s"],"minus":["s"],"mitten":["s"],"mix":["b"],"mixcloud":["b"],"mixer":["b"],"mizuni":["b"],"mobile":["s"],"mobile-button":["s"],"mobile-retro":["s"],"mobile-screen":["s"],"mobile-screen-button":["s"],"modx":["b"],"monero":["b"],"money-bill":["s"],"money-bill-1":["s","r"],"money-bill-1-wave":["s"],"money-bill-transfer":["s"],"money-bill-trend-up":["s"],"money-bill-wave":["s"],"money-bill-wheat":["s"],"money-bills":["s"],"money-check":["s"],"money-check-dollar":["s"],"monument":["s"],"moon":["s","r"],"mortar-pestle":["s"],"mosque":["s"],"mosquito":["s"],"mosquito-net":["s"],"motorcycle":["s"],"mound":["s"],"mountain":["s"],"mountain-city":["s"],"mountain-sun":["s"],"mug-hot":["s"],"mug-saucer":["s"],"music":["s"],"n":["s"],"naira-sign":["s"],"napster":["b"],"neos":["b"],"network-wired":["s"],"neuter":["s"],"newspaper":["s","r"],"nfc-directional":["b"],"nfc-symbol":["b"],"nimblr":["b"],"node":["b"],"node-js":["b"],"not-equal":["s"],"note-sticky":["s","r"],"notes-medical":["s"],"npm":["b"],"ns8":["b"],"nutritionix":["b"],"o":["s"],"object-group":["s","r"],"object-ungroup":["s","r"],"octopus-deploy":["b"],"odnoklassniki":["b"],"odnoklassniki-square":["b"],"oil-can":["s"],"oil-well":["s"],"old-republic":["b"],"om":["s"],"opencart":["b"],"openid":["b"],"opera":["b"],"optin-monster":["b"],"orcid":["b"],"osi":["b"],"otter":["s"],"outdent":["s"],"p":["s"],"padlet":["b"],"page4":["b"],"pagelines":["b"],"pager":["s"],"paint-roller":["s"],"paintbrush":["s"],"palette":["s"],"palfed":["b"],"pallet":["s"],"panorama":["s"],"paper-plane":["s","r"],"paperclip":["s"],"parachute-box":["s"],"paragraph":["s"],"passport":["s"],"paste":["s","r"],"patreon":["b"],"pause":["s"],"paw":["s"],"paypal":["b"],"peace":["s"],"pen":["s"],"pen-clip":["s"],"pen-fancy":["s"],"pen-nib":["s"],"pen-ruler":["s"],"pen-to-square":["s","r"],"pencil":["s"],"people-arrows-left-right":["s"],"people-carry-box":["s"],"people-group":["s"],"people-line":["s"],"people-pulling":["s"],"people-robbery":["s"],"people-roof":["s"],"pepper-hot":["s"],"perbyte":["b"],"percent":["s"],"periscope":["b"],"person":["s"],"person-arrow-down-to-line":["s"],"person-arrow-up-from-line":["s"],"person-biking":["s"],"person-booth":["s"],"person-breastfeeding":["s"],"person-burst":["s"],"person-cane":["s"],"person-chalkboard":["s"],"person-circle-check":["s"],"person-circle-exclamation":["s"],"person-circle-minus":["s"],"person-circle-plus":["s"],"person-circle-question":["s"],"person-circle-xmark":["s"],"person-digging":["s"],"person-dots-from-line":["s"],"person-dress":["s"],"person-dress-burst":["s"],"person-drowning":["s"],"person-falling":["s"],"person-falling-burst":["s"],"person-half-dress":["s"],"person-harassing":["s"],"person-hiking":["s"],"person-military-pointing":["s"],"person-military-rifle":["s"],"person-military-to-person":["s"],"person-praying":["s"],"person-pregnant":["s"],"person-rays":["s"],"person-rifle":["s"],"person-running":["s"],"person-shelter":["s"],"person-skating":["s"],"person-skiing":["s"],"person-skiing-nordic":["s"],"person-snowboarding":["s"],"person-swimming":["s"],"person-through-window":["s"],"person-walking":["s"],"person-walking-arrow-loop-left":["s"],"person-walking-arrow-right":["s"],"person-walking-dashed-line-arrow-right":["s"],"person-walking-luggage":["s"],"person-walking-with-cane":["s"],"peseta-sign":["s"],"peso-sign":["s"],"phabricator":["b"],"phoenix-framework":["b"],"phoenix-squadron":["b"],"phone":["s"],"phone-flip":["s"],"phone-slash":["s"],"phone-volume":["s"],"photo-film":["s"],"php":["b"],"pied-piper":["b"],"pied-piper-alt":["b"],"pied-piper-hat":["b"],"pied-piper-pp":["b"],"pied-piper-square":["b"],"piggy-bank":["s"],"pills":["s"],"pinterest":["b"],"pinterest-p":["b"],"pinterest-square":["b"],"pix":["b"],"pizza-slice":["s"],"place-of-worship":["s"],"plane":["s"],"plane-arrival":["s"],"plane-circle-check":["s"],"plane-circle-exclamation":["s"],"plane-circle-xmark":["s"],"plane-departure":["s"],"plane-lock":["s"],"plane-slash":["s"],"plane-up":["s"],"plant-wilt":["s"],"plate-wheat":["s"],"play":["s"],"playstation":["b"],"plug":["s"],"plug-circle-bolt":["s"],"plug-circle-check":["s"],"plug-circle-exclamation":["s"],"plug-circle-minus":["s"],"plug-circle-plus":["s"],"plug-circle-xmark":["s"],"plus":["s"],"plus-minus":["s"],"podcast":["s"],"poo":["s"],"poo-storm":["s"],"poop":["s"],"power-off":["s"],"prescription":["s"],"prescription-bottle":["s"],"prescription-bottle-medical":["s"],"print":["s"],"product-hunt":["b"],"pump-medical":["s"],"pump-soap":["s"],"pushed":["b"],"puzzle-piece":["s"],"python":["b"],"q":["s"],"qq":["b"],"qrcode":["s"],"question":["s"],"quinscape":["b"],"quora":["b"],"quote-left":["s"],"quote-right":["s"],"r":["s"],"r-project":["b"],"radiation":["s"],"radio":["s"],"rainbow":["s"],"ranking-star":["s"],"raspberry-pi":["b"],"ravelry":["b"],"react":["b"],"reacteurope":["b"],"readme":["b"],"rebel":["b"],"receipt":["s"],"record-vinyl":["s"],"rectangle-ad":["s"],"rectangle-list":["s","r"],"rectangle-xmark":["s","r"],"recycle":["s"],"red-river":["b"],"reddit":["b"],"reddit-alien":["b"],"reddit-square":["b"],"redhat":["b"],"registered":["s","r"],"renren":["b"],"repeat":["s"],"reply":["s"],"reply-all":["s"],"replyd":["b"],"republican":["s"],"researchgate":["b"],"resolving":["b"],"restroom":["s"],"retweet":["s"],"rev":["b"],"ribbon":["s"],"right-from-bracket":["s"],"right-left":["s"],"right-long":["s"],"right-to-bracket":["s"],"ring":["s"],"road":["s"],"road-barrier":["s"],"road-bridge":["s"],"road-circle-check":["s"],"road-circle-exclamation":["s"],"road-circle-xmark":["s"],"road-lock":["s"],"road-spikes":["s"],"robot":["s"],"rocket":["s"],"rocketchat":["b"],"rockrms":["b"],"rotate":["s"],"rotate-left":["s"],"rotate-right":["s"],"route":["s"],"rss":["s"],"ruble-sign":["s"],"rug":["s"],"ruler":["s"],"ruler-combined":["s"],"ruler-horizontal":["s"],"ruler-vertical":["s"],"rupee-sign":["s"],"rupiah-sign":["s"],"rust":["b"],"s":["s"],"sack-dollar":["s"],"sack-xmark":["s"],"safari":["b"],"sailboat":["s"],"salesforce":["b"],"sass":["b"],"satellite":["s"],"satellite-dish":["s"],"scale-balanced":["s"],"scale-unbalanced":["s"],"scale-unbalanced-flip":["s"],"schlix":["b"],"school":["s"],"school-circle-check":["s"],"school-circle-exclamation":["s"],"school-circle-xmark":["s"],"school-flag":["s"],"school-lock":["s"],"scissors":["s"],"screenpal":["b"],"screwdriver":["s"],"screwdriver-wrench":["s"],"scribd":["b"],"scroll":["s"],"scroll-torah":["s"],"sd-card":["s"],"searchengin":["b"],"section":["s"],"seedling":["s"],"sellcast":["b"],"sellsy":["b"],"server":["s"],"servicestack":["b"],"shapes":["s"],"share":["s"],"share-from-square":["s","r"],"share-nodes":["s"],"sheet-plastic":["s"],"shekel-sign":["s"],"shield":["s"],"shield-cat":["s"],"shield-dog":["s"],"shield-halved":["s"],"shield-heart":["s"],"shield-virus":["s"],"ship":["s"],"shirt":["s"],"shirtsinbulk":["b"],"shoe-prints":["s"],"shop":["s"],"shop-lock":["s"],"shop-slash":["s"],"shopify":["b"],"shopware":["b"],"shower":["s"],"shrimp":["s"],"shuffle":["s"],"shuttle-space":["s"],"sign-hanging":["s"],"signal":["s"],"signature":["s"],"signs-post":["s"],"sim-card":["s"],"simplybuilt":["b"],"sink":["s"],"sistrix":["b"],"sitemap":["s"],"sith":["b"],"sitrox":["b"],"sketch":["b"],"skull":["s"],"skull-crossbones":["s"],"skyatlas":["b"],"skype":["b"],"slack":["b"],"slash":["s"],"sleigh":["s"],"sliders":["s"],"slideshare":["b"],"smog":["s"],"smoking":["s"],"snapchat":["b"],"snapchat-square":["b"],"snowflake":["s","r"],"snowman":["s"],"snowplow":["s"],"soap":["s"],"socks":["s"],"solar-panel":["s"],"sort":["s"],"sort-down":["s"],"sort-up":["s"],"soundcloud":["b"],"sourcetree":["b"],"spa":["s"],"spaghetti-monster-flying":["s"],"speakap":["b"],"speaker-deck":["b"],"spell-check":["s"],"spider":["s"],"spinner":["s"],"splotch":["s"],"spoon":["s"],"spotify":["b"],"spray-can":["s"],"spray-can-sparkles":["s"],"square":["s","r"],"square-arrow-up-right":["s"],"square-caret-down":["s","r"],"square-caret-left":["s","r"],"square-caret-right":["s","r"],"square-caret-up":["s","r"],"square-check":["s","r"],"square-envelope":["s"],"square-font-awesome":["b"],"square-font-awesome-stroke":["b"],"square-full":["s","r"],"square-h":["s"],"square-minus":["s","r"],"square-nfi":["s"],"square-parking":["s"],"square-pen":["s"],"square-person-confined":["s"],"square-phone":["s"],"square-phone-flip":["s"],"square-plus":["s","r"],"square-poll-horizontal":["s"],"square-poll-vertical":["s"],"square-root-variable":["s"],"square-rss":["s"],"square-share-nodes":["s"],"square-up-right":["s"],"square-virus":["s"],"square-xmark":["s"],"squarespace":["b"],"stack-exchange":["b"],"stack-overflow":["b"],"stackpath":["b"],"staff-aesculapius":["s"],"stairs":["s"],"stamp":["s"],"star":["s","r"],"star-and-crescent":["s"],"star-half":["s","r"],"star-half-stroke":["s","r"],"star-of-david":["s"],"star-of-life":["s"],"staylinked":["b"],"steam":["b"],"steam-square":["b"],"steam-symbol":["b"],"sterling-sign":["s"],"stethoscope":["s"],"sticker-mule":["b"],"stop":["s"],"stopwatch":["s"],"stopwatch-20":["s"],"store":["s"],"store-slash":["s"],"strava":["b"],"street-view":["s"],"strikethrough":["s"],"stripe":["b"],"stripe-s":["b"],"stroopwafel":["s"],"studiovinari":["b"],"stumbleupon":["b"],"stumbleupon-circle":["b"],"subscript":["s"],"suitcase":["s"],"suitcase-medical":["s"],"suitcase-rolling":["s"],"sun":["s","r"],"sun-plant-wilt":["s"],"superpowers":["b"],"superscript":["s"],"supple":["b"],"suse":["b"],"swatchbook":["s"],"swift":["b"],"symfony":["b"],"synagogue":["s"],"syringe":["s"],"t":["s"],"table":["s"],"table-cells":["s"],"table-cells-large":["s"],"table-columns":["s"],"table-list":["s"],"table-tennis-paddle-ball":["s"],"tablet":["s"],"tablet-button":["s"],"tablet-screen-button":["s"],"tablets":["s"],"tachograph-digital":["s"],"tag":["s"],"tags":["s"],"tape":["s"],"tarp":["s"],"tarp-droplet":["s"],"taxi":["s"],"teamspeak":["b"],"teeth":["s"],"teeth-open":["s"],"telegram":["b"],"temperature-arrow-down":["s"],"temperature-arrow-up":["s"],"temperature-empty":["s"],"temperature-full":["s"],"temperature-half":["s"],"temperature-high":["s"],"temperature-low":["s"],"temperature-quarter":["s"],"temperature-three-quarters":["s"],"tencent-weibo":["b"],"tenge-sign":["s"],"tent":["s"],"tent-arrow-down-to-line":["s"],"tent-arrow-left-right":["s"],"tent-arrow-turn-left":["s"],"tent-arrows-down":["s"],"tents":["s"],"terminal":["s"],"text-height":["s"],"text-slash":["s"],"text-width":["s"],"the-red-yeti":["b"],"themeco":["b"],"themeisle":["b"],"thermometer":["s"],"think-peaks":["b"],"thumbs-down":["s","r"],"thumbs-up":["s","r"],"thumbtack":["s"],"ticket":["s"],"ticket-simple":["s"],"tiktok":["b"],"timeline":["s"],"toggle-off":["s"],"toggle-on":["s"],"toilet":["s"],"toilet-paper":["s"],"toilet-paper-slash":["s"],"toilet-portable":["s"],"toilets-portable":["s"],"toolbox":["s"],"tooth":["s"],"torii-gate":["s"],"tornado":["s"],"tower-broadcast":["s"],"tower-cell":["s"],"tower-observation":["s"],"tractor":["s"],"trade-federation":["b"],"trademark":["s"],"traffic-light":["s"],"trailer":["s"],"train":["s"],"train-subway":["s"],"train-tram":["s"],"transgender":["s"],"trash":["s"],"trash-arrow-up":["s"],"trash-can":["s","r"],"trash-can-arrow-up":["s"],"tree":["s"],"tree-city":["s"],"trello":["b"],"triangle-exclamation":["s"],"trophy":["s"],"trowel":["s"],"trowel-bricks":["s"],"truck":["s"],"truck-arrow-right":["s"],"truck-droplet":["s"],"truck-fast":["s"],"truck-field":["s"],"truck-field-un":["s"],"truck-front":["s"],"truck-medical":["s"],"truck-monster":["s"],"truck-moving":["s"],"truck-pickup":["s"],"truck-plane":["s"],"truck-ramp-box":["s"],"tty":["s"],"tumblr":["b"],"tumblr-square":["b"],"turkish-lira-sign":["s"],"turn-down":["s"],"turn-up":["s"],"tv":["s"],"twitch":["b"],"twitter":["b"],"twitter-square":["b"],"typo3":["b"],"u":["s"],"uber":["b"],"ubuntu":["b"],"uikit":["b"],"umbraco":["b"],"umbrella":["s"],"umbrella-beach":["s"],"uncharted":["b"],"underline":["s"],"uniregistry":["b"],"unity":["b"],"universal-access":["s"],"unlock":["s"],"unlock-keyhole":["s"],"unsplash":["b"],"untappd":["b"],"up-down":["s"],"up-down-left-right":["s"],"up-long":["s"],"up-right-and-down-left-from-center":["s"],"up-right-from-square":["s"],"upload":["s"],"ups":["b"],"usb":["b"],"user":["s","r"],"user-astronaut":["s"],"user-check":["s"],"user-clock":["s"],"user-doctor":["s"],"user-gear":["s"],"user-graduate":["s"],"user-group":["s"],"user-injured":["s"],"user-large":["s"],"user-large-slash":["s"],"user-lock":["s"],"user-minus":["s"],"user-ninja":["s"],"user-nurse":["s"],"user-pen":["s"],"user-plus":["s"],"user-secret":["s"],"user-shield":["s"],"user-slash":["s"],"user-tag":["s"],"user-tie":["s"],"user-xmark":["s"],"users":["s"],"users-between-lines":["s"],"users-gear":["s"],"users-line":["s"],"users-rays":["s"],"users-rectangle":["s"],"users-slash":["s"],"users-viewfinder":["s"],"usps":["b"],"ussunnah":["b"],"utensils":["s"],"v":["s"],"vaadin":["b"],"van-shuttle":["s"],"vault":["s"],"vector-square":["s"],"venus":["s"],"venus-double":["s"],"venus-mars":["s"],"vest":["s"],"vest-patches":["s"],"viacoin":["b"],"viadeo":["b"],"viadeo-square":["b"],"vial":["s"],"vial-circle-check":["s"],"vial-virus":["s"],"vials":["s"],"viber":["b"],"video":["s"],"video-slash":["s"],"vihara":["s"],"vimeo":["b"],"vimeo-square":["b"],"vimeo-v":["b"],"vine":["b"],"virus":["s"],"virus-covid":["s"],"virus-covid-slash":["s"],"virus-slash":["s"],"viruses":["s"],"vk":["b"],"vnv":["b"],"voicemail":["s"],"volcano":["s"],"volleyball":["s"],"volume-high":["s"],"volume-low":["s"],"volume-off":["s"],"volume-xmark":["s"],"vr-cardboard":["s"],"vuejs":["b"],"w":["s"],"walkie-talkie":["s"],"wallet":["s"],"wand-magic":["s"],"wand-magic-sparkles":["s"],"wand-sparkles":["s"],"warehouse":["s"],"watchman-monitoring":["b"],"water":["s"],"water-ladder":["s"],"wave-square":["s"],"waze":["b"],"weebly":["b"],"weibo":["b"],"weight-hanging":["s"],"weight-scale":["s"],"weixin":["b"],"whatsapp":["b"],"whatsapp-square":["b"],"wheat-awn":["s"],"wheat-awn-circle-exclamation":["s"],"wheelchair":["s"],"wheelchair-move":["s"],"whiskey-glass":["s"],"whmcs":["b"],"wifi":["s"],"wikipedia-w":["b"],"wind":["s"],"window-maximize":["s","r"],"window-minimize":["s","r"],"window-restore":["s","r"],"windows":["b"],"wine-bottle":["s"],"wine-glass":["s"],"wine-glass-empty":["s"],"wirsindhandwerk":["b"],"wix":["b"],"wizards-of-the-coast":["b"],"wodu":["b"],"wolf-pack-battalion":["b"],"won-sign":["s"],"wordpress":["b"],"wordpress-simple":["b"],"worm":["s"],"wpbeginner":["b"],"wpexplorer":["b"],"wpforms":["b"],"wpressr":["b"],"wrench":["s"],"x":["s"],"x-ray":["s"],"xbox":["b"],"xing":["b"],"xing-square":["b"],"xmark":["s"],"xmarks-lines":["s"],"y":["s"],"y-combinator":["b"],"yahoo":["b"],"yammer":["b"],"yandex":["b"],"yandex-international":["b"],"yarn":["b"],"yelp":["b"],"yen-sign":["s"],"yin-yang":["s"],"yoast":["b"],"youtube":["b"],"youtube-square":["b"],"z":["s"],"zhihu":["b"]} \ No newline at end of file +{"0":["s"],"1":["s"],"2":["s"],"3":["s"],"4":["s"],"5":["s"],"6":["s"],"7":["s"],"8":["s"],"9":["s"],"42-group":["b"],"500px":["b"],"a":["s"],"accessible-icon":["b"],"accusoft":["b"],"address-book":["s","r"],"address-card":["s","r"],"adn":["b"],"adversal":["b"],"affiliatetheme":["b"],"airbnb":["b"],"algolia":["b"],"align-center":["s"],"align-justify":["s"],"align-left":["s"],"align-right":["s"],"alipay":["b"],"amazon":["b"],"amazon-pay":["b"],"amilia":["b"],"anchor":["s"],"anchor-circle-check":["s"],"anchor-circle-exclamation":["s"],"anchor-circle-xmark":["s"],"anchor-lock":["s"],"android":["b"],"angellist":["b"],"angle-down":["s"],"angle-left":["s"],"angle-right":["s"],"angle-up":["s"],"angles-down":["s"],"angles-left":["s"],"angles-right":["s"],"angles-up":["s"],"angrycreative":["b"],"angular":["b"],"ankh":["s"],"app-store":["b"],"app-store-ios":["b"],"apper":["b"],"apple":["b"],"apple-pay":["b"],"apple-whole":["s"],"archway":["s"],"arrow-down":["s"],"arrow-down-1-9":["s"],"arrow-down-9-1":["s"],"arrow-down-a-z":["s"],"arrow-down-long":["s"],"arrow-down-short-wide":["s"],"arrow-down-up-across-line":["s"],"arrow-down-up-lock":["s"],"arrow-down-wide-short":["s"],"arrow-down-z-a":["s"],"arrow-left":["s"],"arrow-left-long":["s"],"arrow-pointer":["s"],"arrow-right":["s"],"arrow-right-arrow-left":["s"],"arrow-right-from-bracket":["s"],"arrow-right-long":["s"],"arrow-right-to-bracket":["s"],"arrow-right-to-city":["s"],"arrow-rotate-left":["s"],"arrow-rotate-right":["s"],"arrow-trend-down":["s"],"arrow-trend-up":["s"],"arrow-turn-down":["s"],"arrow-turn-up":["s"],"arrow-up":["s"],"arrow-up-1-9":["s"],"arrow-up-9-1":["s"],"arrow-up-a-z":["s"],"arrow-up-from-bracket":["s"],"arrow-up-from-ground-water":["s"],"arrow-up-from-water-pump":["s"],"arrow-up-long":["s"],"arrow-up-right-dots":["s"],"arrow-up-right-from-square":["s"],"arrow-up-short-wide":["s"],"arrow-up-wide-short":["s"],"arrow-up-z-a":["s"],"arrows-down-to-line":["s"],"arrows-down-to-people":["s"],"arrows-left-right":["s"],"arrows-left-right-to-line":["s"],"arrows-rotate":["s"],"arrows-spin":["s"],"arrows-split-up-and-left":["s"],"arrows-to-circle":["s"],"arrows-to-dot":["s"],"arrows-to-eye":["s"],"arrows-turn-right":["s"],"arrows-turn-to-dots":["s"],"arrows-up-down":["s"],"arrows-up-down-left-right":["s"],"arrows-up-to-line":["s"],"artstation":["b"],"asterisk":["s"],"asymmetrik":["b"],"at":["s"],"atlassian":["b"],"atom":["s"],"audible":["b"],"audio-description":["s"],"austral-sign":["s"],"autoprefixer":["b"],"avianex":["b"],"aviato":["b"],"award":["s"],"aws":["b"],"b":["s"],"baby":["s"],"baby-carriage":["s"],"backward":["s"],"backward-fast":["s"],"backward-step":["s"],"bacon":["s"],"bacteria":["s"],"bacterium":["s"],"bag-shopping":["s"],"bahai":["s"],"baht-sign":["s"],"ban":["s"],"ban-smoking":["s"],"bandage":["s"],"bandcamp":["b"],"barcode":["s"],"bars":["s"],"bars-progress":["s"],"bars-staggered":["s"],"baseball":["s"],"baseball-bat-ball":["s"],"basket-shopping":["s"],"basketball":["s"],"bath":["s"],"battery-empty":["s"],"battery-full":["s"],"battery-half":["s"],"battery-quarter":["s"],"battery-three-quarters":["s"],"battle-net":["b"],"bed":["s"],"bed-pulse":["s"],"beer-mug-empty":["s"],"behance":["b"],"bell":["s","r"],"bell-concierge":["s"],"bell-slash":["s","r"],"bezier-curve":["s"],"bicycle":["s"],"bilibili":["b"],"bimobject":["b"],"binoculars":["s"],"biohazard":["s"],"bitbucket":["b"],"bitcoin":["b"],"bitcoin-sign":["s"],"bity":["b"],"black-tie":["b"],"blackberry":["b"],"blender":["s"],"blender-phone":["s"],"blog":["s"],"blogger":["b"],"blogger-b":["b"],"bluetooth":["b"],"bluetooth-b":["b"],"bold":["s"],"bolt":["s"],"bolt-lightning":["s"],"bomb":["s"],"bone":["s"],"bong":["s"],"book":["s"],"book-atlas":["s"],"book-bible":["s"],"book-bookmark":["s"],"book-journal-whills":["s"],"book-medical":["s"],"book-open":["s"],"book-open-reader":["s"],"book-quran":["s"],"book-skull":["s"],"book-tanakh":["s"],"bookmark":["s","r"],"bootstrap":["b"],"border-all":["s"],"border-none":["s"],"border-top-left":["s"],"bore-hole":["s"],"bots":["b"],"bottle-droplet":["s"],"bottle-water":["s"],"bowl-food":["s"],"bowl-rice":["s"],"bowling-ball":["s"],"box":["s"],"box-archive":["s"],"box-open":["s"],"box-tissue":["s"],"boxes-packing":["s"],"boxes-stacked":["s"],"braille":["s"],"brain":["s"],"brazilian-real-sign":["s"],"bread-slice":["s"],"bridge":["s"],"bridge-circle-check":["s"],"bridge-circle-exclamation":["s"],"bridge-circle-xmark":["s"],"bridge-lock":["s"],"bridge-water":["s"],"briefcase":["s"],"briefcase-medical":["s"],"broom":["s"],"broom-ball":["s"],"brush":["s"],"btc":["b"],"bucket":["s"],"buffer":["b"],"bug":["s"],"bug-slash":["s"],"bugs":["s"],"building":["s","r"],"building-circle-arrow-right":["s"],"building-circle-check":["s"],"building-circle-exclamation":["s"],"building-circle-xmark":["s"],"building-columns":["s"],"building-flag":["s"],"building-lock":["s"],"building-ngo":["s"],"building-shield":["s"],"building-un":["s"],"building-user":["s"],"building-wheat":["s"],"bullhorn":["s"],"bullseye":["s"],"burger":["s"],"buromobelexperte":["b"],"burst":["s"],"bus":["s"],"bus-simple":["s"],"business-time":["s"],"buy-n-large":["b"],"buysellads":["b"],"c":["s"],"cable-car":["s"],"cake-candles":["s"],"calculator":["s"],"calendar":["s","r"],"calendar-check":["s","r"],"calendar-day":["s"],"calendar-days":["s","r"],"calendar-minus":["s","r"],"calendar-plus":["s","r"],"calendar-week":["s"],"calendar-xmark":["s","r"],"camera":["s"],"camera-retro":["s"],"camera-rotate":["s"],"campground":["s"],"canadian-maple-leaf":["b"],"candy-cane":["s"],"cannabis":["s"],"capsules":["s"],"car":["s"],"car-battery":["s"],"car-burst":["s"],"car-on":["s"],"car-rear":["s"],"car-side":["s"],"car-tunnel":["s"],"caravan":["s"],"caret-down":["s"],"caret-left":["s"],"caret-right":["s"],"caret-up":["s"],"carrot":["s"],"cart-arrow-down":["s"],"cart-flatbed":["s"],"cart-flatbed-suitcase":["s"],"cart-plus":["s"],"cart-shopping":["s"],"cash-register":["s"],"cat":["s"],"cc-amazon-pay":["b"],"cc-amex":["b"],"cc-apple-pay":["b"],"cc-diners-club":["b"],"cc-discover":["b"],"cc-jcb":["b"],"cc-mastercard":["b"],"cc-paypal":["b"],"cc-stripe":["b"],"cc-visa":["b"],"cedi-sign":["s"],"cent-sign":["s"],"centercode":["b"],"centos":["b"],"certificate":["s"],"chair":["s"],"chalkboard":["s"],"chalkboard-user":["s"],"champagne-glasses":["s"],"charging-station":["s"],"chart-area":["s"],"chart-bar":["s","r"],"chart-column":["s"],"chart-gantt":["s"],"chart-line":["s"],"chart-pie":["s"],"chart-simple":["s"],"check":["s"],"check-double":["s"],"check-to-slot":["s"],"cheese":["s"],"chess":["s"],"chess-bishop":["s","r"],"chess-board":["s"],"chess-king":["s","r"],"chess-knight":["s","r"],"chess-pawn":["s","r"],"chess-queen":["s","r"],"chess-rook":["s","r"],"chevron-down":["s"],"chevron-left":["s"],"chevron-right":["s"],"chevron-up":["s"],"child":["s"],"child-dress":["s"],"child-reaching":["s"],"child-rifle":["s"],"children":["s"],"chrome":["b"],"chromecast":["b"],"church":["s"],"circle":["s","r"],"circle-arrow-down":["s"],"circle-arrow-left":["s"],"circle-arrow-right":["s"],"circle-arrow-up":["s"],"circle-check":["s","r"],"circle-chevron-down":["s"],"circle-chevron-left":["s"],"circle-chevron-right":["s"],"circle-chevron-up":["s"],"circle-dollar-to-slot":["s"],"circle-dot":["s","r"],"circle-down":["s","r"],"circle-exclamation":["s"],"circle-h":["s"],"circle-half-stroke":["s"],"circle-info":["s"],"circle-left":["s","r"],"circle-minus":["s"],"circle-nodes":["s"],"circle-notch":["s"],"circle-pause":["s","r"],"circle-play":["s","r"],"circle-plus":["s"],"circle-question":["s","r"],"circle-radiation":["s"],"circle-right":["s","r"],"circle-stop":["s","r"],"circle-up":["s","r"],"circle-user":["s","r"],"circle-xmark":["s","r"],"city":["s"],"clapperboard":["s"],"clipboard":["s","r"],"clipboard-check":["s"],"clipboard-list":["s"],"clipboard-question":["s"],"clipboard-user":["s"],"clock":["s","r"],"clock-rotate-left":["s"],"clone":["s","r"],"closed-captioning":["s","r"],"cloud":["s"],"cloud-arrow-down":["s"],"cloud-arrow-up":["s"],"cloud-bolt":["s"],"cloud-meatball":["s"],"cloud-moon":["s"],"cloud-moon-rain":["s"],"cloud-rain":["s"],"cloud-showers-heavy":["s"],"cloud-showers-water":["s"],"cloud-sun":["s"],"cloud-sun-rain":["s"],"cloudflare":["b"],"cloudscale":["b"],"cloudsmith":["b"],"cloudversify":["b"],"clover":["s"],"cmplid":["b"],"code":["s"],"code-branch":["s"],"code-commit":["s"],"code-compare":["s"],"code-fork":["s"],"code-merge":["s"],"code-pull-request":["s"],"codepen":["b"],"codiepie":["b"],"coins":["s"],"colon-sign":["s"],"comment":["s","r"],"comment-dollar":["s"],"comment-dots":["s","r"],"comment-medical":["s"],"comment-slash":["s"],"comment-sms":["s"],"comments":["s","r"],"comments-dollar":["s"],"compact-disc":["s"],"compass":["s","r"],"compass-drafting":["s"],"compress":["s"],"computer":["s"],"computer-mouse":["s"],"confluence":["b"],"connectdevelop":["b"],"contao":["b"],"cookie":["s"],"cookie-bite":["s"],"copy":["s","r"],"copyright":["s","r"],"cotton-bureau":["b"],"couch":["s"],"cow":["s"],"cpanel":["b"],"creative-commons":["b"],"creative-commons-by":["b"],"creative-commons-nc":["b"],"creative-commons-nc-eu":["b"],"creative-commons-nc-jp":["b"],"creative-commons-nd":["b"],"creative-commons-pd":["b"],"creative-commons-pd-alt":["b"],"creative-commons-remix":["b"],"creative-commons-sa":["b"],"creative-commons-sampling":["b"],"creative-commons-sampling-plus":["b"],"creative-commons-share":["b"],"creative-commons-zero":["b"],"credit-card":["s","r"],"critical-role":["b"],"crop":["s"],"crop-simple":["s"],"cross":["s"],"crosshairs":["s"],"crow":["s"],"crown":["s"],"crutch":["s"],"cruzeiro-sign":["s"],"css3":["b"],"css3-alt":["b"],"cube":["s"],"cubes":["s"],"cubes-stacked":["s"],"cuttlefish":["b"],"d":["s"],"d-and-d":["b"],"d-and-d-beyond":["b"],"dailymotion":["b"],"dashcube":["b"],"database":["s"],"deezer":["b"],"delete-left":["s"],"delicious":["b"],"democrat":["s"],"deploydog":["b"],"deskpro":["b"],"desktop":["s"],"dev":["b"],"deviantart":["b"],"dharmachakra":["s"],"dhl":["b"],"diagram-next":["s"],"diagram-predecessor":["s"],"diagram-project":["s"],"diagram-successor":["s"],"diamond":["s"],"diamond-turn-right":["s"],"diaspora":["b"],"dice":["s"],"dice-d20":["s"],"dice-d6":["s"],"dice-five":["s"],"dice-four":["s"],"dice-one":["s"],"dice-six":["s"],"dice-three":["s"],"dice-two":["s"],"digg":["b"],"digital-ocean":["b"],"discord":["b"],"discourse":["b"],"disease":["s"],"display":["s"],"divide":["s"],"dna":["s"],"dochub":["b"],"docker":["b"],"dog":["s"],"dollar-sign":["s"],"dolly":["s"],"dong-sign":["s"],"door-closed":["s"],"door-open":["s"],"dove":["s"],"down-left-and-up-right-to-center":["s"],"down-long":["s"],"download":["s"],"draft2digital":["b"],"dragon":["s"],"draw-polygon":["s"],"dribbble":["b"],"dropbox":["b"],"droplet":["s"],"droplet-slash":["s"],"drum":["s"],"drum-steelpan":["s"],"drumstick-bite":["s"],"drupal":["b"],"dumbbell":["s"],"dumpster":["s"],"dumpster-fire":["s"],"dungeon":["s"],"dyalog":["b"],"e":["s"],"ear-deaf":["s"],"ear-listen":["s"],"earlybirds":["b"],"earth-africa":["s"],"earth-americas":["s"],"earth-asia":["s"],"earth-europe":["s"],"earth-oceania":["s"],"ebay":["b"],"edge":["b"],"edge-legacy":["b"],"egg":["s"],"eject":["s"],"elementor":["b"],"elevator":["s"],"ellipsis":["s"],"ellipsis-vertical":["s"],"ello":["b"],"ember":["b"],"empire":["b"],"envelope":["s","r"],"envelope-circle-check":["s"],"envelope-open":["s","r"],"envelope-open-text":["s"],"envelopes-bulk":["s"],"envira":["b"],"equals":["s"],"eraser":["s"],"erlang":["b"],"ethereum":["b"],"ethernet":["s"],"etsy":["b"],"euro-sign":["s"],"evernote":["b"],"exclamation":["s"],"expand":["s"],"expeditedssl":["b"],"explosion":["s"],"eye":["s","r"],"eye-dropper":["s"],"eye-low-vision":["s"],"eye-slash":["s","r"],"f":["s"],"face-angry":["s","r"],"face-dizzy":["s","r"],"face-flushed":["s","r"],"face-frown":["s","r"],"face-frown-open":["s","r"],"face-grimace":["s","r"],"face-grin":["s","r"],"face-grin-beam":["s","r"],"face-grin-beam-sweat":["s","r"],"face-grin-hearts":["s","r"],"face-grin-squint":["s","r"],"face-grin-squint-tears":["s","r"],"face-grin-stars":["s","r"],"face-grin-tears":["s","r"],"face-grin-tongue":["s","r"],"face-grin-tongue-squint":["s","r"],"face-grin-tongue-wink":["s","r"],"face-grin-wide":["s","r"],"face-grin-wink":["s","r"],"face-kiss":["s","r"],"face-kiss-beam":["s","r"],"face-kiss-wink-heart":["s","r"],"face-laugh":["s","r"],"face-laugh-beam":["s","r"],"face-laugh-squint":["s","r"],"face-laugh-wink":["s","r"],"face-meh":["s","r"],"face-meh-blank":["s","r"],"face-rolling-eyes":["s","r"],"face-sad-cry":["s","r"],"face-sad-tear":["s","r"],"face-smile":["s","r"],"face-smile-beam":["s","r"],"face-smile-wink":["s","r"],"face-surprise":["s","r"],"face-tired":["s","r"],"facebook":["b"],"facebook-f":["b"],"facebook-messenger":["b"],"fan":["s"],"fantasy-flight-games":["b"],"faucet":["s"],"faucet-drip":["s"],"fax":["s"],"feather":["s"],"feather-pointed":["s"],"fedex":["b"],"fedora":["b"],"ferry":["s"],"figma":["b"],"file":["s","r"],"file-arrow-down":["s"],"file-arrow-up":["s"],"file-audio":["s","r"],"file-circle-check":["s"],"file-circle-exclamation":["s"],"file-circle-minus":["s"],"file-circle-plus":["s"],"file-circle-question":["s"],"file-circle-xmark":["s"],"file-code":["s","r"],"file-contract":["s"],"file-csv":["s"],"file-excel":["s","r"],"file-export":["s"],"file-image":["s","r"],"file-import":["s"],"file-invoice":["s"],"file-invoice-dollar":["s"],"file-lines":["s","r"],"file-medical":["s"],"file-pdf":["s","r"],"file-pen":["s"],"file-powerpoint":["s","r"],"file-prescription":["s"],"file-shield":["s"],"file-signature":["s"],"file-video":["s","r"],"file-waveform":["s"],"file-word":["s","r"],"file-zipper":["s","r"],"fill":["s"],"fill-drip":["s"],"film":["s"],"filter":["s"],"filter-circle-dollar":["s"],"filter-circle-xmark":["s"],"fingerprint":["s"],"fire":["s"],"fire-burner":["s"],"fire-extinguisher":["s"],"fire-flame-curved":["s"],"fire-flame-simple":["s"],"firefox":["b"],"firefox-browser":["b"],"first-order":["b"],"first-order-alt":["b"],"firstdraft":["b"],"fish":["s"],"fish-fins":["s"],"flag":["s","r"],"flag-checkered":["s"],"flag-usa":["s"],"flask":["s"],"flask-vial":["s"],"flickr":["b"],"flipboard":["b"],"floppy-disk":["s","r"],"florin-sign":["s"],"fly":["b"],"folder":["s","r"],"folder-closed":["s","r"],"folder-minus":["s"],"folder-open":["s","r"],"folder-plus":["s"],"folder-tree":["s"],"font":["s"],"font-awesome":["s","r","b"],"fonticons":["b"],"fonticons-fi":["b"],"football":["s"],"fort-awesome":["b"],"fort-awesome-alt":["b"],"forumbee":["b"],"forward":["s"],"forward-fast":["s"],"forward-step":["s"],"foursquare":["b"],"franc-sign":["s"],"free-code-camp":["b"],"freebsd":["b"],"frog":["s"],"fulcrum":["b"],"futbol":["s","r"],"g":["s"],"galactic-republic":["b"],"galactic-senate":["b"],"gamepad":["s"],"gas-pump":["s"],"gauge":["s"],"gauge-high":["s"],"gauge-simple":["s"],"gauge-simple-high":["s"],"gavel":["s"],"gear":["s"],"gears":["s"],"gem":["s","r"],"genderless":["s"],"get-pocket":["b"],"gg":["b"],"gg-circle":["b"],"ghost":["s"],"gift":["s"],"gifts":["s"],"git":["b"],"git-alt":["b"],"github":["b"],"github-alt":["b"],"gitkraken":["b"],"gitlab":["b"],"gitter":["b"],"glass-water":["s"],"glass-water-droplet":["s"],"glasses":["s"],"glide":["b"],"glide-g":["b"],"globe":["s"],"gofore":["b"],"golang":["b"],"golf-ball-tee":["s"],"goodreads":["b"],"goodreads-g":["b"],"google":["b"],"google-drive":["b"],"google-pay":["b"],"google-play":["b"],"google-plus":["b"],"google-plus-g":["b"],"google-wallet":["b"],"gopuram":["s"],"graduation-cap":["s"],"gratipay":["b"],"grav":["b"],"greater-than":["s"],"greater-than-equal":["s"],"grip":["s"],"grip-lines":["s"],"grip-lines-vertical":["s"],"grip-vertical":["s"],"gripfire":["b"],"group-arrows-rotate":["s"],"grunt":["b"],"guarani-sign":["s"],"guilded":["b"],"guitar":["s"],"gulp":["b"],"gun":["s"],"h":["s"],"hacker-news":["b"],"hackerrank":["b"],"hammer":["s"],"hamsa":["s"],"hand":["s","r"],"hand-back-fist":["s","r"],"hand-dots":["s"],"hand-fist":["s"],"hand-holding":["s"],"hand-holding-dollar":["s"],"hand-holding-droplet":["s"],"hand-holding-hand":["s"],"hand-holding-heart":["s"],"hand-holding-medical":["s"],"hand-lizard":["s","r"],"hand-middle-finger":["s"],"hand-peace":["s","r"],"hand-point-down":["s","r"],"hand-point-left":["s","r"],"hand-point-right":["s","r"],"hand-point-up":["s","r"],"hand-pointer":["s","r"],"hand-scissors":["s","r"],"hand-sparkles":["s"],"hand-spock":["s","r"],"handcuffs":["s"],"hands":["s"],"hands-asl-interpreting":["s"],"hands-bound":["s"],"hands-bubbles":["s"],"hands-clapping":["s"],"hands-holding":["s"],"hands-holding-child":["s"],"hands-holding-circle":["s"],"hands-praying":["s"],"handshake":["s","r"],"handshake-angle":["s"],"handshake-simple":["s"],"handshake-simple-slash":["s"],"handshake-slash":["s"],"hanukiah":["s"],"hard-drive":["s","r"],"hashnode":["b"],"hashtag":["s"],"hat-cowboy":["s"],"hat-cowboy-side":["s"],"hat-wizard":["s"],"head-side-cough":["s"],"head-side-cough-slash":["s"],"head-side-mask":["s"],"head-side-virus":["s"],"heading":["s"],"headphones":["s"],"headphones-simple":["s"],"headset":["s"],"heart":["s","r"],"heart-circle-bolt":["s"],"heart-circle-check":["s"],"heart-circle-exclamation":["s"],"heart-circle-minus":["s"],"heart-circle-plus":["s"],"heart-circle-xmark":["s"],"heart-crack":["s"],"heart-pulse":["s"],"helicopter":["s"],"helicopter-symbol":["s"],"helmet-safety":["s"],"helmet-un":["s"],"highlighter":["s"],"hill-avalanche":["s"],"hill-rockslide":["s"],"hippo":["s"],"hips":["b"],"hire-a-helper":["b"],"hive":["b"],"hockey-puck":["s"],"holly-berry":["s"],"hooli":["b"],"hornbill":["b"],"horse":["s"],"horse-head":["s"],"hospital":["s","r"],"hospital-user":["s"],"hot-tub-person":["s"],"hotdog":["s"],"hotel":["s"],"hotjar":["b"],"hourglass":["s","r"],"hourglass-end":["s"],"hourglass-half":["s","r"],"hourglass-start":["s"],"house":["s"],"house-chimney":["s"],"house-chimney-crack":["s"],"house-chimney-medical":["s"],"house-chimney-user":["s"],"house-chimney-window":["s"],"house-circle-check":["s"],"house-circle-exclamation":["s"],"house-circle-xmark":["s"],"house-crack":["s"],"house-fire":["s"],"house-flag":["s"],"house-flood-water":["s"],"house-flood-water-circle-arrow-right":["s"],"house-laptop":["s"],"house-lock":["s"],"house-medical":["s"],"house-medical-circle-check":["s"],"house-medical-circle-exclamation":["s"],"house-medical-circle-xmark":["s"],"house-medical-flag":["s"],"house-signal":["s"],"house-tsunami":["s"],"house-user":["s"],"houzz":["b"],"hryvnia-sign":["s"],"html5":["b"],"hubspot":["b"],"hurricane":["s"],"i":["s"],"i-cursor":["s"],"ice-cream":["s"],"icicles":["s"],"icons":["s"],"id-badge":["s","r"],"id-card":["s","r"],"id-card-clip":["s"],"ideal":["b"],"igloo":["s"],"image":["s","r"],"image-portrait":["s"],"images":["s","r"],"imdb":["b"],"inbox":["s"],"indent":["s"],"indian-rupee-sign":["s"],"industry":["s"],"infinity":["s"],"info":["s"],"instagram":["b"],"instalod":["b"],"intercom":["b"],"internet-explorer":["b"],"invision":["b"],"ioxhost":["b"],"italic":["s"],"itch-io":["b"],"itunes":["b"],"itunes-note":["b"],"j":["s"],"jar":["s"],"jar-wheat":["s"],"java":["b"],"jedi":["s"],"jedi-order":["b"],"jenkins":["b"],"jet-fighter":["s"],"jet-fighter-up":["s"],"jira":["b"],"joget":["b"],"joint":["s"],"joomla":["b"],"js":["b"],"jsfiddle":["b"],"jug-detergent":["s"],"k":["s"],"kaaba":["s"],"kaggle":["b"],"key":["s"],"keybase":["b"],"keyboard":["s","r"],"keycdn":["b"],"khanda":["s"],"kickstarter":["b"],"kickstarter-k":["b"],"kip-sign":["s"],"kit-medical":["s"],"kitchen-set":["s"],"kiwi-bird":["s"],"korvue":["b"],"l":["s"],"land-mine-on":["s"],"landmark":["s"],"landmark-dome":["s"],"landmark-flag":["s"],"language":["s"],"laptop":["s"],"laptop-code":["s"],"laptop-file":["s"],"laptop-medical":["s"],"laravel":["b"],"lari-sign":["s"],"lastfm":["b"],"layer-group":["s"],"leaf":["s"],"leanpub":["b"],"left-long":["s"],"left-right":["s"],"lemon":["s","r"],"less":["b"],"less-than":["s"],"less-than-equal":["s"],"life-ring":["s","r"],"lightbulb":["s","r"],"line":["b"],"lines-leaning":["s"],"link":["s"],"link-slash":["s"],"linkedin":["b"],"linkedin-in":["b"],"linode":["b"],"linux":["b"],"lira-sign":["s"],"list":["s"],"list-check":["s"],"list-ol":["s"],"list-ul":["s"],"litecoin-sign":["s"],"location-arrow":["s"],"location-crosshairs":["s"],"location-dot":["s"],"location-pin":["s"],"location-pin-lock":["s"],"lock":["s"],"lock-open":["s"],"locust":["s"],"lungs":["s"],"lungs-virus":["s"],"lyft":["b"],"m":["s"],"magento":["b"],"magnet":["s"],"magnifying-glass":["s"],"magnifying-glass-arrow-right":["s"],"magnifying-glass-chart":["s"],"magnifying-glass-dollar":["s"],"magnifying-glass-location":["s"],"magnifying-glass-minus":["s"],"magnifying-glass-plus":["s"],"mailchimp":["b"],"manat-sign":["s"],"mandalorian":["b"],"map":["s","r"],"map-location":["s"],"map-location-dot":["s"],"map-pin":["s"],"markdown":["b"],"marker":["s"],"mars":["s"],"mars-and-venus":["s"],"mars-and-venus-burst":["s"],"mars-double":["s"],"mars-stroke":["s"],"mars-stroke-right":["s"],"mars-stroke-up":["s"],"martini-glass":["s"],"martini-glass-citrus":["s"],"martini-glass-empty":["s"],"mask":["s"],"mask-face":["s"],"mask-ventilator":["s"],"masks-theater":["s"],"mastodon":["b"],"mattress-pillow":["s"],"maxcdn":["b"],"maximize":["s"],"mdb":["b"],"medal":["s"],"medapps":["b"],"medium":["b"],"medrt":["b"],"meetup":["b"],"megaport":["b"],"memory":["s"],"mendeley":["b"],"menorah":["s"],"mercury":["s"],"message":["s","r"],"meta":["b"],"meteor":["s"],"microblog":["b"],"microchip":["s"],"microphone":["s"],"microphone-lines":["s"],"microphone-lines-slash":["s"],"microphone-slash":["s"],"microscope":["s"],"microsoft":["b"],"mill-sign":["s"],"minimize":["s"],"minus":["s"],"mitten":["s"],"mix":["b"],"mixcloud":["b"],"mixer":["b"],"mizuni":["b"],"mobile":["s"],"mobile-button":["s"],"mobile-retro":["s"],"mobile-screen":["s"],"mobile-screen-button":["s"],"modx":["b"],"monero":["b"],"money-bill":["s"],"money-bill-1":["s","r"],"money-bill-1-wave":["s"],"money-bill-transfer":["s"],"money-bill-trend-up":["s"],"money-bill-wave":["s"],"money-bill-wheat":["s"],"money-bills":["s"],"money-check":["s"],"money-check-dollar":["s"],"monument":["s"],"moon":["s","r"],"mortar-pestle":["s"],"mosque":["s"],"mosquito":["s"],"mosquito-net":["s"],"motorcycle":["s"],"mound":["s"],"mountain":["s"],"mountain-city":["s"],"mountain-sun":["s"],"mug-hot":["s"],"mug-saucer":["s"],"music":["s"],"n":["s"],"naira-sign":["s"],"napster":["b"],"neos":["b"],"network-wired":["s"],"neuter":["s"],"newspaper":["s","r"],"nfc-directional":["b"],"nfc-symbol":["b"],"nimblr":["b"],"node":["b"],"node-js":["b"],"not-equal":["s"],"note-sticky":["s","r"],"notes-medical":["s"],"npm":["b"],"ns8":["b"],"nutritionix":["b"],"o":["s"],"object-group":["s","r"],"object-ungroup":["s","r"],"octopus-deploy":["b"],"odnoklassniki":["b"],"oil-can":["s"],"oil-well":["s"],"old-republic":["b"],"om":["s"],"opencart":["b"],"openid":["b"],"opera":["b"],"optin-monster":["b"],"orcid":["b"],"osi":["b"],"otter":["s"],"outdent":["s"],"p":["s"],"padlet":["b"],"page4":["b"],"pagelines":["b"],"pager":["s"],"paint-roller":["s"],"paintbrush":["s"],"palette":["s"],"palfed":["b"],"pallet":["s"],"panorama":["s"],"paper-plane":["s","r"],"paperclip":["s"],"parachute-box":["s"],"paragraph":["s"],"passport":["s"],"paste":["s","r"],"patreon":["b"],"pause":["s"],"paw":["s"],"paypal":["b"],"peace":["s"],"pen":["s"],"pen-clip":["s"],"pen-fancy":["s"],"pen-nib":["s"],"pen-ruler":["s"],"pen-to-square":["s","r"],"pencil":["s"],"people-arrows":["s"],"people-carry-box":["s"],"people-group":["s"],"people-line":["s"],"people-pulling":["s"],"people-robbery":["s"],"people-roof":["s"],"pepper-hot":["s"],"perbyte":["b"],"percent":["s"],"periscope":["b"],"person":["s"],"person-arrow-down-to-line":["s"],"person-arrow-up-from-line":["s"],"person-biking":["s"],"person-booth":["s"],"person-breastfeeding":["s"],"person-burst":["s"],"person-cane":["s"],"person-chalkboard":["s"],"person-circle-check":["s"],"person-circle-exclamation":["s"],"person-circle-minus":["s"],"person-circle-plus":["s"],"person-circle-question":["s"],"person-circle-xmark":["s"],"person-digging":["s"],"person-dots-from-line":["s"],"person-dress":["s"],"person-dress-burst":["s"],"person-drowning":["s"],"person-falling":["s"],"person-falling-burst":["s"],"person-half-dress":["s"],"person-harassing":["s"],"person-hiking":["s"],"person-military-pointing":["s"],"person-military-rifle":["s"],"person-military-to-person":["s"],"person-praying":["s"],"person-pregnant":["s"],"person-rays":["s"],"person-rifle":["s"],"person-running":["s"],"person-shelter":["s"],"person-skating":["s"],"person-skiing":["s"],"person-skiing-nordic":["s"],"person-snowboarding":["s"],"person-swimming":["s"],"person-through-window":["s"],"person-walking":["s"],"person-walking-arrow-loop-left":["s"],"person-walking-arrow-right":["s"],"person-walking-dashed-line-arrow-right":["s"],"person-walking-luggage":["s"],"person-walking-with-cane":["s"],"peseta-sign":["s"],"peso-sign":["s"],"phabricator":["b"],"phoenix-framework":["b"],"phoenix-squadron":["b"],"phone":["s"],"phone-flip":["s"],"phone-slash":["s"],"phone-volume":["s"],"photo-film":["s"],"php":["b"],"pied-piper":["b"],"pied-piper-alt":["b"],"pied-piper-hat":["b"],"pied-piper-pp":["b"],"piggy-bank":["s"],"pills":["s"],"pinterest":["b"],"pinterest-p":["b"],"pix":["b"],"pizza-slice":["s"],"place-of-worship":["s"],"plane":["s"],"plane-arrival":["s"],"plane-circle-check":["s"],"plane-circle-exclamation":["s"],"plane-circle-xmark":["s"],"plane-departure":["s"],"plane-lock":["s"],"plane-slash":["s"],"plane-up":["s"],"plant-wilt":["s"],"plate-wheat":["s"],"play":["s"],"playstation":["b"],"plug":["s"],"plug-circle-bolt":["s"],"plug-circle-check":["s"],"plug-circle-exclamation":["s"],"plug-circle-minus":["s"],"plug-circle-plus":["s"],"plug-circle-xmark":["s"],"plus":["s"],"plus-minus":["s"],"podcast":["s"],"poo":["s"],"poo-storm":["s"],"poop":["s"],"power-off":["s"],"prescription":["s"],"prescription-bottle":["s"],"prescription-bottle-medical":["s"],"print":["s"],"product-hunt":["b"],"pump-medical":["s"],"pump-soap":["s"],"pushed":["b"],"puzzle-piece":["s"],"python":["b"],"q":["s"],"qq":["b"],"qrcode":["s"],"question":["s"],"quinscape":["b"],"quora":["b"],"quote-left":["s"],"quote-right":["s"],"r":["s"],"r-project":["b"],"radiation":["s"],"radio":["s"],"rainbow":["s"],"ranking-star":["s"],"raspberry-pi":["b"],"ravelry":["b"],"react":["b"],"reacteurope":["b"],"readme":["b"],"rebel":["b"],"receipt":["s"],"record-vinyl":["s"],"rectangle-ad":["s"],"rectangle-list":["s","r"],"rectangle-xmark":["s","r"],"recycle":["s"],"red-river":["b"],"reddit":["b"],"reddit-alien":["b"],"redhat":["b"],"registered":["s","r"],"renren":["b"],"repeat":["s"],"reply":["s"],"reply-all":["s"],"replyd":["b"],"republican":["s"],"researchgate":["b"],"resolving":["b"],"restroom":["s"],"retweet":["s"],"rev":["b"],"ribbon":["s"],"right-from-bracket":["s"],"right-left":["s"],"right-long":["s"],"right-to-bracket":["s"],"ring":["s"],"road":["s"],"road-barrier":["s"],"road-bridge":["s"],"road-circle-check":["s"],"road-circle-exclamation":["s"],"road-circle-xmark":["s"],"road-lock":["s"],"road-spikes":["s"],"robot":["s"],"rocket":["s"],"rocketchat":["b"],"rockrms":["b"],"rotate":["s"],"rotate-left":["s"],"rotate-right":["s"],"route":["s"],"rss":["s"],"ruble-sign":["s"],"rug":["s"],"ruler":["s"],"ruler-combined":["s"],"ruler-horizontal":["s"],"ruler-vertical":["s"],"rupee-sign":["s"],"rupiah-sign":["s"],"rust":["b"],"s":["s"],"sack-dollar":["s"],"sack-xmark":["s"],"safari":["b"],"sailboat":["s"],"salesforce":["b"],"sass":["b"],"satellite":["s"],"satellite-dish":["s"],"scale-balanced":["s"],"scale-unbalanced":["s"],"scale-unbalanced-flip":["s"],"schlix":["b"],"school":["s"],"school-circle-check":["s"],"school-circle-exclamation":["s"],"school-circle-xmark":["s"],"school-flag":["s"],"school-lock":["s"],"scissors":["s"],"screenpal":["b"],"screwdriver":["s"],"screwdriver-wrench":["s"],"scribd":["b"],"scroll":["s"],"scroll-torah":["s"],"sd-card":["s"],"searchengin":["b"],"section":["s"],"seedling":["s"],"sellcast":["b"],"sellsy":["b"],"server":["s"],"servicestack":["b"],"shapes":["s"],"share":["s"],"share-from-square":["s","r"],"share-nodes":["s"],"sheet-plastic":["s"],"shekel-sign":["s"],"shield":["s"],"shield-cat":["s"],"shield-dog":["s"],"shield-halved":["s"],"shield-heart":["s"],"shield-virus":["s"],"ship":["s"],"shirt":["s"],"shirtsinbulk":["b"],"shoe-prints":["s"],"shop":["s"],"shop-lock":["s"],"shop-slash":["s"],"shopify":["b"],"shopware":["b"],"shower":["s"],"shrimp":["s"],"shuffle":["s"],"shuttle-space":["s"],"sign-hanging":["s"],"signal":["s"],"signature":["s"],"signs-post":["s"],"sim-card":["s"],"simplybuilt":["b"],"sink":["s"],"sistrix":["b"],"sitemap":["s"],"sith":["b"],"sitrox":["b"],"sketch":["b"],"skull":["s"],"skull-crossbones":["s"],"skyatlas":["b"],"skype":["b"],"slack":["b"],"slash":["s"],"sleigh":["s"],"sliders":["s"],"slideshare":["b"],"smog":["s"],"smoking":["s"],"snapchat":["b"],"snowflake":["s","r"],"snowman":["s"],"snowplow":["s"],"soap":["s"],"socks":["s"],"solar-panel":["s"],"sort":["s"],"sort-down":["s"],"sort-up":["s"],"soundcloud":["b"],"sourcetree":["b"],"spa":["s"],"space-awesome":["b"],"spaghetti-monster-flying":["s"],"speakap":["b"],"speaker-deck":["b"],"spell-check":["s"],"spider":["s"],"spinner":["s"],"splotch":["s"],"spoon":["s"],"spotify":["b"],"spray-can":["s"],"spray-can-sparkles":["s"],"square":["s","r"],"square-arrow-up-right":["s"],"square-behance":["b"],"square-caret-down":["s","r"],"square-caret-left":["s","r"],"square-caret-right":["s","r"],"square-caret-up":["s","r"],"square-check":["s","r"],"square-dribbble":["b"],"square-envelope":["s"],"square-facebook":["b"],"square-font-awesome":["b"],"square-font-awesome-stroke":["b"],"square-full":["s","r"],"square-git":["b"],"square-github":["b"],"square-gitlab":["b"],"square-google-plus":["b"],"square-h":["s"],"square-hacker-news":["b"],"square-instagram":["b"],"square-js":["b"],"square-lastfm":["b"],"square-minus":["s","r"],"square-nfi":["s"],"square-odnoklassniki":["b"],"square-parking":["s"],"square-pen":["s"],"square-person-confined":["s"],"square-phone":["s"],"square-phone-flip":["s"],"square-pied-piper":["b"],"square-pinterest":["b"],"square-plus":["s","r"],"square-poll-horizontal":["s"],"square-poll-vertical":["s"],"square-reddit":["b"],"square-root-variable":["s"],"square-rss":["s"],"square-share-nodes":["s"],"square-snapchat":["b"],"square-steam":["b"],"square-tumblr":["b"],"square-twitter":["b"],"square-up-right":["s"],"square-viadeo":["b"],"square-vimeo":["b"],"square-virus":["s"],"square-whatsapp":["b"],"square-xing":["b"],"square-xmark":["s"],"square-youtube":["b"],"squarespace":["b"],"stack-exchange":["b"],"stack-overflow":["b"],"stackpath":["b"],"staff-snake":["s"],"stairs":["s"],"stamp":["s"],"stapler":["s"],"star":["s","r"],"star-and-crescent":["s"],"star-half":["s","r"],"star-half-stroke":["s","r"],"star-of-david":["s"],"star-of-life":["s"],"staylinked":["b"],"steam":["b"],"steam-symbol":["b"],"sterling-sign":["s"],"stethoscope":["s"],"sticker-mule":["b"],"stop":["s"],"stopwatch":["s"],"stopwatch-20":["s"],"store":["s"],"store-slash":["s"],"strava":["b"],"street-view":["s"],"strikethrough":["s"],"stripe":["b"],"stripe-s":["b"],"stroopwafel":["s"],"studiovinari":["b"],"stumbleupon":["b"],"stumbleupon-circle":["b"],"subscript":["s"],"suitcase":["s"],"suitcase-medical":["s"],"suitcase-rolling":["s"],"sun":["s","r"],"sun-plant-wilt":["s"],"superpowers":["b"],"superscript":["s"],"supple":["b"],"suse":["b"],"swatchbook":["s"],"swift":["b"],"symfony":["b"],"synagogue":["s"],"syringe":["s"],"t":["s"],"table":["s"],"table-cells":["s"],"table-cells-large":["s"],"table-columns":["s"],"table-list":["s"],"table-tennis-paddle-ball":["s"],"tablet":["s"],"tablet-button":["s"],"tablet-screen-button":["s"],"tablets":["s"],"tachograph-digital":["s"],"tag":["s"],"tags":["s"],"tape":["s"],"tarp":["s"],"tarp-droplet":["s"],"taxi":["s"],"teamspeak":["b"],"teeth":["s"],"teeth-open":["s"],"telegram":["b"],"temperature-arrow-down":["s"],"temperature-arrow-up":["s"],"temperature-empty":["s"],"temperature-full":["s"],"temperature-half":["s"],"temperature-high":["s"],"temperature-low":["s"],"temperature-quarter":["s"],"temperature-three-quarters":["s"],"tencent-weibo":["b"],"tenge-sign":["s"],"tent":["s"],"tent-arrow-down-to-line":["s"],"tent-arrow-left-right":["s"],"tent-arrow-turn-left":["s"],"tent-arrows-down":["s"],"tents":["s"],"terminal":["s"],"text-height":["s"],"text-slash":["s"],"text-width":["s"],"the-red-yeti":["b"],"themeco":["b"],"themeisle":["b"],"thermometer":["s"],"think-peaks":["b"],"thumbs-down":["s","r"],"thumbs-up":["s","r"],"thumbtack":["s"],"ticket":["s"],"ticket-simple":["s"],"tiktok":["b"],"timeline":["s"],"toggle-off":["s"],"toggle-on":["s"],"toilet":["s"],"toilet-paper":["s"],"toilet-paper-slash":["s"],"toilet-portable":["s"],"toilets-portable":["s"],"toolbox":["s"],"tooth":["s"],"torii-gate":["s"],"tornado":["s"],"tower-broadcast":["s"],"tower-cell":["s"],"tower-observation":["s"],"tractor":["s"],"trade-federation":["b"],"trademark":["s"],"traffic-light":["s"],"trailer":["s"],"train":["s"],"train-subway":["s"],"train-tram":["s"],"transgender":["s"],"trash":["s"],"trash-arrow-up":["s"],"trash-can":["s","r"],"trash-can-arrow-up":["s"],"tree":["s"],"tree-city":["s"],"trello":["b"],"triangle-exclamation":["s"],"trophy":["s"],"trowel":["s"],"trowel-bricks":["s"],"truck":["s"],"truck-arrow-right":["s"],"truck-droplet":["s"],"truck-fast":["s"],"truck-field":["s"],"truck-field-un":["s"],"truck-front":["s"],"truck-medical":["s"],"truck-monster":["s"],"truck-moving":["s"],"truck-pickup":["s"],"truck-plane":["s"],"truck-ramp-box":["s"],"tty":["s"],"tumblr":["b"],"turkish-lira-sign":["s"],"turn-down":["s"],"turn-up":["s"],"tv":["s"],"twitch":["b"],"twitter":["b"],"typo3":["b"],"u":["s"],"uber":["b"],"ubuntu":["b"],"uikit":["b"],"umbraco":["b"],"umbrella":["s"],"umbrella-beach":["s"],"uncharted":["b"],"underline":["s"],"uniregistry":["b"],"unity":["b"],"universal-access":["s"],"unlock":["s"],"unlock-keyhole":["s"],"unsplash":["b"],"untappd":["b"],"up-down":["s"],"up-down-left-right":["s"],"up-long":["s"],"up-right-and-down-left-from-center":["s"],"up-right-from-square":["s"],"upload":["s"],"ups":["b"],"usb":["b"],"user":["s","r"],"user-astronaut":["s"],"user-check":["s"],"user-clock":["s"],"user-doctor":["s"],"user-gear":["s"],"user-graduate":["s"],"user-group":["s"],"user-injured":["s"],"user-large":["s"],"user-large-slash":["s"],"user-lock":["s"],"user-minus":["s"],"user-ninja":["s"],"user-nurse":["s"],"user-pen":["s"],"user-plus":["s"],"user-secret":["s"],"user-shield":["s"],"user-slash":["s"],"user-tag":["s"],"user-tie":["s"],"user-xmark":["s"],"users":["s"],"users-between-lines":["s"],"users-gear":["s"],"users-line":["s"],"users-rays":["s"],"users-rectangle":["s"],"users-slash":["s"],"users-viewfinder":["s"],"usps":["b"],"ussunnah":["b"],"utensils":["s"],"v":["s"],"vaadin":["b"],"van-shuttle":["s"],"vault":["s"],"vector-square":["s"],"venus":["s"],"venus-double":["s"],"venus-mars":["s"],"vest":["s"],"vest-patches":["s"],"viacoin":["b"],"viadeo":["b"],"vial":["s"],"vial-circle-check":["s"],"vial-virus":["s"],"vials":["s"],"viber":["b"],"video":["s"],"video-slash":["s"],"vihara":["s"],"vimeo":["b"],"vimeo-v":["b"],"vine":["b"],"virus":["s"],"virus-covid":["s"],"virus-covid-slash":["s"],"virus-slash":["s"],"viruses":["s"],"vk":["b"],"vnv":["b"],"voicemail":["s"],"volcano":["s"],"volleyball":["s"],"volume-high":["s"],"volume-low":["s"],"volume-off":["s"],"volume-xmark":["s"],"vr-cardboard":["s"],"vuejs":["b"],"w":["s"],"walkie-talkie":["s"],"wallet":["s"],"wand-magic":["s"],"wand-magic-sparkles":["s"],"wand-sparkles":["s"],"warehouse":["s"],"watchman-monitoring":["b"],"water":["s"],"water-ladder":["s"],"wave-square":["s"],"waze":["b"],"weebly":["b"],"weibo":["b"],"weight-hanging":["s"],"weight-scale":["s"],"weixin":["b"],"whatsapp":["b"],"wheat-awn":["s"],"wheat-awn-circle-exclamation":["s"],"wheelchair":["s"],"wheelchair-move":["s"],"whiskey-glass":["s"],"whmcs":["b"],"wifi":["s"],"wikipedia-w":["b"],"wind":["s"],"window-maximize":["s","r"],"window-minimize":["s","r"],"window-restore":["s","r"],"windows":["b"],"wine-bottle":["s"],"wine-glass":["s"],"wine-glass-empty":["s"],"wirsindhandwerk":["b"],"wix":["b"],"wizards-of-the-coast":["b"],"wodu":["b"],"wolf-pack-battalion":["b"],"won-sign":["s"],"wordpress":["b"],"wordpress-simple":["b"],"worm":["s"],"wpbeginner":["b"],"wpexplorer":["b"],"wpforms":["b"],"wpressr":["b"],"wrench":["s"],"x":["s"],"x-ray":["s"],"xbox":["b"],"xing":["b"],"xmark":["s"],"xmarks-lines":["s"],"y":["s"],"y-combinator":["b"],"yahoo":["b"],"yammer":["b"],"yandex":["b"],"yandex-international":["b"],"yarn":["b"],"yelp":["b"],"yen-sign":["s"],"yin-yang":["s"],"yoast":["b"],"youtube":["b"],"z":["s"],"zhihu":["b"]} \ No newline at end of file diff --git a/tabby-core/src/index.ts b/tabby-core/src/index.ts index c0be2804..662e497a 100644 --- a/tabby-core/src/index.ts +++ b/tabby-core/src/index.ts @@ -1,11 +1,9 @@ import { NgModule, ModuleWithProviders, LOCALE_ID } from '@angular/core' -import { BrowserModule } from '@angular/platform-browser' import { BrowserAnimationsModule } from '@angular/platform-browser/animations' +import { CommonModule } from '@angular/common' import { FormsModule } from '@angular/forms' import { NgbModule } from '@ng-bootstrap/ng-bootstrap' -import { PerfectScrollbarModule, PERFECT_SCROLLBAR_CONFIG } from 'ngx-perfect-scrollbar' import { NgxFilesizeModule } from 'ngx-filesize' -import { SortablejsModule } from 'ngx-sortablejs' import { DragDropModule } from '@angular/cdk/drag-drop' import { TranslateModule, TranslateCompiler, TranslateService } from '@ngx-translate/core' import { TranslateMessageFormatCompiler, MESSAGE_FORMAT_CONFIG } from 'ngx-translate-messageformat-compiler' @@ -43,10 +41,10 @@ import { AppService } from './services/app.service' import { ConfigService } from './services/config.service' import { VaultFileProvider } from './services/vault.service' import { HotkeysService } from './services/hotkeys.service' -import { LocaleService, TranslateServiceWrapper } from './services/locale.service' +import { LocaleService } from './services/locale.service' import { CommandService } from './services/commands.service' -import { StandardTheme, StandardCompactTheme, PaperTheme } from './theme' +import { StandardTheme, StandardCompactTheme, PaperTheme, NewTheme } from './theme' import { CoreConfigProvider } from './config' import { AppHotkeyProvider } from './hotkeys' import { TaskCompletionContextMenu, CommonOptionsContextMenu, TabManagementContextMenu, ProfilesContextMenu } from './tabContextMenu' @@ -54,8 +52,6 @@ import { LastCLIHandler, ProfileCLIHandler } from './cli' import { SplitLayoutProfilesService } from './profiles' import { CoreCommandProvider } from './commands' -import 'perfect-scrollbar/css/perfect-scrollbar.css' - export function TranslateMessageFormatCompilerFactory (): TranslateMessageFormatCompiler { return new TranslateMessageFormatCompiler() } @@ -65,6 +61,7 @@ const PROVIDERS = [ { provide: Theme, useClass: StandardTheme, multi: true }, { provide: Theme, useClass: StandardCompactTheme, multi: true }, { provide: Theme, useClass: PaperTheme, multi: true }, + { provide: Theme, useClass: NewTheme, multi: true }, { provide: ConfigProvider, useClass: CoreConfigProvider, multi: true }, { provide: TabContextMenuItemProvider, useClass: CommonOptionsContextMenu, multi: true }, { provide: TabContextMenuItemProvider, useClass: TabManagementContextMenu, multi: true }, @@ -73,7 +70,6 @@ const PROVIDERS = [ { provide: TabRecoveryProvider, useExisting: SplitTabRecoveryProvider, multi: true }, { provide: CLIHandler, useClass: ProfileCLIHandler, multi: true }, { provide: CLIHandler, useClass: LastCLIHandler, multi: true }, - { provide: PERFECT_SCROLLBAR_CONFIG, useValue: { suppressScrollX: true } }, { provide: FileProvider, useClass: VaultFileProvider, multi: true }, { provide: ProfileProvider, useExisting: SplitLayoutProfilesService, multi: true }, { provide: CommandProvider, useExisting: CoreCommandProvider, multi: true }, @@ -86,24 +82,24 @@ const PROVIDERS = [ provide: MESSAGE_FORMAT_CONFIG, useValue: LocaleService.allLanguages.map(x => x.code), }, - { - provide: TranslateService, - useClass: TranslateServiceWrapper, - }, ] /** @hidden */ @NgModule({ imports: [ - BrowserModule, BrowserAnimationsModule, + CommonModule, FormsModule, NgbModule, NgxFilesizeModule, - PerfectScrollbarModule, DragDropModule, - SortablejsModule.forRoot({ animation: 150 }), - TranslateModule, + TranslateModule.forRoot({ + defaultLanguage: 'en', + compiler: { + provide: TranslateCompiler, + useFactory: TranslateMessageFormatCompilerFactory, + }, + }), ], declarations: [ AppRootComponent, @@ -132,16 +128,8 @@ const PROVIDERS = [ CdkAutoDropGroup, ProfileIconComponent, ], - entryComponents: [ - PromptModalComponent, - RenameTabModalComponent, - SafeModeModalComponent, - SelectorModalComponent, - SplitTabComponent, - UnlockVaultModalComponent, - WelcomeTabComponent, - ], exports: [ + AppRootComponent, CheckboxComponent, ToggleComponent, PromptModalComponent, @@ -149,7 +137,6 @@ const PROVIDERS = [ DropZoneDirective, FastHtmlBindDirective, AlwaysVisibleTypeaheadDirective, - SortablejsModule, DragDropModule, TranslateModule, CdkAutoDropGroup, @@ -239,18 +226,10 @@ export default class AppModule { // eslint-disable-line @typescript-eslint/no-ex } static forRoot (): ModuleWithProviders { - const translateModule = TranslateModule.forRoot({ - defaultLanguage: 'en', - compiler: { - provide: TranslateCompiler, - useFactory: TranslateMessageFormatCompilerFactory, - }, - }) return { ngModule: AppModule, providers: [ ...PROVIDERS, - ...translateModule.providers!.filter(x => x !== TranslateService), ], } } diff --git a/tabby-core/src/services/commands.service.ts b/tabby-core/src/services/commands.service.ts index 9ae33694..72039beb 100644 --- a/tabby-core/src/services/commands.service.ts +++ b/tabby-core/src/services/commands.service.ts @@ -12,7 +12,7 @@ export class CommandService { private app: AppService, private translate: TranslateService, @Optional() @Inject(TabContextMenuItemProvider) protected contextMenuProviders: TabContextMenuItemProvider[], - @Inject(ToolbarButtonProvider) private toolbarButtonProviders: ToolbarButtonProvider[], + @Optional() @Inject(ToolbarButtonProvider) private toolbarButtonProviders: ToolbarButtonProvider[], @Inject(CommandProvider) private commandProviders: CommandProvider[], ) { this.contextMenuProviders.sort((a, b) => a.weight - b.weight) diff --git a/tabby-core/src/services/config.service.ts b/tabby-core/src/services/config.service.ts index c1e6c360..05f25924 100644 --- a/tabby-core/src/services/config.service.ts +++ b/tabby-core/src/services/config.service.ts @@ -236,11 +236,13 @@ export class ConfigService { * * @typeparam T Base provider type */ - enabledServices (services: T[]): T[] { // eslint-disable-line @typescript-eslint/ban-types + enabledServices (services: T[]|undefined): T[] { // eslint-disable-line @typescript-eslint/ban-types + if (!services) { + return [] + } if (!this.servicesCache) { this.servicesCache = {} - const ngModule = window['rootModule'].ɵinj - for (const imp of ngModule.imports) { + for (const imp of window['pluginModules']) { const module = imp.ngModule || imp if (module.ɵinj?.providers) { this.servicesCache[module.pluginName] = module.ɵinj.providers.map(provider => { diff --git a/tabby-core/src/services/locale.service.ts b/tabby-core/src/services/locale.service.ts index fac57cf3..b628c844 100644 --- a/tabby-core/src/services/locale.service.ts +++ b/tabby-core/src/services/locale.service.ts @@ -55,24 +55,6 @@ function flattenMessageFormatTranslation (po: any) { return translation } -@Injectable({ providedIn: 'root' }) -export class TranslateServiceWrapper extends TranslateService { - private _defaultTranslation: Record|null - - // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types - getParsedResult (translations: any, key: any, interpolateParams?: any): any { - if (!this._defaultTranslation) { - const po = require(`../../../locale/en-US.po`) - this._defaultTranslation = flattenMessageFormatTranslation(po) - } - this.translations[this.defaultLang][key] ??= this.compiler.compile( - this._defaultTranslation[key] || key, - this.defaultLang, - ) - return super.getParsedResult(translations, key, interpolateParams ?? {}) - } -} - @Injectable({ providedIn: 'root' }) export class LocaleService { private logger: Logger @@ -176,6 +158,7 @@ export class LocaleService { private translate: TranslateService, log: LogService, ) { + this.patchTranslateService(translate) this.logger = log.create('translate') config.changed$.subscribe(() => { this.refresh() @@ -191,6 +174,24 @@ export class LocaleService { } } + private patchTranslateService (translate: TranslateService) { + translate['_defaultTranslation'] = null + const oldGetParsedResult = translate.getParsedResult.bind(translate) + + // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types + translate.getParsedResult = function (translations: any, key: any, interpolateParams?: any): any { + if (!this._defaultTranslation) { + const po = require(`../../../locale/en-US.po`) + this._defaultTranslation = flattenMessageFormatTranslation(po) + } + this.translations[this.defaultLang][key] ??= this.compiler.compile( + this._defaultTranslation[key] || key, + this.defaultLang, + ) + return oldGetParsedResult(translations, key, interpolateParams ?? {}) + }.bind(translate) + } + refresh (): void { let lang = this.config.store.language if (!lang) { diff --git a/tabby-core/src/services/themes.service.ts b/tabby-core/src/services/themes.service.ts index 4b353b23..6a1071d5 100644 --- a/tabby-core/src/services/themes.service.ts +++ b/tabby-core/src/services/themes.service.ts @@ -1,7 +1,9 @@ import { Inject, Injectable } from '@angular/core' import { Subject, Observable } from 'rxjs' +import * as Color from 'color' import { ConfigService } from '../services/config.service' import { Theme } from '../api/theme' +import { NewTheme } from '../theme' @Injectable({ providedIn: 'root' }) export class ThemesService { @@ -9,19 +11,120 @@ export class ThemesService { private themeChanged = new Subject() private styleElement: HTMLElement|null = null + private rootElementStyleBackup = '' /** @hidden */ private constructor ( private config: ConfigService, + private standardTheme: NewTheme, @Inject(Theme) private themes: Theme[], ) { - this.applyTheme(this.findTheme('Standard')!) + this.rootElementStyleBackup = document.documentElement.style.cssText + this.applyTheme(standardTheme) config.ready$.toPromise().then(() => { this.applyCurrentTheme() + this.applyThemeVariables() config.changed$.subscribe(() => { this.applyCurrentTheme() }) }) + config.changed$.subscribe(() => this.applyThemeVariables()) + } + + private applyThemeVariables () { + if (!this.findCurrentTheme().followsColorScheme) { + document.documentElement.style.cssText = this.rootElementStyleBackup + return + } + + const theme = this.config.store.terminal.colorScheme + const isDark = Color(theme.background).luminosity() < Color(theme.foreground).luminosity() + + function more (some, factor) { + if (isDark) { + return Color(some).darken(factor) + } + return Color(some).lighten(factor) + } + + function less (some, factor) { + if (!isDark) { + return Color(some).darken(factor) + } + return Color(some).lighten(factor) + } + + let background = Color(theme.background) + if (this.config.store?.appearance.vibrancy) { + background = background.fade(0.6) + } + // const background = theme.background + const backgroundMore = more(background.string(), 0.25).string() + // const backgroundMore =more(theme.background, 0.25).string() + const accentIndex = 4 + const vars: Record = {} + + vars['--bs-body-bg'] = background.string() + vars['--bs-body-color'] = theme.foreground + vars['--bs-black'] = theme.colors[0] + vars['--bs-red'] = theme.colors[1] + vars['--bs-green'] = theme.colors[2] + vars['--bs-yellow'] = theme.colors[3] + vars['--bs-blue'] = theme.colors[4] + vars['--bs-purple'] = theme.colors[5] + vars['--bs-cyan'] = theme.colors[6] + vars['--bs-gray'] = theme.colors[7] + vars['--bs-gray-dark'] = theme.colors[8] + // vars['--bs-red'] = theme.colors[9] + // vars['--bs-green'] = theme.colors[10] + // vars['--bs-yellow'] = theme.colors[11] + // vars['--bs-blue'] = theme.colors[12] + // vars['--bs-purple'] = theme.colors[13] + // vars['--bs-cyan'] = theme.colors[14] + + vars['--theme-fg-more-2'] = more(theme.foreground, 0.5).string() + vars['--theme-fg-more'] = more(theme.foreground, 0.25).string() + vars['--theme-fg'] = theme.foreground + vars['--theme-fg-less'] = less(theme.foreground, 0.25).string() + vars['--theme-fg-less-2'] = less(theme.foreground, 0.5).string() + + vars['--theme-bg-less-2'] = less(theme.background, 0.5).string() + vars['--theme-bg-less'] = less(theme.background, 0.25).string() + vars['--theme-bg'] = theme.background + vars['--theme-bg-more'] = backgroundMore + vars['--theme-bg-more-2'] = more(backgroundMore, 0.25).string() + + const themeColors = { + primary: theme.colors[accentIndex], + secondary: theme.colors[8], + tertiary: theme.colors[8], + warning: theme.colors[3], + danger: theme.colors[1], + success: theme.colors[2], + info: theme.colors[4], + dark: more(theme.background, 0.5).string(), + light: more(theme.foreground, 0.5).string(), + link: theme.colors[8], // for .btn-link + } + + for (const [key, color] of Object.entries(themeColors)) { + vars[`--bs-${key}-bg`] = more(color, 0.5).string() + vars[`--bs-${key}-color`] = less(color, 0.5).string() + vars[`--bs-${key}`] = color + vars[`--bs-${key}-rgb`] = Color(color).rgb().array().join(', ') + vars[`--theme-${key}-more-2`] = more(color, 1).string() + vars[`--theme-${key}-more`] = more(color, 0.5).string() + vars[`--theme-${key}`] = color + vars[`--theme-${key}-less`] = less(color, 0.25).string() + vars[`--theme-${key}-less-2`] = less(color, 0.75).string() + } + + const switchBackground = less(theme.colors[accentIndex], 0.25).string() + vars['--bs-form-switch-bg'] = `url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%27-4 -4 8 8%27%3e%3ccircle r=%273%27 fill=%27${switchBackground}%27/%3e%3c/svg%3e")` + + for (const [key, value] of Object.entries(vars)) { + document.documentElement.style.setProperty(key, value) + } } findTheme (name: string): Theme|null { @@ -29,7 +132,7 @@ export class ThemesService { } findCurrentTheme (): Theme { - return this.findTheme(this.config.store.appearance.theme) ?? this.findTheme('Standard')! + return this.findTheme(this.config.store.appearance.theme) ?? this.standardTheme } applyTheme (theme: Theme): void { diff --git a/tabby-core/src/theme.new.scss b/tabby-core/src/theme.new.scss new file mode 100644 index 00000000..230c65bf --- /dev/null +++ b/tabby-core/src/theme.new.scss @@ -0,0 +1,568 @@ +$font-family-sans-serif: "Source Sans Pro"; +$font-size-base: 14rem / 16; + +app-root { + background: transparent; + + &.vibrant { + background: rgba(var(--bs-dark-rgb),.65); + } + + &> .content { + .tab-bar { + background: var(--theme-bg-more); + + .btn-tab-bar { + background: transparent; + line-height: 42px; + align-items: center; + svg, path { + fill: var(--bs-body-color); + fill-opacity: 0.75; + } + + &:hover { background: rgba(0, 0, 0, .125) !important; } + &:active { background: rgba(0, 0, 0, .25) !important; } + } + + &>.tabs { + tab-header { + border-left: 1px solid transparent; + border-right: 1px solid transparent; + transition: 0.125s ease-out width; + + .index { + color: var(--bs-body-color); + opacity: 0.4; + } + + button { + color: var(--bs-body-color); + border: none; + transition: 0.25s all; + + &:hover { background: var(--theme-bg-more-2) !important; } + &:active { background: var(--theme-bg-more-2) !important; } + } + + .progressbar { + background: var(--bs-blue); + } + + .activity-indicator { + background:var(--bs-body-color); + opacity: .2; + } + + &.active { + // color: $black; + background: var(--bs-body-bg); + // border-left: 1px solid $border-color; + // border-right: 1px solid $border-color; + } + } + } + } + +// &.tabs-on-top .tab-bar { +// &>.background { +// border-bottom: 1px solid $border-color; +// } + +// tab-header { +// border-bottom: 1px solid $border-color; + +// &.active { +// border-bottom-color: transparent; +// } +// } +// } + +// &:not(.tabs-on-top) .tab-bar { +// &>.background { +// border-top: 1px solid $border-color; +// } + +// tab-header { +// border-top: 1px solid $border-color; + +// &.active { +// margin-top: -1px; +// } +// } +// } + } + +// &.platform-win32, &.platform-linux { +// border: 1px solid #111; +// &>.content .tab-bar .tabs tab-header:first-child { +// border-left: none; +// } +// } +} + +tab-body { + background: var(--bs-body-bg); +} + +// $black: #002b36; +// $base02: #073642; +// $base01: #586e75; +// $base00: #657b83; +// $base0: #839496; +// $base1: #93a1a1; +// $base2: #eee8d5; +// $white: #fdf6e3; +// $yellow: #b58900; +// $orange: #cb4b16; +// $red: #dc322f; +// $pink: #d33682; +// $purple: #6c71c4; +// $blue: #268bd2; +// $teal: #2aa198; +// $green: #859900; + +$tab-border-radius: 5px; +// $button-hover-bg: rgba(0, 0, 0, .125); +// $button-active-bg: rgba(0, 0, 0, .25); + + +// $btn-border-radius: 0; + +// $input-bg: $base2; +// $input-disabled-bg: $base1; + +// $input-color: $body-color; +// $input-color-placeholder: $base1; +// $input-border-color: $base1; +// //$input-box-shadow: inset 0 1px 1px rgba($black,.075); +// $input-border-radius: 0; +// $custom-select-border-radius: 0; +// $input-bg-focus: $input-bg; +// //$input-border-focus: lighten($brand-primary, 25%); +// //$input-box-shadow-focus: $input-box-shadow, rgba($input-border-focus, .6); +// $input-color-focus: $input-color; +// $input-group-addon-bg: $body-bg; +// $input-group-addon-border-color: $input-border-color; + +// $modal-content-bg: $content-bg-solid; +// $modal-content-border-color: $body-bg; +$modal-header-border-color: transparent; +$modal-footer-border-color: transparent; + +// $popover-bg: $body-bg; + +// $dropdown-bg: $body-bg; +// $dropdown-link-color: $body-color; +// $dropdown-link-hover-color: #333; +// $dropdown-link-hover-bg: $body-bg2; +// //$dropdown-link-active-color: $component-active-color; +// //$dropdown-link-active-bg: $component-active-bg; +// $dropdown-link-disabled-color: #333; +// $dropdown-header-color: #333; + +// $list-group-action-bg: rgba($black,.05); +// $list-group-action-active-bg: $list-group-link-active-bg; + +// $pre-bg: $dropdown-bg; +// $pre-color: $dropdown-link-color; + +// $headings-font-weight: lighter; +// $headings-color: $base0; + +$form-check-input-width: 1.4em; +$form-switch-width: 2.5em; + +@import '~bootstrap/scss/bootstrap.scss'; +@import "./theme.vendor.scss"; + +body { + --bs-border-color: var(--theme-bg-more-2); + --bs-form-control-bg: var(--theme-bg-more); + --bs-emphasis-color: var(--theme-fg-less-2); +} + +.list-group { + --bs-list-group-bg: var(--theme-bg-more); + --bs-list-group-border-color: var(--theme-bg-more-2); + --bs-list-group-border-width: 0; + // --bs-list-group-item-padding-x: 1rem; + // --bs-list-group-item-padding-y: 0.5rem; + --bs-list-group-action-color: var(--bs-body-color); + --bs-list-group-action-hover-color: var(--theme-fg); + --bs-list-group-action-hover-bg: var(--theme-bg-more-2); + + --bs-list-group-action-active-color: var(--theme-fg); + --bs-list-group-action-active-bg: var(--theme-bg-more-2); + --bs-list-group-disabled-color: var(--bs-secondary-color); + --bs-list-group-disabled-bg: var(--bs-body-bg); + --bs-list-group-active-color: var(--bs-primary-color); + --bs-list-group-active-bg: var(--bs-primary-bg); + // --bs-list-group-active-border-color: #0d6efd; +} + +.nav { + // scss-docs-start nav-css-vars + // --bs-nav-link-padding-x: #{$nav-link-padding-x}; + // --bs-nav-link-padding-y: #{$nav-link-padding-y}; + // @include rfs($nav-link-font-size, --bs-nav-link-font-size); + // --bs-nav-link-font-weight: #{$nav-link-font-weight}; + --bs-nav-link-color: var(--bs-body-color); + --bs-nav-link-hover-color: var(--theme-fg-less-2); + --bs-nav-link-disabled-color: var(--bs-gray); + // scss-docs-end nav-css-vars +} + +.nav-tabs { + // scss-docs-start nav-tabs-css-vars + --bs-nav-tabs-border-width: 2px; + --bs-nav-tabs-border-radius: 0; + --bs-nav-tabs-link-hover-border-color: var(--bs-body-bg); + --bs-nav-tabs-border-color: var(--theme-fg-less-2); + --bs-nav-tabs-link-active-color: var(--theme-fg-less-2); + + --bs-nav-tabs-link-active-bg: transparent; + --bs-nav-tabs-link-active-border-color: transparent; + // scss-docs-end nav-tabs-css-vars +} + +.nav-pills { + // scss-docs-start nav-pills-css-vars + --bs-nav-pills-border-radius: #{$nav-pills-border-radius}; + --bs-nav-pills-link-active-color: var(--theme-bg-more); + --bs-nav-pills-link-active-bg: var(--bs-primary); + // scss-docs-end nav-pills-css-vars +} + +.nav-tabs { + margin-bottom: 10px; + border: none; + + &.nav-justified .nav-link { + margin-right: 5px; + } + + .nav-link { + border: none; + border-bottom: var(--bs-nav-tabs-border-width) solid transparent; + text-transform: uppercase; + font-weight: bold; + padding: 5px 0; + margin-right: 20px; + + uib-tab-heading > i { + font-size: 18px; + } + + &.disabled { + color: var(--bs-nav-tabs-link-disabled-color); + border-color: transparent; + } + } + + .nav-item:last-child .nav-link { + margin-right: 0; + } + + .nav-link.active, + .nav-item.show .nav-link { + color: var(--bs-nav-tabs-link-active-color); + border-color: var(--bs-nav-tabs-border-color); + } + + .nav-item { + outline: none !important; + } +} + + +tab-body { + terminal-toolbar { + background: var(--bs-body-bg); + + .btn, .toolbar-pin-button { + font-weight: bold; + } + } +} + +@each $color, $value in $theme-colors { + .btn-#{$color} { + // 6c757d + --bs-btn-bg: var(--theme-#{$color}); + --bs-btn-border-color: var(--theme-#{$color}); + --bs-btn-disabled-bg: var(--theme-#{$color}); + --bs-btn-disabled-border-color: var(--theme-#{$color}); + + --bs-btn-hover-border-color: var(--theme-#{$color}-less); + --bs-btn-hover-bg: var(--theme-#{$color}-less); + + --bs-btn-active-border-color: var(--theme-#{$color}-less-2); + --bs-btn-active-bg: var(--theme-#{$color}-less-2); + + --bs-btn-focus-shadow-rgb: 130, 138, 145; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + + --bs-btn-color: var(--theme-#{$color}-more-2); + --bs-btn-hover-color: var(--theme-#{$color}-more-2); + --bs-btn-active-color: var(--theme-#{$color}-more-2); + --bs-btn-disabled-color: var(--theme-#{$color}-more-2); + } + + .alert-#{$color} { + --bs-alert-bg: var(--theme-#{$color}-more-2); + --bs-alert-border-color: var(--theme-#{$color}-more); + --bs-alert-color: var(--theme-#{$color}); + } +} + + +multi-hotkey-input { + .item { + background: var(--theme-bg-more); + border: 1px solid var(--bs-primary); + border-radius: 3px; + margin-right: 5px; + + .body { + padding: 3px 0 2px; + + .stroke { + padding: 0 6px; + border-right: 1px solid var(--bs-body-bg); + } + } + + .remove { + padding: 3px 8px 2px; + } + } + + .item:has(.duplicate) { + background-color: var(--bs-danger); + border: 1px solid var(--bs-danger); + } + + .add { + color: #777; + padding: 4px 10px 0; + } + + .add, .item .body, .item .remove { + &:hover { background: var(--theme-bg-more); } + &:active { background: var(--theme-bg-more-2); } + } + + .add:has(.duplicate), .item:has(.duplicate) .body, .item:has(.duplicate) .remove { + &:hover { background: var(--theme-danger-less); } + &:active { background: var(--theme-danger-less-2); } + } +} + +hotkey-input-modal { + .input { + // background: $input-bg; + padding: 10px; + font-size: 24px; + line-height: 27px; + height: 55px; + + .stroke { + background: var(--theme-bg-more); + border: 1px solid var(--bs-primary); + border-radius: 3px; + margin-right: 10px; + padding: 3px 10px; + } + } + + .timeout { + background: $input-bg; + + div { + background: $blue; + } + } +} + +.mb-3 label { + margin-bottom: 2px; +} + +.btn { + i + * { + margin-left: 5px; + } + + &.btn-lg i + * { + margin-left: 10px; + } +} + +.input-group-addon + .form-control { + border-left: none; +} + +.input-group > select.form-control { + flex-direction: row; +} + +.list-group-item { + // transition: 0.0625s background ease; + + i + * { + margin-left: 10px; + } +} + +.list-group.list-group-flush .list-group-item { + background: transparent; + border: none; + + &:not(:last-child) { + border-bottom: none; + } +} + +.list-group-light { + .list-group-item { + border: none !important; + outline: none !important; + background: transparent; + border-radius: $border-radius; + margin: 0 !important; + + &.active { + background-color: var(--bs-list-group-active-bg); + } + } +} + +// checkbox i.on { +// color: $blue; +// } + +// .modal .modal-footer { +// background: rgba(0, 0, 0, .25); + +// .btn { +// font-weight: bold; +// padding: 0.375rem 1.5rem; +// } +// } + +.list-group-item svg { + fill: var(--bs-body-color); + fill-opacity: 0.75; +} + +*::-webkit-scrollbar { + background: rgba(0, 0, 0, .125); + width: 10px; + margin: 5px; +} + +*::-webkit-scrollbar-thumb { + background: rgba(255, 255, 255, .25); +} + +*::-webkit-scrollbar-corner, +*::-webkit-resizer { + opacity: 0; +} + +search-panel { + background: var(--theme-bg-more) !important; + + input { + border-radius: 0 !important; + } +} + + +.btn { + cursor: pointer; + justify-content: flex-start; + overflow: hidden; + + &.disabled, + &:disabled { + cursor: not-allowed; + } +} + +.btn-link { + text-decoration: none; + + // &:hover, &[aria-expanded=true], &:active, &.active { + // color: $link-hover-color; + // border-radius: $btn-border-radius; + // } + + // &[aria-expanded=true], &:active, &.active { + // background: rgba(255, 255, 255, 0.1); + // } +} + +// .btn-group .btn.active { +// border-color: transparent !important; +// } + + +// hr { +// border-color: $list-group-border-color; +// } + +// .dropdown-menu { +// box-shadow: $dropdown-box-shadow; +// } + +ngx-colors-panel .opened { + background: var(--bs-body-bg) !important; + + button { + color: var(--bs-body-color) !important; + } + + .button svg { + fill: white; + } +} + +.text-muted { + // color: var(--bs-body-color) !important; + opacity: .5; +} + +.form-switch .form-check-input { + --bs-form-switch-bg: inherit; + border-color: var(--theme-bg-more); + background-color: var(--theme-bg-more-2); + + &:checked { + border-color: var(--theme-primary-more); + background-color: var(--theme-primary); + } +} + +.form-control:focus { + border-color: var(--theme-fg-more-2); +} + +.accordion { + --bs-accordion-bg: var(--theme-bg-more); + --bs-accordion-active-color: var(--theme-fg); + --bs-accordion-active-bg: var(--theme-bg-more-2); +} + +start-page { + background: var(--theme-bg); +} + +split-tab-spanner { + background: rgba(var(--bs-dark-rgb), .1); + + &:hover, &.active { + background: rgba(var(--bs-dark-rgb), .2); + } +} diff --git a/tabby-core/src/theme.paper.scss b/tabby-core/src/theme.paper.scss index 0b088922..ac5ecc4e 100644 --- a/tabby-core/src/theme.paper.scss +++ b/tabby-core/src/theme.paper.scss @@ -19,10 +19,9 @@ $tab-border-radius: 5px; $button-hover-bg: rgba(0, 0, 0, .125); $button-active-bg: rgba(0, 0, 0, .25); -$theme-colors: ( - "primary": $orange, - "secondary": $base0 -); + +$primary: #fd7e14; +$secondary: #495057; $content-bg: rgba($white, 0.65); $content-bg-solid: $white; @@ -257,8 +256,8 @@ multi-hotkey-input { } .item:has(.duplicate) { - background-color: theme-color('danger'); - border: 1px solid theme-color('danger'); + background-color: map-get($theme-colors, 'danger'); + border: 1px solid map-get($theme-colors, 'danger'); } .add { @@ -272,8 +271,8 @@ multi-hotkey-input { } .add:has(.duplicate), .item:has(.duplicate) .body, .item:has(.duplicate) .remove { - &:hover { background: darken(theme-color('danger'), 5%); } - &:active { background: darken(theme-color('danger'), 15%); } + &:hover { background: darken(map-get($theme-colors, 'danger'), 5%); } + &:active { background: darken(map-get($theme-colors, 'danger'), 15%); } } } @@ -303,7 +302,7 @@ hotkey-input-modal { } } -.form-group label { +.mb-3 label { margin-bottom: 2px; } @@ -314,7 +313,7 @@ hotkey-input-modal { } } -[ngbradiogroup] > label.active { +.btn-check:checked + label { background: $blue; } @@ -370,7 +369,7 @@ toggle { } &.active .body .toggle { - background: theme-colors(primary) !important; + background: map-get($theme-colors, primary) !important; } } @@ -398,3 +397,11 @@ terminal-toolbar { .bg-dark{ background-color: $base2 !important; } + +split-tab-spanner { + background: rgba(0, 0, 0, .2); + + &:hover, &.active { + background: rgba(255, 255, 255, .125); + } +} diff --git a/tabby-core/src/theme.scss b/tabby-core/src/theme.scss index 320eb3bc..315909f4 100644 --- a/tabby-core/src/theme.scss +++ b/tabby-core/src/theme.scss @@ -7,6 +7,7 @@ $button-hover-bg: rgba(0, 0, 0, .25); $button-active-bg: rgba(0, 0, 0, .5); @import '~bootstrap/scss/bootstrap.scss'; +@import "./theme.vendor.scss"; window-controls { svg { @@ -163,8 +164,8 @@ multi-hotkey-input { } .item:has(.duplicate) { - background-color: theme-color('danger'); - border: 1px solid theme-color('danger'); + background-color: map-get($theme-colors, 'danger'); + border: 1px solid map-get($theme-colors, 'danger'); } .add { @@ -178,8 +179,8 @@ multi-hotkey-input { } .add:has(.duplicate), .item:has(.duplicate) .body, .item:has(.duplicate) .remove { - &:hover { background: darken(theme-color('danger'), 5%); } - &:active { background: darken(theme-color('danger'), 15%); } + &:hover { background: darken(map-get($theme-colors, 'danger'), 5%); } + &:active { background: darken(map-get($theme-colors, 'danger'), 15%); } } } @@ -209,11 +210,11 @@ hotkey-input-modal { } } -.form-group label { +.mb-3 label { margin-bottom: 2px; } -[ngbradiogroup] > label.active { +.btn-check:checked + label { background: $blue; } @@ -342,6 +343,8 @@ search-panel { } .btn-link { + text-decoration: none; + &:hover, &[aria-expanded=true], &:active, &.active { color: $link-hover-color; border-radius: $btn-border-radius; @@ -375,9 +378,9 @@ search-panel { font-size: 18px; } - @include hover-focus { - color: $nav-tabs-link-active-color; - } + // @include hover-focus { + // color: $nav-tabs-link-active-color; + // } &.disabled { color: $nav-link-disabled-color; @@ -415,3 +418,11 @@ ngx-colors-panel .opened { fill: white; } } + +split-tab-spanner { + background: rgba(0, 0, 0, .2); + + &:hover, &.active { + background: rgba(255, 255, 255, .125); + } +} diff --git a/tabby-core/src/theme.ts b/tabby-core/src/theme.ts index cc7976e2..b3328915 100644 --- a/tabby-core/src/theme.ts +++ b/tabby-core/src/theme.ts @@ -5,7 +5,7 @@ import { Theme } from './api' /** @hidden */ @Injectable() export class StandardTheme extends Theme { - name = this.translate.instant('Standard') + name = this.translate.instant('Standard (legacy)') css = require('./theme.scss') terminalBackground = '#222a33' @@ -17,7 +17,7 @@ export class StandardTheme extends Theme { /** @hidden */ @Injectable() export class StandardCompactTheme extends Theme { - name = this.translate.instant('Compact') + name = this.translate.instant('Compact (legacy)') css = require('./theme.compact.scss') terminalBackground = '#222a33' macOSWindowButtonsInsetX = 8 @@ -31,7 +31,20 @@ export class StandardCompactTheme extends Theme { /** @hidden */ @Injectable() export class PaperTheme extends Theme { - name = 'Paper' + name = 'Paper (legacy)' css = require('./theme.paper.scss') terminalBackground = '#f7f1e0' } + +/** @hidden */ +@Injectable({ providedIn: 'root' }) +export class NewTheme extends Theme { + name = this.translate.instant('Follow the color scheme') + css = require('./theme.new.scss') + terminalBackground = '#f7f1e0' + followsColorScheme = true + + constructor (private translate: TranslateService) { + super() + } +} diff --git a/tabby-core/src/theme.vars.scss b/tabby-core/src/theme.vars.scss index 320b533f..d15f43aa 100644 --- a/tabby-core/src/theme.vars.scss +++ b/tabby-core/src/theme.vars.scss @@ -175,13 +175,12 @@ $badge-padding-y: 4px; $badge-padding-x: 6px; -$custom-control-indicator-size: 1.2rem; -$custom-control-indicator-bg: $body-bg; -$custom-control-indicator-border-color: lighten($body-bg, 25%); -$custom-control-indicator-checked-bg: theme-color("primary"); -$custom-control-indicator-checked-color: $body-bg; -$custom-control-indicator-checked-border-color: transparent; -$custom-control-indicator-active-bg: rgba(255, 255, 0, 0.5); +$form-check-input-border: lighten($body-bg, 25%); +$form-check-input-width: 1.4em; +$form-switch-width: 2.5em; +$form-switch-color: lighten($body-bg, 25%); +$form-switch-focus-color: lighten($body-bg, 40%); +$form-switch-checked-color: map-get($theme-colors, "primary"); $modal-content-bg: $content-bg-solid; @@ -201,3 +200,13 @@ $alert-color-level: -5; $text-muted: rgba(255, 255, 255, 0.5); $card-bg: $list-group-bg; + +$tooltip-color: rgba(255, 255, 255, .75); +$tooltip-bg: rgba(0, 0, 0, .75); + +$accordion-border-color: $list-group-border-color; +$accordion-bg: $list-group-bg; +$accordion-button-active-bg: $list-group-active-bg; +$accordion-button-active-color: $list-group-active-color; + +$btn-close-color: $body-color; diff --git a/tabby-core/src/theme.vendor.scss b/tabby-core/src/theme.vendor.scss new file mode 100644 index 00000000..e22f66e1 --- /dev/null +++ b/tabby-core/src/theme.vendor.scss @@ -0,0 +1,3 @@ +// $alert-border-radius: 0; +// @mixin border-radius ($r) {} +@import "../../node_modules/ngx-toastr/toastr-bs5-alert.scss"; diff --git a/tabby-core/webpack.config.js b/tabby-core/webpack.config.js deleted file mode 100644 index 4a231ebb..00000000 --- a/tabby-core/webpack.config.js +++ /dev/null @@ -1,5 +0,0 @@ -const config = require('../webpack.plugin.config') -module.exports = config({ - name: 'core', - dirname: __dirname, -}) diff --git a/tabby-core/webpack.config.mjs b/tabby-core/webpack.config.mjs new file mode 100644 index 00000000..a0f14443 --- /dev/null +++ b/tabby-core/webpack.config.mjs @@ -0,0 +1,10 @@ +import * as path from 'path' +import * as url from 'url' +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)) + +import config from '../webpack.plugin.config.mjs' + +export default () => config({ + name: 'core', + dirname: __dirname, +}) diff --git a/tabby-core/yarn.lock b/tabby-core/yarn.lock index c90a5840..88ca5086 100644 --- a/tabby-core/yarn.lock +++ b/tabby-core/yarn.lock @@ -2,13 +2,6 @@ # yarn lockfile v1 -"@ngx-translate/core@^14.0.0": - version "14.0.0" - resolved "https://registry.yarnpkg.com/@ngx-translate/core/-/core-14.0.0.tgz#af421d0e1a28376843f0fed375cd2fae7630a5ff" - integrity sha512-UevdwNCXMRCdJv//0kC8h2eSfmi02r29xeE8E9gJ1Al4D4jEJ7eiLPdjslTMc21oJNGguqqWeEVjf64SFtvw2w== - dependencies: - tslib "^2.3.0" - abort-controller@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" @@ -33,10 +26,10 @@ base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -bootstrap@^4.1.3: - version "4.5.3" - resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.5.3.tgz#c6a72b355aaf323920be800246a6e4ef30997fe6" - integrity sha512-o9ppKQioXGqhw8Z7mah6KdTYpNQY//tipnkxppWhPbiSWdD+1raYsnhwEZjkTHYbGee4cVQ0Rx65EhOY/HNLcQ== +bootstrap@^5.3.0-alpha.1: + version "5.3.0-alpha1" + resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-5.3.0-alpha1.tgz#380629c4367893f02f7879a01ea3ae0f94e2e70e" + integrity sha512-ABZpKK4ObS3kKlIqH+ZVDqoy5t/bhFG0oHTAzByUdon7YIom0lpCeTqRniDzJmbtcWkNe800VVPBiJgxSYTYew== buffer@^6.0.3: version "6.0.3" @@ -46,6 +39,34 @@ buffer@^6.0.3: base64-js "^1.3.1" ieee754 "^1.2.1" +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" + integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== + dependencies: + color-convert "^2.0.1" + color-string "^1.9.0" + debug@4: version "4.3.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" @@ -68,11 +89,6 @@ events@^3.3.0: resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== -"filesize@>= 4.0.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.3.0.tgz#dff53cfb3f104c9e422f346d53be8dbcc971bf11" - integrity sha512-ytx0ruGpDHKWVoiui6+BY/QMNngtDQ/pJaFwfBpQif0J63+E8DLdFyqS3NkKQn7vIruUEpoGD9JUJSg7Kp+I0g== - fuzzy-search@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/fuzzy-search/-/fuzzy-search-3.2.1.tgz#65d5faad6bc633aee86f1898b7788dfe312ac6c9" @@ -91,6 +107,11 @@ ieee754@^1.2.1: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + js-yaml@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" @@ -141,23 +162,6 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ngx-filesize@^2.0.16: - version "2.0.16" - resolved "https://registry.yarnpkg.com/ngx-filesize/-/ngx-filesize-2.0.16.tgz#fdaba04170edb6cfcdf7be932783cf913b03f016" - integrity sha512-VdaCirE7hSyfQh8ZEmhzNEhbddiTYUHF4V6OX+KyTmnQSVx4hp9kmzDX5YlkIlmClI6wI+LZmH9/q7XS3fsMPA== - dependencies: - filesize ">= 4.0.0" - tslib "^2.0.0" - -ngx-perfect-scrollbar@^10.1.0: - version "10.1.1" - resolved "https://registry.yarnpkg.com/ngx-perfect-scrollbar/-/ngx-perfect-scrollbar-10.1.1.tgz#f89832b9109e89bb59d516184638accd028e9735" - integrity sha512-f9IaDJGlBzSxnJ3Ki76n2JdzfQngUFyCf0E+CuVLaR5jL0IJDcTu7vOs8wexXunRMTd8xvIv0+sdIxf8hXAGWg== - dependencies: - perfect-scrollbar "1.5.0" - resize-observer-polyfill "^1.5.0" - tslib "^2.0.0" - ngx-translate-messageformat-compiler@^4.11.0: version "4.11.0" resolved "https://registry.yarnpkg.com/ngx-translate-messageformat-compiler/-/ngx-translate-messageformat-compiler-4.11.0.tgz#c9b71dd139ba5fcdcd809001e22622de589fd707" @@ -165,11 +169,6 @@ ngx-translate-messageformat-compiler@^4.11.0: dependencies: tslib "^1.10.0" -perfect-scrollbar@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/perfect-scrollbar/-/perfect-scrollbar-1.5.0.tgz#821d224ed8ff61990c23f26db63048cdc75b6b83" - integrity sha512-NrNHJn5mUGupSiheBTy6x+6SXCFbLlm8fVZh9moIzw/LgqElN5q4ncR4pbCBCYuCJ8Kcl9mYM0NgDxvW+b4LxA== - process@^0.11.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" @@ -185,26 +184,18 @@ readable-stream@4.2.0: events "^3.3.0" process "^0.11.10" -resize-observer-polyfill@^1.5.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" - integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== + dependencies: + is-arrayish "^0.3.1" tslib@^1.10.0: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" - integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== - -tslib@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" - integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== - uuid@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" diff --git a/tabby-electron/webpack.config.js b/tabby-electron/webpack.config.js deleted file mode 100644 index 432b0e9d..00000000 --- a/tabby-electron/webpack.config.js +++ /dev/null @@ -1,5 +0,0 @@ -const config = require('../webpack.plugin.config') -module.exports = config({ - name: 'electron', - dirname: __dirname, -}) diff --git a/tabby-electron/webpack.config.mjs b/tabby-electron/webpack.config.mjs new file mode 100644 index 00000000..a00e0af3 --- /dev/null +++ b/tabby-electron/webpack.config.mjs @@ -0,0 +1,10 @@ +import * as path from 'path' +import * as url from 'url' +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)) + +import config from '../webpack.plugin.config.mjs' + +export default () => config({ + name: 'electron', + dirname: __dirname, +}) diff --git a/tabby-linkifier/webpack.config.js b/tabby-linkifier/webpack.config.js deleted file mode 100644 index 2f08b443..00000000 --- a/tabby-linkifier/webpack.config.js +++ /dev/null @@ -1,5 +0,0 @@ -const config = require('../webpack.plugin.config') -module.exports = config({ - name: 'linkifier', - dirname: __dirname, -}) diff --git a/tabby-linkifier/webpack.config.mjs b/tabby-linkifier/webpack.config.mjs new file mode 100644 index 00000000..a79dcb89 --- /dev/null +++ b/tabby-linkifier/webpack.config.mjs @@ -0,0 +1,10 @@ +import * as path from 'path' +import * as url from 'url' +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)) + +import config from '../webpack.plugin.config.mjs' + +export default () => config({ + name: 'linkifier', + dirname: __dirname, +}) diff --git a/tabby-local/src/components/commandLineEditor.component.pug b/tabby-local/src/components/commandLineEditor.component.pug index 1a8ef746..9ae4ad81 100644 --- a/tabby-local/src/components/commandLineEditor.component.pug +++ b/tabby-local/src/components/commandLineEditor.component.pug @@ -1,36 +1,34 @@ ng-container(*ngIf='!argvMode') - .form-group + .mb-3 label(translate) Command line .input-group - .input-group-prepend - a.input-group-text( - (click)='switchToArgv()', - ngbTooltip='Split into unescaped arguments', - href='#' - ) - i.fas.fa-fw.fa-caret-right + a.input-group-text.text-decoration-none( + (click)='switchToArgv()', + ngbTooltip='Split into unescaped arguments', + href='#' + ) + i.fas.fa-fw.fa-caret-right input.form-control.text-monospace( [(ngModel)]='command', (ngModelChange)='parseCommand()' ) ng-container(*ngIf='argvMode') - .form-group + .mb-3 label(translate) Program .input-group - .input-group-prepend - a.input-group-text( - (click)='switchToCommand()', - ngbTooltip='Combine into a single escaped command', - href='#' - ) - i.fas.fa-fw.fa-caret-down + a.input-group-text.text-decoration-none( + (click)='switchToCommand()', + ngbTooltip='Combine into a single escaped command', + href='#' + ) + i.fas.fa-fw.fa-caret-down input.form-control.text-monospace( type='text', [(ngModel)]='_model.command', ) - .form-group + .mb-3 label(translate) Arguments .input-group( *ngFor='let arg of _model.args; index as i; trackBy: trackByIndex', @@ -39,11 +37,10 @@ ng-container(*ngIf='argvMode') type='text', [(ngModel)]='_model.args[i]', ) - .input-group-append - button.btn.btn-secondary((click)='_model.args.splice(i, 1)') - i.fas.fa-fw.fa-trash + button.btn.btn-secondary((click)='_model.args.splice(i, 1)') + i.fas.fa-fw.fa-trash .mt-2 button.btn.btn-secondary((click)='_model.args.push("")') - i.fas.fa-plus.mr-2 + i.fas.fa-plus.me-2 span(translate) Add diff --git a/tabby-local/src/components/commandLineEditor.component.ts b/tabby-local/src/components/commandLineEditor.component.ts index f4a81f2e..9169a1ae 100644 --- a/tabby-local/src/components/commandLineEditor.component.ts +++ b/tabby-local/src/components/commandLineEditor.component.ts @@ -6,7 +6,7 @@ import { SessionOptions } from '../api' /** @hidden */ @Component({ selector: 'command-line-editor', - template: require('./commandLineEditor.component.pug'), + templateUrl:'./commandLineEditor.component.pug', }) export class CommandLineEditorComponent { @Input() argvMode = false diff --git a/tabby-local/src/components/environmentEditor.component.pug b/tabby-local/src/components/environmentEditor.component.pug index ac247150..884da7e7 100644 --- a/tabby-local/src/components/environmentEditor.component.pug +++ b/tabby-local/src/components/environmentEditor.component.pug @@ -1,20 +1,18 @@ .mb-2.d-flex.align-items-center(*ngFor='let pair of vars') .input-group input.form-control.w-25.text-monospace([(ngModel)]='pair.key', (blur)='emitUpdate()', placeholder='Variable name') - .input-group-append - .input-group-text = + .input-group-text = input.form-control.w-50.text-monospace([(ngModel)]='pair.value', (blur)='emitUpdate()', placeholder='Value') - .input-group-append - button.btn.btn-secondary((click)='removeEnvironmentVar(pair.key)') - i.fas.fa-fw.fa-trash + button.btn.btn-secondary((click)='removeEnvironmentVar(pair.key)') + i.fas.fa-fw.fa-trash .d-flex button.btn.btn-secondary((click)='addEnvironmentVar()') - i.fas.fa-plus.mr-2 + i.fas.fa-plus.me-2 span(translate) Add - .ml-auto + .ms-auto .text-muted(translate) Substitutions allowed. - .d-flex.ml-1(*ngIf='shouldShowExample()') + .d-flex.ms-1(*ngIf='shouldShowExample()') .text-muted(translate) Example: - a.ml-1((click)='addExample()', href='#') extend PATH + a.ms-1((click)='addExample()', href='#') extend PATH diff --git a/tabby-local/src/components/environmentEditor.component.ts b/tabby-local/src/components/environmentEditor.component.ts index ed4fe365..bb16dc4c 100644 --- a/tabby-local/src/components/environmentEditor.component.ts +++ b/tabby-local/src/components/environmentEditor.component.ts @@ -5,8 +5,8 @@ import { Subject } from 'rxjs' /** @hidden */ @Component({ selector: 'environment-editor', - template: require('./environmentEditor.component.pug'), - styles: [require('./environmentEditor.component.scss')], + templateUrl:'./environmentEditor.component.pug', + styleUrls: ['./environmentEditor.component.scss'], }) export class EnvironmentEditorComponent { @Output() modelChange = new Subject() diff --git a/tabby-local/src/components/localProfileSettings.component.pug b/tabby-local/src/components/localProfileSettings.component.pug index 00d5b23c..5303928e 100644 --- a/tabby-local/src/components/localProfileSettings.component.pug +++ b/tabby-local/src/components/localProfileSettings.component.pug @@ -7,7 +7,7 @@ command-line-editor([model]='profile.options') [(ngModel)]='profile.options.runAsAdministrator', ) -.form-group +.mb-3 label(translate) Working directory .input-group @@ -16,11 +16,10 @@ command-line-editor([model]='profile.options') placeholder='Home directory', [(ngModel)]='profile.options.cwd' ) - .input-group-append - button.btn.btn-secondary((click)='pickWorkingDirectory()') - i.fas.fa-folder-open + button.btn.btn-secondary((click)='pickWorkingDirectory()') + i.fas.fa-folder-open -.form-group +.mb-3 label(translate) Environment environment-editor( type='text', diff --git a/tabby-local/src/components/localProfileSettings.component.ts b/tabby-local/src/components/localProfileSettings.component.ts index 4d2f6b9d..fbb7a9a3 100644 --- a/tabby-local/src/components/localProfileSettings.component.ts +++ b/tabby-local/src/components/localProfileSettings.component.ts @@ -8,7 +8,7 @@ import { ProfileSettingsComponent } from 'tabby-core' /** @hidden */ @Component({ - template: require('./localProfileSettings.component.pug'), + templateUrl:'./localProfileSettings.component.pug', }) export class LocalProfileSettingsComponent implements ProfileSettingsComponent { profile: LocalProfile diff --git a/tabby-local/src/components/shellSettingsTab.component.pug b/tabby-local/src/components/shellSettingsTab.component.pug index fd2da423..1b40149c 100644 --- a/tabby-local/src/components/shellSettingsTab.component.pug +++ b/tabby-local/src/components/shellSettingsTab.component.pug @@ -11,7 +11,7 @@ h3.mb-3(translate) Shell ) .alert.alert-info.d-flex.align-items-center(*ngIf='config.store.terminal.useConPTY && isConPTYAvailable && !isConPTYStable') - .mr-auto(translate) Windows 10 build 18309 or above is recommended for ConPTY + .me-auto(translate) Windows 10 build 18309 or above is recommended for ConPTY .alert.alert-info.d-flex.align-items-center(*ngIf='config.store.terminal.profile.startsWith("WSL") && (!config.store.terminal.useConPTY)') - .mr-auto(translate) WSL terminal only supports TrueColor with ConPTY + .me-auto(translate) WSL terminal only supports TrueColor with ConPTY diff --git a/tabby-local/src/components/shellSettingsTab.component.ts b/tabby-local/src/components/shellSettingsTab.component.ts index 624aed7c..e7f4cf74 100644 --- a/tabby-local/src/components/shellSettingsTab.component.ts +++ b/tabby-local/src/components/shellSettingsTab.component.ts @@ -3,7 +3,7 @@ import { WIN_BUILD_CONPTY_SUPPORTED, WIN_BUILD_CONPTY_STABLE, isWindowsBuild, Co /** @hidden */ @Component({ - template: require('./shellSettingsTab.component.pug'), + templateUrl:'./shellSettingsTab.component.pug', }) export class ShellSettingsTabComponent { isConPTYAvailable: boolean diff --git a/tabby-local/src/index.ts b/tabby-local/src/index.ts index bdcaad0e..02eb807f 100644 --- a/tabby-local/src/index.ts +++ b/tabby-local/src/index.ts @@ -1,5 +1,5 @@ import { NgModule } from '@angular/core' -import { BrowserModule } from '@angular/platform-browser' +import { CommonModule } from '@angular/common' import { FormsModule } from '@angular/forms' import { NgbModule } from '@ng-bootstrap/ng-bootstrap' import { ToastrModule } from 'ngx-toastr' @@ -46,7 +46,7 @@ import { LocalProfilesService } from './profiles' /** @hidden */ @NgModule({ imports: [ - BrowserModule, + CommonModule, FormsModule, NgbModule, ToastrModule, @@ -90,11 +90,6 @@ import { LocalProfilesService } from './profiles' WSLShellProvider, WindowsStockShellsProvider, ], - entryComponents: [ - TerminalTabComponent, - ShellSettingsTabComponent, - LocalProfileSettingsComponent, - ], declarations: [ TerminalTabComponent, ShellSettingsTabComponent, diff --git a/tabby-local/webpack.config.js b/tabby-local/webpack.config.js deleted file mode 100644 index 3a406025..00000000 --- a/tabby-local/webpack.config.js +++ /dev/null @@ -1,5 +0,0 @@ -const config = require('../webpack.plugin.config') -module.exports = config({ - name: 'local', - dirname: __dirname, -}) diff --git a/tabby-local/webpack.config.mjs b/tabby-local/webpack.config.mjs new file mode 100644 index 00000000..3aaab772 --- /dev/null +++ b/tabby-local/webpack.config.mjs @@ -0,0 +1,10 @@ +import * as path from 'path' +import * as url from 'url' +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)) + +import config from '../webpack.plugin.config.mjs' + +export default () => config({ + name: 'local', + dirname: __dirname, +}) diff --git a/tabby-plugin-manager/src/components/pluginsSettingsTab.component.pug b/tabby-plugin-manager/src/components/pluginsSettingsTab.component.pug index 4759a896..6a9ffa9b 100644 --- a/tabby-plugin-manager/src/components/pluginsSettingsTab.component.pug +++ b/tabby-plugin-manager/src/components/pluginsSettingsTab.component.pug @@ -1,6 +1,6 @@ .d-flex.mb-3 h3(translate) Plugins - button.btn.btn-secondary.btn-sm.ml-auto((click)='openPluginsFolder()') + button.btn.btn-secondary.btn-sm.ms-auto((click)='openPluginsFolder()') i.fas.fa-folder span(translate) Plugins folder @@ -16,10 +16,9 @@ ul.nav-tabs.mb-2(ngbNav, #nav='ngbNav') a(ngbNavLink, translate) Available ng-template(ngbNavContent) .input-group.mb-3.mt-3 - .input-group-prepend - .input-group-text - i.fas.fa-fw.fa-circle-notch.fa-spin(*ngIf='!availablePluginsReady') - i.fas.fa-fw.fa-search(*ngIf='availablePluginsReady') + .input-group-text + i.fas.fa-fw.fa-circle-notch.fa-spin(*ngIf='!availablePluginsReady') + i.fas.fa-fw.fa-search(*ngIf='availablePluginsReady') input.form-control( type='text', [(ngModel)]='_1', @@ -43,14 +42,14 @@ ul.nav-tabs.mb-2(ngbNav, #nav='ngbNav') ) i.fas.fa-fw.fa-cloud-download(*ngIf='busy.get(plugin.name) != BusyState.Installing') i.fas.fa-fw.fa-circle-notch.fa-spin(*ngIf='busy.get(plugin.name) == BusyState.Installing') - span.ml-2(translate) Get + span.ms-2(translate) Get button.btn.btn-secondary.btn-block.justify-content-center( *ngIf='plugin.homepage', (click)='showPluginHomepage(plugin)' ) i.fas.fa-fw.fa-external-link-alt - span.ml-2(translate) Homepage + span.ms-2(translate) Homepage .col-8 ng-container(*ngTemplateOutlet='pluginInfo; context: { plugin }') @@ -61,9 +60,8 @@ ul.nav-tabs.mb-2(ngbNav, #nav='ngbNav') a(ngbNavLink, translate) Installed ng-template(ngbNavContent) .input-group.mb-3.mt-3 - .input-group-prepend - .input-group-text - i.fas.fa-fw.fa-search + .input-group-text + i.fas.fa-fw.fa-search input.form-control( type='text', [(ngModel)]='_2', @@ -75,14 +73,14 @@ ul.nav-tabs.mb-2(ngbNav, #nav='ngbNav') ng-container(*ngFor='let plugin of installedPlugins$') ngb-panel ng-template(ngbPanelTitle) - .text-left.mr-auto + .text-left.me-auto div strong {{plugin.name}} - small.text-muted.ml-2(*ngIf='plugin.isBuiltin', translate) Built-in - small.text-warning.ml-2(*ngIf='!isPluginEnabled(plugin)', translate) Disabled + small.text-muted.ms-2(*ngIf='plugin.isBuiltin', translate) Built-in + small.text-warning.ms-2(*ngIf='!isPluginEnabled(plugin)', translate) Disabled small.d-block.text-muted {{plugin.description}} - button.btn.btn-primary.ml-2( + button.btn.btn-primary.ms-2( *ngIf='knownUpgrades[plugin.name]', (click)='upgradePlugin(plugin)', [disabled]='busy.has(plugin.name)' @@ -133,11 +131,11 @@ ng-template(#pluginInfo, let-plugin='plugin') .col-4 strong(translate) Author .col-8 - .badge.badge-success(*ngIf='plugin.isOfficial') + .badge.text-bg-success(*ngIf='plugin.isOfficial') i.fas.fa-check - span.ml-1(translate) Official + span.ms-1(translate) Official a.btn.btn-link.px-0.w-auto((click)='showPluginInfo(plugin)', *ngIf='!plugin.isOfficial') span {{plugin.author}} - i.fas.fa-fw.fa-external-link-alt.ml-2 + i.fas.fa-fw.fa-external-link-alt.ms-2 .mb-4([ngbNavOutlet]='nav') diff --git a/tabby-plugin-manager/src/components/pluginsSettingsTab.component.ts b/tabby-plugin-manager/src/components/pluginsSettingsTab.component.ts index d0995add..9c5ea125 100644 --- a/tabby-plugin-manager/src/components/pluginsSettingsTab.component.ts +++ b/tabby-plugin-manager/src/components/pluginsSettingsTab.component.ts @@ -15,8 +15,8 @@ _('Search plugins') /** @hidden */ @Component({ - template: require('./pluginsSettingsTab.component.pug'), - styles: [require('./pluginsSettingsTab.component.scss')], + templateUrl:'./pluginsSettingsTab.component.pug', + styleUrls: ['./pluginsSettingsTab.component.scss'], }) export class PluginsSettingsTabComponent { BusyState = BusyState diff --git a/tabby-plugin-manager/src/index.ts b/tabby-plugin-manager/src/index.ts index bcc98971..d0e9ade3 100644 --- a/tabby-plugin-manager/src/index.ts +++ b/tabby-plugin-manager/src/index.ts @@ -1,5 +1,5 @@ +import { CommonModule } from '@angular/common' import { NgModule } from '@angular/core' -import { BrowserModule } from '@angular/platform-browser' import { FormsModule } from '@angular/forms' import { NgbModule } from '@ng-bootstrap/ng-bootstrap' @@ -12,7 +12,7 @@ import { PluginsSettingsTabProvider } from './settings' @NgModule({ imports: [ - BrowserModule, + CommonModule, FormsModule, NgbModule, TabbyCorePlugin, @@ -20,9 +20,6 @@ import { PluginsSettingsTabProvider } from './settings' providers: [ { provide: SettingsTabProvider, useClass: PluginsSettingsTabProvider, multi: true }, ], - entryComponents: [ - PluginsSettingsTabComponent, - ], declarations: [ PluginsSettingsTabComponent, ], diff --git a/tabby-plugin-manager/webpack.config.js b/tabby-plugin-manager/webpack.config.js deleted file mode 100644 index c150f071..00000000 --- a/tabby-plugin-manager/webpack.config.js +++ /dev/null @@ -1,5 +0,0 @@ -const config = require('../webpack.plugin.config') -module.exports = config({ - name: 'plugin-manager', - dirname: __dirname, -}) diff --git a/tabby-plugin-manager/webpack.config.mjs b/tabby-plugin-manager/webpack.config.mjs new file mode 100644 index 00000000..c0fbb3cc --- /dev/null +++ b/tabby-plugin-manager/webpack.config.mjs @@ -0,0 +1,10 @@ +import * as path from 'path' +import * as url from 'url' +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)) + +import config from '../webpack.plugin.config.mjs' + +export default () => config({ + name: 'plugin-manager', + dirname: __dirname, +}) diff --git a/tabby-serial/src/components/serialProfileSettings.component.pug b/tabby-serial/src/components/serialProfileSettings.component.pug index 11e351bf..6e44ff12 100644 --- a/tabby-serial/src/components/serialProfileSettings.component.pug +++ b/tabby-serial/src/components/serialProfileSettings.component.pug @@ -4,7 +4,7 @@ ul.nav-tabs(ngbNav, #nav='ngbNav') ng-template(ngbNavContent) .row .col-6(ng:if='hostApp.platform !== Platform.Web') - .form-group + .mb-3 label(translate) Device input.form-control( type='text', @@ -15,7 +15,7 @@ ul.nav-tabs(ngbNav, #nav='ngbNav') ) .col-6 - .form-group + .mb-3 label(translate) Baud rate input.form-control( type='number', diff --git a/tabby-serial/src/components/serialProfileSettings.component.ts b/tabby-serial/src/components/serialProfileSettings.component.ts index 98407000..0f0909e2 100644 --- a/tabby-serial/src/components/serialProfileSettings.component.ts +++ b/tabby-serial/src/components/serialProfileSettings.component.ts @@ -7,7 +7,7 @@ import { SerialService } from '../services/serial.service' /** @hidden */ @Component({ - template: require('./serialProfileSettings.component.pug'), + templateUrl:'./serialProfileSettings.component.pug', }) export class SerialProfileSettingsComponent implements ProfileSettingsComponent { profile: SerialProfile diff --git a/tabby-serial/src/components/serialTab.component.pug b/tabby-serial/src/components/serialTab.component.pug index f058409b..269f0e3f 100644 --- a/tabby-serial/src/components/serialTab.component.pug +++ b/tabby-serial/src/components/serialTab.component.pug @@ -1,11 +1,11 @@ terminal-toolbar([tab]='this') - i.fas.fa-xs.fa-circle.text-success.mr-2(*ngIf='session && session.open') - i.fas.fa-xs.fa-circle.text-danger.mr-2(*ngIf='!session || !session.open') + i.fas.fa-xs.fa-circle.text-success.me-2(*ngIf='session && session.open') + i.fas.fa-xs.fa-circle.text-danger.me-2(*ngIf='!session || !session.open') strong {{profile.options.port}} ({{profile.options.baudrate}}) - .mr-auto + .me-auto - button.btn.btn-sm.btn-link.mr-3((click)='changeBaudRate()', *ngIf='session && session.open && hostApp.platform !== Platform.Web') + button.btn.btn-sm.btn-link.me-3((click)='changeBaudRate()', *ngIf='session && session.open && hostApp.platform !== Platform.Web') span(translate) Change baud rate button.btn.btn-sm.btn-link((click)='reconnect()', *ngIf='!session || !session.open') diff --git a/tabby-serial/src/components/serialTab.component.ts b/tabby-serial/src/components/serialTab.component.ts index 1373bf0a..100ad375 100644 --- a/tabby-serial/src/components/serialTab.component.ts +++ b/tabby-serial/src/components/serialTab.component.ts @@ -11,7 +11,7 @@ import { SerialSession, BAUD_RATES, SerialProfile } from '../api' @Component({ selector: 'serial-tab', template: `${BaseTerminalTabComponent.template} ${require('./serialTab.component.pug')}`, - styles: [require('./serialTab.component.scss'), ...BaseTerminalTabComponent.styles], + styleUrls: ['./serialTab.component.scss', ...BaseTerminalTabComponent.styles], animations: BaseTerminalTabComponent.animations, }) export class SerialTabComponent extends BaseTerminalTabComponent { diff --git a/tabby-serial/src/index.ts b/tabby-serial/src/index.ts index 30530e3d..4f4261b4 100644 --- a/tabby-serial/src/index.ts +++ b/tabby-serial/src/index.ts @@ -30,10 +30,6 @@ import { SerialProfilesService } from './profiles' { provide: TabRecoveryProvider, useClass: RecoveryProvider, multi: true }, { provide: HotkeyProvider, useClass: SerialHotkeyProvider, multi: true }, ], - entryComponents: [ - SerialProfileSettingsComponent, - SerialTabComponent, - ], declarations: [ SerialProfileSettingsComponent, SerialTabComponent, diff --git a/tabby-serial/src/services/serial.service.ts b/tabby-serial/src/services/serial.service.ts index 63228b70..6794f213 100644 --- a/tabby-serial/src/services/serial.service.ts +++ b/tabby-serial/src/services/serial.service.ts @@ -1,4 +1,4 @@ -import { Injectable } from '@angular/core' +import { Injectable, Injector } from '@angular/core' import WSABinding from 'serialport-binding-webserialapi' import AbstractBinding from '@serialport/binding-abstract' import { autoDetect } from '@serialport/bindings-cpp' @@ -9,7 +9,7 @@ import { SerialTabComponent } from '../components/serialTab.component' @Injectable({ providedIn: 'root' }) export class SerialService { private constructor ( - private profilesService: ProfilesService, + private injector: Injector, private hostApp: HostAppService, ) { } @@ -45,6 +45,6 @@ export class SerialService { }, } window.localStorage.lastSerialConnection = JSON.stringify(profile) - return this.profilesService.openNewTabForProfile(profile) as Promise + return this.injector.get(ProfilesService).openNewTabForProfile(profile) as Promise } } diff --git a/tabby-serial/webpack.config.js b/tabby-serial/webpack.config.js deleted file mode 100644 index 4e76d61c..00000000 --- a/tabby-serial/webpack.config.js +++ /dev/null @@ -1,5 +0,0 @@ -const config = require('../webpack.plugin.config') -module.exports = config({ - name: 'serial', - dirname: __dirname, -}) diff --git a/tabby-serial/webpack.config.mjs b/tabby-serial/webpack.config.mjs new file mode 100644 index 00000000..94afefc4 --- /dev/null +++ b/tabby-serial/webpack.config.mjs @@ -0,0 +1,10 @@ +import * as path from 'path' +import * as url from 'url' +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)) + +import config from '../webpack.plugin.config.mjs' + +export default () => config({ + name: 'serial', + dirname: __dirname, +}) diff --git a/tabby-settings/package.json b/tabby-settings/package.json index ecebe212..1b347281 100644 --- a/tabby-settings/package.json +++ b/tabby-settings/package.json @@ -17,9 +17,9 @@ "author": "Eugene Pankov", "license": "MIT", "devDependencies": { - "@types/marked": "^4.0.2", - "marked": "^4.0.8", - "ngx-infinite-scroll": "^10.0.1" + "@types/marked": "^4.0.8", + "marked": "^4.2.12", + "ngx-infinite-scroll": "^15" }, "peerDependencies": { "@angular/animations": "^9.1.9", diff --git a/tabby-settings/src/components/configSyncSettingsTab.component.pug b/tabby-settings/src/components/configSyncSettingsTab.component.pug index dfe5930c..cba41089 100644 --- a/tabby-settings/src/components/configSyncSettingsTab.component.pug +++ b/tabby-settings/src/components/configSyncSettingsTab.component.pug @@ -14,9 +14,11 @@ ul.nav-tabs(ngbNav, #nav='ngbNav') [(ngModel)]='config.store.configSync.host', (keydown.enter)='config.save()', ) - .input-group-append(*ngIf='config.store.configSync.host') - button.btn.btn-secondary((click)='openSyncHost()') - i.fas.fa-external-link-alt + button.btn.btn-secondary( + *ngIf='config.store.configSync.host', + (click)='openSyncHost()' + ) + i.fas.fa-external-link-alt .form-line .header @@ -29,16 +31,15 @@ ul.nav-tabs(ngbNav, #nav='ngbNav') [(ngModel)]='config.store.configSync.token', (keydown.enter)='config.save(); testConnection()' ) - .input-group-append(*ngIf='config.store.configSync.token') - .input-group-text - i.fas.fa-fw.fa-circle-notch.fa-spin.text-warning(*ngIf='connectionSuccessful === null') - i.fas.fa-fw.fa-check.text-success(*ngIf='connectionSuccessful') - i.fas.fa-fw.fa-exclamation-triangle.text-danger(*ngIf='connectionSuccessful === false') + .input-group-text(*ngIf='config.store.configSync.token') + i.fas.fa-fw.fa-circle-notch.fa-spin.text-warning(*ngIf='connectionSuccessful === null') + i.fas.fa-fw.fa-check.text-success(*ngIf='connectionSuccessful') + i.fas.fa-fw.fa-exclamation-triangle.text-danger(*ngIf='connectionSuccessful === false') ng-container(*ngIf='config.store.configSync.token') .alert.alert-danger(*ngIf='connectionSuccessful === false') i.fas.fa-exclamation-triangle - span.ml-2(translate='Connection failed: {error}', [translateParams]='{error: connectionError}') + span.ms-2(translate='Connection failed: {error}', [translateParams]='{error: connectionError}') ng-container(*ngIf='connectionSuccessful') .form-line @@ -47,49 +48,49 @@ ul.nav-tabs(ngbNav, #nav='ngbNav') div(*ngIf='configs === null') i.fas.fa-fw.fa-circle-notch.fa-spin - span.ml-2(translate) Loading configs... + span.ms-2(translate) Loading configs... ng-container(*ngIf='configs !== null') - .list-group-light + .list-group.list-group-light .list-group-item.d-flex.align-items-center( *ngFor='let cfg of configs', [class.active]='isActiveConfig(cfg)', ) i.fas.fa-fw.text-success([class.fa-check]='isActiveConfig(cfg)') i.fas.fa-fw.fa-file - .ml-2.d-flex.flex-column.align-items-start + .ms-2.d-flex.flex-column.align-items-start div {{cfg.name}} small.text-muted( translate='Modified on {date}', [translateParams]='{date: cfg.modified_at|date:"medium"}' ) - .mr-auto - button.btn.btn-link.ml-1( + .me-auto + button.btn.btn-link.ms-1( (click)='uploadAndSync(cfg)', [class.hover-reveal]='!isActiveConfig(cfg)' ) i.fas.fa-arrow-up - span.ml-2(*ngIf='isActiveConfig(cfg)', translate) Upload - span.ml-2(*ngIf='!isActiveConfig(cfg)', translate) Replace - button.btn.btn-link.ml-1( + span.ms-2(*ngIf='isActiveConfig(cfg)', translate) Upload + span.ms-2(*ngIf='!isActiveConfig(cfg)', translate) Replace + button.btn.btn-link.ms-1( (click)='downloadAndSync(cfg)', [class.hover-reveal]='!isActiveConfig(cfg)' ) i.fas.fa-arrow-down - span.ml-2(translate) Download - button.btn.btn-link.ml-1( + span.ms-2(translate) Download + button.btn.btn-link.ms-1( (click)='delete(cfg)', [class.hover-reveal]='!isActiveConfig(cfg)' ) i.fas.fa-trash - span.ml-2(translate) Delete + span.ms-2(translate) Delete a.list-group-item.list-group-item-action.d-flex.align-items-center( href='#', (click)='uploadAsNew()' ) i.fas.fa-fw i.fas.fa-fw.fa-cloud-upload-alt - .ml-2(translate) Upload as a new config + .ms-2(translate) Upload as a new config ng-container(*ngIf='hasMatchingRemoteConfig()') .form-line diff --git a/tabby-settings/src/components/configSyncSettingsTab.component.ts b/tabby-settings/src/components/configSyncSettingsTab.component.ts index d4fb657d..7909b7d8 100644 --- a/tabby-settings/src/components/configSyncSettingsTab.component.ts +++ b/tabby-settings/src/components/configSyncSettingsTab.component.ts @@ -8,7 +8,7 @@ import { Config, ConfigSyncService } from '../services/configSync.service' /** @hidden */ @Component({ selector: 'config-sync-settings-tab', - template: require('./configSyncSettingsTab.component.pug'), + templateUrl:'./configSyncSettingsTab.component.pug', }) export class ConfigSyncSettingsTabComponent extends BaseComponent { connectionSuccessful: boolean|null = null diff --git a/tabby-settings/src/components/editProfileModal.component.pug b/tabby-settings/src/components/editProfileModal.component.pug index a81a5d28..2a70ce5a 100644 --- a/tabby-settings/src/components/editProfileModal.component.pug +++ b/tabby-settings/src/components/editProfileModal.component.pug @@ -10,7 +10,7 @@ .modal-body .row .col-12.col-lg-4 - .form-group(*ngIf='!defaultsMode') + .mb-3(*ngIf='!defaultsMode') label(translate) Name input.form-control( type='text', @@ -18,7 +18,7 @@ [(ngModel)]='profile.name', ) - .form-group(*ngIf='!defaultsMode') + .mb-3(*ngIf='!defaultsMode') label(translate) Group input.form-control( type='text', @@ -28,7 +28,7 @@ [ngbTypeahead]='groupTypeahead', ) - .form-group(*ngIf='!defaultsMode') + .mb-3(*ngIf='!defaultsMode') label(translate) Icon .input-group input.form-control( @@ -38,16 +38,15 @@ [ngbTypeahead]='iconSearch', [resultTemplate]='rt' ) - .input-group-append - .input-group-text - profile-icon( - [icon]='profile.icon', - [color]='profile.color' - ) + .input-group-text + profile-icon( + [icon]='profile.icon', + [color]='profile.color' + ) ng-template(#rt,let-r='result',let-t='term') i([class]='"fa-fw " + r') - ngb-highlight.ml-2([result]='r', [term]='t') + ngb-highlight.ms-2([result]='r', [term]='t') .form-line .header diff --git a/tabby-settings/src/components/editProfileModal.component.ts b/tabby-settings/src/components/editProfileModal.component.ts index 3d656153..4248f1a9 100644 --- a/tabby-settings/src/components/editProfileModal.component.ts +++ b/tabby-settings/src/components/editProfileModal.component.ts @@ -13,7 +13,7 @@ const iconsClassList = Object.keys(iconsData).map( /** @hidden */ @Component({ - template: require('./editProfileModal.component.pug'), + templateUrl:'./editProfileModal.component.pug', }) export class EditProfileModalComponent

{ @Input() profile: P & ConfigProxy diff --git a/tabby-settings/src/components/hotkeyInputModal.component.ts b/tabby-settings/src/components/hotkeyInputModal.component.ts index 492ace1b..5277118a 100644 --- a/tabby-settings/src/components/hotkeyInputModal.component.ts +++ b/tabby-settings/src/components/hotkeyInputModal.component.ts @@ -8,8 +8,8 @@ const INPUT_TIMEOUT = 1000 /** @hidden */ @Component({ selector: 'hotkey-input-modal', - template: require('./hotkeyInputModal.component.pug'), - styles: [require('./hotkeyInputModal.component.scss')], + templateUrl:'./hotkeyInputModal.component.pug', + styleUrls: ['./hotkeyInputModal.component.scss'], animations: [ trigger('animateKey', [ transition(':enter', [ diff --git a/tabby-settings/src/components/hotkeySettingsTab.component.pug b/tabby-settings/src/components/hotkeySettingsTab.component.pug index 20826acc..82b8c9b7 100644 --- a/tabby-settings/src/components/hotkeySettingsTab.component.pug +++ b/tabby-settings/src/components/hotkeySettingsTab.component.pug @@ -1,18 +1,17 @@ h3.mb-3(translate) Hotkeys .input-group.mb-4 - .input-group-prepend - .input-group-text - i.fas.fa-fw.fa-search + .input-group-text + i.fas.fa-fw.fa-search input.form-control(type='search', [placeholder]='"Search hotkeys"|translate', [(ngModel)]='hotkeyFilter') -.form-group.hotkeys-table +.mb-3.hotkeys-table ng-container(*ngFor='let hotkey of hotkeyDescriptions') .row.align-items-center(*ngIf='!hotkeyFilter || hotkeyFilterFn(hotkey, hotkeyFilter)') .col-8.py-2 span {{hotkey.name|translate}} - span.ml-2.text-muted ({{hotkey.id}}) - .col-4.pr-5 + span.ms-2.text-muted ({{hotkey.id}}) + .col-4.pe-5 multi-hotkey-input( [hotkeys]='getHotkeys(hotkey.id) || []', (hotkeysChange)='setHotkeys(hotkey.id, $event)' diff --git a/tabby-settings/src/components/hotkeySettingsTab.component.ts b/tabby-settings/src/components/hotkeySettingsTab.component.ts index 8f6412a2..245192ab 100644 --- a/tabby-settings/src/components/hotkeySettingsTab.component.ts +++ b/tabby-settings/src/components/hotkeySettingsTab.component.ts @@ -14,7 +14,7 @@ _('Search hotkeys') /** @hidden */ @Component({ selector: 'hotkey-settings-tab', - template: require('./hotkeySettingsTab.component.pug'), + templateUrl:'./hotkeySettingsTab.component.pug', }) export class HotkeySettingsTabComponent { hotkeyFilter = '' diff --git a/tabby-settings/src/components/multiHotkeyInput.component.pug b/tabby-settings/src/components/multiHotkeyInput.component.pug index 68584d04..b42199fb 100644 --- a/tabby-settings/src/components/multiHotkeyInput.component.pug +++ b/tabby-settings/src/components/multiHotkeyInput.component.pug @@ -1,6 +1,6 @@ .item(*ngFor='let hotkey of hotkeys') .body((click)='editItem(hotkey)') - .stroke(*ngFor='let stroke of hotkey.strokes') + .stroke(*ngFor='let stroke of castAny(hotkey.strokes)') span(*ngIf='!hotkey.isDuplicate') {{stroke}} span.duplicate(*ngIf='hotkey.isDuplicate') {{stroke}} .remove((click)='removeItem(hotkey)') × diff --git a/tabby-settings/src/components/multiHotkeyInput.component.ts b/tabby-settings/src/components/multiHotkeyInput.component.ts index ceefae52..05345b58 100644 --- a/tabby-settings/src/components/multiHotkeyInput.component.ts +++ b/tabby-settings/src/components/multiHotkeyInput.component.ts @@ -7,8 +7,8 @@ import deepEqual from 'deep-equal' /** @hidden */ @Component({ selector: 'multi-hotkey-input', - template: require('./multiHotkeyInput.component.pug'), - styles: [require('./multiHotkeyInput.component.scss')], + templateUrl:'./multiHotkeyInput.component.pug', + styleUrls: ['./multiHotkeyInput.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush, }) export class MultiHotkeyInputComponent { @@ -45,4 +45,7 @@ export class MultiHotkeyInputComponent { private storeUpdatedHotkeys () { this.hotkeysChange.emit(this.hotkeys) } + + // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types + protected castAny = (x: any): any => x } diff --git a/tabby-settings/src/components/profilesSettingsTab.component.pug b/tabby-settings/src/components/profilesSettingsTab.component.pug index 4c84ba90..b2b11455 100644 --- a/tabby-settings/src/components/profilesSettingsTab.component.pug +++ b/tabby-settings/src/components/profilesSettingsTab.component.pug @@ -23,12 +23,11 @@ ul.nav-tabs(ngbNav, #nav='ngbNav') .d-flex.mb-3 .input-group - .input-group-prepend - .input-group-text - i.fas.fa-fw.fa-search + .input-group-text + i.fas.fa-fw.fa-search input.form-control(type='search', [placeholder]='"Filter"|translate', [(ngModel)]='filter') - button.btn.btn-primary.flex-shrink-0.ml-3((click)='newProfile()') + button.btn.btn-primary.flex-shrink-0.ms-3((click)='newProfile()') i.fas.fa-fw.fa-plus span(translate) New profile @@ -40,20 +39,20 @@ ul.nav-tabs(ngbNav, #nav='ngbNav') ) .fa.fa-fw.fa-chevron-right(*ngIf='group.collapsed') .fa.fa-fw.fa-chevron-down(*ngIf='!group.collapsed') - span.ml-3.mr-auto {{group.name || ("Ungrouped"|translate)}} - button.btn.btn-sm.btn-link.hover-reveal.ml-2( + span.ms-3.me-auto {{group.name || ("Ungrouped"|translate)}} + button.btn.btn-sm.btn-link.hover-reveal.ms-2( *ngIf='group.editable && group.name', (click)='$event.stopPropagation(); editGroup(group)' ) i.fas.fa-pencil-alt - button.btn.btn-sm.btn-link.hover-reveal.ml-2( + button.btn.btn-sm.btn-link.hover-reveal.ms-2( *ngIf='group.editable && group.name', (click)='$event.stopPropagation(); deleteGroup(group)' ) i.fas.fa-trash-alt ng-container(*ngIf='!group.collapsed') ng-container(*ngFor='let profile of group.profiles') - .list-group-item.pl-5.d-flex.align-items-center( + .list-group-item.ps-5.d-flex.align-items-center( *ngIf='isProfileVisible(profile)', [class.list-group-item-action]='!profile.isBuiltin', (click)='profile.isBuiltin ? null : editProfile(profile)' @@ -64,23 +63,23 @@ ul.nav-tabs(ngbNav, #nav='ngbNav') ) .no-wrap {{profile.name}} - .text-muted.no-wrap.ml-2 {{getDescription(profile)}} + .text-muted.no-wrap.ms-2 {{getDescription(profile)}} - .mr-auto + .me-auto - button.btn.btn-link.hover-reveal.ml-1((click)='$event.stopPropagation(); launchProfile(profile)') + button.btn.btn-link.hover-reveal.ms-1((click)='$event.stopPropagation(); launchProfile(profile)') i.fas.fa-play - button.btn.btn-link.hover-reveal.ml-1((click)='$event.stopPropagation(); newProfile(profile)') + button.btn.btn-link.hover-reveal.ms-1((click)='$event.stopPropagation(); newProfile(profile)') i.fas.fa-copy - button.btn.btn-link.hover-reveal.ml-1( + button.btn.btn-link.hover-reveal.ms-1( *ngIf='!profile.isBuiltin', (click)='$event.stopPropagation(); deleteProfile(profile)' ) i.fas.fa-trash-alt - .ml-1(class='badge badge-{{getTypeColorClass(profile)}}') {{getTypeLabel(profile)}} + .ms-1(class='badge text-bg-{{getTypeColorClass(profile)}}') {{getTypeLabel(profile)}} li(ngbNavItem) a(ngbNavLink, translate) Advanced diff --git a/tabby-settings/src/components/profilesSettingsTab.component.ts b/tabby-settings/src/components/profilesSettingsTab.component.ts index 05bc0c6b..b0032c7c 100644 --- a/tabby-settings/src/components/profilesSettingsTab.component.ts +++ b/tabby-settings/src/components/profilesSettingsTab.component.ts @@ -19,8 +19,8 @@ _('Ungrouped') /** @hidden */ @Component({ - template: require('./profilesSettingsTab.component.pug'), - styles: [require('./profilesSettingsTab.component.scss')], + templateUrl:'./profilesSettingsTab.component.pug', + styleUrls: ['./profilesSettingsTab.component.scss'], }) export class ProfilesSettingsTabComponent extends BaseComponent { profiles: PartialProfile[] = [] diff --git a/tabby-settings/src/components/releaseNotesTab.component.ts b/tabby-settings/src/components/releaseNotesTab.component.ts index d8e85d56..62740476 100644 --- a/tabby-settings/src/components/releaseNotesTab.component.ts +++ b/tabby-settings/src/components/releaseNotesTab.component.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/explicit-module-boundary-types */ import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker' import axios from 'axios' -import { marked } from 'marked' +import * as marked from '../../node_modules/marked/src/marked' import { Component, Injector } from '@angular/core' import { BaseTabComponent, TranslateService } from 'tabby-core' @@ -15,8 +15,8 @@ export interface Release { /** @hidden */ @Component({ selector: 'release-notes-tab', - template: require('./releaseNotesTab.component.pug'), - styles: [require('./releaseNotesTab.component.scss')], + templateUrl:'./releaseNotesTab.component.pug', + styleUrls: ['./releaseNotesTab.component.scss'], }) export class ReleaseNotesComponent extends BaseTabComponent { releases: Release[] = [] @@ -36,7 +36,7 @@ export class ReleaseNotesComponent extends BaseTabComponent { this.releases = this.releases.concat(response.data.map(r => ({ name: r.name, version: r.tag_name, - content: marked(r.body), + content: marked.marked(r.body), date: new Date(r.created_at), }))) this.lastPage = page diff --git a/tabby-settings/src/components/setVaultPassphraseModal.component.pug b/tabby-settings/src/components/setVaultPassphraseModal.component.pug index bd24e68c..fbe4f452 100644 --- a/tabby-settings/src/components/setVaultPassphraseModal.component.pug +++ b/tabby-settings/src/components/setVaultPassphraseModal.component.pug @@ -11,9 +11,8 @@ h3.modal-header.m-0.pb-0(translate) Set master passphrase (keyup.enter)='ok()', (keyup.esc)='cancel()', ) - .input-group-append - button.btn.btn-secondary((click)='showPassphrase = !showPassphrase') - i.fas.fa-eye + button.btn.btn-secondary((click)='showPassphrase = !showPassphrase') + i.fas.fa-eye .modal-footer button.btn.btn-primary((click)='ok()', translate) Set passphrase diff --git a/tabby-settings/src/components/setVaultPassphraseModal.component.ts b/tabby-settings/src/components/setVaultPassphraseModal.component.ts index f5f81e0b..827b12bb 100644 --- a/tabby-settings/src/components/setVaultPassphraseModal.component.ts +++ b/tabby-settings/src/components/setVaultPassphraseModal.component.ts @@ -3,10 +3,11 @@ import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' /** @hidden */ @Component({ - template: require('./setVaultPassphraseModal.component.pug'), + templateUrl:'./setVaultPassphraseModal.component.pug', }) export class SetVaultPassphraseModalComponent { passphrase: string + showPassphrase = false @ViewChild('input') input: ElementRef constructor ( diff --git a/tabby-settings/src/components/settingsTab.component.pug b/tabby-settings/src/components/settingsTab.component.pug index eb05edbf..50cf2b4f 100644 --- a/tabby-settings/src/components/settingsTab.component.pug +++ b/tabby-settings/src/components/settingsTab.component.pug @@ -2,7 +2,7 @@ ul.nav-pills(ngbNav, #nav='ngbNav', [activeId]='activeTab', orientation='vertical') li(ngbNavItem='application') a(ngbNavLink) - i.fas.fa-fw.fa-window-maximize.mr-2 + i.fas.fa-fw.fa-window-maximize.me-2 span(translate) Application ng-template(ngbNavContent) .content-box @@ -71,7 +71,7 @@ .title(translate) Language a.description((click)='homeBase.openTranslations()') span(translate) Help translate Tabby - i.fas.fa-external-link-square-alt.ml-1 + i.fas.fa-external-link-square-alt.ms-1 select.form-control([(ngModel)]='config.store.language', (ngModelChange)='saveConfiguration(true)') option([ngValue]='null', translate) Automatic option( @@ -117,7 +117,7 @@ ng-container(*ngFor='let provider of settingsProviders') li(*ngIf='provider.prioritized', [ngbNavItem]='provider.id') a.d-flex.align-items-center(ngbNavLink) - i(class='fas fa-fw mr-2 fa-{{provider.icon}}') + i(class='fas fa-fw me-2 fa-{{provider.icon}}') span {{provider.title|translate}} ng-template(ngbNavContent) settings-tab-body([provider]='provider') @@ -127,14 +127,14 @@ ng-container(*ngFor='let provider of settingsProviders') li(*ngIf='!provider.prioritized', [ngbNavItem]='provider.id') a.d-flex.align-items-center(ngbNavLink) - i(class='fas fa-fw mr-2 fa-{{provider.icon || "puzzle-piece"}}') + i(class='fas fa-fw me-2 fa-{{provider.icon || "puzzle-piece"}}') span {{provider.title|translate}} ng-template(ngbNavContent) settings-tab-body([provider]='provider') li(ngbNavItem='config-file') a.d-flex.align-items-center(ngbNavLink) - i.fas.fa-fw.fa-code.mr-2 + i.fas.fa-fw.fa-code.me-2 span(translate) Config file ng-template.test(ngbNavContent) .d-flex.flex-column.w-100.h-100 @@ -152,20 +152,20 @@ ) .mt-3.d-flex button.btn.btn-primary((click)='saveConfigFile()', *ngIf='isConfigFileValid()') - i.fas.fa-check.mr-2 + i.fas.fa-check.me-2 span(translate) Save and apply button.btn.btn-primary(disabled, *ngIf='!isConfigFileValid()') - i.fas.fa-exclamation-triangle.mr-2 + i.fas.fa-exclamation-triangle.me-2 span(translate) Invalid syntax - button.btn.btn-secondary.ml-auto( + button.btn.btn-secondary.ms-auto( (click)='showConfigDefaults = !showConfigDefaults', translate ) Show defaults - button.btn.btn-secondary.ml-3( + button.btn.btn-secondary.ms-3( *ngIf='platform.getConfigPath()', (click)='showConfigFile()' ) - i.fas.fa-external-link-square-alt.mr-2 + i.fas.fa-external-link-square-alt.me-2 span(translate) Show config file div([ngbNavOutlet]='nav') diff --git a/tabby-settings/src/components/settingsTab.component.scss b/tabby-settings/src/components/settingsTab.component.scss index 273b0576..58a17f9d 100644 --- a/tabby-settings/src/components/settingsTab.component.scss +++ b/tabby-settings/src/components/settingsTab.component.scss @@ -43,11 +43,14 @@ > .tab-content { flex: auto; - padding: 20px 30px; + padding: 20px 0; overflow-y: auto; + display: flex; + flex-direction: column; > ::ng-deep .tab-pane { - height: 100%; + padding: 0 30px; + min-height: 100%; > settings-tab-body > * { display: block; diff --git a/tabby-settings/src/components/settingsTab.component.ts b/tabby-settings/src/components/settingsTab.component.ts index 2e370d7e..3d8e498b 100644 --- a/tabby-settings/src/components/settingsTab.component.ts +++ b/tabby-settings/src/components/settingsTab.component.ts @@ -2,7 +2,7 @@ import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker' import * as yaml from 'js-yaml' import { debounce } from 'utils-decorators/dist/esm/debounce/debounce' -import { Component, Inject, Input, HostBinding, NgZone, Injector } from '@angular/core' +import { Component, Inject, Input, HostBinding, Injector } from '@angular/core' import { ConfigService, BaseTabComponent, @@ -23,9 +23,9 @@ import { ReleaseNotesComponent } from './releaseNotesTab.component' /** @hidden */ @Component({ selector: 'settings-tab', - template: require('./settingsTab.component.pug'), - styles: [ - require('./settingsTab.component.scss'), + templateUrl:'./settingsTab.component.pug', + styleUrls: [ + './settingsTab.component.scss', ], }) export class SettingsTabComponent extends BaseTabComponent { @@ -46,9 +46,8 @@ export class SettingsTabComponent extends BaseTabComponent { public hostWindow: HostWindowService, public homeBase: HomeBaseService, public platform: PlatformService, - public zone: NgZone, public locale: LocaleService, - private updater: UpdaterService, + public updater: UpdaterService, private app: AppService, @Inject(SettingsTabProvider) public settingsProviders: SettingsTabProvider[], translate: TranslateService, diff --git a/tabby-settings/src/components/settingsTabBody.component.ts b/tabby-settings/src/components/settingsTabBody.component.ts index 8967731f..9587cb4e 100644 --- a/tabby-settings/src/components/settingsTabBody.component.ts +++ b/tabby-settings/src/components/settingsTabBody.component.ts @@ -5,11 +5,12 @@ import { SettingsTabProvider } from '../api' @Component({ selector: 'settings-tab-body', template: '', + styles: [`:host { display: block; padding-bottom: 20px; }`], }) export class SettingsTabBodyComponent { @Input() provider: SettingsTabProvider @ViewChild('placeholder', { read: ViewContainerRef }) placeholder: ViewContainerRef - component: ComponentRef + component: ComponentRef constructor (private componentFactoryResolver: ComponentFactoryResolver) { } diff --git a/tabby-settings/src/components/vaultSettingsTab.component.pug b/tabby-settings/src/components/vaultSettingsTab.component.pug index 945fd1d0..02886e4e 100644 --- a/tabby-settings/src/components/vaultSettingsTab.component.pug +++ b/tabby-settings/src/components/vaultSettingsTab.component.pug @@ -8,7 +8,7 @@ div(*ngIf='vault.isEnabled()') .d-flex.align-items-center.mb-3 h3.m-0(translate) Vault - .d-flex.ml-auto(ngbDropdown, *ngIf='vault.isEnabled()') + .d-flex.ms-auto(ngbDropdown, *ngIf='vault.isEnabled()') button.btn.btn-secondary(ngbDropdownToggle, translate) Options div(ngbDropdownMenu) a(ngbDropdownItem, (click)='changePassphrase()') @@ -24,9 +24,9 @@ div(*ngIf='vault.isEnabled()') h3.m-3(translate) Vault is empty .list-group - .list-group-item.d-flex.align-items-center.p-1.pl-3(*ngFor='let secret of vaultContents.secrets') + .list-group-item.d-flex.align-items-center.p-1.ps-3(*ngFor='let secret of vaultContents.secrets') i.fas.fa-key - .mr-auto {{getSecretLabel(secret)}} + .me-auto {{getSecretLabel(secret)}} .hover-reveal(ngbDropdown) button.btn.btn-link(ngbDropdownToggle) @@ -35,21 +35,21 @@ div(*ngIf='vault.isEnabled()') button( ngbDropdownItem, *ngIf='secret.type === VAULT_SECRET_TYPE_FILE', - (click)='renameFile(secret)' + (click)='renameFile(castAny(secret))' ) i.fas.fa-fw.fa-pencil-alt span(translate) Rename button( ngbDropdownItem, *ngIf='secret.type === VAULT_SECRET_TYPE_FILE', - (click)='replaceFileContent(secret)' + (click)='replaceFileContent(castAny(secret))' ) i.fas.fa-fw.fa-file-import span(translate) Replace button( ngbDropdownItem, *ngIf='secret.type === VAULT_SECRET_TYPE_FILE', - (click)='exportFile(secret)' + (click)='exportFile(castAny(secret))' ) i.fas.fa-fw.fa-file-export span(translate) Export diff --git a/tabby-settings/src/components/vaultSettingsTab.component.ts b/tabby-settings/src/components/vaultSettingsTab.component.ts index fe628c27..c94533f2 100644 --- a/tabby-settings/src/components/vaultSettingsTab.component.ts +++ b/tabby-settings/src/components/vaultSettingsTab.component.ts @@ -8,7 +8,7 @@ import { SetVaultPassphraseModalComponent } from './setVaultPassphraseModal.comp /** @hidden */ @Component({ selector: 'vault-settings-tab', - template: require('./vaultSettingsTab.component.pug'), + templateUrl:'./vaultSettingsTab.component.pug', }) export class VaultSettingsTabComponent extends BaseComponent { vaultContents: Vault|null = null @@ -148,4 +148,6 @@ export class VaultSettingsTabComponent extends BaseComponent { download.close() } } + + castAny = (x: any) => x } diff --git a/tabby-settings/src/components/windowSettingsTab.component.pug b/tabby-settings/src/components/windowSettingsTab.component.pug index 3d4ce111..225fed4b 100644 --- a/tabby-settings/src/components/windowSettingsTab.component.pug +++ b/tabby-settings/src/components/windowSettingsTab.component.pug @@ -34,24 +34,30 @@ h3.mb-3(translate) Window .form-line(*ngIf='config.store.appearance.vibrancy && isFluentVibrancySupported && config.store.hacks.enableFluentBackground') .header .title(translate) Background type - .btn-group( - [(ngModel)]='config.store.appearance.vibrancyType', - (ngModelChange)='saveConfiguration()', - ngbRadioGroup - ) - label.btn.btn-secondary(ngbButtonLabel) - input( - type='radio', - ngbButton, - [value]='"blur"' - ) + .btn-group + input.btn-check( + type='radio', + name='vibracy', + [(ngModel)]='config.store.appearance.vibrancyType', + (ngModelChange)='saveConfiguration()', + id='vibrancyTypeBlur', + [value]='"blur"' + ) + label.btn.btn-secondary( + for='vibrancyTypeBlur' + ) span(translate) Blur - label.btn.btn-secondary(ngbButtonLabel) - input( - type='radio', - ngbButton, - [value]='"fluent"' - ) + input.btn-check( + type='radio', + name='vibracy', + [(ngModel)]='config.store.appearance.vibrancyType', + (ngModelChange)='saveConfiguration()', + id='vibrancyTypeFluent', + [value]='"fluent"' + ) + label.btn.btn-secondary( + for='vibrancyTypeFluent' + ) span Fluent .form-line(*ngIf='platform.supportsWindowControls') @@ -71,31 +77,36 @@ h3.mb-3(translate) Window .title(translate) Window frame .description(translate) Whether a custom window or an OS native window should be used - .btn-group( - [(ngModel)]='config.store.appearance.frame', - (ngModelChange)='saveConfiguration(true)', - ngbRadioGroup - ) - label.btn.btn-secondary(ngbButtonLabel) - input( - type='radio', - ngbButton, - [value]='"native"' - ) + .btn-group + input.btn-check( + type='radio', + name='frame', + [(ngModel)]='config.store.appearance.frame', + (ngModelChange)='saveConfiguration(true)', + id='frameNative', + [value]='"native"' + ) + label.btn.btn-secondary(for='frameNative') span(translate) Native - label.btn.btn-secondary(ngbButtonLabel) - input( - type='radio', - ngbButton, - [value]='"thin"' - ) + input.btn-check( + type='radio', + name='frame', + [(ngModel)]='config.store.appearance.frame', + (ngModelChange)='saveConfiguration(true)', + id='frameThin', + [value]='"thin"' + ) + label.btn.btn-secondary(for='frameThin') span(translate) Thin - label.btn.btn-secondary(ngbButtonLabel) - input( - type='radio', - ngbButton, - [value]='"full"' - ) + input.btn-check( + type='radio', + name='frame', + [(ngModel)]='config.store.appearance.frame', + (ngModelChange)='saveConfiguration(true)', + id='frameFull', + [value]='"full"' + ) + label.btn.btn-secondary(for='frameFull') span(translate) Full h3.mt-4(translate) Docking @@ -105,73 +116,86 @@ h3.mt-4(translate) Docking .title(translate) Dock the terminal .description(translate) Snaps the window to a side of the screen - .btn-group( - [(ngModel)]='config.store.appearance.dock', - (ngModelChange)='saveConfiguration(); docking.dock()', - ngbRadioGroup - ) - label.btn.btn-secondary(ngbButtonLabel) - input( - type='radio', - ngbButton, - [value]='"off"' - ) + .btn-group + input.btn-check( + type='radio', + name='docking', + [(ngModel)]='config.store.appearance.dock', + (ngModelChange)='saveConfiguration(); docking.dock()', + id='dockingOff', + [value]='"off"' + ) + label.btn.btn-secondary(for='dockingOff') span(translate) Off - label.btn.btn-secondary(ngbButtonLabel) - input( - type='radio', - ngbButton, - [value]='"top"' - ) + input.btn-check( + type='radio', + name='docking', + [(ngModel)]='config.store.appearance.dock', + (ngModelChange)='saveConfiguration(); docking.dock()', + id='dockingTop', + [value]='"top"' + ) + label.btn.btn-secondary(for='dockingTop') span(translate) Top - label.btn.btn-secondary(ngbButtonLabel) - input( - type='radio', - ngbButton, - [value]='"left"' - ) + input.btn-check( + type='radio', + name='docking', + [(ngModel)]='config.store.appearance.dock', + (ngModelChange)='saveConfiguration(); docking.dock()', + id='dockingLeft', + [value]='"left"' + ) + label.btn.btn-secondary(for='dockingLeft') span(translate) Left - label.btn.btn-secondary(ngbButtonLabel) - input( - type='radio', - ngbButton, - [value]='"right"' - ) + input.btn-check( + type='radio', + name='docking', + [(ngModel)]='config.store.appearance.dock', + (ngModelChange)='saveConfiguration(); docking.dock()', + id='dockingRight', + [value]='"right"' + ) + label.btn.btn-secondary(for='dockingRight') span(translate) Right - label.btn.btn-secondary(ngbButtonLabel) - input( - type='radio', - ngbButton, - [value]='"bottom"' - ) + input.btn-check( + type='radio', + name='docking', + [(ngModel)]='config.store.appearance.dock', + (ngModelChange)='saveConfiguration(); docking.dock()', + id='dockingBottom', + [value]='"bottom"' + ) + label.btn.btn-secondary(for='dockingBottom') span(translate) Bottom -.ml-5.form-line(*ngIf='docking && config.store.appearance.dock != "off"') +.ms-5.form-line(*ngIf='docking && config.store.appearance.dock != "off"') .header .title(translate) Display on .description(translate) Snaps the window to a side of the screen - div( - [(ngModel)]='config.store.appearance.dockScreen', - (ngModelChange)='saveConfiguration(); docking.dock()', - ngbRadioGroup - ) - label.btn.btn-secondary(ngbButtonLabel) - input( - type='radio', - ngbButton, - value='current' - ) + div + input.btn-check( + type='radio', + name='dockScreen', + [(ngModel)]='config.store.appearance.dockScreen', + (ngModelChange)='saveConfiguration(); docking.dock()', + id='dockScreenCurrent', + value='current' + ) + label.btn.btn-secondary(id='dockScreenCurrent') span(translate) Current - label.btn.btn-secondary(*ngFor='let screen of screens', ngbButtonLabel) - input( - type='radio', - ngbButton, - [value]='screen.id' - ) + input.btn-check( + type='radio', + name='dockScreen', + [(ngModel)]='config.store.appearance.dockScreen', + (ngModelChange)='saveConfiguration(); docking.dock()', + id='dockScreen{{screen.id}}', + [value]='screen.id' + ) + label.btn.btn-secondary(*ngFor='let screen of screens', for='dockScreen{{screen.id}}') | {{screen.name}} -.ml-5.form-line(*ngIf='docking && config.store.appearance.dock != "off"') +.ms-5.form-line(*ngIf='docking && config.store.appearance.dock != "off"') .header .title(translate) Dock always on top .description(translate) Keep docked terminal always on top @@ -180,7 +204,7 @@ h3.mt-4(translate) Docking (ngModelChange)='saveConfiguration(); docking.dock()', ) -.ml-5.form-line(*ngIf='docking && config.store.appearance.dock != "off"') +.ms-5.form-line(*ngIf='docking && config.store.appearance.dock != "off"') .header .title(translate) Docked terminal size .description(translate) Window dimension away from the edge @@ -193,7 +217,7 @@ h3.mt-4(translate) Docking step='0.01' ) -.ml-5.form-line(*ngIf='docking && config.store.appearance.dock != "off"') +.ms-5.form-line(*ngIf='docking && config.store.appearance.dock != "off"') .header .title(translate) Docked terminal space .description(translate) Window dimension along the edge @@ -206,7 +230,7 @@ h3.mt-4(translate) Docking step='0.01' ) -.ml-5.form-line(*ngIf='docking && config.store.appearance.dock != "off"') +.ms-5.form-line(*ngIf='docking && config.store.appearance.dock != "off"') .header .title(translate) Hide window on focus loss .description(translate) Hides the docked terminal when you click away. @@ -220,61 +244,71 @@ h3.mt-4(translate) Tabs .form-line .header .title(translate) Tabs location - .btn-group( - [(ngModel)]='config.store.appearance.tabsLocation', - (ngModelChange)='saveConfiguration()', - ngbRadioGroup - ) - label.btn.btn-secondary(ngbButtonLabel) - input( - type='radio', - ngbButton, - [value]='"top"' - ) + .btn-group + input.btn-check( + type='radio', + name='tabsLocation', + [(ngModel)]='config.store.appearance.tabsLocation', + (ngModelChange)='saveConfiguration()', + id='tabsLocationTop', + [value]='"top"' + ) + label.btn.btn-secondary(for='tabsLocationTop') span(translate) Top - label.btn.btn-secondary(ngbButtonLabel) - input( - type='radio', - ngbButton, - [value]='"bottom"' - ) + input.btn-check( + type='radio', + name='tabsLocation', + [(ngModel)]='config.store.appearance.tabsLocation', + (ngModelChange)='saveConfiguration()', + id='tabsLocationBottom', + [value]='"bottom"' + ) + label.btn.btn-secondary(for='tabsLocationBottom') span(translate) Bottom - label.btn.btn-secondary(ngbButtonLabel) - input( - type='radio', - ngbButton, - [value]='"left"' - ) + input.btn-check( + type='radio', + name='tabsLocation', + [(ngModel)]='config.store.appearance.tabsLocation', + (ngModelChange)='saveConfiguration()', + id='tabsLocationLeft', + [value]='"left"' + ) + label.btn.btn-secondary(for='tabsLocationLeft') span(translate) Left - label.btn.btn-secondary(ngbButtonLabel) - input( - type='radio', - ngbButton, - [value]='"right"' - ) + input.btn-check( + type='radio', + name='tabsLocation', + [(ngModel)]='config.store.appearance.tabsLocation', + (ngModelChange)='saveConfiguration()', + id='tabsLocationRight', + [value]='"right"' + ) + label.btn.btn-secondary(for='tabsLocationRight') span(translate) Right .form-line .header .title(translate) Tabs width - .btn-group( - [(ngModel)]='config.store.appearance.flexTabs', - (ngModelChange)='saveConfiguration()', - ngbRadioGroup - ) - label.btn.btn-secondary(ngbButtonLabel) - input( - type='radio', - ngbButton, - [value]='true' - ) + .btn-group + input.btn-check( + type='radio', + name='flexTabs', + [(ngModel)]='config.store.appearance.flexTabs', + (ngModelChange)='saveConfiguration()', + id='flexTabsTrue', + [value]='true' + ) + label.btn.btn-secondary(for='flexTabsTrue') span(translate, translateComment='[Dynamic] tab width') id.tab-width.dynamic - label.btn.btn-secondary(ngbButtonLabel) - input( - type='radio', - ngbButton, - [value]='false' - ) + input.btn-check( + type='radio', + name='flexTabs', + [(ngModel)]='config.store.appearance.flexTabs', + (ngModelChange)='saveConfiguration()', + id='flexTabsFalse', + [value]='false' + ) + label.btn.btn-secondary(for='flexTabsFalse') span(translate) Fixed .form-line diff --git a/tabby-settings/src/components/windowSettingsTab.component.ts b/tabby-settings/src/components/windowSettingsTab.component.ts index 25446de5..15448b76 100644 --- a/tabby-settings/src/components/windowSettingsTab.component.ts +++ b/tabby-settings/src/components/windowSettingsTab.component.ts @@ -18,7 +18,7 @@ import { /** @hidden */ @Component({ selector: 'window-settings-tab', - template: require('./windowSettingsTab.component.pug'), + templateUrl:'./windowSettingsTab.component.pug', }) export class WindowSettingsTabComponent extends BaseComponent { screens: Screen[] diff --git a/tabby-settings/src/index.ts b/tabby-settings/src/index.ts index 13fa5a73..850b8d61 100644 --- a/tabby-settings/src/index.ts +++ b/tabby-settings/src/index.ts @@ -1,5 +1,5 @@ import { NgModule } from '@angular/core' -import { BrowserModule } from '@angular/platform-browser' +import { CommonModule } from '@angular/common' import { FormsModule } from '@angular/forms' import { NgbModule } from '@ng-bootstrap/ng-bootstrap' import { InfiniteScrollModule } from 'ngx-infinite-scroll' @@ -30,7 +30,7 @@ import { HotkeySettingsTabProvider, WindowSettingsTabProvider, VaultSettingsTabP /** @hidden */ @NgModule({ imports: [ - BrowserModule, + CommonModule, FormsModule, NgbModule, TabbyCorePlugin, @@ -46,18 +46,6 @@ import { HotkeySettingsTabProvider, WindowSettingsTabProvider, VaultSettingsTabP { provide: SettingsTabProvider, useClass: ProfilesSettingsTabProvider, multi: true }, { provide: SettingsTabProvider, useClass: ConfigSyncSettingsTabProvider, multi: true }, ], - entryComponents: [ - EditProfileModalComponent, - HotkeyInputModalComponent, - HotkeySettingsTabComponent, - ProfilesSettingsTabComponent, - SettingsTabComponent, - SetVaultPassphraseModalComponent, - VaultSettingsTabComponent, - WindowSettingsTabComponent, - ConfigSyncSettingsTabComponent, - ReleaseNotesComponent, - ], declarations: [ EditProfileModalComponent, HotkeyInputModalComponent, diff --git a/tabby-settings/webpack.config.js b/tabby-settings/webpack.config.js deleted file mode 100644 index b20dea8d..00000000 --- a/tabby-settings/webpack.config.js +++ /dev/null @@ -1,5 +0,0 @@ -const config = require('../webpack.plugin.config') -module.exports = config({ - name: 'settings', - dirname: __dirname, -}) diff --git a/tabby-settings/webpack.config.mjs b/tabby-settings/webpack.config.mjs new file mode 100644 index 00000000..7f6e05a2 --- /dev/null +++ b/tabby-settings/webpack.config.mjs @@ -0,0 +1,10 @@ +import * as path from 'path' +import * as url from 'url' +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)) + +import config from '../webpack.plugin.config.mjs' + +export default () => config({ + name: 'settings', + dirname: __dirname, +}) diff --git a/tabby-settings/yarn.lock b/tabby-settings/yarn.lock index 570905be..0c460706 100644 --- a/tabby-settings/yarn.lock +++ b/tabby-settings/yarn.lock @@ -2,30 +2,24 @@ # yarn lockfile v1 -"@scarf/scarf@^1.1.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@scarf/scarf/-/scarf-1.1.1.tgz#d8b9f20037b3a37dbf8dcdc4b3b72f9285bfce35" - integrity sha512-VGbKDbk1RFIaSmdVb0cNjjWJoRWRI/Weo23AjRCC2nryO0iAS8pzsToJfPVPtVs74WHw4L1UTADNdIYRLkirZQ== +"@types/marked@^4.0.8": + version "4.0.8" + resolved "https://registry.yarnpkg.com/@types/marked/-/marked-4.0.8.tgz#b316887ab3499d0a8f4c70b7bd8508f92d477955" + integrity sha512-HVNzMT5QlWCOdeuBsgXP8EZzKUf0+AXzN+sLmjvaB3ZlLqO+e4u0uXrdw9ub69wBKFs+c6/pA4r9sy6cCDvImw== -"@types/marked@^4.0.2": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@types/marked/-/marked-4.0.2.tgz#cb2dbf10da2f41cf20bd91fb5f89b67540c282f7" - integrity sha512-auNrZ/c0w6wsM9DccwVxWHssrMDezHUAXNesdp2RQrCVCyrQbOiSq7yqdJKrUQQpw9VTm7CGYJH2A/YG7jjrjQ== +marked@^4.2.12: + version "4.2.12" + resolved "https://registry.yarnpkg.com/marked/-/marked-4.2.12.tgz#d69a64e21d71b06250da995dcd065c11083bebb5" + integrity sha512-yr8hSKa3Fv4D3jdZmtMMPghgVt6TWbk86WQaWhDloQjRSQhMMYCAro7jP7VDJrjjdV8pxVxMssXS8B8Y5DZ5aw== -marked@^4.0.8: - version "4.0.12" - resolved "https://registry.yarnpkg.com/marked/-/marked-4.0.12.tgz#2262a4e6fd1afd2f13557726238b69a48b982f7d" - integrity sha512-hgibXWrEDNBWgGiK18j/4lkS6ihTe9sxtV4Q1OQppb/0zzyPSzoFANBa5MfsG/zgsWklmNnhm0XACZOH/0HBiQ== - -ngx-infinite-scroll@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/ngx-infinite-scroll/-/ngx-infinite-scroll-10.0.1.tgz#6f51f2f8775a7c50d1dd8bad125d4e748abbe880" - integrity sha512-7is0eJZ9kJPsaHohRmMhJ/QFHAW9jp9twO5HcHRvFM/Yl/R8QCiokgjwmH0/CR3MuxUanxfHZMfO3PbYTwlBEg== +ngx-infinite-scroll@^15: + version "15.0.0" + resolved "https://registry.yarnpkg.com/ngx-infinite-scroll/-/ngx-infinite-scroll-15.0.0.tgz#61bbf89f121a796880a4ad67fe785b406532b220" + integrity sha512-FSP5UphRdl47vW8f/dRnPAU+napzruAKizBX2HS7MH292Ca+va6IU0J5+UQQmO5rXod2RZV7UhJ6+7g4xLfs1A== dependencies: - "@scarf/scarf" "^1.1.0" - opencollective-postinstall "^2.0.2" + tslib "^2.3.0" -opencollective-postinstall@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259" - integrity sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q== +tslib@^2.3.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" + integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== diff --git a/tabby-ssh/src/components/hostKeyPromptModal.component.pug b/tabby-ssh/src/components/hostKeyPromptModal.component.pug index b71bb1fd..c471e747 100644 --- a/tabby-ssh/src/components/hostKeyPromptModal.component.pug +++ b/tabby-ssh/src/components/hostKeyPromptModal.component.pug @@ -6,16 +6,16 @@ strong(translate) Warning: remote host's key has suddenly changed! div(translate) You could be under a man-in-the-middle attack right now, or the host key could have just been changed. - .form-group(*ngIf='isMismatched') + .mb-3(*ngIf='isMismatched') .d-flex.align-items-center label(translate) Last known host key fingerprint - .badge.badge-danger.ml-auto {{ selector.type }} + .badge.text-bg-danger.ms-auto {{ selector.type }} code {{knownHost.digest}} - .form-group + .mb-3 .d-flex.align-items-center label(translate) Current host key fingerprint - .badge.badge-success.ml-auto {{ selector.type }} + .badge.text-bg-success.ms-auto {{ selector.type }} code {{digest}} .modal-footer diff --git a/tabby-ssh/src/components/hostKeyPromptModal.component.ts b/tabby-ssh/src/components/hostKeyPromptModal.component.ts index 52644675..33baa898 100644 --- a/tabby-ssh/src/components/hostKeyPromptModal.component.ts +++ b/tabby-ssh/src/components/hostKeyPromptModal.component.ts @@ -5,7 +5,7 @@ import { KnownHost, KnownHostSelector, SSHKnownHostsService } from '../services/ /** @hidden */ @Component({ - template: require('./hostKeyPromptModal.component.pug'), + templateUrl:'./hostKeyPromptModal.component.pug', }) export class HostKeyPromptModalComponent { @Input() selector: KnownHostSelector diff --git a/tabby-ssh/src/components/keyboardInteractiveAuthPanel.component.pug b/tabby-ssh/src/components/keyboardInteractiveAuthPanel.component.pug index 4de32bc7..e203b26b 100644 --- a/tabby-ssh/src/components/keyboardInteractiveAuthPanel.component.pug +++ b/tabby-ssh/src/components/keyboardInteractiveAuthPanel.component.pug @@ -1,6 +1,6 @@ .d-flex strong(translate) Keyboard-interactive auth - .ml-2 {{prompt.name}} + .ms-2 {{prompt.name}} .prompt-text {{prompt.prompts[step].prompt}} @@ -18,7 +18,7 @@ input.form-control.mt-2( *ngIf='step > 0', (click)='previous()' ) - .ml-auto + .ms-auto button.btn.btn-primary( (click)='next()' ) diff --git a/tabby-ssh/src/components/keyboardInteractiveAuthPanel.component.ts b/tabby-ssh/src/components/keyboardInteractiveAuthPanel.component.ts index 6ff5be5a..e12db57c 100644 --- a/tabby-ssh/src/components/keyboardInteractiveAuthPanel.component.ts +++ b/tabby-ssh/src/components/keyboardInteractiveAuthPanel.component.ts @@ -4,8 +4,8 @@ import { KeyboardInteractivePrompt } from '../session/ssh' @Component({ selector: 'keyboard-interactive-auth-panel', - template: require('./keyboardInteractiveAuthPanel.component.pug'), - styles: [require('./keyboardInteractiveAuthPanel.component.scss')], + templateUrl:'./keyboardInteractiveAuthPanel.component.pug', + styleUrls: ['./keyboardInteractiveAuthPanel.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush, }) export class KeyboardInteractiveAuthComponent { diff --git a/tabby-ssh/src/components/sftpCreateDirectoryModal.component.pug b/tabby-ssh/src/components/sftpCreateDirectoryModal.component.pug index a559641c..a839af6b 100644 --- a/tabby-ssh/src/components/sftpCreateDirectoryModal.component.pug +++ b/tabby-ssh/src/components/sftpCreateDirectoryModal.component.pug @@ -1,6 +1,6 @@ .modal-body label(translate) Name for the new directory - .form-group.w-100.mr-2 + .mb-3.w-100.me-2 input.form-control( type='text', [(ngModel)]='directoryName', diff --git a/tabby-ssh/src/components/sftpCreateDirectoryModal.component.ts b/tabby-ssh/src/components/sftpCreateDirectoryModal.component.ts index 85b02b0b..2dfbf189 100644 --- a/tabby-ssh/src/components/sftpCreateDirectoryModal.component.ts +++ b/tabby-ssh/src/components/sftpCreateDirectoryModal.component.ts @@ -4,7 +4,7 @@ import { BaseComponent } from 'tabby-core' /** @hidden */ @Component({ - template: require('./sftpCreateDirectoryModal.component.pug'), + templateUrl:'./sftpCreateDirectoryModal.component.pug', }) export class SFTPCreateDirectoryModalComponent extends BaseComponent { directoryName: string diff --git a/tabby-ssh/src/components/sftpDeleteModal.component.ts b/tabby-ssh/src/components/sftpDeleteModal.component.ts index 18a88645..bdea23c0 100644 --- a/tabby-ssh/src/components/sftpDeleteModal.component.ts +++ b/tabby-ssh/src/components/sftpDeleteModal.component.ts @@ -5,7 +5,7 @@ import { SFTPFile, SFTPSession } from '../session/sftp' /** @hidden */ @Component({ - template: require('./sftpDeleteModal.component.pug'), + templateUrl:'./sftpDeleteModal.component.pug', }) export class SFTPDeleteModalComponent extends BaseComponent { sftp: SFTPSession diff --git a/tabby-ssh/src/components/sftpPanel.component.pug b/tabby-ssh/src/components/sftpPanel.component.pug index c2f74171..57e96941 100644 --- a/tabby-ssh/src/components/sftpPanel.component.pug +++ b/tabby-ssh/src/components/sftpPanel.component.pug @@ -9,30 +9,30 @@ [(ngModel)]='editingPath' ) .breadcrumb(*ngIf='editingPath === null', (dblclick)='editPath()') - a.breadcrumb-item((click)='navigate("/")') SFTP - a.breadcrumb-item( + a.breadcrumb-item.text-decoration-none((click)='navigate("/")') SFTP + a.breadcrumb-item.text-decoration-none( *ngFor='let segment of pathSegments', (click)='navigate(segment.path)' ) {{segment.name}} .breadcrumb-spacer.flex-grow-1.h-100((dblclick)='editPath()') - button.btn.btn-link.btn-sm.d-flex((click)='openCreateDirectoryModal()') - i.fas.fa-plus.mr-1 + button.btn.btn-link.btn-sm.flex-shrink-0.d-flex((click)='openCreateDirectoryModal()') + i.fas.fa-plus.me-1 div(translate) Create directory - button.btn.btn-link.btn-sm.d-flex((click)='upload()') - i.fas.fa-upload.mr-1 + button.btn.btn-link.btn-sm.flex-shrink-0.d-flex((click)='upload()') + i.fas.fa-upload.me-1 div(translate) Upload - button.btn.btn-link.btn-close((click)='close()') !{require('../../../tabby-core/src/icons/times.svg')} + button.btn.btn-link.text-decoration-none((click)='close()') !{require('../../../tabby-core/src/icons/times.svg')} .body(dropZone, (transfer)='uploadOne($event)') a.alert.alert-info.d-flex.align-items-center( *ngIf='shouldShowCWDTip && !cwdDetectionAvailable', (click)='platform.openExternal("https://tabby.sh/go/cwd-detection")' ) - .mr-auto + .me-auto strong(translate) Working directory detection div(translate) Learn how to allow Tabby to detect remote shell's working directory. button.close((click)='dismissCWDTip()') @@ -55,7 +55,7 @@ ) i.fa-fw([class]='getIcon(item)') div {{item.name}} - .mr-auto + .me-auto .size(*ngIf='!item.isDirectory') {{item.size|filesize}} .date {{item.modified|date:'medium'}} .mode {{getModeString(item)}} diff --git a/tabby-ssh/src/components/sftpPanel.component.ts b/tabby-ssh/src/components/sftpPanel.component.ts index 9f27cb9b..fb4cf9e8 100644 --- a/tabby-ssh/src/components/sftpPanel.component.ts +++ b/tabby-ssh/src/components/sftpPanel.component.ts @@ -15,8 +15,8 @@ interface PathSegment { @Component({ selector: 'sftp-panel', - template: require('./sftpPanel.component.pug'), - styles: [require('./sftpPanel.component.scss')], + templateUrl:'./sftpPanel.component.pug', + styleUrls: ['./sftpPanel.component.scss'], }) export class SFTPPanelComponent { @Input() session: SSHSession diff --git a/tabby-ssh/src/components/sshPortForwardingConfig.component.pug b/tabby-ssh/src/components/sshPortForwardingConfig.component.pug index fbbfaf8e..0df81aeb 100644 --- a/tabby-ssh/src/components/sshPortForwardingConfig.component.pug +++ b/tabby-ssh/src/components/sshPortForwardingConfig.component.pug @@ -1,71 +1,76 @@ .list-group.mb-3 .list-group-item.d-flex.align-items-center(*ngFor='let fw of model') div - .ms-2.d-flex.align-items-center + .d-flex.align-items-center strong(*ngIf='fw.type === PortForwardType.Local', translate) Local strong(*ngIf='fw.type === PortForwardType.Remote', translate) Remote strong(*ngIf='fw.type === PortForwardType.Dynamic', translate, translateContext='[Dynamic] port forwarding') id.port-forwarding.dynamic - .ml-3 {{fw.host}}:{{fw.port}} - .ml-2 → - .ml-2(*ngIf='fw.type !== PortForwardType.Dynamic') {{fw.targetAddress}}:{{fw.targetPort}} - .ml-2(*ngIf='fw.type === PortForwardType.Dynamic', translate) SOCKS proxy + .ms-3 {{fw.host}}:{{fw.port}} + .ms-2 → + .ms-2(*ngIf='fw.type !== PortForwardType.Dynamic') {{fw.targetAddress}}:{{fw.targetPort}} + .ms-2(*ngIf='fw.type === PortForwardType.Dynamic', translate) SOCKS proxy div {{fw.description}} - button.btn.btn-link.hover-reveal.ml-auto((click)='remove(fw)') + button.btn.btn-link.hover-reveal.ms-auto((click)='remove(fw)') i.fas.fa-trash-alt h5(translate) Add a port forward .input-group.mb-2(*ngIf='newForward.type === PortForwardType.Dynamic') input.form-control(type='text', [(ngModel)]='newForward.host') - .input-group-append - .input-group-text : + .input-group-text : input.form-control(type='number', [(ngModel)]='newForward.port') - .input-group-append - .input-group-text → - .input-group-append.input-group-text(style='flex: 3 1 0', translate) SOCKS proxy + .input-group-text → + .input-group-text(style='flex: 3 1 0', translate) SOCKS proxy .input-group.mb-2(*ngIf='newForward.type !== PortForwardType.Dynamic') input.form-control(type='text', [(ngModel)]='newForward.host') - .input-group-append - .input-group-text : + .input-group-text : input.form-control(type='number', [(ngModel)]='newForward.port') - .input-group-append - .input-group-text → + .input-group-text → input.form-control(type='text', [(ngModel)]='newForward.targetAddress') - .input-group-append - .input-group-text : + .input-group-text : input.form-control(type='number', [(ngModel)]='newForward.targetPort') .input-group.mb-2 input.form-control(type='text', placeholder='Description', [(ngModel)]='newForward.description') .d-flex - .btn-group.mr-auto( - [(ngModel)]='newForward.type', - ngbRadioGroup - ) - label.btn.btn-secondary.m-0(ngbButtonLabel) - input( - type='radio', - ngbButton, - [value]='PortForwardType.Local' - ) - span(translate) Local - label.btn.btn-secondary.m-0(ngbButtonLabel) - input( - type='radio', - ngbButton, - [value]='PortForwardType.Remote' - ) - span(translate) Remote - label.btn.btn-secondary.m-0(ngbButtonLabel) - input( - type='radio', - ngbButton, - [value]='PortForwardType.Dynamic' - ) - span(translate, translateContext='[Dynamic] port forwarding') id.port-forwarding.dynamic + .btn-group.me-auto + input.btn-check( + type='radio', + [(ngModel)]='newForward.type', + id='newForwardTypeLocal', + name='newForwardType', + [value]='PortForwardType.Local' + ) + label.btn.btn-secondary.m-0( + for='newForwardTypeLocal', + translate + ) Local + input.btn-check( + type='radio', + [(ngModel)]='newForward.type', + id='newForwardTypeRemote', + name='newForwardType', + [value]='PortForwardType.Remote' + ) + label.btn.btn-secondary.m-0( + for='newForwardTypeRemote', + translate + ) Remote + input.btn-check( + type='radio', + [(ngModel)]='newForward.type', + id='newForwardTypeDynamic', + name='newForwardType', + [value]='PortForwardType.Dynamic' + ) + label.btn.btn-secondary.m-0( + for='newForwardTypeDynamic', + translate, + translateContext='[Dynamic] port forwarding' + ) id.port-forwarding.dynamic button.btn.btn-primary((click)='addForward()') - i.fas.fa-check.mr-2 + i.fas.fa-check.me-2 span(translate) Forward port diff --git a/tabby-ssh/src/components/sshPortForwardingConfig.component.ts b/tabby-ssh/src/components/sshPortForwardingConfig.component.ts index 889789f1..94dcd7a7 100644 --- a/tabby-ssh/src/components/sshPortForwardingConfig.component.ts +++ b/tabby-ssh/src/components/sshPortForwardingConfig.component.ts @@ -5,7 +5,7 @@ import { ForwardedPortConfig, PortForwardType } from '../api' /** @hidden */ @Component({ selector: 'ssh-port-forwarding-config', - template: require('./sshPortForwardingConfig.component.pug'), + templateUrl:'./sshPortForwardingConfig.component.pug', }) export class SSHPortForwardingConfigComponent { @Input() model: ForwardedPortConfig[] diff --git a/tabby-ssh/src/components/sshPortForwardingModal.component.ts b/tabby-ssh/src/components/sshPortForwardingModal.component.ts index b8c99c3c..c3cf4612 100644 --- a/tabby-ssh/src/components/sshPortForwardingModal.component.ts +++ b/tabby-ssh/src/components/sshPortForwardingModal.component.ts @@ -6,7 +6,7 @@ import { ForwardedPortConfig } from '../api' /** @hidden */ @Component({ - template: require('./sshPortForwardingModal.component.pug'), + templateUrl:'./sshPortForwardingModal.component.pug', }) export class SSHPortForwardingModalComponent { @Input() session: SSHSession diff --git a/tabby-ssh/src/components/sshProfileSettings.component.pug b/tabby-ssh/src/components/sshProfileSettings.component.pug index f1d7dbf4..bb1f8a15 100644 --- a/tabby-ssh/src/components/sshProfileSettings.component.pug +++ b/tabby-ssh/src/components/sshProfileSettings.component.pug @@ -3,7 +3,7 @@ ul.nav-tabs(ngbNav, #nav='ngbNav') a(ngbNavLink, translate) General ng-template(ngbNavContent) .d-flex.w-100.mt-3 - .form-group.mr-2( + .mb-3.me-2( ngbDropdown ) label(translate) Connection @@ -35,21 +35,21 @@ ul.nav-tabs(ngbNav, #nav='ngbNav') div(translate) HTTP proxy .text-muted(translate) Using CONNECT method - .form-group.w-100(*ngIf='connectionMode === "proxyCommand"') + .mb-3.w-100(*ngIf='connectionMode === "proxyCommand"') label(translate) Proxy command input.form-control( type='text', [(ngModel)]='profile.options.proxyCommand', ) - .form-group.w-100.mr-2(*ngIf='connectionMode !== "proxyCommand"') + .mb-3.w-100.me-2(*ngIf='connectionMode !== "proxyCommand"') label(translate) Host input.form-control( type='text', [(ngModel)]='profile.options.host', ) - .form-group(*ngIf='connectionMode !== "proxyCommand"') + .mb-3(*ngIf='connectionMode !== "proxyCommand"') label(translate) Port input.form-control( type='number', @@ -57,7 +57,7 @@ ul.nav-tabs(ngbNav, #nav='ngbNav') [(ngModel)]='profile.options.port', ) - .form-group(*ngIf='connectionMode === "jumpHost"') + .mb-3(*ngIf='connectionMode === "jumpHost"') label(translate) Jump host select.form-control([(ngModel)]='profile.options.jumpHost') option([ngValue]='null', translate) Select @@ -65,14 +65,14 @@ ul.nav-tabs(ngbNav, #nav='ngbNav') .d-flex.w-100(*ngIf='connectionMode === "socksProxy"') - .form-group.w-100.mr-2 + .mb-3.w-100.me-2 label(translate) SOCKS proxy host input.form-control( type='text', [(ngModel)]='profile.options.socksProxyHost', ) - .form-group + .mb-3 label(translate) SOCKS proxy port input.form-control( type='number', @@ -81,14 +81,14 @@ ul.nav-tabs(ngbNav, #nav='ngbNav') ) .d-flex.w-100(*ngIf='connectionMode === "httpProxy"') - .form-group.w-100.mr-2 + .mb-3.w-100.me-2 label(translate) HTTP proxy host input.form-control( type='text', [(ngModel)]='profile.options.httpProxyHost', ) - .form-group + .mb-3 label(translate) HTTP proxy port input.form-control( type='number', @@ -96,7 +96,7 @@ ul.nav-tabs(ngbNav, #nav='ngbNav') [(ngModel)]='profile.options.httpProxyPort', ) - .form-group + .mb-3 label(translate) Username input.form-control( type='text', @@ -104,31 +104,66 @@ ul.nav-tabs(ngbNav, #nav='ngbNav') [(ngModel)]='profile.options.user', ) - .form-group + .mb-3 label(translate) Authentication method - .btn-group.mt-1.w-100( - [(ngModel)]='profile.options.auth', - ngbRadioGroup - ) - label.btn.btn-secondary(ngbButtonLabel) - input(type='radio', ngbButton, [value]='null') + .btn-group.mt-1.w-100 + input.btn-check( + type='radio', + name='auth', + [(ngModel)]='profile.options.auth', + id='authAuto', + [value]='null' + ) + label.btn.btn-secondary( + for='authAuto' + ) i.far.fa-lightbulb .m-0(translate) Auto - label.btn.btn-secondary(ngbButtonLabel) - input(type='radio', ngbButton, [value]='"password"') + input.btn-check( + type='radio', + name='auth', + [(ngModel)]='profile.options.auth', + id='authPassword', + [value]='"password"' + ) + label.btn.btn-secondary( + for='authPassword' + ) i.fas.fa-font .m-0(translate) Password - label.btn.btn-secondary(ngbButtonLabel) - input(type='radio', ngbButton, [value]='"publicKey"') + input.btn-check( + type='radio', + name='auth', + [(ngModel)]='profile.options.auth', + id='authPublicKey', + [value]='"publicKey"' + ) + label.btn.btn-secondary( + for='authPublicKey' + ) i.fas.fa-key .m-0(translate) Key - label.btn.btn-secondary(ngbButtonLabel, ng:if='hostApp.platform !== Platform.Web') - input(type='radio', ngbButton, [value]='"agent"') + input.btn-check( + type='radio', + name='auth', + [(ngModel)]='profile.options.auth', + id='authAgent', + [value]='"agent"' + ) + label.btn.btn-secondary( + for='authAgent' + , ng:if='hostApp.platform !== Platform.Web') i.fas.fa-user-secret .m-0(translate) Agent + input.btn-check( + type='radio', + name='auth', + [(ngModel)]='profile.options.auth', + id='auth"keyboardInteractive"' + [value]='"keyboardInteractive"' + ) label.btn.btn-secondary(ngbButtonLabel) - input(type='radio', ngbButton, [value]='"keyboardInteractive"') i.far.fa-keyboard .m-0(translate) Interactive @@ -137,19 +172,19 @@ ul.nav-tabs(ngbNav, #nav='ngbNav') .title(translate) Password .description(*ngIf='!hasSavedPassword', translate) Save a password in the keychain .description(*ngIf='hasSavedPassword', translate) There is a saved password for this connection - button.btn.btn-success.ml-4(*ngIf='!hasSavedPassword', (click)='setPassword()') + button.btn.btn-success.ms-4(*ngIf='!hasSavedPassword', (click)='setPassword()') i.fas.fa-key span(translate) Set password - button.btn.btn-danger.ml-4(*ngIf='hasSavedPassword', (click)='clearSavedPassword()') + button.btn.btn-danger.ms-4(*ngIf='hasSavedPassword', (click)='clearSavedPassword()') i.fas.fa-trash-alt span(translate) Forget - .form-group(*ngIf='!profile.options.auth || profile.options.auth === "publicKey"') + .mb-3(*ngIf='!profile.options.auth || profile.options.auth === "publicKey"') label(translate) Private keys .list-group.mb-2 - .list-group-item.d-flex.align-items-center.p-1.pl-3(*ngFor='let path of profile.options.privateKeys') + .list-group-item.d-flex.align-items-center.p-1.ps-3(*ngFor='let path of profile.options.privateKeys') i.fas.fa-key - .no-wrap.mr-auto {{path}} + .no-wrap.me-auto {{path}} button.btn.btn-link((click)='removePrivateKey(path)') i.fas.fa-trash button.btn.btn-secondary((click)='addPrivateKey()') @@ -249,7 +284,7 @@ ul.nav-tabs(ngbNav, #nav='ngbNav') checkbox([text]='alg', [(ngModel)]='algorithms.serverHostKey[alg]') li(ngbNavItem) - a(ngbNavLink, translate) Color scheme + a(ngbNavLink, translate) Colors ng-template(ngbNavContent) color-scheme-selector([(model)]='profile.terminalColorScheme') diff --git a/tabby-ssh/src/components/sshProfileSettings.component.ts b/tabby-ssh/src/components/sshProfileSettings.component.ts index 659e98e5..89b51ac7 100644 --- a/tabby-ssh/src/components/sshProfileSettings.component.ts +++ b/tabby-ssh/src/components/sshProfileSettings.component.ts @@ -11,7 +11,7 @@ import { supportedAlgorithms } from '../algorithms' /** @hidden */ @Component({ - template: require('./sshProfileSettings.component.pug'), + templateUrl:'./sshProfileSettings.component.pug', }) export class SSHProfileSettingsComponent { Platform = Platform diff --git a/tabby-ssh/src/components/sshSettingsTab.component.ts b/tabby-ssh/src/components/sshSettingsTab.component.ts index 94c18223..4af011f4 100644 --- a/tabby-ssh/src/components/sshSettingsTab.component.ts +++ b/tabby-ssh/src/components/sshSettingsTab.component.ts @@ -4,7 +4,7 @@ import { ConfigService, HostAppService, Platform } from 'tabby-core' /** @hidden */ @Component({ - template: require('./sshSettingsTab.component.pug'), + templateUrl:'./sshSettingsTab.component.pug', }) export class SSHSettingsTabComponent { Platform = Platform diff --git a/tabby-ssh/src/components/sshTab.component.pug b/tabby-ssh/src/components/sshTab.component.pug index 6faec0c3..b38ecb2d 100644 --- a/tabby-ssh/src/components/sshTab.component.pug +++ b/tabby-ssh/src/components/sshTab.component.pug @@ -1,9 +1,9 @@ terminal-toolbar([tab]='this') - i.fas.fa-xs.fa-circle.text-success.mr-2(*ngIf='session && session.open') - i.fas.fa-xs.fa-circle.text-danger.mr-2(*ngIf='!session || !session.open') - strong.mr-auto {{profile.options.user}}@{{profile.options.host}}:{{profile.options.port}} + i.fas.fa-xs.fa-circle.text-success.me-2(*ngIf='session && session.open') + i.fas.fa-xs.fa-circle.text-danger.me-2(*ngIf='!session || !session.open') + strong.me-auto {{profile.options.user}}@{{profile.options.host}}:{{profile.options.port}} - .mr-2( + .me-2( ngbDropdown, container='body', *ngIf='session && !session.supportsWorkingDirectory()', @@ -13,16 +13,16 @@ terminal-toolbar([tab]='this') i.far.fa-lightbulb.text-primary .bg-dark(ngbDropdownMenu) a.d-flex.align-items-center(ngbDropdownItem, (click)='platform.openExternal("https://tabby.sh/go/cwd-detection")') - .mr-auto + .me-auto strong(translate) Working directory detection div(translate) Learn how to allow Tabby to detect remote shell's working directory. - i.fas.fa-arrow-right.ml-4 + i.fas.fa-arrow-right.ms-4 - button.btn.btn-sm.btn-link.mr-2((click)='reconnect()') + button.btn.btn-sm.btn-link.me-2((click)='reconnect()') i.fas.fa-redo span(translate) Reconnect - button.btn.btn-sm.btn-link.mr-2((click)='openSFTP()', *ngIf='session && session.open') + button.btn.btn-sm.btn-link.me-2((click)='openSFTP()', *ngIf='session && session.open') i.far.fa-folder-open span SFTP diff --git a/tabby-ssh/src/components/sshTab.component.ts b/tabby-ssh/src/components/sshTab.component.ts index 68fffee4..1694813a 100644 --- a/tabby-ssh/src/components/sshTab.component.ts +++ b/tabby-ssh/src/components/sshTab.component.ts @@ -16,7 +16,10 @@ import { SSHMultiplexerService } from '../services/sshMultiplexer.service' @Component({ selector: 'ssh-tab', template: `${BaseTerminalTabComponent.template} ${require('./sshTab.component.pug')}`, - styles: [require('./sshTab.component.scss'), ...BaseTerminalTabComponent.styles], + styles: [ + ...BaseTerminalTabComponent.styles, + require('./sshTab.component.scss'), + ], animations: BaseTerminalTabComponent.animations, }) export class SSHTabComponent extends BaseTerminalTabComponent { diff --git a/tabby-ssh/src/index.ts b/tabby-ssh/src/index.ts index ba069a62..fa5f529d 100644 --- a/tabby-ssh/src/index.ts +++ b/tabby-ssh/src/index.ts @@ -48,15 +48,6 @@ import { SFTPCreateDirectoryModalComponent } from './components/sftpCreateDirect { provide: ProfileProvider, useExisting: SSHProfilesService, multi: true }, { provide: SFTPContextMenuItemProvider, useClass: CommonSFTPContextMenu, multi: true }, ], - entryComponents: [ - SSHProfileSettingsComponent, - SFTPDeleteModalComponent, - SFTPCreateDirectoryModalComponent, - SSHPortForwardingModalComponent, - SSHSettingsTabComponent, - SSHTabComponent, - HostKeyPromptModalComponent, - ], declarations: [ SSHProfileSettingsComponent, SFTPDeleteModalComponent, diff --git a/tabby-ssh/webpack.config.js b/tabby-ssh/webpack.config.js deleted file mode 100644 index e89594b6..00000000 --- a/tabby-ssh/webpack.config.js +++ /dev/null @@ -1,10 +0,0 @@ -const config = require('../webpack.plugin.config') -module.exports = config({ - name: 'ssh', - dirname: __dirname, - alias: { - 'cpu-features': false, - './crypto/build/Release/sshcrypto.node': false, - '../build/Release/cpufeatures.node': false, - }, -}) diff --git a/tabby-ssh/webpack.config.mjs b/tabby-ssh/webpack.config.mjs new file mode 100644 index 00000000..16ce381b --- /dev/null +++ b/tabby-ssh/webpack.config.mjs @@ -0,0 +1,15 @@ +import * as path from 'path' +import * as url from 'url' +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)) + +import config from '../webpack.plugin.config.mjs' + +export default () => config({ + name: 'ssh', + dirname: __dirname, + alias: { + 'cpu-features': false, + './crypto/build/Release/sshcrypto.node': false, + '../build/Release/cpufeatures.node': false, + }, +}) diff --git a/tabby-telnet/src/components/telnetProfileSettings.component.pug b/tabby-telnet/src/components/telnetProfileSettings.component.pug index bbea7deb..ad1ed151 100644 --- a/tabby-telnet/src/components/telnetProfileSettings.component.pug +++ b/tabby-telnet/src/components/telnetProfileSettings.component.pug @@ -2,14 +2,14 @@ ul.nav-tabs(ngbNav, #nav='ngbNav') li(ngbNavItem) a(ngbNavLink, translate) General ng-template(ngbNavContent) - .form-group + .mb-3 label(translate) Host input.form-control( type='text', [(ngModel)]='profile.options.host', ) - .form-group + .mb-3 label(translate) Port input.form-control( type='number', diff --git a/tabby-telnet/src/components/telnetProfileSettings.component.ts b/tabby-telnet/src/components/telnetProfileSettings.component.ts index eef0fa12..6782289a 100644 --- a/tabby-telnet/src/components/telnetProfileSettings.component.ts +++ b/tabby-telnet/src/components/telnetProfileSettings.component.ts @@ -6,7 +6,7 @@ import { TelnetProfile } from '../session' /** @hidden */ @Component({ - template: require('./telnetProfileSettings.component.pug'), + templateUrl:'./telnetProfileSettings.component.pug', }) export class TelnetProfileSettingsComponent implements ProfileSettingsComponent { profile: TelnetProfile diff --git a/tabby-telnet/src/components/telnetTab.component.pug b/tabby-telnet/src/components/telnetTab.component.pug index 50badf54..d06bb5fc 100644 --- a/tabby-telnet/src/components/telnetTab.component.pug +++ b/tabby-telnet/src/components/telnetTab.component.pug @@ -1,8 +1,8 @@ terminal-toolbar([tab]='this') - i.fas.fa-xs.fa-circle.text-success.mr-2(*ngIf='session && session.open') - i.fas.fa-xs.fa-circle.text-danger.mr-2(*ngIf='!session || !session.open') - strong.mr-auto {{profile.options.host}}:{{profile.options.port}} + i.fas.fa-xs.fa-circle.text-success.me-2(*ngIf='session && session.open') + i.fas.fa-xs.fa-circle.text-danger.me-2(*ngIf='!session || !session.open') + strong.me-auto {{profile.options.host}}:{{profile.options.port}} - button.btn.btn-sm.btn-link.mr-2((click)='reconnect()') + button.btn.btn-sm.btn-link.me-2((click)='reconnect()') i.fas.fa-redo span(translate) Reconnect diff --git a/tabby-telnet/src/components/telnetTab.component.ts b/tabby-telnet/src/components/telnetTab.component.ts index c3420fbe..48458b61 100644 --- a/tabby-telnet/src/components/telnetTab.component.ts +++ b/tabby-telnet/src/components/telnetTab.component.ts @@ -11,7 +11,7 @@ import { TelnetProfile, TelnetSession } from '../session' @Component({ selector: 'telnet-tab', template: `${BaseTerminalTabComponent.template} ${require('./telnetTab.component.pug')}`, - styles: [require('./telnetTab.component.scss'), ...BaseTerminalTabComponent.styles], + styleUrls: ['./telnetTab.component.scss', ...BaseTerminalTabComponent.styles], animations: BaseTerminalTabComponent.animations, }) export class TelnetTabComponent extends BaseTerminalTabComponent { diff --git a/tabby-telnet/src/index.ts b/tabby-telnet/src/index.ts index abcb5d14..3798379e 100644 --- a/tabby-telnet/src/index.ts +++ b/tabby-telnet/src/index.ts @@ -32,10 +32,6 @@ import { TelnetProfilesService } from './profiles' { provide: HotkeyProvider, useClass: TelnetHotkeyProvider, multi: true }, { provide: ProfileProvider, useExisting: TelnetProfilesService, multi: true }, ], - entryComponents: [ - TelnetProfileSettingsComponent, - TelnetTabComponent, - ], declarations: [ TelnetProfileSettingsComponent, TelnetTabComponent, diff --git a/tabby-telnet/webpack.config.js b/tabby-telnet/webpack.config.js deleted file mode 100644 index f645567c..00000000 --- a/tabby-telnet/webpack.config.js +++ /dev/null @@ -1,5 +0,0 @@ -const config = require('../webpack.plugin.config') -module.exports = config({ - name: 'telnet', - dirname: __dirname -}) diff --git a/tabby-telnet/webpack.config.mjs b/tabby-telnet/webpack.config.mjs new file mode 100644 index 00000000..d8d82b0d --- /dev/null +++ b/tabby-telnet/webpack.config.mjs @@ -0,0 +1,10 @@ +import * as path from 'path' +import * as url from 'url' +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)) + +import config from '../webpack.plugin.config.mjs' + +export default () => config({ + name: 'telnet', + dirname: __dirname, +}) diff --git a/tabby-terminal/package.json b/tabby-terminal/package.json index ab66e1e9..1bedc65f 100644 --- a/tabby-terminal/package.json +++ b/tabby-terminal/package.json @@ -24,7 +24,7 @@ "cli-spinner": "^0.2.10", "dataurl": "0.1.0", "hexer": "^1.5.0", - "ngx-colors": "^3.0.4", + "ngx-colors": "^3.4.0", "patch-package": "^6.5.0", "ps-node": "^0.1.6", "runes": "^0.4.2", diff --git a/tabby-terminal/patches/ansi-color+0.2.1.patch b/tabby-terminal/patches/ansi-color+0.2.1.patch new file mode 100644 index 00000000..b20ce461 --- /dev/null +++ b/tabby-terminal/patches/ansi-color+0.2.1.patch @@ -0,0 +1,15 @@ +diff --git a/node_modules/ansi-color/lib/ansi-color.js b/node_modules/ansi-color/lib/ansi-color.js +index 1062c87..4fc2847 100644 +--- a/node_modules/ansi-color/lib/ansi-color.js ++++ b/node_modules/ansi-color/lib/ansi-color.js +@@ -32,8 +32,8 @@ exports.set = function(str, color) { + var color_attrs = color.split("+"); + var ansi_str = ""; + for(var i=0, attr; attr = color_attrs[i]; i++) { +- ansi_str += "\033[" + ANSI_CODES[attr] + "m"; ++ ansi_str += "\x1b[" + ANSI_CODES[attr] + "m"; + } +- ansi_str += str + "\033[" + ANSI_CODES["off"] + "m"; ++ ansi_str += str + "\x1b[" + ANSI_CODES["off"] + "m"; + return ansi_str; + }; diff --git a/tabby-terminal/patches/xterm+5.2.0-beta.10.patch b/tabby-terminal/patches/xterm+5.1.0.patch similarity index 100% rename from tabby-terminal/patches/xterm+5.2.0-beta.10.patch rename to tabby-terminal/patches/xterm+5.1.0.patch diff --git a/tabby-terminal/src/api/baseTerminalTab.component.ts b/tabby-terminal/src/api/baseTerminalTab.component.ts index 0e362946..9520c441 100644 --- a/tabby-terminal/src/api/baseTerminalTab.component.ts +++ b/tabby-terminal/src/api/baseTerminalTab.component.ts @@ -1,9 +1,9 @@ import { Observable, Subject, first, auditTime } from 'rxjs' import { Spinner } from 'cli-spinner' import colors from 'ansi-colors' -import { NgZone, OnInit, OnDestroy, Injector, ViewChild, HostBinding, Input, ElementRef, InjectFlags } from '@angular/core' +import { NgZone, OnInit, OnDestroy, Injector, ViewChild, HostBinding, Input, ElementRef, InjectFlags, Component } from '@angular/core' import { trigger, transition, style, animate, AnimationTriggerMetadata } from '@angular/animations' -import { AppService, ConfigService, BaseTabComponent, HostAppService, HotkeysService, NotificationsService, Platform, LogService, Logger, TabContextMenuItemProvider, SplitTabComponent, SubscriptionContainer, MenuItemOptions, PlatformService, HostWindowService, ResettableTimeout, TranslateService } from 'tabby-core' +import { AppService, ConfigService, BaseTabComponent, HostAppService, HotkeysService, NotificationsService, Platform, LogService, Logger, TabContextMenuItemProvider, SplitTabComponent, SubscriptionContainer, MenuItemOptions, PlatformService, HostWindowService, ResettableTimeout, TranslateService, ThemesService } from 'tabby-core' import { BaseSession } from '../session' @@ -17,6 +17,7 @@ import { MultifocusService } from '../services/multifocus.service' /** * A class to base your custom terminal tabs on */ +@Component({ template: '' }) export class BaseTerminalTabComponent

extends BaseTabComponent implements OnInit, OnDestroy { static template: string = require('../components/baseTerminalTab.component.pug') static styles: string[] = [require('../components/baseTerminalTab.component.scss')] @@ -121,6 +122,7 @@ export class BaseTerminalTabComponent

extends Bas protected hostWindow: HostWindowService protected translate: TranslateService protected multifocus: MultifocusService + protected themes: ThemesService // Deps end protected logger: Logger @@ -193,6 +195,7 @@ export class BaseTerminalTabComponent

extends Bas this.hostWindow = injector.get(HostWindowService) this.translate = injector.get(TranslateService) this.multifocus = injector.get(MultifocusService) + this.themes = injector.get(ThemesService) this.logger = this.log.create('baseTerminalTab') this.setTitle(this.translate.instant('Terminal')) @@ -512,7 +515,7 @@ export class BaseTerminalTabComponent

extends Bas configure (): void { this.frontend?.configure(this.profile) - if (this.config.store.terminal.background === 'colorScheme') { + if (!this.themes.findCurrentTheme().followsColorScheme && this.config.store.terminal.background === 'colorScheme') { const scheme = this.profile.terminalColorScheme ?? this.config.store.terminal.colorScheme if (scheme.background) { this.backgroundColor = scheme.background @@ -666,9 +669,9 @@ export class BaseTerminalTabComponent

extends Bas let wheelDeltaY = 0 if ('wheelDeltaY' in event) { - wheelDeltaY = (event as WheelEvent)['wheelDeltaY'] + wheelDeltaY = (event as unknown as WheelEvent)['wheelDeltaY'] } else { - wheelDeltaY = (event as WheelEvent).deltaY + wheelDeltaY = (event as unknown as WheelEvent).deltaY } if (event.altKey) { diff --git a/tabby-terminal/src/components/appearanceSettingsTab.component.pug b/tabby-terminal/src/components/appearanceSettingsTab.component.pug index 0e87e562..444da50b 100644 --- a/tabby-terminal/src/components/appearanceSettingsTab.component.pug +++ b/tabby-terminal/src/components/appearanceSettingsTab.component.pug @@ -55,59 +55,76 @@ h3.mb-3(translate) Appearance color-scheme-preview([scheme]='config.store.terminal.colorScheme', [fontPreview]='true') .content-box - .form-line + .form-line(*ngIf='!themes.findCurrentTheme().followsColorScheme') .header .title(translate) Terminal background - .btn-group( - [(ngModel)]='config.store.terminal.background', - (ngModelChange)='config.save()', - ngbRadioGroup - ) - label.btn.btn-secondary(ngbButtonLabel) - input( - type='radio', - ngbButton, - [value]='"theme"' - ) + .btn-group(role='group') + input.btn-check( + type='radio', + name='background', + [(ngModel)]='config.store.terminal.background', + (ngModelChange)='config.save()', + id='backgroundTheme', + [value]='"theme"' + ) + label.btn.btn-secondary( + for='backgroundTheme' + ) span(translate) From theme - label.btn.btn-secondary(ngbButtonLabel) - input( - type='radio', - ngbButton, - [value]='"colorScheme"' - ) + input.btn-check( + type='radio', + name='background', + [(ngModel)]='config.store.terminal.background', + (ngModelChange)='config.save()', + id='backgroundColorScheme', + [value]='"colorScheme"' + ) + label.btn.btn-secondary( + for='backgroundColorScheme' + ) span(translate) From color scheme .form-line .header .title(translate) Cursor shape - .btn-group( - [(ngModel)]='config.store.terminal.cursor', - (ngModelChange)='config.save()', - ngbRadioGroup - ) - label.btn.btn-secondary(ngbButtonLabel) - input( - type='radio', - ngbButton, - [value]='"block"' - ) + .btn-group(role='group') + input.btn-check( + type='radio', + name='cursor', + [(ngModel)]='config.store.terminal.cursor', + (ngModelChange)='config.save()', + id='cursorBlock', + [value]='"block"' + ) + label.btn.btn-secondary( + for='cursorBlock' + ) | █ - label.btn.btn-secondary(ngbButtonLabel) - input( - type='radio', - ngbButton, - [value]='"beam"' - ) + input.btn-check( + type='radio', + name='cursor', + [(ngModel)]='config.store.terminal.cursor', + (ngModelChange)='config.save()', + id='cursorBeam', + [value]='"beam"' + ) + label.btn.btn-secondary( + for='cursorBeam' + ) | | - label.btn.btn-secondary(ngbButtonLabel) - input( - type='radio', - ngbButton, - [value]='"underline"' - ) + input.btn-check( + type='radio', + name='cursor', + [(ngModel)]='config.store.terminal.cursor', + (ngModelChange)='config.save()', + id='cursorUnderline', + [value]='"underline"' + ) + label.btn.btn-secondary( + for='cursorUnderline' + ) | ▁ .form-line diff --git a/tabby-terminal/src/components/appearanceSettingsTab.component.ts b/tabby-terminal/src/components/appearanceSettingsTab.component.ts index 83c23a49..96b5b396 100644 --- a/tabby-terminal/src/components/appearanceSettingsTab.component.ts +++ b/tabby-terminal/src/components/appearanceSettingsTab.component.ts @@ -3,18 +3,19 @@ import { Observable, debounceTime, distinctUntilChanged, map } from 'rxjs' import { debounce } from 'utils-decorators/dist/esm/debounce/debounce' import { Component } from '@angular/core' -import { ConfigService, getCSSFontFamily, PlatformService } from 'tabby-core' +import { ConfigService, getCSSFontFamily, PlatformService, ThemesService } from 'tabby-core' /** @hidden */ @Component({ - template: require('./appearanceSettingsTab.component.pug'), - styles: [require('./appearanceSettingsTab.component.scss')], + templateUrl:'./appearanceSettingsTab.component.pug', + styleUrls: ['./appearanceSettingsTab.component.scss'], }) export class AppearanceSettingsTabComponent { fonts: string[] = [] constructor ( public config: ConfigService, + public themes: ThemesService, private platform: PlatformService, ) { } diff --git a/tabby-terminal/src/components/colorPicker.component.scss b/tabby-terminal/src/components/colorPicker.component.scss index 1b0ddf7f..c7c57838 100644 --- a/tabby-terminal/src/components/colorPicker.component.scss +++ b/tabby-terminal/src/components/colorPicker.component.scss @@ -1,3 +1,7 @@ +:host { + display: inline-block; +} + div { width: 32px; height: 32px; diff --git a/tabby-terminal/src/components/colorPicker.component.ts b/tabby-terminal/src/components/colorPicker.component.ts index 3d4cf6ea..c434104d 100644 --- a/tabby-terminal/src/components/colorPicker.component.ts +++ b/tabby-terminal/src/components/colorPicker.component.ts @@ -3,8 +3,8 @@ import { Component, Input, Output, EventEmitter } from '@angular/core' /** @hidden */ @Component({ selector: 'color-picker', - template: require('./colorPicker.component.pug'), - styles: [require('./colorPicker.component.scss')], + templateUrl:'./colorPicker.component.pug', + styleUrls: ['./colorPicker.component.scss'], }) export class ColorPickerComponent { @Input() model: string diff --git a/tabby-terminal/src/components/colorSchemePreview.component.ts b/tabby-terminal/src/components/colorSchemePreview.component.ts index 31acf2cc..96c95514 100644 --- a/tabby-terminal/src/components/colorSchemePreview.component.ts +++ b/tabby-terminal/src/components/colorSchemePreview.component.ts @@ -5,8 +5,8 @@ import { TerminalColorScheme } from '../api/interfaces' /** @hidden */ @Component({ selector: 'color-scheme-preview', - template: require('./colorSchemePreview.component.pug'), - styles: [require('./colorSchemePreview.component.scss')], + templateUrl:'./colorSchemePreview.component.pug', + styleUrls: ['./colorSchemePreview.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush, }) export class ColorSchemePreviewComponent extends BaseComponent { diff --git a/tabby-terminal/src/components/colorSchemeSelector.component.pug b/tabby-terminal/src/components/colorSchemeSelector.component.pug index 6b634160..b9ac5e0e 100644 --- a/tabby-terminal/src/components/colorSchemeSelector.component.pug +++ b/tabby-terminal/src/components/colorSchemeSelector.component.pug @@ -1,31 +1,29 @@ .head - .bg-dark.p-3.mb-4(*ngIf='model') + .bg-dark.p-3.mb-4(*ngIf='model != null') .d-flex.align-items-center span {{model.name}} - .mr-auto + .me-auto a.btn-link((click)='selectScheme(null); $event.preventDefault()', href='#', translate) Clear color-scheme-preview([scheme]='model') .input-group.mb-3 - .input-group-prepend - .input-group-text - i.fas.fa-fw.fa-search + .input-group-text + i.fas.fa-fw.fa-search input.form-control(type='search', [placeholder]='"Search color schemes"|translate', [(ngModel)]='filter') .body - .list-group-light.mb-3 + .list-group.list-group-light.mb-3 ng-container(*ngFor='let scheme of allColorSchemes') .list-group-item.list-group-item-action( [hidden]='filter && !scheme.name.toLowerCase().includes(filter.toLowerCase())', - (click)='selectScheme(scheme)', - [class.active]='(currentCustomScheme || currentStockScheme) === scheme' + (click)='selectScheme(scheme)' ) .d-flex.w-100.align-items-center i.fas.fa-fw([class.fa-check]='model?.name === scheme.name') - .ml-2 + .ms-2 - .mr-auto {{scheme.name}} + .me-auto {{scheme.name}} color-scheme-preview([scheme]='scheme') diff --git a/tabby-terminal/src/components/colorSchemeSelector.component.ts b/tabby-terminal/src/components/colorSchemeSelector.component.ts index 90eec0fe..4a15d111 100644 --- a/tabby-terminal/src/components/colorSchemeSelector.component.ts +++ b/tabby-terminal/src/components/colorSchemeSelector.component.ts @@ -11,7 +11,7 @@ _('Search color schemes') /** @hidden */ @Component({ selector: 'color-scheme-selector', - template: require('./colorSchemeSelector.component.pug'), + templateUrl:'./colorSchemeSelector.component.pug', styles: [` :host { display: block; @@ -45,7 +45,7 @@ export class ColorSchemeSelectorComponent { this.changeDetector.markForCheck() } - selectScheme (scheme: TerminalColorScheme) { + selectScheme (scheme: TerminalColorScheme|null) { this.model = scheme this.modelChange.emit(scheme) this.changeDetector.markForCheck() diff --git a/tabby-terminal/src/components/colorSchemeSettingsTab.component.pug b/tabby-terminal/src/components/colorSchemeSettingsTab.component.pug index 1ea9abf5..cacd18ff 100644 --- a/tabby-terminal/src/components/colorSchemeSettingsTab.component.pug +++ b/tabby-terminal/src/components/colorSchemeSettingsTab.component.pug @@ -3,12 +3,12 @@ .d-flex.align-items-center(*ngIf='!editing') span {{getCurrentSchemeName()}} - .mr-auto + .me-auto .btn-toolbar button.btn.btn-secondary((click)='editScheme()') i.fas.fa-pen span(translate) Edit - .mr-1 + .me-1 button.btn.btn-danger( (click)='deleteScheme(config.store.terminal.colorScheme)', *ngIf='currentCustomScheme' @@ -17,11 +17,11 @@ span(translate) Delete div(*ngIf='editing') - .form-group + .mb-3 label(translate) Name input.form-control(type='text', [(ngModel)]='config.store.terminal.colorScheme.name') - .form-group + .mb-3 color-picker( [(model)]='config.store.terminal.colorScheme.foreground', (modelChange)='config.save()', @@ -69,11 +69,11 @@ color-scheme-preview([scheme]='config.store.terminal.colorScheme') .btn-toolbar.d-flex.mt-2(*ngIf='editing') - .mr-auto + .me-auto button.btn.btn-primary((click)='saveScheme()') i.fas.fa-check span(translate) Save - .mr-1 + .me-1 button.btn.btn-secondary((click)='cancelEditing()') i.fas.fa-times span(translate) Cancel @@ -81,13 +81,12 @@ hr.mt-3.mb-4 .input-group.mb-3 - .input-group-prepend - .input-group-text - i.fas.fa-fw.fa-search + .input-group-text + i.fas.fa-fw.fa-search input.form-control(type='search', [placeholder]='"Search color schemes"|translate', [(ngModel)]='filter') .body - .list-group-light.mb-3 + .list-group.list-group-light.mb-3 ng-container(*ngFor='let scheme of allColorSchemes') .list-group-item.list-group-item-action( [hidden]='filter && !scheme.name.toLowerCase().includes(filter.toLowerCase())', @@ -97,11 +96,11 @@ .d-flex.w-100.align-items-center i.fas.fa-fw([class.fa-check]='(currentCustomScheme || currentStockScheme) === scheme') - .ml-2 + .ms-2 - .mr-auto + .me-auto span {{scheme.name}} - .badge.badge-info.ml-2(*ngIf='customColorSchemes.includes(scheme)', translate) Custom + .badge.text-bg-info.ms-2(*ngIf='customColorSchemes.includes(scheme)', translate) Custom div .d-flex diff --git a/tabby-terminal/src/components/colorSchemeSettingsTab.component.ts b/tabby-terminal/src/components/colorSchemeSettingsTab.component.ts index c7ce09a1..b795d5c7 100644 --- a/tabby-terminal/src/components/colorSchemeSettingsTab.component.ts +++ b/tabby-terminal/src/components/colorSchemeSettingsTab.component.ts @@ -11,8 +11,8 @@ _('Search color schemes') /** @hidden */ @Component({ - template: require('./colorSchemeSettingsTab.component.pug'), - styles: [require('./colorSchemeSettingsTab.component.scss')], + templateUrl:'./colorSchemeSettingsTab.component.pug', + styleUrls: ['./colorSchemeSettingsTab.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush, }) export class ColorSchemeSettingsTabComponent { diff --git a/tabby-terminal/src/components/loginScriptsSettings.component.pug b/tabby-terminal/src/components/loginScriptsSettings.component.pug index 8505ddb7..1412236e 100644 --- a/tabby-terminal/src/components/loginScriptsSettings.component.pug +++ b/tabby-terminal/src/components/loginScriptsSettings.component.pug @@ -1,4 +1,5 @@ -div([sortablejs]='scripts') +div + //TODO ([sortablejs]='scripts') .input-group.flex-grow-1(*ngFor='let script of scripts') input.form-control( type='text', @@ -10,7 +11,7 @@ div([sortablejs]='scripts') placeholder='Send', [(ngModel)]='script.send' ) - .input-group-append.input-group-text.p-0.border-0 + .input-group-text.p-0.border-0 .hover-reveal(ngbDropdown) button.btn.btn-link.btn-sm(ngbDropdownToggle) i.fas.fa-fw.fa-cog diff --git a/tabby-terminal/src/components/loginScriptsSettings.component.ts b/tabby-terminal/src/components/loginScriptsSettings.component.ts index 2195e1f1..3aa7491d 100644 --- a/tabby-terminal/src/components/loginScriptsSettings.component.ts +++ b/tabby-terminal/src/components/loginScriptsSettings.component.ts @@ -7,7 +7,7 @@ import { LoginScript, LoginScriptsOptions } from '../middleware/loginScriptProce /** @hidden */ @Component({ selector: 'login-scripts-settings', - template: require('./loginScriptsSettings.component.pug'), + templateUrl:'./loginScriptsSettings.component.pug', }) export class LoginScriptsSettingsComponent { @Input() options: LoginScriptsOptions diff --git a/tabby-terminal/src/components/searchPanel.component.pug b/tabby-terminal/src/components/searchPanel.component.pug index 29922250..fb204474 100644 --- a/tabby-terminal/src/components/searchPanel.component.pug +++ b/tabby-terminal/src/components/searchPanel.component.pug @@ -9,8 +9,7 @@ (keyup.esc)='close.emit()', [placeholder]='"Search"|translate' ) - .input-group-append(*ngIf='state.resultCount > 0') - .input-group-text.result-counter {{state.resultIndex + 1}} / {{state.resultCount}} + .input-group-text.result-counter(*ngIf='state.resultCount > 0') {{state.resultIndex ?? 0 + 1}} / {{state.resultCount}} ng-container(*ngIf='state.resultCount > 0') button.btn.btn-link( @@ -27,7 +26,7 @@ ng-container(*ngIf='state.resultCount > 0') [fastHtmlBind]='icons.arrowDown' ) -.mr-2 +.me-2 button.btn.btn-link( (click)='options.caseSensitive = !options.caseSensitive; saveSearchOptions()', @@ -53,7 +52,7 @@ button.btn.btn-link( [fastHtmlBind]='icons.wholeWord' ) -.mr-2 +.me-2 button.btn.btn-link( (click)='close.emit()', diff --git a/tabby-terminal/src/components/searchPanel.component.ts b/tabby-terminal/src/components/searchPanel.component.ts index 138c9007..6fbfb2b9 100644 --- a/tabby-terminal/src/components/searchPanel.component.ts +++ b/tabby-terminal/src/components/searchPanel.component.ts @@ -5,8 +5,8 @@ import { ConfigService, NotificationsService, TranslateService } from 'tabby-cor @Component({ selector: 'search-panel', - template: require('./searchPanel.component.pug'), - styles: [require('./searchPanel.component.scss')], + templateUrl:'./searchPanel.component.pug', + styleUrls: ['./searchPanel.component.scss'], }) export class SearchPanelComponent { @Input() query: string diff --git a/tabby-terminal/src/components/streamProcessingSettings.component.ts b/tabby-terminal/src/components/streamProcessingSettings.component.ts index f04dcabe..b6d17eb5 100644 --- a/tabby-terminal/src/components/streamProcessingSettings.component.ts +++ b/tabby-terminal/src/components/streamProcessingSettings.component.ts @@ -6,7 +6,7 @@ import { StreamProcessingOptions } from '../middleware/streamProcessing' /** @hidden */ @Component({ selector: 'stream-processing-settings', - template: require('./streamProcessingSettings.component.pug'), + templateUrl:'./streamProcessingSettings.component.pug', }) export class StreamProcessingSettingsComponent { @Input() options: StreamProcessingOptions diff --git a/tabby-terminal/src/components/terminalSettingsTab.component.pug b/tabby-terminal/src/components/terminalSettingsTab.component.pug index 8a8d263d..9005f12b 100644 --- a/tabby-terminal/src/components/terminalSettingsTab.component.pug +++ b/tabby-terminal/src/components/terminalSettingsTab.component.pug @@ -168,35 +168,40 @@ div.mt-4 .form-line .header .title(translate) Terminal bell - .btn-group( - [(ngModel)]='config.store.terminal.bell', - (ngModelChange)='config.save()', - ngbRadioGroup - ) - label.btn.btn-secondary(ngbButtonLabel) - input( - type='radio', - ngbButton, - [value]='"off"' - ) + .btn-group + input.btn-check( + type='radio', + name='bell', + [(ngModel)]='config.store.terminal.bell', + (ngModelChange)='config.save()', + id='bellOff', + [value]='"off"' + ) + label.btn.btn-secondary(for='bellOff') span(translate) Off - label.btn.btn-secondary(ngbButtonLabel) - input( - type='radio', - ngbButton, - [value]='"visual"' - ) + input.btn-check( + type='radio', + name='bell', + [(ngModel)]='config.store.terminal.bell', + (ngModelChange)='config.save()', + id='bellVisual', + [value]='"visual"' + ) + label.btn.btn-secondary(for='bellVisual') span(translate) Visual - label.btn.btn-secondary(ngbButtonLabel) - input( - type='radio', - ngbButton, - [value]='"audible"' - ) + input.btn-check( + type='radio', + name='bell', + [(ngModel)]='config.store.terminal.bell', + (ngModelChange)='config.save()', + id='bellAudible', + [value]='"audible"' + ) + label.btn.btn-secondary(for='bellAudible') span(translate) Audible .alert.alert-info.d-flex.align-items-center(*ngIf='config.store.terminal.bell != "audible" && (config.store.terminal.profile || "").startsWith("wsl")') - .mr-auto(translate) WSL terminal bell can only be muted via Volume Mixer + .me-auto(translate) WSL terminal bell can only be muted via Volume Mixer button.btn.btn-secondary((click)='openWSLVolumeMixer()', translate) Show Mixer .mt-4 diff --git a/tabby-terminal/src/components/terminalSettingsTab.component.ts b/tabby-terminal/src/components/terminalSettingsTab.component.ts index 6ee2cbd7..f7c53485 100644 --- a/tabby-terminal/src/components/terminalSettingsTab.component.ts +++ b/tabby-terminal/src/components/terminalSettingsTab.component.ts @@ -3,7 +3,7 @@ import { ConfigService, HostAppService, Platform, PlatformService, altKeyName, m /** @hidden */ @Component({ - template: require('./terminalSettingsTab.component.pug'), + templateUrl:'./terminalSettingsTab.component.pug', }) export class TerminalSettingsTabComponent { Platform = Platform diff --git a/tabby-terminal/src/components/terminalToolbar.component.scss b/tabby-terminal/src/components/terminalToolbar.component.scss index 65b352f3..79bca1ce 100644 --- a/tabby-terminal/src/components/terminalToolbar.component.scss +++ b/tabby-terminal/src/components/terminalToolbar.component.scss @@ -1,8 +1,13 @@ :host { - background: #000000bf; padding: 5px 15px 5px 15px; display: flex; z-index: 3; + + ::ng-deep .btn { + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + } } .content { @@ -16,9 +21,3 @@ cursor: move; opacity: .3; } - -::ng-deep .btn { - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; -} diff --git a/tabby-terminal/src/components/terminalToolbar.component.ts b/tabby-terminal/src/components/terminalToolbar.component.ts index 37dd887b..c47059ba 100644 --- a/tabby-terminal/src/components/terminalToolbar.component.ts +++ b/tabby-terminal/src/components/terminalToolbar.component.ts @@ -6,8 +6,8 @@ import { BaseTerminalTabComponent } from '../api/baseTerminalTab.component' /** @hidden */ @Component({ selector: 'terminal-toolbar', - template: require('./terminalToolbar.component.pug'), - styles: [require('./terminalToolbar.component.scss')], + templateUrl:'./terminalToolbar.component.pug', + styleUrls: ['./terminalToolbar.component.scss'], }) export class TerminalToolbarComponent { @Input() tab: BaseTerminalTabComponent diff --git a/tabby-terminal/src/frontends/xtermFrontend.ts b/tabby-terminal/src/frontends/xtermFrontend.ts index 01e5d8cd..9668555c 100644 --- a/tabby-terminal/src/frontends/xtermFrontend.ts +++ b/tabby-terminal/src/frontends/xtermFrontend.ts @@ -1,6 +1,6 @@ import { BehaviorSubject, filter, firstValueFrom, takeUntil } from 'rxjs' import { Injector } from '@angular/core' -import { ConfigService, getCSSFontFamily, HostAppService, HotkeysService, Platform, PlatformService } from 'tabby-core' +import { ConfigService, getCSSFontFamily, HostAppService, HotkeysService, Platform, PlatformService, ThemesService } from 'tabby-core' import { Frontend, SearchOptions, SearchState } from './frontend' import { Terminal, ITheme } from 'xterm' import { FitAddon } from 'xterm-addon-fit' @@ -87,6 +87,7 @@ export class XTermFrontend extends Frontend { private hotkeysService: HotkeysService private platformService: PlatformService private hostApp: HostAppService + private themes: ThemesService constructor (injector: Injector) { super(injector) @@ -94,6 +95,7 @@ export class XTermFrontend extends Frontend { this.hotkeysService = injector.get(HotkeysService) this.platformService = injector.get(PlatformService) this.hostApp = injector.get(HostAppService) + this.themes = injector.get(ThemesService) this.xterm = new Terminal({ allowTransparency: true, @@ -363,7 +365,7 @@ export class XTermFrontend extends Frontend { foreground: scheme!.foreground, selectionBackground: scheme!.selection ?? '#88888888', selectionForeground: scheme!.selectionForeground ?? undefined, - background: config.terminal.background === 'colorScheme' ? scheme!.background : '#00000000', + background: !this.themes.findCurrentTheme().followsColorScheme && config.terminal.background === 'colorScheme' ? scheme!.background : '#00000000', cursor: scheme!.cursor, cursorAccent: scheme!.cursorAccent, } diff --git a/tabby-terminal/src/index.ts b/tabby-terminal/src/index.ts index 0b0689f6..99f3e225 100644 --- a/tabby-terminal/src/index.ts +++ b/tabby-terminal/src/index.ts @@ -1,5 +1,5 @@ import { NgModule } from '@angular/core' -import { BrowserModule } from '@angular/platform-browser' +import { CommonModule } from '@angular/common' import { FormsModule } from '@angular/forms' import { NgbModule } from '@ng-bootstrap/ng-bootstrap' import { ToastrModule } from 'ngx-toastr' @@ -37,7 +37,7 @@ import { TerminalCLIHandler } from './cli' /** @hidden */ @NgModule({ imports: [ - BrowserModule, + CommonModule, FormsModule, NgbModule, ToastrModule, @@ -61,12 +61,6 @@ import { TerminalCLIHandler } from './cli' { provide: CLIHandler, useClass: TerminalCLIHandler, multi: true }, ], - entryComponents: [ - AppearanceSettingsTabComponent, - ColorSchemeSettingsTabComponent, - TerminalSettingsTabComponent, - ColorSchemeSelectorComponent, - ], declarations: [ ColorPickerComponent, ColorSchemePreviewComponent, diff --git a/tabby-terminal/webpack.config.js b/tabby-terminal/webpack.config.js deleted file mode 100644 index e7c81a06..00000000 --- a/tabby-terminal/webpack.config.js +++ /dev/null @@ -1,15 +0,0 @@ -const config = require('../webpack.plugin.config') -module.exports = config({ - name: 'terminal', - dirname: __dirname, - externals: [ - 'opentype.js', - ], - rules: [ - { - test: /lib[\\/]xterm-addon-image-worker.js$/i, - type: 'asset/source', - }, - ], -}) -module.exports.resolve.modules.push('node_modules/xterm/src') diff --git a/tabby-terminal/webpack.config.mjs b/tabby-terminal/webpack.config.mjs new file mode 100644 index 00000000..8fc3d3d0 --- /dev/null +++ b/tabby-terminal/webpack.config.mjs @@ -0,0 +1,23 @@ +import * as path from 'path' +import * as url from 'url' +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)) + +import config from '../webpack.plugin.config.mjs' + +export default () => { + const cfg = config({ + name: 'terminal', + dirname: __dirname, + externals: [ + 'opentype.js', + ], + rules: [ + { + test: /lib[\\/]xterm-addon-image-worker.js$/i, + type: 'asset/source', + }, + ], + }) + cfg.resolve.modules.push('node_modules/xterm/src') + return cfg +} diff --git a/tabby-terminal/yarn.lock b/tabby-terminal/yarn.lock index 940cc7d2..8df4d50a 100644 --- a/tabby-terminal/yarn.lock +++ b/tabby-terminal/yarn.lock @@ -293,10 +293,10 @@ minimist@^1.2.6: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== -ngx-colors@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/ngx-colors/-/ngx-colors-3.0.4.tgz#69b760760e6e1e92fda5da51fa9b4bea7e555d40" - integrity sha512-peNvVpYkm8pe3nP8/TbaFFqo/RxZevGljKrzFa2g1hPPacdx+WdfwAN4uJfcGk7qTYbqlV64SSfb3Pnx8qjzDA== +ngx-colors@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/ngx-colors/-/ngx-colors-3.4.0.tgz#522d37563202053bd5b68ce8726afbfddf2f83a5" + integrity sha512-aJBpOC7t6DUDcEfkyFo6+6JzdHH82hCuj+zdqAmdrFTMyOVFZCw0FhCfcEuQRNsR1yYtyMRhSs6zUXr7oTiNlw== dependencies: tslib "^2.0.0" diff --git a/tabby-web-demo/src/index.ts b/tabby-web-demo/src/index.ts index 7c58e936..49c4ae5b 100644 --- a/tabby-web-demo/src/index.ts +++ b/tabby-web-demo/src/index.ts @@ -1,5 +1,5 @@ import { NgModule } from '@angular/core' -import { BrowserModule } from '@angular/platform-browser' +// import { BrowserModule } from '@angular/platform-browser' import { FormsModule } from '@angular/forms' import { NgbModule } from '@ng-bootstrap/ng-bootstrap' @@ -12,7 +12,7 @@ import { DemoProfilesService } from './profiles' /** @hidden */ @NgModule({ imports: [ - BrowserModule, + // BrowserModule, FormsModule, NgbModule, TabbyCorePlugin, @@ -21,9 +21,6 @@ import { DemoProfilesService } from './profiles' providers: [ { provide: ProfileProvider, useClass: DemoProfilesService, multi: true }, ], - entryComponents: [ - DemoTerminalTabComponent, - ], declarations: [ DemoTerminalTabComponent, ], diff --git a/tabby-web-demo/webpack.config.js b/tabby-web-demo/webpack.config.js deleted file mode 100644 index c2c908c3..00000000 --- a/tabby-web-demo/webpack.config.js +++ /dev/null @@ -1,5 +0,0 @@ -const config = require('../webpack.plugin.config') -module.exports = config({ - name: 'web-demo', - dirname: __dirname, -}) diff --git a/tabby-web-demo/webpack.config.mjs b/tabby-web-demo/webpack.config.mjs new file mode 100644 index 00000000..3b4735d2 --- /dev/null +++ b/tabby-web-demo/webpack.config.mjs @@ -0,0 +1,10 @@ +import * as path from 'path' +import * as url from 'url' +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)) + +import config from '../webpack.plugin.config.mjs' + +export default () => config({ + name: 'web-demo', + dirname: __dirname, +}) diff --git a/tabby-web/src/components/messageBoxModal.component.pug b/tabby-web/src/components/messageBoxModal.component.pug index 67ec43bd..cb418013 100644 --- a/tabby-web/src/components/messageBoxModal.component.pug +++ b/tabby-web/src/components/messageBoxModal.component.pug @@ -3,7 +3,7 @@ small {{options.detail}} .modal-footer - .ml-auto + .ms-auto button.btn( *ngFor='let button of options.buttons; index as i', [autofocus]='i === options.defaultId', diff --git a/tabby-web/src/components/messageBoxModal.component.ts b/tabby-web/src/components/messageBoxModal.component.ts index e58a100e..a0749dc3 100644 --- a/tabby-web/src/components/messageBoxModal.component.ts +++ b/tabby-web/src/components/messageBoxModal.component.ts @@ -4,7 +4,7 @@ import { BaseComponent, HotkeysService, MessageBoxOptions } from 'tabby-core' /** @hidden */ @Component({ - template: require('./messageBoxModal.component.pug'), + templateUrl:'./messageBoxModal.component.pug', }) export class MessageBoxModalComponent extends BaseComponent { @Input() options: MessageBoxOptions diff --git a/tabby-web/src/index.ts b/tabby-web/src/index.ts index 6fda15e4..067253ba 100644 --- a/tabby-web/src/index.ts +++ b/tabby-web/src/index.ts @@ -27,8 +27,5 @@ import './styles.scss' declarations: [ MessageBoxModalComponent, ], - entryComponents: [ - MessageBoxModalComponent, - ], }) export default class WebModule { } // eslint-disable-line @typescript-eslint/no-extraneous-class diff --git a/tabby-web/webpack.config.js b/tabby-web/webpack.config.js deleted file mode 100644 index 23ecfa61..00000000 --- a/tabby-web/webpack.config.js +++ /dev/null @@ -1,5 +0,0 @@ -const config = require('../webpack.plugin.config') -module.exports = config({ - name: 'web', - dirname: __dirname, -}) diff --git a/tabby-web/webpack.config.mjs b/tabby-web/webpack.config.mjs new file mode 100644 index 00000000..52596a62 --- /dev/null +++ b/tabby-web/webpack.config.mjs @@ -0,0 +1,10 @@ +import * as path from 'path' +import * as url from 'url' +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)) + +import config from '../webpack.plugin.config.mjs' + +export default () => config({ + name: 'web', + dirname: __dirname, +}) diff --git a/tsconfig.json b/tsconfig.json index 896dcabb..0c9ae68b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -36,7 +36,7 @@ "common*": [ "../../tabby-terminal/node_modules/xterm/src/common*" ], - "tabby-*": ["../../tabby-*/src"] + "tabby-*": ["../../tabby-*/src"], } }, "typeAcquisition": { diff --git a/typedoc.js b/typedoc.mjs similarity index 100% rename from typedoc.js rename to typedoc.mjs diff --git a/web/entry.preload.ts b/web/entry.preload.ts index ee0b9dd2..98eacf86 100644 --- a/web/entry.preload.ts +++ b/web/entry.preload.ts @@ -4,7 +4,6 @@ import '@fortawesome/fontawesome-free/css/solid.css' import '@fortawesome/fontawesome-free/css/brands.css' import '@fortawesome/fontawesome-free/css/regular.css' import '@fortawesome/fontawesome-free/css/fontawesome.css' -import 'ngx-toastr/toastr.css' import '../app/src/preload.scss' // Required before other imports diff --git a/web/webpack.config.js b/web/webpack.config.mjs similarity index 77% rename from web/webpack.config.js rename to web/webpack.config.mjs index e8d9ab42..dadba2d3 100644 --- a/web/webpack.config.js +++ b/web/webpack.config.mjs @@ -1,4 +1,7 @@ -const path = require('path') +import * as path from 'path' +import * as url from 'url' +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)) + const externals = {} for (const key of [ @@ -20,7 +23,7 @@ for (const key of [ externals[key] = `commonjs ${key}` } -module.exports = { +const config = { name: 'tabby-web-entry', target: 'web', entry: { @@ -43,10 +46,10 @@ module.exports = { modules: ['../app/node_modules', 'node_modules', '../node_modules', '../app/assets/'].map(x => path.join(__dirname, x)), extensions: ['.ts', '.js'], fallback: { - stream: require.resolve('stream-browserify'), - assert: require.resolve('assert/'), - constants: require.resolve('constants-browserify'), - util: require.resolve('util/'), + stream: path.join(__dirname, 'node_modules/stream-browserify/index.js'), + assert: path.join(__dirname, 'node_modules/assert/assert.js'), + constants: path.join(__dirname, 'node_modules/constants-browserify/constants.json'), + util: path.join(__dirname, 'node_modules/util/util.js'), }, }, module: { @@ -70,3 +73,5 @@ module.exports = { }, externals, } + +export default () => config diff --git a/webpack.config.js b/webpack.config.js deleted file mode 100644 index c8e152ce..00000000 --- a/webpack.config.js +++ /dev/null @@ -1,14 +0,0 @@ -const log = require('npmlog') -const { builtinPlugins } = require('./scripts/vars') - -const paths = [ - './app/webpack.config.js', - './app/webpack.main.config.js', - './web/webpack.config.js', - './tabby-web-demo/webpack.config.js', - ...builtinPlugins.map(x => `./${x}/webpack.config.js`), -] - -paths.forEach(x => log.info(`Using config: ${x}`)) - -module.exports = paths.map(x => require(x)) diff --git a/webpack.config.mjs b/webpack.config.mjs new file mode 100644 index 00000000..2088d2b8 --- /dev/null +++ b/webpack.config.mjs @@ -0,0 +1,15 @@ +import log from 'npmlog' +import { builtinPlugins } from './scripts/vars.mjs' + +const paths = [ + './app/webpack.config.mjs', + './app/webpack.config.main.mjs', + // './web/webpack.config.mjs', + // './tabby-web-demo/webpack.config.mjs', + ...builtinPlugins.map(x => `./${x}/webpack.config.mjs`), +] + +paths.forEach(x => log.info(`Using config: ${x}`)) + +const config = await Promise.all(paths.map(x => import(x).then(x => x.default()))) +export default () => config diff --git a/webpack.plugin.config.js b/webpack.plugin.config.mjs similarity index 70% rename from webpack.plugin.config.js rename to webpack.plugin.config.mjs index b9b847ff..db87b1fb 100644 --- a/webpack.plugin.config.js +++ b/webpack.plugin.config.mjs @@ -1,25 +1,39 @@ -const path = require('path') -const webpack = require('webpack') -const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin +import * as fs from 'fs' +import * as path from 'path' +import wp from 'webpack' +import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer' +import { AngularWebpackPlugin } from '@ngtools/webpack' const bundleAnalyzer = new BundleAnalyzerPlugin({ analyzerPort: 0, }) -module.exports = options => { +import { createEs2015LinkerPlugin } from '@angular/compiler-cli/linker/babel' +const linkerPlugin = createEs2015LinkerPlugin({ + linkerJitMode: true, + fileSystem: { + resolve: path.resolve, + exists: fs.existsSync, + dirname: path.dirname, + relative: path.relative, + readFile: fs.readFileSync, + }, +}) + +export default options => { const sourceMapOptions = { exclude: [/node_modules/, /vendor/], filename: '[file].map', moduleFilenameTemplate: `webpack-tabby-${options.name}:///[resource-path]`, } - let SourceMapDevToolPlugin = webpack.SourceMapDevToolPlugin + let devtoolPlugin = wp.SourceMapDevToolPlugin if (process.env.CI) { sourceMapOptions.append = '\n//# sourceMappingURL=../../../app.asar.unpacked/assets/webpack/[url]' } if (process.platform === 'win32' && process.env.TABBY_DEV) { - SourceMapDevToolPlugin = webpack.EvalSourceMapDevToolPlugin + devtoolPlugin = wp.EvalSourceMapDevToolPlugin } const isDev = !!process.env.TABBY_DEV @@ -70,21 +84,42 @@ module.exports = options => { }, }, { - test: /\.ts$/, - use: { - loader: 'ts-loader', - options: { - configFile: path.resolve(options.dirname, 'tsconfig.json'), - allowTsInNodeModules: true, - }, + test: /\.(m?)js$/, + loader: 'babel-loader', + options: { + plugins: [linkerPlugin], + compact: false, + cacheDirectory: true, + }, + resolve: { + fullySpecified: false, }, }, - { test: /\.pug$/, use: ['apply-loader', 'pug-loader'] }, + { + test: /\.ts$/, + use: [ + { + loader: '@ngtools/webpack', + }, + ], + }, + { + test: /\.pug$/, + use: [ + 'apply-loader', + { + loader: 'pug-loader', + options: { + pretty: true, + }, + }, + ], + }, { test: /\.scss$/, use: ['@tabby-gang/to-string-loader', 'css-loader', 'sass-loader'], include: /(theme.*|component)\.scss/ }, { test: /\.scss$/, use: ['style-loader', 'css-loader', 'sass-loader'], exclude: /(theme.*|component)\.scss/ }, { test: /\.css$/, use: ['@tabby-gang/to-string-loader', 'css-loader'], include: /component\.css/ }, { test: /\.css$/, use: ['style-loader', 'css-loader'], exclude: /component\.css/ }, - { test: /\.yaml$/, use: ['json-loader', 'yaml-loader'] }, + { test: /\.yaml$/, use: ['yaml-loader'] }, { test: /\.svg/, use: ['svg-inline-loader'] }, { test: /\.(eot|otf|woff|woff2|ogg)(\?v=[0-9]\.[0-9]\.[0-9])?$/, @@ -134,7 +169,12 @@ module.exports = options => { ...options.externals || [], ], plugins: [ - new SourceMapDevToolPlugin(sourceMapOptions), + new devtoolPlugin(sourceMapOptions), + new AngularWebpackPlugin({ + tsconfig: path.resolve(options.dirname, 'tsconfig.json'), + directTemplateLoading: false, + jitMode: true, + }) ], } if (process.env.PLUGIN_BUNDLE_ANALYZER === options.name) { diff --git a/yarn.lock b/yarn.lock index 3fc2d48a..f59edca8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15,281 +15,268 @@ "@jridgewell/gen-mapping" "^0.1.0" "@jridgewell/trace-mapping" "^0.3.9" -"@angular/animations@^12.0.0": - version "12.1.1" - resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-12.1.1.tgz#7da62f1c753e9d3e6f4ada9ef8f4dd97795265b5" - integrity sha512-79TfDx1AAxrVNM56oY+OwRpku9eCF6w3ko2DWDeQpgCvqM6/a53B5rPhz6yuwgadIqUdQH0T4CeE/v5hXYdOMA== +"@angular/animations@^15.1.3": + version "15.1.3" + resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-15.1.3.tgz#3b35675f7e7df2a8c8f35abf5617b8c7f533a2f0" + integrity sha512-qvOLYx8XWolwFWwYoPjt+jQLDFaCQEPjb26iczewiqd+xcAdYn4Tl10NCJtOsx+YfTdpWtKRzvxYr1JxnGQTdw== dependencies: - tslib "^2.2.0" + tslib "^2.3.0" -"@angular/cdk@^12.2.9": - version "12.2.13" - resolved "https://registry.yarnpkg.com/@angular/cdk/-/cdk-12.2.13.tgz#1fdbe814adfd6b4ff906c6d9c4c6df07b83f09d8" - integrity sha512-zSKRhECyFqhingIeyRInIyTvYErt4gWo+x5DQr0b7YLUbU8DZSwWnG4w76Ke2s4U8T7ry1jpJBHoX/e8YBpGMg== +"@angular/cdk@^15.1.3": + version "15.1.3" + resolved "https://registry.yarnpkg.com/@angular/cdk/-/cdk-15.1.3.tgz#71b5c9e7b7ef0ba0c648278e34536e0f8d06b7b7" + integrity sha512-FRb1ZirybQGVlRx34vsnkIyy4WHJlrRg2mwPeJ90b0DzIWuIZIiPYxxR2bAi/Si1IjnK8YBdacd5DXPdrW1jyw== dependencies: - tslib "^2.2.0" + tslib "^2.3.0" optionalDependencies: - parse5 "^5.0.0" + parse5 "^7.1.2" -"@angular/common@^12.0.0": - version "12.1.1" - resolved "https://registry.yarnpkg.com/@angular/common/-/common-12.1.1.tgz#34f63b339570699e1ba6968fd0afdee0cbd66fe3" - integrity sha512-NnRwGMatzjthvDQ4+8tm09Ak5i27Qga8x4BdzINN1RjLmzQ0zW00Mn2AUGYEDZHt9HXVHff5stsZGqj+Ne4QJw== +"@angular/common@^15.1.3": + version "15.1.3" + resolved "https://registry.yarnpkg.com/@angular/common/-/common-15.1.3.tgz#5ad482ff6da4b8820607180c50f208667c3be729" + integrity sha512-UjC0COaOcU1g/ODBBetv/BpdaFC/Y32DvXJ9qbD7kkwLwoqCjGOLDvtP36r9zEzPmH7oNkgNGDkgR3gyb82s5A== dependencies: - tslib "^2.2.0" + tslib "^2.3.0" -"@angular/compiler-cli@^12.0.0": - version "12.2.16" - resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-12.2.16.tgz#6d7f20081a5c7c7ac82ac4a65bd14cad3480bdb9" - integrity sha512-tlalh8SJvdCWbUPRUR5GamaP+wSc/GuCsoUZpSbcczGKgSlbaEVXUYtVXm8/wuT6Slk2sSEbRs7tXGF2i7qxVw== +"@angular/compiler-cli@^15.1.3": + version "15.1.3" + resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-15.1.3.tgz#c45dd2a50076af836b4f49de903a884048d79918" + integrity sha512-z5bGdQQcStXWPpb5vztqqUOET+vxw+GUFtfktYxV40kE2d1zHLZh93AGEnM1NnBaOz+9NZrX+dWoEyWmv/T2LQ== dependencies: - "@babel/core" "^7.8.6" - "@babel/types" "^7.8.6" - canonical-path "1.0.0" + "@babel/core" "7.19.3" + "@jridgewell/sourcemap-codec" "^1.4.14" chokidar "^3.0.0" convert-source-map "^1.5.1" dependency-graph "^0.11.0" - magic-string "^0.25.0" - minimist "^1.2.0" + magic-string "^0.27.0" reflect-metadata "^0.1.2" semver "^7.0.0" - source-map "^0.6.1" - sourcemap-codec "^1.4.8" - tslib "^2.2.0" - yargs "^17.0.0" + tslib "^2.3.0" + yargs "^17.2.1" -"@angular/compiler@^12.0.0": - version "12.1.1" - resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-12.1.1.tgz#ec8ae93fa905f6f71c748ba250be8f4d58e31605" - integrity sha512-QV56c+A18vdY8AB/SoWq0UkHhJxYDWY+VUY75RM2dxcsXoNeO5FTCjBRkA7yMiX6Q6cahH2ivC7tmqVU2mYHuA== +"@angular/compiler@^15.1.3": + version "15.1.3" + resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-15.1.3.tgz#7972d7dec2462e3a2a9fa256902363a716ab2f8c" + integrity sha512-CxEpm5Z3EpjeGNoWKtcHOrf2IQTSckpAEFwsRrADP2nqcXXYp/IjIHi+PUTjLhjrOEbukH9zreHsL5BoIQhgUQ== dependencies: - tslib "^2.2.0" + tslib "^2.3.0" -"@angular/core@^12.0.0": - version "12.1.1" - resolved "https://registry.yarnpkg.com/@angular/core/-/core-12.1.1.tgz#448cdc0927bae1420934f6463ac64414d00bc3b0" - integrity sha512-7Q4na8zCXi4ITBG8kgbS+vnnVK0GDU2WXU80/il096+8YPFKfj6MyDWZH79KA3jrIg9/yhLwSQx8x8wnj8dqBA== +"@angular/core@^15.1.3": + version "15.1.3" + resolved "https://registry.yarnpkg.com/@angular/core/-/core-15.1.3.tgz#08a19d2427fffba8d75bb622f5db0b1406937877" + integrity sha512-rad9OYnaoRnXBztOBXsiD59VvOZTpsvO3sWx6KndytQFceFfkL722bF2l2LARN+R3IWDOwRap46HOtc0O0N+sw== dependencies: - tslib "^2.2.0" + tslib "^2.3.0" -"@angular/forms@^12.0.0": - version "12.1.1" - resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-12.1.1.tgz#b076cc4cf9a202ab08038d0e6038c2b7f68af79e" - integrity sha512-up5P9jdqsPjrX3YgNMSIkTCwRzVNJbAlDiKrnww7pt5RL2fZGq+x/ddvtTSjdne9oknRKitADFkjuPozPH+LOg== +"@angular/forms@^15.1.3": + version "15.1.3" + resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-15.1.3.tgz#7dcbb2305fa5901b36dd8d3fd0ece2374bdce54d" + integrity sha512-vEgiZBk3rGGp4tBQHl9EaspEjYh70lkz6/zYreObTbMdCB54bkbl+jn+JbQyFj+TPfukiumtiG3/477vKzYnSg== dependencies: - tslib "^2.2.0" + tslib "^2.3.0" -"@angular/platform-browser-dynamic@^12.0.0": - version "12.1.1" - resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-12.1.1.tgz#d86db1da71be64f75c51b076942b0f65b441a404" - integrity sha512-x8bIQzRvrdA/LfnIp5/Fo15BqD7g5j+XQe/KyWM+jBnpKr9queet0xvSAWD+KGkdrebI1xIgNtNNTxPCxREbiQ== +"@angular/platform-browser-dynamic@^15.1.3": + version "15.1.3" + resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-15.1.3.tgz#f1d327c38643b08ac85b15e77528b6717ab7a243" + integrity sha512-lUfHmO+x3goSL1KnlAbekieKpak2KVGcOcAzOVOIMFt1SyWPBHq0NyyPOH2PUAnjPRbvCLEs2casjFggk0JzsQ== dependencies: - tslib "^2.2.0" + tslib "^2.3.0" -"@angular/platform-browser@^12.0.0": - version "12.1.1" - resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-12.1.1.tgz#ba6243d77dbdbfb68c3f95a8fa2fd321b812e6d1" - integrity sha512-R78K0DYxplYUvctq/7MvoBjuMDgMNrL1h8Bov0g7lN5hQWBQwBjl//CiJgx8H7uSiba9DQ0Jwu5Xxvkzkr8ggA== +"@angular/platform-browser@^15.1.3": + version "15.1.3" + resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-15.1.3.tgz#c35912e419baf74e73f90f8cf80fbe4af63f1deb" + integrity sha512-WJBN3klssfcRGKY2L2DIpNGbaMQfi2X1le1ZXQAnsfECQ/pua+lFstJUT+RP+Bx4X8icuDggKkS/JPOiBhxARw== dependencies: - tslib "^2.2.0" + tslib "^2.3.0" -"@babel/code-frame@^7.0.0": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" - integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== +"@babel/code-frame@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== dependencies: - "@babel/highlight" "^7.14.5" + "@babel/highlight" "^7.18.6" -"@babel/code-frame@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" - integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== - dependencies: - "@babel/highlight" "^7.16.7" +"@babel/compat-data@^7.20.5": + version "7.20.14" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.14.tgz#4106fc8b755f3e3ee0a0a7c27dde5de1d2b2baf8" + integrity sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw== -"@babel/compat-data@^7.17.10": - version "7.18.5" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.5.tgz#acac0c839e317038c73137fbb6ef71a1d6238471" - integrity sha512-BxhE40PVCBxVEJsSBhB6UWyAuqJRxGsAw8BdHMJ3AKGydcwuWW4kOO3HmqBQAdcq/OP+/DlTVxLvsCzRTnZuGg== - -"@babel/core@^7.8.6": - version "7.18.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.5.tgz#c597fa680e58d571c28dda9827669c78cdd7f000" - integrity sha512-MGY8vg3DxMnctw0LdvSEojOsumc70g0t18gNyUdAZqB1Rpd1Bqo/svHGvt+UJ6JcGX+DIekGFDxxIWofBxLCnQ== +"@babel/core@7.19.3": + version "7.19.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.19.3.tgz#2519f62a51458f43b682d61583c3810e7dcee64c" + integrity sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ== dependencies: "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.18.2" - "@babel/helper-compilation-targets" "^7.18.2" - "@babel/helper-module-transforms" "^7.18.0" - "@babel/helpers" "^7.18.2" - "@babel/parser" "^7.18.5" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.18.5" - "@babel/types" "^7.18.4" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.19.3" + "@babel/helper-compilation-targets" "^7.19.3" + "@babel/helper-module-transforms" "^7.19.0" + "@babel/helpers" "^7.19.0" + "@babel/parser" "^7.19.3" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.19.3" + "@babel/types" "^7.19.3" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.1" semver "^6.3.0" -"@babel/generator@^7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.2.tgz#33873d6f89b21efe2da63fe554460f3df1c5880d" - integrity sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw== +"@babel/generator@^7.19.3", "@babel/generator@^7.20.7": + version "7.20.14" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.14.tgz#9fa772c9f86a46c6ac9b321039400712b96f64ce" + integrity sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg== dependencies: - "@babel/types" "^7.18.2" - "@jridgewell/gen-mapping" "^0.3.0" + "@babel/types" "^7.20.7" + "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" -"@babel/helper-compilation-targets@^7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz#67a85a10cbd5fc7f1457fec2e7f45441dc6c754b" - integrity sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ== +"@babel/helper-compilation-targets@^7.19.3": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz#a6cd33e93629f5eb473b021aac05df62c4cd09bb" + integrity sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ== dependencies: - "@babel/compat-data" "^7.17.10" - "@babel/helper-validator-option" "^7.16.7" - browserslist "^4.20.2" + "@babel/compat-data" "^7.20.5" + "@babel/helper-validator-option" "^7.18.6" + browserslist "^4.21.3" + lru-cache "^5.1.1" semver "^6.3.0" -"@babel/helper-environment-visitor@^7.16.7", "@babel/helper-environment-visitor@^7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz#8a6d2dedb53f6bf248e31b4baf38739ee4a637bd" - integrity sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ== +"@babel/helper-environment-visitor@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" + integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== -"@babel/helper-function-name@^7.17.9": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz#136fcd54bc1da82fcb47565cf16fd8e444b1ff12" - integrity sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg== +"@babel/helper-function-name@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c" + integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== dependencies: - "@babel/template" "^7.16.7" - "@babel/types" "^7.17.0" + "@babel/template" "^7.18.10" + "@babel/types" "^7.19.0" -"@babel/helper-hoist-variables@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" - integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== dependencies: - "@babel/types" "^7.16.7" + "@babel/types" "^7.18.6" -"@babel/helper-module-imports@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" - integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== +"@babel/helper-module-imports@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" + integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== dependencies: - "@babel/types" "^7.16.7" + "@babel/types" "^7.18.6" -"@babel/helper-module-transforms@^7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz#baf05dec7a5875fb9235bd34ca18bad4e21221cd" - integrity sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA== +"@babel/helper-module-transforms@^7.19.0": + version "7.20.11" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz#df4c7af713c557938c50ea3ad0117a7944b2f1b0" + integrity sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg== dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-simple-access" "^7.17.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/helper-validator-identifier" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.18.0" - "@babel/types" "^7.18.0" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.20.2" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.19.1" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.20.10" + "@babel/types" "^7.20.7" -"@babel/helper-simple-access@^7.17.7": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz#4dc473c2169ac3a1c9f4a51cfcd091d1c36fcff9" - integrity sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ== +"@babel/helper-simple-access@^7.20.2": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" + integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== dependencies: - "@babel/types" "^7.18.2" + "@babel/types" "^7.20.2" -"@babel/helper-split-export-declaration@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" - integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== dependencies: - "@babel/types" "^7.16.7" + "@babel/types" "^7.18.6" -"@babel/helper-validator-identifier@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz#d0f0e277c512e0c938277faa85a3968c9a44c0e8" - integrity sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg== +"@babel/helper-string-parser@^7.19.4": + version "7.19.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" + integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== "@babel/helper-validator-identifier@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== -"@babel/helper-validator-option@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" - integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== +"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== -"@babel/helpers@^7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.2.tgz#970d74f0deadc3f5a938bfa250738eb4ac889384" - integrity sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg== - dependencies: - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.18.2" - "@babel/types" "^7.18.2" +"@babel/helper-validator-option@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" + integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== -"@babel/highlight@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" - integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== +"@babel/helpers@^7.19.0": + version "7.20.13" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.13.tgz#e3cb731fb70dc5337134cadc24cbbad31cc87ad2" + integrity sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg== dependencies: - "@babel/helper-validator-identifier" "^7.14.5" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.20.13" + "@babel/types" "^7.20.7" + +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/highlight@^7.16.7": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.17.12.tgz#257de56ee5afbd20451ac0a75686b6b404257351" - integrity sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/parser@^7.16.7", "@babel/parser@^7.18.5": - version "7.18.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.5.tgz#337062363436a893a2d22faa60be5bb37091c83c" - integrity sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw== +"@babel/parser@^7.19.3", "@babel/parser@^7.20.13", "@babel/parser@^7.20.7": + version "7.20.15" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.15.tgz#eec9f36d8eaf0948bb88c87a46784b5ee9fd0c89" + integrity sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg== "@babel/parser@^7.6.0", "@babel/parser@^7.9.6": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.7.tgz#d372dda9c89fcec340a82630a9f533f2fe15877e" integrity sha512-sR4eaSrnM7BV7QPzGfEX5paG/6wrZM3I0HDzfIAK06ESvo9oy3xBuVBxE3MbQaKNhvg8g/ixjMWo2CGpzpHsDA== -"@babel/template@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" - integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== +"@babel/template@^7.18.10", "@babel/template@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" + integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/parser" "^7.16.7" - "@babel/types" "^7.16.7" + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" -"@babel/traverse@^7.18.0", "@babel/traverse@^7.18.2", "@babel/traverse@^7.18.5": - version "7.18.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.5.tgz#94a8195ad9642801837988ab77f36e992d9a20cd" - integrity sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA== +"@babel/traverse@^7.19.3", "@babel/traverse@^7.20.10", "@babel/traverse@^7.20.13": + version "7.20.13" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.13.tgz#817c1ba13d11accca89478bd5481b2d168d07473" + integrity sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ== dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.18.2" - "@babel/helper-environment-visitor" "^7.18.2" - "@babel/helper-function-name" "^7.17.9" - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/parser" "^7.18.5" - "@babel/types" "^7.18.4" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.20.7" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.20.13" + "@babel/types" "^7.20.7" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.16.7", "@babel/types@^7.17.0", "@babel/types@^7.18.0", "@babel/types@^7.18.2", "@babel/types@^7.18.4", "@babel/types@^7.8.6": - version "7.18.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.4.tgz#27eae9b9fd18e9dccc3f9d6ad051336f307be354" - integrity sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw== +"@babel/types@^7.18.6", "@babel/types@^7.19.0", "@babel/types@^7.19.3", "@babel/types@^7.20.2", "@babel/types@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.7.tgz#54ec75e252318423fc07fb644dc6a58a64c09b7f" + integrity sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg== dependencies: - "@babel/helper-validator-identifier" "^7.16.7" + "@babel/helper-string-parser" "^7.19.4" + "@babel/helper-validator-identifier" "^7.19.1" to-fast-properties "^2.0.0" "@babel/types@^7.6.1", "@babel/types@^7.9.6": @@ -320,21 +307,20 @@ resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== -"@electron/get@^1.14.1": - version "1.14.1" - resolved "https://registry.yarnpkg.com/@electron/get/-/get-1.14.1.tgz#16ba75f02dffb74c23965e72d617adc721d27f40" - integrity sha512-BrZYyL/6m0ZXz/lDxy/nlVhQz+WF+iPS6qXolEU8atw7h6v1aYkjwJZ63m+bJMBTxDE66X+r2tPS4a/8C82sZw== +"@electron/get@^2.0.0": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@electron/get/-/get-2.0.2.tgz#ae2a967b22075e9c25aaf00d5941cd79c21efd7e" + integrity sha512-eFZVFoRXb3GFGd7Ak7W4+6jBl9wBtiZ4AaYOse97ej6mKj5tkyO0dUnUChs1IhJZtx1BENo4/p4WUTXpi6vT+g== dependencies: debug "^4.1.1" env-paths "^2.2.0" fs-extra "^8.1.0" - got "^9.6.0" + got "^11.8.5" progress "^2.0.3" semver "^6.2.0" sumchecker "^3.0.1" optionalDependencies: global-agent "^3.0.0" - global-tunnel-ng "^2.7.1" "@electron/universal@1.2.1": version "1.2.1" @@ -369,11 +355,6 @@ resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-6.2.0.tgz#ba3510825b332816fe7190f28827f8cb33a298b5" integrity sha512-CNR7qRIfCwWHNN7FnKUniva94edPdyQzil/zCwk3v6k4R6rR2Fr8i4s3PM7n/lyfPA6Zfko9z5WDzFxG9SW1uQ== -"@gar/promisify@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.2.tgz#30aa825f11d438671d585bd44e7fd564535fc210" - integrity sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw== - "@gar/promisify@^1.1.3": version "1.1.3" resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" @@ -406,7 +387,7 @@ "@jridgewell/set-array" "^1.0.0" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/gen-mapping@^0.3.0": +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": version "0.3.2" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== @@ -438,7 +419,7 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/sourcemap-codec@^1.4.10": +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.14": version "1.4.14" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== @@ -475,12 +456,17 @@ lodash "^4.17.15" tmp-promise "^3.0.2" -"@ng-bootstrap/ng-bootstrap@^10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-10.0.0.tgz#6022927bac7029bdd12d7f1e10b5b20074db06dc" - integrity sha512-Sz+QaxjuyJYJ+zyUbf0TevgcgVesCPQiiFiggEzxKjzY5R+Hvq3YgryLdXf2r/ryePL+C3FXCcmmKpTM5bfczQ== +"@ng-bootstrap/ng-bootstrap@^14.0.1": + version "14.0.1" + resolved "https://registry.yarnpkg.com/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-14.0.1.tgz#09f93058d3c4a2f4e751c8b546e01f6d2524bd05" + integrity sha512-JF4U4IIix+g6VBFfG8stf0Un5K//ypoN+pTuRs6kjUhsHBsa2m7yKE6bCe3fMhatFZFr2fcSswDzRUnAUiHhWg== dependencies: - tslib "^2.1.0" + tslib "^2.3.0" + +"@ngtools/webpack@^15.1.4": + version "15.1.4" + resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-15.1.4.tgz#8535324ef9fdffdee606513b7244b859b6e549c5" + integrity sha512-IvKXK8AvPlLkP99Uf0RL1EHlcsXNQd86II9HsLjupUtmFC/pPuDWrRFMP9bjWUMh2ZeYpgUeEAbcCH3doSrdIA== "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -503,14 +489,6 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@npmcli/fs@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.0.0.tgz#589612cfad3a6ea0feafcb901d29c63fd52db09f" - integrity sha512-8ltnOpRR/oJbOp8vaGUnipOi3bqkcW+sLHFlyXIr08OGHmVJLB1Hn7QtGXbYcpVtH1gAYZTlmDXtE4YV0+AMMQ== - dependencies: - "@gar/promisify" "^1.0.1" - semver "^7.3.5" - "@npmcli/fs@^2.1.0": version "2.1.2" resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.2.tgz#a9e2541a4a2fec2e69c29b35e6060973da79b865" @@ -519,14 +497,6 @@ "@gar/promisify" "^1.1.3" semver "^7.3.5" -"@npmcli/move-file@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" - integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== - dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" - "@npmcli/move-file@^2.0.0": version "2.0.1" resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-2.0.1.tgz#26f6bdc379d87f75e55739bab89db525b06100e4" @@ -552,6 +522,11 @@ resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== +"@popperjs/core@^2.11.6": + version "2.11.6" + resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.6.tgz#cee20bd55e68a1720bdab363ecf0c821ded4cd45" + integrity sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw== + "@sentry/browser@6.7.1": version "6.7.1" resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-6.7.1.tgz#e01144a08984a486ecc91d7922cc457e9c9bd6b7" @@ -656,23 +631,11 @@ "@sentry/types" "6.7.1" tslib "^1.9.3" -"@sindresorhus/is@^0.14.0": - version "0.14.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" - integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== - "@sindresorhus/is@^4.0.0": version "4.0.0" resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.0.0.tgz" integrity sha512-FyD2meJpDPjyNQejSjvnhpgI/azsQkA4lGbuu5BQZfjvJ9cbRZXzeWL2HceCekW4lixO9JPesIIQkSoLjeJHNQ== -"@szmarczak/http-timer@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" - integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== - dependencies: - defer-to-connect "^1.0.1" - "@szmarczak/http-timer@^4.0.5": version "4.0.5" resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz" @@ -687,11 +650,6 @@ dependencies: loader-utils "^1.0.0" -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - "@tootallnate/once@2": version "2.0.0" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" @@ -818,11 +776,6 @@ resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== -"@types/minimist@^1.2.0": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.1.tgz#283f669ff76d7b8260df8ab7a4262cc83d988256" - integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg== - "@types/ms@*": version "0.7.31" resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197" @@ -843,11 +796,6 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.26.tgz#63d204d136c9916fb4dcd1b50f9740fe86884e47" integrity sha512-GZ7bu5A6+4DtG7q9GsoHXy3ALcgeIHP4NnL0Vv2wu0uUB/yQex26v0tf6/na1mm0+bS9Uw+0DFex7aaKr2qawQ== -"@types/normalize-package-data@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" - integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== - "@types/parse5@^5": version "5.0.3" resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-5.0.3.tgz#e7b5aebbac150f8b5fdd4a46e7f0bd8e65e19109" @@ -873,11 +821,6 @@ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== -"@types/sortablejs@^1.15.0": - version "1.15.0" - resolved "https://registry.yarnpkg.com/@types/sortablejs/-/sortablejs-1.15.0.tgz#695e481752e2a0a311c5e73b51d5f666fc202f93" - integrity sha512-qrhtM7M41EhH4tZQTNw2/RJkxllBx3reiJpTbgWCM2Dx0U1sZ6LwKp9lfNln9uqE26ZMKUaPEYaD4rzvOWYtZw== - "@types/verror@^1.10.3": version "1.10.6" resolved "https://registry.yarnpkg.com/@types/verror/-/verror-1.10.6.tgz#3e600c62d210c5826460858f84bcbb65805460bb" @@ -1111,20 +1054,20 @@ "@webassemblyjs/ast" "1.11.1" "@xtuc/long" "4.2.2" -"@webpack-cli/configtest@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-2.0.0.tgz#5e1bc37064c7d00e1330641fa523f8ff85a39513" - integrity sha512-war4OU8NGjBqU3DP3bx6ciODXIh7dSXcpQq+P4K2Tqyd8L5OjZ7COx9QXx/QdCIwL2qoX09Wr4Cwf7uS4qdEng== +"@webpack-cli/configtest@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-2.0.1.tgz#a69720f6c9bad6aef54a8fa6ba9c3533e7ef4c7f" + integrity sha512-njsdJXJSiS2iNbQVS0eT8A/KPnmyH4pv1APj2K0d1wrZcBLw+yppxOy4CGqa0OxDJkzfL/XELDhD8rocnIwB5A== -"@webpack-cli/info@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-2.0.0.tgz#5a58476b129ee9b462117b23393596e726bf3b80" - integrity sha512-NNxDgbo4VOkNhOlTgY0Elhz3vKpOJq4/PKeKg7r8cmYM+GQA9vDofLYyup8jS6EpUvhNmR30cHTCEIyvXpskwA== +"@webpack-cli/info@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-2.0.1.tgz#eed745799c910d20081e06e5177c2b2569f166c0" + integrity sha512-fE1UEWTwsAxRhrJNikE7v4EotYflkEhBL7EbajfkPlf6E37/2QshOy/D48Mw8G5XMFlQtS6YV42vtbG9zBpIQA== -"@webpack-cli/serve@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.0.tgz#f08ea194e01ed45379383a8886e8c85a65a5f26a" - integrity sha512-Rumq5mHvGXamnOh3O8yLk1sjx8dB30qF1OeR6VC00DIR6SLJ4bwwUGKC4pE7qBFoQyyh0H9sAg3fikYgAqVR0w== +"@webpack-cli/serve@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.1.tgz#34bdc31727a1889198855913db2f270ace6d7bf8" + integrity sha512-0G7tNyS+yW8TdgHwZKlDWYXFA6OJQnoLCQvYKkQP0Q2X205PSQ6RNUj0M+1OB/9gRQaUZ/ccYfaxd0nhaWKfjw== "@xtuc/ieee754@^1.2.0": version "1.2.0" @@ -1149,10 +1092,10 @@ JSONStream@~1.3.1: jsonparse "^1.2.0" through ">=2.2.7 <3" -abab@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" - integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== +abab@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" + integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== abbrev@1: version "1.1.1" @@ -1220,15 +1163,6 @@ agentkeepalive@^3.3.0: dependencies: humanize-ms "^1.2.1" -agentkeepalive@^4.1.3: - version "4.1.4" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.1.4.tgz#d928028a4862cb11718e55227872e842a44c945b" - integrity sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ== - dependencies: - debug "^4.1.0" - depd "^1.1.2" - humanize-ms "^1.2.1" - agentkeepalive@^4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.2.1.tgz#a7975cbb9f83b367f06c90cc51ff28fe7d499717" @@ -1246,11 +1180,25 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" +ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" + ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== +ajv-keywords@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" + integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== + dependencies: + fast-deep-equal "^3.1.3" + ajv@^4.9.1: version "4.11.8" resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" @@ -1269,6 +1217,16 @@ ajv@^6.10.0, ajv@^6.12.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^8.0.0, ajv@^8.8.0: + version "8.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + ansi-align@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz" @@ -1393,14 +1351,6 @@ archy@~1.0.0: resolved "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz" integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= -are-we-there-yet@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c" - integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - are-we-there-yet@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz#ba20bd6b553e31d62fc8c31bd23d22b95734390d" @@ -1460,11 +1410,6 @@ array.prototype.flat@^1.2.5: es-abstract "^1.20.4" es-shim-unscopables "^1.0.0" -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= - asap@^2.0.0: version "2.0.5" resolved "https://registry.npmjs.org/asap/-/asap-2.0.5.tgz" @@ -1541,11 +1486,6 @@ async-exit-hook@^2.0.1: resolved "https://registry.yarnpkg.com/async-exit-hook/-/async-exit-hook-2.0.1.tgz#8bd8b024b0ec9b1c01cccb9af9db29bd717dfaf3" integrity sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw== -async-foreach@^0.1.3: - version "0.1.3" - resolved "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz" - integrity sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI= - async@^3.2.3: version "3.2.4" resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" @@ -1594,6 +1534,14 @@ axios@^0.27.2: follow-redirects "^1.14.9" form-data "^4.0.0" +babel-loader@^9.1.2: + version "9.1.2" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-9.1.2.tgz#a16a080de52d08854ee14570469905a5fc00d39c" + integrity sha512-mN14niXW43tddohGl8HPu5yfQq70iUThvFL/4QzESA7GcZoC0eVOhvWdQ8+3UlSjaDE9MVtsW9mxDY07W7VpVA== + dependencies: + find-cache-dir "^3.3.2" + schema-utils "^4.0.0" + babel-runtime@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" @@ -1808,15 +1756,15 @@ browserslist@^4.14.5: node-releases "^2.0.6" update-browserslist-db "^1.0.9" -browserslist@^4.20.2: - version "4.21.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.0.tgz#7ab19572361a140ecd1e023e2c1ed95edda0cefe" - integrity sha512-UQxE0DIhRB5z/zDz9iA03BOfxaN2+GQdBYH/2WrSIWEUrnpzTPJbhqt+umq6r3acaPRTW1FNTkrcp0PXgtFkvA== +browserslist@^4.21.3: + version "4.21.5" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" + integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== dependencies: - caniuse-lite "^1.0.30001358" - electron-to-chromium "^1.4.164" - node-releases "^2.0.5" - update-browserslist-db "^1.0.0" + caniuse-lite "^1.0.30001449" + electron-to-chromium "^1.4.284" + node-releases "^2.0.8" + update-browserslist-db "^1.0.10" buffer-alloc-unsafe@^1.1.0: version "1.1.0" @@ -1910,30 +1858,6 @@ builtins@^1.0.3: resolved "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz" integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= -cacache@^15.2.0: - version "15.3.0" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" - integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== - dependencies: - "@npmcli/fs" "^1.0.0" - "@npmcli/move-file" "^1.0.1" - chownr "^2.0.0" - fs-minipass "^2.0.0" - glob "^7.1.4" - infer-owner "^1.0.4" - lru-cache "^6.0.0" - minipass "^3.1.1" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" - mkdirp "^1.0.3" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^8.0.1" - tar "^6.0.2" - unique-filename "^1.1.1" - cacache@^16.1.0: version "16.1.3" resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.3.tgz#a02b9f34ecfaf9a78c9f4bc16fceb94d5d67a38e" @@ -1982,19 +1906,6 @@ cacheable-lookup@^5.0.3: resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz" integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== -cacheable-request@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" - integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^3.0.0" - lowercase-keys "^2.0.0" - normalize-url "^4.1.0" - responselike "^1.0.2" - cacheable-request@^7.0.1: version "7.0.1" resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.1.tgz" @@ -2008,6 +1919,19 @@ cacheable-request@^7.0.1: normalize-url "^4.1.0" responselike "^2.0.0" +cacheable-request@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27" + integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^4.0.0" + lowercase-keys "^2.0.0" + normalize-url "^6.0.1" + responselike "^2.0.0" + call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" @@ -2042,15 +1966,6 @@ camelcase-keys@^2.0.0: camelcase "^2.0.0" map-obj "^1.0.0" -camelcase-keys@^6.2.2: - version "6.2.2" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" - integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== - dependencies: - camelcase "^5.3.1" - map-obj "^4.0.0" - quick-lru "^4.0.1" - camelcase@^2.0.0: version "2.1.1" resolved "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz" @@ -2061,25 +1976,20 @@ camelcase@^4.0.0, camelcase@^4.1.0: resolved "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz" integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= -camelcase@^5.0.0, camelcase@^5.3.1: +camelcase@^5.0.0: version "5.3.1" resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -caniuse-lite@^1.0.30001358: - version "1.0.30001359" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001359.tgz#a1c1cbe1c2da9e689638813618b4219acbd4925e" - integrity sha512-Xln/BAsPzEuiVLgJ2/45IaqD9jShtk3Y33anKb4+yLwQzws3+v6odKfpgES/cDEaZMLzSChpIGdbOYtH9MyuHw== - caniuse-lite@^1.0.30001400: version "1.0.30001414" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001414.tgz#5f1715e506e71860b4b07c50060ea6462217611e" integrity sha512-t55jfSaWjCdocnFdKQoO+d2ct9C59UZg4dY3OnUlSZ447r8pUtIKdp0hpAzrGFultmTC+Us+KpKi4GZl/LXlFg== -canonical-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/canonical-path/-/canonical-path-1.0.0.tgz#fcb470c23958def85081856be7a86e904f180d1d" - integrity sha512-feylzsbDxi1gPZ1IjystzIQZagYYLvfKrSuygUCgf7z6x790VEzze5QEkdSV1U58RA7Hi0+v6fv4K54atOzATg== +caniuse-lite@^1.0.30001449: + version "1.0.30001450" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001450.tgz#022225b91200589196b814b51b1bbe45144cf74f" + integrity sha512-qMBmvmQmFXaSxexkjjfMvD5rnDL0+m+dUMZKoDYsGG8iZN29RuYh9eRoMvKsT6uMAWlyUUGDEQGJJYjzCIO9ew== capture-stack-trace@^1.0.0: version "1.0.1" @@ -2111,7 +2021,7 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -2126,7 +2036,7 @@ character-parser@^2.1.1, character-parser@^2.2.0: dependencies: is-regex "^1.0.3" -chokidar@^3.0.0: +"chokidar@>=3.0.0 <4.0.0", chokidar@^3.0.0: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -2316,7 +2226,7 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-support@^1.1.2, color-support@^1.1.3: +color-support@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== @@ -2373,6 +2283,11 @@ commander@^9.4.0, commander@^9.4.1: resolved "https://registry.yarnpkg.com/commander/-/commander-9.4.1.tgz#d1dd8f2ce6faf93147295c0df13c7c21141cfbdd" integrity sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw== +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== + compare-version@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/compare-version/-/compare-version-0.1.2.tgz#0162ec2d9351f5ddd59a9202cba935366a725080" @@ -2408,14 +2323,6 @@ conf@^1.0.0: pkg-up "^2.0.0" write-file-atomic "^2.3.0" -config-chain@^1.1.11: - version "1.1.12" - resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz" - integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - config-chain@~1.1.11: version "1.1.11" resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.11.tgz" @@ -2617,19 +2524,19 @@ crypto-random-string@^1.0.0: resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz" integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= -css-loader@^6.7.1: - version "6.7.1" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.7.1.tgz#e98106f154f6e1baf3fc3bc455cb9981c1d5fd2e" - integrity sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw== +css-loader@^6.7.3: + version "6.7.3" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.7.3.tgz#1e8799f3ccc5874fdd55461af51137fcc5befbcd" + integrity sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ== dependencies: icss-utils "^5.1.0" - postcss "^8.4.7" + postcss "^8.4.19" postcss-modules-extract-imports "^3.0.0" postcss-modules-local-by-default "^4.0.0" postcss-modules-scope "^3.0.0" postcss-modules-values "^4.0.0" postcss-value-parser "^4.2.0" - semver "^7.3.5" + semver "^7.3.8" css-selector-parser@^1.1.0, css-selector-parser@^1.3: version "1.4.1" @@ -2693,26 +2600,11 @@ debuglog@^1.0.1: resolved "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz" integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= -decamelize-keys@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" - integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= - dependencies: - decamelize "^1.1.0" - map-obj "^1.0.0" - -decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: +decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== - dependencies: - mimic-response "^1.0.0" - decompress-response@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" @@ -2758,11 +2650,6 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" -defer-to-connect@^1.0.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" - integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== - defer-to-connect@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.0.tgz" @@ -3119,22 +3006,22 @@ electron-rebuild@^3.2.9: tar "^6.0.5" yargs "^17.0.1" -electron-to-chromium@^1.4.164: - version "1.4.170" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.170.tgz#0415fc489402e09bfbe1f0c99bbf4d73f31d48d4" - integrity sha512-rZ8PZLhK4ORPjFqLp9aqC4/S1j4qWFsPPz13xmWdrbBkU/LlxMcok+f+6f8YnQ57MiZwKtOaW15biZZsY5Igvw== - electron-to-chromium@^1.4.251: version "1.4.270" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.270.tgz#2c6ea409b45cdb5c3e0cb2c08cf6c0ba7e0f2c26" integrity sha512-KNhIzgLiJmDDC444dj9vEOpZEgsV96ult9Iff98Vanumn+ShJHd5se8aX6KeVxdc0YQeqdrezBZv89rleDbvSg== -electron@21.3.1: - version "21.3.1" - resolved "https://registry.yarnpkg.com/electron/-/electron-21.3.1.tgz#02a61053ace79ecdc592afc641ff663dec805b42" - integrity sha512-Ik/I9oFHA1h32JRtRm6GMgYdUctFpF/tPnHyATg4r3LXBTUT6habGh3GxSdmmTa5JgtA7uJUEm8EjjZItk7T3g== +electron-to-chromium@^1.4.284: + version "1.4.286" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.286.tgz#0e039de59135f44ab9a8ec9025e53a9135eba11f" + integrity sha512-Vp3CVhmYpgf4iXNKAucoQUDcCrBQX3XLBtwgFqP9BUXuucgvAV9zWp1kYU7LL9j4++s9O+12cb3wMtN4SJy6UQ== + +electron@22.3.1: + version "22.3.1" + resolved "https://registry.yarnpkg.com/electron/-/electron-22.3.1.tgz#a09769e6592cadbf45d7629c9143ffa2ef8a3842" + integrity sha512-iDltL9j12bINK3aOp8ZoGq4NFBFjJhw1AYHelbWj93XUCAIT4fdA+PRsq0aaTHg3bthLLlLRvIZVgNsZPqWcqg== dependencies: - "@electron/get" "^1.14.1" + "@electron/get" "^2.0.0" "@types/node" "^16.11.26" extract-zip "^2.0.1" @@ -3166,11 +3053,6 @@ emojis-list@^3.0.0: resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== -encodeurl@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= - encoding@^0.1.11: version "0.1.12" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" @@ -3178,7 +3060,7 @@ encoding@^0.1.11: dependencies: iconv-lite "~0.4.13" -encoding@^0.1.12, encoding@^0.1.13: +encoding@^0.1.13: version "0.1.13" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== @@ -3252,7 +3134,7 @@ err-code@^2.0.2: dependencies: prr "~0.0.0" -error-ex@^1.2.0, error-ex@^1.3.1: +error-ex@^1.2.0: version "1.3.2" resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== @@ -3703,6 +3585,15 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" +find-cache-dir@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + find-line-column@^0.5.2: version "0.5.2" resolved "https://registry.npmjs.org/find-line-column/-/find-line-column-0.5.2.tgz" @@ -3959,20 +3850,6 @@ functions-have-names@^1.2.2: resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== -gauge@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.0.tgz#2313d52e067a797356c8214907828ff1a097cde4" - integrity sha512-VSxauaaCsLOTerAyzunAYGgK3iaWZvOL1BCvBvf/IhDWrczPAf1tUqn05DOCJOOe4k3vOdX6fHhJIvF2UtCMhw== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.2" - console-control-strings "^1.0.0" - has-unicode "^2.0.1" - signal-exit "^3.0.0" - string-width "^1.0.1 || ^2.0.0" - strip-ansi "^3.0.1 || ^4.0.0" - wide-align "^1.1.2" - gauge@^4.0.3: version "4.0.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" @@ -4001,13 +3878,6 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" -gaze@^1.0.0: - version "1.1.3" - resolved "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz" - integrity sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g== - dependencies: - globule "^1.0.0" - genfun@^4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/genfun/-/genfun-4.0.1.tgz" @@ -4056,7 +3926,7 @@ get-stream@^3.0.0: resolved "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz" integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= -get-stream@^4.0.0, get-stream@^4.1.0: +get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== @@ -4155,7 +4025,7 @@ glob@^8.0.1, glob@^8.0.3: minimatch "^5.0.1" once "^1.3.0" -glob@~7.1.1, glob@~7.1.2: +glob@~7.1.2: version "7.1.7" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== @@ -4186,16 +4056,6 @@ global-dirs@^0.1.0: dependencies: ini "^1.3.4" -global-tunnel-ng@^2.7.1: - version "2.7.1" - resolved "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz" - integrity sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg== - dependencies: - encodeurl "^1.0.2" - lodash "^4.17.10" - npm-conf "^1.1.3" - tunnel "^0.0.6" - globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" @@ -4248,15 +4108,6 @@ globrex@^0.1.2: resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== -globule@^1.0.0: - version "1.3.2" - resolved "https://registry.npmjs.org/globule/-/globule-1.3.2.tgz" - integrity sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA== - dependencies: - glob "~7.1.1" - lodash "~4.17.10" - minimatch "~3.0.2" - got@^11.7.0: version "11.8.1" resolved "https://registry.npmjs.org/got/-/got-11.8.1.tgz" @@ -4274,6 +4125,23 @@ got@^11.7.0: p-cancelable "^2.0.0" responselike "^2.0.0" +got@^11.8.5: + version "11.8.6" + resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" + integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" + got@^6.7.1: version "6.7.1" resolved "https://registry.npmjs.org/got/-/got-6.7.1.tgz" @@ -4291,23 +4159,6 @@ got@^6.7.1: unzip-response "^2.0.1" url-parse-lax "^1.0.0" -got@^9.6.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" - integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== - dependencies: - "@sindresorhus/is" "^0.14.0" - "@szmarczak/http-timer" "^1.1.2" - cacheable-request "^6.0.0" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^4.1.0" - lowercase-keys "^1.0.1" - mimic-response "^1.0.1" - p-cancelable "^1.0.0" - to-readable-stream "^1.0.0" - url-parse-lax "^3.0.0" - graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9, graceful-fs@~4.1.11: version "4.2.10" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" @@ -4356,11 +4207,6 @@ har-validator@~5.1.3: ajv "^6.12.3" har-schema "^2.0.0" -hard-rejection@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" - integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== - has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz" @@ -4490,13 +4336,6 @@ hosted-git-info@^2.7.1: resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz" integrity sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg== -hosted-git-info@^3.0.6: - version "3.0.7" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.7.tgz" - integrity sha512-fWqc0IcuXs+BmE9orLDyVykAG9GJtGLGuZAAqgcckPgv5xad4AcXGIv8galtQvlwutxSlaMcdw7BUtq2EIvqCQ== - dependencies: - lru-cache "^6.0.0" - hosted-git-info@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" @@ -4543,15 +4382,6 @@ http-proxy-agent@^2.0.0: agent-base "4" debug "3.1.0" -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - http-proxy-agent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" @@ -4650,6 +4480,11 @@ ignore@^5.2.0: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.1.tgz#c2b1f76cb999ede1502f3a226a9310fdfe88d46c" integrity sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA== +immutable@^4.0.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.2.3.tgz#a203cdda37a5a30bc351b982a1794c1930198815" + integrity sha512-IHpmvaOIX4VLJwPOuQr1NpeBr2ZG6vpIj3blsLVxXRWJscLioaJRStqC+NcBsLeCDsnGlPpXd5/WZmnE7MbsKA== + import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" @@ -4749,7 +4584,7 @@ invert-kv@^2.0.0: resolved "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz" integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== -ip@^1.1.4, ip@^1.1.5: +ip@^1.1.4: version "1.1.5" resolved "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz" integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= @@ -4989,11 +4824,6 @@ is-path-inside@^3.0.3: resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== -is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= - is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" @@ -5169,6 +4999,11 @@ jake@^10.8.5: filelist "^1.0.1" minimatch "^3.0.4" +javascript-stringify@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz#27c76539be14d8bd128219a2d731b09337904e79" + integrity sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg== + jest-worker@^27.4.5: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" @@ -5193,11 +5028,6 @@ joi@^10.6.0: items "2.x.x" topo "2.x.x" -js-base64@^2.4.9: - version "2.6.4" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4" - integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ== - js-sdsl@^4.1.4: version "4.2.0" resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.2.0.tgz#278e98b7bea589b8baaf048c20aeb19eb7ad09d0" @@ -5238,11 +5068,6 @@ jsesc@^2.5.1: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== -json-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== - json-buffer@3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" @@ -5253,7 +5078,7 @@ json-loader@^0.5.7: resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" integrity sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w== -json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: +json-parse-even-better-errors@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== @@ -5270,6 +5095,11 @@ json-schema-traverse@^0.4.1: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" @@ -5311,11 +5141,16 @@ json5@^2.1.2: dependencies: minimist "^1.2.5" -json5@^2.2.0, json5@^2.2.1: +json5@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== +json5@^2.2.1: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + jsonc-parser@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.0.0.tgz#abdd785701c7e7eaca8a9ec8cf070ca51a745a22" @@ -5375,13 +5210,6 @@ keyboardevents-areequal@^0.2.1: resolved "https://registry.npmjs.org/keyboardevents-areequal/-/keyboardevents-areequal-0.2.2.tgz" integrity sha512-Nv+Kr33T0mEjxR500q+I6IWisOQ0lK1GGOncV0kWE6n4KFmpcu7RUX5/2B0EUtX51Cb0HjZ9VJsSY3u4cBa0kw== -keyv@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" - integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== - dependencies: - json-buffer "3.0.0" - keyv@^4.0.0: version "4.0.3" resolved "https://registry.npmjs.org/keyv/-/keyv-4.0.3.tgz" @@ -5389,7 +5217,7 @@ keyv@^4.0.0: dependencies: json-buffer "3.0.1" -kind-of@^6.0.2, kind-of@^6.0.3: +kind-of@^6.0.2: version "6.0.3" resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== @@ -5452,11 +5280,6 @@ libnpx@10.2.2: y18n "^4.0.0" yargs "^11.0.0" -lines-and-columns@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" - integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= - load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz" @@ -5483,7 +5306,7 @@ loader-utils@^0.2.17: json5 "^0.5.0" object-assign "^4.0.1" -loader-utils@^1.0.0, loader-utils@^1.1.0, loader-utils@^1.4.0: +loader-utils@^1.0.0, loader-utils@^1.1.0: version "1.4.0" resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz" integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== @@ -5571,7 +5394,7 @@ lodash.without@~4.4.0: resolved "https://registry.npmjs.org/lodash.without/-/lodash.without-4.4.0.tgz" integrity sha1-PNRXSgC2e643OpS3SHcmQFB7eqw= -lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.4, lodash@~4.17.10: +lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.4: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -5598,7 +5421,7 @@ lower-case@^2.0.2: dependencies: tslib "^2.0.3" -lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: +lowercase-keys@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== @@ -5624,6 +5447,13 @@ lru-cache@^4.0.1: pseudomap "^1.0.2" yallist "^2.1.2" +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -5660,12 +5490,12 @@ macos-release@^3.1.0: resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-3.1.0.tgz#6165bb0736ae567ed6649e36ce6a24d87cbb7aca" integrity sha512-/M/R0gCDgM+Cv1IuBG1XGdfTFnMEG6PZeT+KGWHO/OG+imqmaD9CH5vHBTycEM3+Kc4uG2Il+tFAuUWLqQOeUA== -magic-string@^0.25.0: - version "0.25.9" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" - integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== +magic-string@^0.27.0: + version "0.27.0" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.27.0.tgz#e4a3413b4bab6d98d2becffd48b4a257effdbbf3" + integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA== dependencies: - sourcemap-codec "^1.4.8" + "@jridgewell/sourcemap-codec" "^1.4.13" make-dir@^1.0.0: version "1.3.0" @@ -5674,6 +5504,13 @@ make-dir@^1.0.0: dependencies: pify "^3.0.0" +make-dir@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + make-fetch-happen@^10.0.3: version "10.2.1" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164" @@ -5713,28 +5550,6 @@ make-fetch-happen@^2.4.13: socks-proxy-agent "^3.0.0" ssri "^4.1.6" -make-fetch-happen@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" - integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== - dependencies: - agentkeepalive "^4.1.3" - cacache "^15.2.0" - http-cache-semantics "^4.1.0" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^6.0.0" - minipass "^3.1.3" - minipass-collect "^1.0.2" - minipass-fetch "^1.3.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.2" - promise-retry "^2.0.1" - socks-proxy-agent "^6.0.0" - ssri "^8.0.0" - map-age-cleaner@^0.1.1: version "0.1.3" resolved "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz" @@ -5747,11 +5562,6 @@ map-obj@^1.0.0, map-obj@^1.0.1: resolved "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz" integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= -map-obj@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.2.1.tgz#e4ea399dbc979ae735c83c863dd31bdf364277b7" - integrity sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ== - marked@^4.0.16: version "4.1.1" resolved "https://registry.yarnpkg.com/marked/-/marked-4.1.1.tgz#2f709a4462abf65a283f2453dc1c42ab177d302e" @@ -5798,24 +5608,6 @@ meow@^3.1.0: redent "^1.0.0" trim-newlines "^1.0.0" -meow@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-9.0.0.tgz#cd9510bc5cac9dee7d03c73ee1f9ad959f4ea364" - integrity sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ== - dependencies: - "@types/minimist" "^1.2.0" - camelcase-keys "^6.2.2" - decamelize "^1.2.0" - decamelize-keys "^1.1.0" - hard-rejection "^2.1.0" - minimist-options "4.1.0" - normalize-package-data "^3.0.0" - read-pkg-up "^7.0.1" - redent "^3.0.0" - trim-newlines "^3.0.0" - type-fest "^0.18.0" - yargs-parser "^20.2.3" - merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" @@ -5868,7 +5660,7 @@ mimic-fn@^2.0.0, mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mimic-response@^1.0.0, mimic-response@^1.0.1: +mimic-response@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== @@ -5878,11 +5670,6 @@ mimic-response@^3.1.0: resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== -min-indent@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" - integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== - minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -5893,7 +5680,7 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -minimatch@3.0.4, minimatch@~3.0.2: +minimatch@3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== @@ -5914,15 +5701,6 @@ minimatch@^5.0.1, minimatch@^5.1.0: dependencies: brace-expansion "^2.0.1" -minimist-options@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" - integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - kind-of "^6.0.3" - minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: version "1.2.6" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" @@ -5940,17 +5718,6 @@ minipass-collect@^1.0.2: dependencies: minipass "^3.0.0" -minipass-fetch@^1.3.2: - version "1.3.4" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.3.4.tgz#63f5af868a38746ca7b33b03393ddf8c291244fe" - integrity sha512-TielGogIzbUEtd1LsjZFs47RWuHHfhl6TiCx1InVxApBAmQ8bL0dL5ilkLGcRvuyW/A9nE+Lvn855Ewz8S0PnQ== - dependencies: - minipass "^3.1.0" - minipass-sized "^1.0.3" - minizlib "^2.0.0" - optionalDependencies: - encoding "^0.1.12" - minipass-fetch@^2.0.3: version "2.1.2" resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-2.1.2.tgz#95560b50c472d81a3bc76f20ede80eaed76d8add" @@ -5969,7 +5736,7 @@ minipass-flush@^1.0.5: dependencies: minipass "^3.0.0" -minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: +minipass-pipeline@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== @@ -5990,14 +5757,14 @@ minipass@^3.0.0, minipass@^3.1.6: dependencies: yallist "^4.0.0" -minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: +minipass@^3.1.1: version "3.1.3" resolved "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz" integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== dependencies: yallist "^4.0.0" -minizlib@^2.0.0, minizlib@^2.1.1, minizlib@^2.1.2: +minizlib@^2.1.1, minizlib@^2.1.2: version "2.1.2" resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== @@ -6075,15 +5842,15 @@ mute-stream@~0.0.4: resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz" integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= -nan@^2.13.2, nan@^2.15.0, nan@^2.16.0: +nan@^2.15.0, nan@^2.16.0: version "2.16.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.16.0.tgz#664f43e45460fb98faf00edca0bb0d7b8dce7916" integrity sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA== -nanoid@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" - integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== +nanoid@^3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" + integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== natural-compare-lite@^1.4.0: version "1.4.0" @@ -6095,11 +5862,6 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= -negotiator@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" - integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== - negotiator@^0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" @@ -6110,19 +5872,12 @@ neo-async@^2.6.2: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== -ngx-sortablejs@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/ngx-sortablejs/-/ngx-sortablejs-11.1.0.tgz#14e50c48db908c1cb4b37722b28c2d3867c6140a" - integrity sha512-eM4dHwWSmXDcvF5gUmyMMQ0qqcqBXWCSZ9IRpqx4UkBKfo4N7pk/QuYh5io2fXVHWVFDaxW1yhn2FNpqxV6Jqw== +ngx-toastr@^16.0.2: + version "16.0.2" + resolved "https://registry.yarnpkg.com/ngx-toastr/-/ngx-toastr-16.0.2.tgz#349068a16a73867111c6feae68eedb89a638a33f" + integrity sha512-J6SueNCaGwm/gpXdsG56UzMEAcuayYWEW6NmIrNoe5iP7lOUohg4xYXWipkbMH9wGWmLPD9gU8AufUVWMplCvg== dependencies: - tslib "^2.0.0" - -ngx-toastr@^14.0.0: - version "14.0.0" - resolved "https://registry.yarnpkg.com/ngx-toastr/-/ngx-toastr-14.0.0.tgz#20e4737ef330b892a453768cd98b980558aeb286" - integrity sha512-dnDzSY73pF6FvNyxdh6ftfvXvUg6SU7MAT3orPUCzA77t3ZcFslro06zk4NCA2g67RF7dBwM0OJ/y0SN6fdGYw== - dependencies: - tslib "^2.1.0" + tslib "^2.3.0" nice-try@^1.0.4: version "1.0.5" @@ -6137,10 +5892,10 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" -node-abi@^3.0.0, node-abi@^3.25.0: - version "3.25.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.25.0.tgz#ca57dd23ae67679ce152b6c45cae2c57ed04faff" - integrity sha512-p+0xx5ruIQ+8X57CRIMxbTZRT7tU0Tjn2C/aAK68AEMrbGsCo6IjnDdPNhEyyjWCT4bRtzomXchYd3sSgk3BJQ== +node-abi@^3.0.0, node-abi@^3.33.0: + version "3.33.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.33.0.tgz#8b23a0cec84e1c5f5411836de6a9b84bccf26e7f" + integrity sha512-7GGVawqyHF4pfd0YFybhv/eM9JwTtPqx0mAanQ146O3FlSh3pA24zf9IRQTOsfTSqXTNzPSP5iagAJ94jjuVog== dependencies: semver "^7.3.5" @@ -6182,22 +5937,6 @@ node-gyp-build@^4.2.1: resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.2.3.tgz#ce6277f853835f718829efb47db20f3e4d9c4739" integrity sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg== -node-gyp@^8.4.1: - version "8.4.1" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" - integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== - dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.6" - make-fetch-happen "^9.1.0" - nopt "^5.0.0" - npmlog "^6.0.0" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.2" - which "^2.0.2" - node-gyp@^9.0.0: version "9.1.0" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.1.0.tgz#c8d8e590678ea1f7b8097511dedf41fc126648f8" @@ -6233,36 +5972,15 @@ node-gyp@~3.6.2: tar "^2.0.0" which "1" -node-releases@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.5.tgz#280ed5bc3eba0d96ce44897d8aee478bfb3d9666" - integrity sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q== - node-releases@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== -node-sass@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-7.0.3.tgz#7620bcd5559c2bf125c4fbb9087ba75cd2df2ab2" - integrity sha512-8MIlsY/4dXUkJDYht9pIWBhMil3uHmE8b/AdJPjmFn1nBx9X9BASzfzmsCy0uCCb8eqI3SYYzVPDswWqSx7gjw== - dependencies: - async-foreach "^0.1.3" - chalk "^4.1.2" - cross-spawn "^7.0.3" - gaze "^1.0.0" - get-stdin "^4.0.1" - glob "^7.0.3" - lodash "^4.17.15" - meow "^9.0.0" - nan "^2.13.2" - node-gyp "^8.4.1" - npmlog "^5.0.0" - request "^2.88.0" - sass-graph "^4.0.1" - stdout-stream "^1.4.0" - "true-case-path" "^1.0.2" +node-releases@^2.0.8: + version "2.0.9" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.9.tgz#fe66405285382b0c4ac6bcfbfbe7e8a510650b4d" + integrity sha512-2xfmOrRkGogbTK9R6Leda0DGiXeY3p2NJpy4+gNCffdUvV6mdEJnaDEic1i3Ec2djAo8jWYoJMR5PB0MSMpxUA== "nopt@2 || 3": version "3.0.6" @@ -6296,7 +6014,7 @@ normalize-package-data@^2.0.0, normalize-package-data@^2.4.0, "normalize-package semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0: +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: version "2.5.0" resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== @@ -6306,16 +6024,6 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package- semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-package-data@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.0.tgz" - integrity sha512-6lUjEI0d3v6kFrtgA/lOx4zHCWULXsFNIjHolnZCKCTLA6m/G625cdn3O7eNmT0iD3jfo6HZ9cdImGZwf21prw== - dependencies: - hosted-git-info "^3.0.6" - resolve "^1.17.0" - semver "^7.3.2" - validate-npm-package-license "^3.0.1" - normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -6326,19 +6034,16 @@ normalize-url@^4.1.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + npm-cache-filename@~1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/npm-cache-filename/-/npm-cache-filename-1.0.2.tgz" integrity sha1-3tMGxbC/yHCp6fr4I7xfKD4FrhE= -npm-conf@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz" - integrity sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw== - dependencies: - config-chain "^1.1.11" - pify "^3.0.0" - npm-install-checks@~3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-3.0.0.tgz" @@ -6523,16 +6228,6 @@ npmlog@6.0.2, npmlog@^6.0.0: gauge "^4.0.3" set-blocking "^2.0.0" -npmlog@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" - integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== - dependencies: - are-we-there-yet "^2.0.0" - console-control-strings "^1.1.0" - gauge "^3.0.0" - set-blocking "^2.0.0" - npx@^10.2.2: version "10.2.2" resolved "https://registry.npmjs.org/npx/-/npx-10.2.2.tgz" @@ -6732,11 +6427,6 @@ osenv@0, osenv@^0.1.4, osenv@^0.1.5, osenv@~0.1.4: os-homedir "^1.0.0" os-tmpdir "^1.0.0" -p-cancelable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" - integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== - p-cancelable@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz" @@ -6902,26 +6592,11 @@ parse-json@^2.2.0: dependencies: error-ex "^1.2.0" -parse-json@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - "parse5@5 - 6": version "6.0.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== -parse5@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" - integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== - parse5@^7.0.0: version "7.1.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.1.tgz#4649f940ccfb95d8754f37f73078ea20afe0c746" @@ -6929,6 +6604,13 @@ parse5@^7.0.0: dependencies: entities "^4.4.0" +parse5@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" + integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== + dependencies: + entities "^4.4.0" + pascal-case@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" @@ -7080,7 +6762,7 @@ pinkie@^2.0.0: resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= -pkg-dir@^4.2.0: +pkg-dir@^4.1.0, pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== @@ -7160,12 +6842,12 @@ postcss-value-parser@^4.2.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^8.4.7: - version "8.4.8" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.8.tgz#dad963a76e82c081a0657d3a2f3602ce10c2e032" - integrity sha512-2tXEqGxrjvAO6U+CJzDL2Fk2kPHTv1jQsYkSoMeOis2SsYaXRO2COxTdQp99cYvif9JTXaAk9lYGc3VhJt7JPQ== +postcss@^8.4.19: + version "8.4.21" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4" + integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== dependencies: - nanoid "^3.3.1" + nanoid "^3.3.4" picocolors "^1.0.0" source-map-js "^1.0.2" @@ -7179,11 +6861,6 @@ prepend-http@^1.0.1: resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz" integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= -prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== - pretty-bytes@^1.0.2: version "1.0.4" resolved "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz" @@ -7517,11 +7194,6 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -quick-lru@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" - integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== - quick-lru@^5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" @@ -7615,15 +7287,6 @@ read-pkg-up@^1.0.1: find-up "^1.0.0" read-pkg "^1.0.0" -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - read-pkg@^1.0.0: version "1.1.0" resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz" @@ -7633,16 +7296,6 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - read@1, read@~1.0.1, read@~1.0.7: version "1.0.7" resolved "https://registry.npmjs.org/read/-/read-1.0.7.tgz" @@ -7650,7 +7303,7 @@ read@1, read@~1.0.1, read@~1.0.7: dependencies: mute-stream "~0.0.4" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.5, readable-stream@~2.3.2: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.5, readable-stream@~2.3.2: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -7721,14 +7374,6 @@ redent@^1.0.0: indent-string "^2.1.0" strip-indent "^1.0.1" -redent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" - integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== - dependencies: - indent-string "^4.0.0" - strip-indent "^3.0.0" - reflect-metadata@^0.1.2: version "0.1.13" resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" @@ -7816,7 +7461,7 @@ repeating@^2.0.0: tunnel-agent "^0.6.0" uuid "^3.0.0" -request@^2.45.0, request@^2.74.0, request@^2.88.0: +request@^2.45.0, request@^2.74.0: version "2.88.2" resolved "https://registry.npmjs.org/request/-/request-2.88.2.tgz" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -7847,6 +7492,11 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz" @@ -7879,7 +7529,7 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.17.0: +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0: version "1.20.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -7905,13 +7555,6 @@ resolve@^1.20.0, resolve@^1.22.0: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -responselike@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== - dependencies: - lowercase-keys "^1.0.0" - responselike@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz" @@ -7997,6 +7640,13 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" +rxjs@^7.5.7: + version "7.8.0" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.0.tgz#90a938862a82888ff4c7359811a595e14e1e09a4" + integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg== + dependencies: + tslib "^2.1.0" + safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" @@ -8028,24 +7678,23 @@ sanitize-filename@^1.6.3: dependencies: truncate-utf8-bytes "^1.0.0" -sass-graph@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-4.0.1.tgz#2ff8ca477224d694055bf4093f414cf6cfad1d2e" - integrity sha512-5YCfmGBmxoIRYHnKK2AKzrAkCoQ8ozO+iumT8K4tXJXRVCPf+7s1/9KxTSW3Rbvf+7Y7b4FR3mWyLnQr3PHocA== - dependencies: - glob "^7.0.0" - lodash "^4.17.11" - scss-tokenizer "^0.4.3" - yargs "^17.2.1" - -sass-loader@^12.6.0: - version "12.6.0" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-12.6.0.tgz#5148362c8e2cdd4b950f3c63ac5d16dbfed37bcb" - integrity sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA== +sass-loader@^13.2.0: + version "13.2.0" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-13.2.0.tgz#80195050f58c9aac63b792fa52acb6f5e0f6bdc3" + integrity sha512-JWEp48djQA4nbZxmgC02/Wh0eroSUutulROUusYJO9P9zltRbNN80JCBHqRGzjd4cmZCa/r88xgfkjGD0TXsHg== dependencies: klona "^2.0.4" neo-async "^2.6.2" +sass@^1.58.0: + version "1.58.0" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.58.0.tgz#ee8aea3ad5ea5c485c26b3096e2df6087d0bb1cc" + integrity sha512-PiMJcP33DdKtZ/1jSjjqVIKihoDc6yWmYr9K/4r3fVVIEDAluD0q7XZiRKrNJcPK3qkLRF/79DND1H5q1LBjgg== + dependencies: + chokidar ">=3.0.0 <4.0.0" + immutable "^4.0.0" + source-map-js ">=0.6.2 <2.0.0" + sax@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" @@ -8060,13 +7709,15 @@ schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: ajv "^6.12.5" ajv-keywords "^3.5.2" -scss-tokenizer@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.4.3.tgz#1058400ee7d814d71049c29923d2b25e61dc026c" - integrity sha512-raKLgf1LI5QMQnG+RxHz6oK0sL3x3I4FN2UDLqgLOGO8hodECNnNh5BXn7fAyBxrA8zVzdQizQ6XjNJQ+uBwMw== +schema-utils@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.0.tgz#60331e9e3ae78ec5d16353c467c34b3a0a1d3df7" + integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg== dependencies: - js-base64 "^2.4.9" - source-map "^0.7.3" + "@types/json-schema" "^7.0.9" + ajv "^8.8.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.0.0" semver-compare@^1.0.0: version "1.0.0" @@ -8085,7 +7736,7 @@ semver-diff@^2.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.2.0, semver@^6.3.0: +semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== @@ -8097,6 +7748,13 @@ semver@^7.0.0, semver@^7.1.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semve dependencies: lru-cache "^6.0.0" +semver@^7.3.8: + version "7.3.8" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" @@ -8282,7 +7940,7 @@ smart-buffer@^1.0.13: resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-1.1.15.tgz" integrity sha1-fxFLW2X6s+KjWqd1uxLw0cZJvxY= -smart-buffer@^4.0.2, smart-buffer@^4.1.0, smart-buffer@^4.2.0: +smart-buffer@^4.0.2, smart-buffer@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== @@ -8302,15 +7960,6 @@ socks-proxy-agent@^3.0.0: agent-base "^4.0.1" socks "^1.1.10" -socks-proxy-agent@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.1.0.tgz#869cf2d7bd10fea96c7ad3111e81726855e285c3" - integrity sha512-57e7lwCN4Tzt3mXz25VxOErJKXlPfXmkMLnk310v/jwW20jWRVcgsOit+xNkN3eIEdB47GwnfAEBLacZ/wVIKg== - dependencies: - agent-base "^6.0.2" - debug "^4.3.1" - socks "^2.6.1" - socks-proxy-agent@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" @@ -8328,14 +7977,6 @@ socks@^1.1.10: ip "^1.1.4" smart-buffer "^1.0.13" -socks@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.6.1.tgz#989e6534a07cf337deb1b1c94aaa44296520d30e" - integrity sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA== - dependencies: - ip "^1.1.5" - smart-buffer "^4.1.0" - socks@^2.6.2: version "2.7.1" resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" @@ -8344,11 +7985,6 @@ socks@^2.6.2: ip "^2.0.0" smart-buffer "^4.2.0" -sortablejs@^1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/sortablejs/-/sortablejs-1.15.0.tgz#53230b8aa3502bb77a29e2005808ffdb4a5f7e2a" - integrity sha512-bv9qgVMjUMf89wAvM6AxVvS/4MX3sPeN0+agqShejLU5z5GX4C75ow1O2e5k4L6XItUyAK3gH6AxSbXrOM5e8w== - sorted-object@~2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/sorted-object/-/sorted-object-2.0.1.tgz" @@ -8367,24 +8003,19 @@ source-code-pro@^2.38.0: resolved "https://registry.yarnpkg.com/source-code-pro/-/source-code-pro-2.38.0.tgz#85c57689f7386bb9d0515fb00ba4845bfb7b485b" integrity sha512-JMXu7l3XrLREG17eEwY66ANG9716WTu6OeNvZfRKQKANEvbSERDZjk5AYTHeV6owQNPQTeiiW3ri2Ou93XFGvg== -source-map-js@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.1.tgz#a1741c131e3c77d048252adfa24e23b908670caf" - integrity sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA== - -source-map-js@^1.0.2: +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== -source-map-loader@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-3.0.1.tgz#9ae5edc7c2d42570934be4c95d1ccc6352eba52d" - integrity sha512-Vp1UsfyPvgujKQzi4pyDiTOnE3E4H+yHvkVRN3c/9PJmQS4CQJExvcDvaX/D+RV+xQben9HJ56jMJS3CgUeWyA== +source-map-loader@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-4.0.1.tgz#72f00d05f5d1f90f80974eda781cbd7107c125f2" + integrity sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA== dependencies: - abab "^2.0.5" + abab "^2.0.6" iconv-lite "^0.6.3" - source-map-js "^1.0.1" + source-map-js "^1.0.2" source-map-support@^0.5.19, source-map-support@~0.5.20: version "0.5.21" @@ -8394,26 +8025,16 @@ source-map-support@^0.5.19, source-map-support@~0.5.20: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0: +source-map@^0.6.0, source-map@~0.6.0: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.7.3: - version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - source-sans-pro@3.6.0: version "3.6.0" resolved "https://registry.npmjs.org/source-sans-pro/-/source-sans-pro-3.6.0.tgz" integrity sha512-C1RFUGu+YASuqpgDRInTM7Y6OwqeWNOuKn7v0P/4Kh66epTI4PYWwPWP5kdA4l/VqzBAWiqoz5dk0trof73R7w== -sourcemap-codec@^1.4.8: - version "1.4.8" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" - integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== - spdx-correct@^3.0.0: version "3.1.1" resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz" @@ -8487,13 +8108,6 @@ ssri@^4.1.2, ssri@^4.1.6, ssri@~4.1.6: dependencies: safe-buffer "^5.1.0" -ssri@^8.0.0, ssri@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" - integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== - dependencies: - minipass "^3.1.1" - ssri@^9.0.0: version "9.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" @@ -8506,13 +8120,6 @@ stat-mode@^1.0.0: resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-1.0.0.tgz#68b55cb61ea639ff57136f36b216a291800d1465" integrity sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg== -stdout-stream@^1.4.0: - version "1.4.1" - resolved "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz" - integrity sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA== - dependencies: - readable-stream "^2.0.1" - stream-each@^1.1.0: version "1.2.0" resolved "https://registry.npmjs.org/stream-each/-/stream-each-1.2.0.tgz" @@ -8543,7 +8150,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.1 || ^2.0.0", "string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -8625,7 +8232,7 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1: dependencies: ansi-regex "^2.0.0" -"strip-ansi@^3.0.1 || ^4.0.0", strip-ansi@^4.0.0, strip-ansi@~4.0.0: +strip-ansi@^4.0.0, strip-ansi@~4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= @@ -8663,13 +8270,6 @@ strip-indent@^1.0.1: dependencies: get-stdin "^4.0.1" -strip-indent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" - integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== - dependencies: - min-indent "^1.0.0" - strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" @@ -8784,7 +8384,7 @@ tar@^2.0.0, tar@~2.2.1: fstream "^1.0.12" inherits "2" -tar@^6.0.2, tar@^6.0.5, tar@^6.1.11, tar@^6.1.2: +tar@^6.0.5, tar@^6.1.11, tar@^6.1.2: version "6.1.11" resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== @@ -8943,11 +8543,6 @@ to-fast-properties@^2.0.0: resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= -to-readable-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" - integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -8997,18 +8592,6 @@ trim-newlines@^1.0.0: resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz" integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= -trim-newlines@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" - integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== - -"true-case-path@^1.0.2": - version "1.0.3" - resolved "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz" - integrity sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew== - dependencies: - glob "^7.1.2" - truncate-utf8-bytes@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b" @@ -9036,16 +8619,26 @@ tsconfig-paths@^3.14.1: minimist "^1.2.6" strip-bom "^3.0.0" +tsimportlib@^0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tsimportlib/-/tsimportlib-0.0.3.tgz#008453c0f0eea6f736f2a4431171de240b21fc0d" + integrity sha512-U9sW2/3D0P4IVRnhH2RCqjCP0sG66qvb4ahB0aQln5xGMphDjntz5rdk0rFZ6Fg+lW3L+i+gRnIl4VvNBvxiQw== + tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.3.0, tslib@^2.4.0: +tslib@^2.0.3, tslib@^2.2.0, tslib@^2.3.0, tslib@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== +tslib@^2.1.0, tslib@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" + integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== + tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" @@ -9060,11 +8653,6 @@ tunnel-agent@^0.6.0: dependencies: safe-buffer "^5.0.1" -tunnel@^0.0.6: - version "0.0.6" - resolved "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz" - integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== - tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" @@ -9082,26 +8670,11 @@ type-fest@^0.13.1: resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz" integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== -type-fest@^0.18.0: - version "0.18.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" - integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== - type-fest@^0.20.2: version "0.20.2" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - typedarray@^0.0.6: version "0.0.6" resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" @@ -9118,7 +8691,7 @@ typedoc@^0.22.18: minimatch "^5.1.0" shiki "^0.10.1" -"typescript@2 - 4", typescript@^4.3.5: +"typescript@2 - 4": version "4.5.5" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.5.tgz#d8c953832d28924a9e3d37c73d729c846c5896f3" integrity sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA== @@ -9128,6 +8701,11 @@ typescript@^4.0.2: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.4.tgz#c464abca159669597be5f96b8943500b238e60e6" integrity sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ== +typescript@^4.9.5: + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + uid-number@0.0.6: version "0.0.6" resolved "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz" @@ -9165,13 +8743,6 @@ unique-filename@^1.1.0, unique-filename@~1.1.0: dependencies: unique-slug "^2.0.0" -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - unique-filename@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-2.0.1.tgz#e785f8675a9a7589e0ac77e0b5c34d2eaeac6da2" @@ -9220,10 +8791,10 @@ unzip-response@^2.0.1: resolved "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz" integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= -update-browserslist-db@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz#dbfc5a789caa26b1db8990796c2c8ebbce304824" - integrity sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA== +update-browserslist-db@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" + integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== dependencies: escalade "^3.1.1" picocolors "^1.0.0" @@ -9280,13 +8851,6 @@ url-parse-lax@^1.0.0: dependencies: prepend-http "^1.0.1" -url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== - dependencies: - prepend-http "^2.0.0" - utf8-byte-length@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61" @@ -9319,10 +8883,10 @@ uuid@~3.1.0: resolved "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz" integrity sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g== -val-loader@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/val-loader/-/val-loader-4.0.0.tgz#c5ccf8abfe486de412d2cd59fa56deb49d44ec8d" - integrity sha512-tpDHHpVo1hrO9xFhpEcOw+RCK4wnQqqNkZmylwHJ04iVeue1YSYxIdDwCdKd7LVQ8g/fsGX/EC5gLda9BXovkg== +val-loader@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/val-loader/-/val-loader-5.0.1.tgz#ce29d3bbe68381f42bef0d693d0f18202fe5efe8" + integrity sha512-r4h7b9AuvGQU1vyC4rAMoJNMG8fJUE6CYAqlM265tOdnZrZC6axVawBg2GlQ9+6osPCJjw4/vyADiSBAFlhzlg== validate-npm-package-license@^3.0.1: version "3.0.4" @@ -9412,15 +8976,15 @@ webpack-bundle-analyzer@^4.7.0: sirv "^1.0.7" ws "^7.3.1" -webpack-cli@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.0.0.tgz#bd380a9653e0cd1a08916c4ff1adea17201ef68f" - integrity sha512-AACDTo20yG+xn6HPW5xjbn2Be4KUzQPebWXsDMHwPPyKh9OnTOJgZN2Nc+g/FZKV3ObRTYsGvibAvc+5jAUrVA== +webpack-cli@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.0.1.tgz#95fc0495ac4065e9423a722dec9175560b6f2d9a" + integrity sha512-S3KVAyfwUqr0Mo/ur3NzIp6jnerNpo7GUO6so51mxLi1spqsA17YcMXy0WOIJtBSnj748lthxC6XLbNKh/ZC+A== dependencies: "@discoveryjs/json-ext" "^0.5.0" - "@webpack-cli/configtest" "^2.0.0" - "@webpack-cli/info" "^2.0.0" - "@webpack-cli/serve" "^2.0.0" + "@webpack-cli/configtest" "^2.0.1" + "@webpack-cli/info" "^2.0.1" + "@webpack-cli/serve" "^2.0.1" colorette "^2.0.14" commander "^9.4.1" cross-spawn "^7.0.3" @@ -9541,7 +9105,7 @@ which@~1.2.14: dependencies: isexe "^2.0.0" -wide-align@^1.1.0, wide-align@^1.1.2: +wide-align@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== @@ -9698,23 +9262,29 @@ yallist@^2.1.2: resolved "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz" integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml-loader@0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/yaml-loader/-/yaml-loader-0.6.0.tgz" - integrity sha512-1bNiLelumURyj+zvVHOv8Y3dpCri0F2S+DCcmps0pA1zWRLjS+FhZQg4o3aUUDYESh73+pKZNI18bj7stpReow== +yaml-loader@0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/yaml-loader/-/yaml-loader-0.8.0.tgz#c839325e3fdee082b3768b2a21fe34fde5d96f61" + integrity sha512-LjeKnTzVBKWiQBeE2L9ssl6WprqaUIxCSNs5tle8PaDydgu3wVFXTbMfsvF2MSErpy9TDVa092n4q6adYwJaWg== dependencies: - loader-utils "^1.4.0" - yaml "^1.8.3" + javascript-stringify "^2.0.1" + loader-utils "^2.0.0" + yaml "^2.0.0" -yaml@^1.8.3: - version "1.10.0" - resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz" - integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== +yaml@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.2.1.tgz#3014bf0482dcd15147aa8e56109ce8632cd60ce4" + integrity sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw== yargs-parser@^18.1.2: version "18.1.3" @@ -9724,12 +9294,7 @@ yargs-parser@^18.1.2: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^20.2.3: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs-parser@^21.0.0: +yargs-parser@^21.0.0, yargs-parser@^21.1.1: version "21.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== @@ -9776,7 +9341,7 @@ yargs@^15.0.1: y18n "^4.0.0" yargs-parser "^18.1.2" -yargs@^17.0.0, yargs@^17.0.1, yargs@^17.2.1, yargs@^17.5.1: +yargs@^17.0.1, yargs@^17.5.1: version "17.6.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.6.0.tgz#e134900fc1f218bc230192bdec06a0a5f973e46c" integrity sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g== @@ -9789,6 +9354,19 @@ yargs@^17.0.0, yargs@^17.0.1, yargs@^17.2.1, yargs@^17.5.1: y18n "^5.0.5" yargs-parser "^21.0.0" +yargs@^17.2.1: + version "17.6.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.6.2.tgz#2e23f2944e976339a1ee00f18c77fedee8332541" + integrity sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + yauzl@^2.10.0: version "2.10.0" resolved "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz"