Compare commits

..

21 Commits

Author SHA1 Message Date
Eugene Pankov
8116ab733f search panel layout fix 2023-03-21 12:51:49 +01:00
Eugene Pankov
92513814e4 lint 2023-03-21 10:36:40 +01:00
Eugene Pankov
0f71618cb8 fixed #8100 - search box layout issues in the new theme 2023-03-20 09:52:14 +01:00
Eugene Pankov
8cba805522 moved more electron stuff out of tabby-local 2023-03-19 13:20:30 +01:00
Eugene Pankov
35ca7015c8 moved electron-specific parts of tabby-local into tabby-electron 2023-03-19 12:39:31 +01:00
Eugene Pankov
2e72774548 fixed copying as HTML - fixes #8092, fixes #8091 2023-03-19 10:41:31 +01:00
Eugene Pankov
beb7c614bc fixed #8093 - SFTP panel visual issues 2023-03-19 10:09:43 +01:00
Eugene Pankov
ef3c9e3be0 fixed #8028 - ghost panes and missing pane drag handle 2023-03-18 20:01:28 +01:00
Eugene Pankov
ceb9b3cca8 fixed close button color 2023-03-18 17:08:14 +01:00
Eugene Pankov
55a9aaaf32 fixed window close button alignment 2023-03-18 17:07:33 +01:00
Eugene Pankov
9bd7a92bf8 fixed infinite spinner loop 2023-03-18 16:45:47 +01:00
Eugene Pankov
c2e7241a64 fixed #8088 - new theme bugs 2023-03-18 16:45:42 +01:00
Eugene Pankov
685a0ab9f5 updated locales 2023-03-18 00:09:08 +01:00
Eugene Pankov
abddfe85d5 fixed #7637 2023-03-07 19:00:35 +01:00
Eugene Pankov
95f7ad21bb variable theme spaciness 2023-03-07 19:00:28 +01:00
Eugene Pankov
ccaf98aaa0 Merge branch 'master' of github.com:Eugeny/tabby 2023-03-07 19:00:09 +01:00
allcontributors[bot]
cdd8be97ed add karaketir16 as a contributor for code (#8036)
Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2023-03-05 22:37:27 +01:00
Osman Karaketir
c8b5501a5f Fix serial Hexadecimal write (#8035) 2023-03-05 21:46:36 +01:00
Eugene Pankov
aef6037333 pin nan version - fixes #7883 2023-02-27 22:54:48 +01:00
Eugene Pankov
441f442915 typing fixes 2023-02-27 00:09:04 +01:00
Eugene
1e5cfd1d4b bootstrap 5 WIP (#7891)
New standard theme that follows your chosen terminal colors, Bootstrap 5 & Angular 15 upgrade
2023-02-26 20:42:31 +01:00
296 changed files with 3393 additions and 2938 deletions

View File

@@ -1121,6 +1121,15 @@
"contributions": [
"code"
]
},
{
"login": "karaketir16",
"name": "Osman Karaketir",
"avatar_url": "https://avatars.githubusercontent.com/u/27349806?v=4",
"profile": "https://github.com/karaketir16",
"contributions": [
"code"
]
}
],
"contributorsPerLine": 7,

View File

@@ -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

View File

@@ -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 }}

View File

@@ -312,6 +312,7 @@ Dank geht an diese wunderbaren Menschen ([emoji key](https://allcontributors.org
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Clem-Fern"><img src="https://avatars.githubusercontent.com/u/20025949?v=4?s=100" width="100px;" alt="Clem"/><br /><sub><b>Clem</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Clem-Fern" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt="Tomáš Hruška"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siccous" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt="Osman Karaketir"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
</tr>
</tbody>
</table>

View File

@@ -314,6 +314,7 @@ Gracias a estas maravillosas personas ([emoji key](https://allcontributors.org/d
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Clem-Fern"><img src="https://avatars.githubusercontent.com/u/20025949?v=4?s=100" width="100px;" alt="Clem"/><br /><sub><b>Clem</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Clem-Fern" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt="Tomáš Hruška"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siccous" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt="Osman Karaketir"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
</tr>
</tbody>
</table>

View File

@@ -311,6 +311,7 @@ Terima kasih kepada mereka yang telah membantu ([emoji key](https://allcontribut
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Clem-Fern"><img src="https://avatars.githubusercontent.com/u/20025949?v=4?s=100" width="100px;" alt="Clem"/><br /><sub><b>Clem</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Clem-Fern" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt="Tomáš Hruška"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siccous" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt="Osman Karaketir"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
</tr>
</tbody>
</table>

View File

@@ -307,6 +307,7 @@ Grazie a queste persone meravigliose ([emoji key](https://allcontributors.org/do
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Clem-Fern"><img src="https://avatars.githubusercontent.com/u/20025949?v=4?s=100" width="100px;" alt="Clem"/><br /><sub><b>Clem</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Clem-Fern" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt="Tomáš Hruška"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siccous" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt="Osman Karaketir"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
</tr>
</tbody>
</table>

View File

@@ -311,6 +311,7 @@ Windows上では、`Tabby.exe`がある場所と同じ場所に`data`フォル
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Clem-Fern"><img src="https://avatars.githubusercontent.com/u/20025949?v=4?s=100" width="100px;" alt="Clem"/><br /><sub><b>Clem</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Clem-Fern" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt="Tomáš Hruška"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siccous" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt="Osman Karaketir"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
</tr>
</tbody>
</table>

View File

@@ -301,6 +301,7 @@ Pull requests and plugins are welcome!
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Clem-Fern"><img src="https://avatars.githubusercontent.com/u/20025949?v=4?s=100" width="100px;" alt="Clem"/><br /><sub><b>Clem</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Clem-Fern" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt="Tomáš Hruška"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siccous" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt="Osman Karaketir"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
</tr>
</tbody>
</table>

View File

@@ -321,6 +321,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Clem-Fern"><img src="https://avatars.githubusercontent.com/u/20025949?v=4?s=100" width="100px;" alt="Clem"/><br /><sub><b>Clem</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Clem-Fern" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt="Tomáš Hruška"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siccous" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt="Osman Karaketir"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
</tr>
</tbody>
</table>

View File

@@ -315,6 +315,7 @@ Obrigado vai para essas pessoas maravilhosas ([emoji key](https://allcontributor
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Clem-Fern"><img src="https://avatars.githubusercontent.com/u/20025949?v=4?s=100" width="100px;" alt="Clem"/><br /><sub><b>Clem</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Clem-Fern" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt="Tomáš Hruška"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siccous" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt="Osman Karaketir"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
</tr>
</tbody>
</table>

View File

@@ -307,6 +307,7 @@ Pull-запросы и плагины приветствуются!
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Clem-Fern"><img src="https://avatars.githubusercontent.com/u/20025949?v=4?s=100" width="100px;" alt="Clem"/><br /><sub><b>Clem</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Clem-Fern" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt="Tomáš Hruška"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siccous" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt="Osman Karaketir"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
</tr>
</tbody>
</table>

View File

@@ -306,6 +306,7 @@
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Clem-Fern"><img src="https://avatars.githubusercontent.com/u/20025949?v=4?s=100" width="100px;" alt="Clem"/><br /><sub><b>Clem</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Clem-Fern" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt="Tomáš Hruška"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siccous" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt="Osman Karaketir"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
</tr>
</tbody>
</table>

View File

@@ -12,6 +12,7 @@ html.tabby
body { transition: 0.5s background; }
body
style#custom-css
root
app-root
.preload-logo
div

View File

@@ -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

View File

@@ -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": "*",

View File

@@ -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)
}
}

View File

@@ -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'

View File

@@ -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)

View File

@@ -1,3 +1,7 @@
html {
--spaciness: 1;
}
body {
min-height: 100vh;
overflow: hidden;
@@ -13,10 +17,6 @@ body {
user-select: text;
}
[ngbradiogroup] input[type="radio"] {
display: none;
}
a, button {
&.btn {
display: inline-flex;
@@ -25,8 +25,8 @@ a, button {
& > svg {
pointer-events: none;
width: 16px;
height: 16px;
// width: 16px;
// height: 16px;
}
}
}
@@ -53,6 +53,10 @@ a, button {
&>.form-control, &>.input-group {
width: 33%;
}
&>.form-check {
display: flex;
}
}
input[type=range] {
@@ -175,19 +179,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;
}

View File

@@ -1,6 +0,0 @@
import { Component } from '@angular/core'
@Component({
template: '<app-root></app-root>',
})
export class RootComponent { } // eslint-disable-line @typescript-eslint/no-extraneous-class

View File

@@ -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;
}
}
}

View File

@@ -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

View File

@@ -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,
})
],
}
})

View File

@@ -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"

View File

@@ -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.

View File

@@ -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

View File

@@ -10,7 +10,7 @@ msgstr ""
"Project-Id-Version: tabby\n"
"Language-Team: Afrikaans\n"
"Language: af_ZA\n"
"PO-Revision-Date: 2023-02-06 19:58\n"
"PO-Revision-Date: 2023-03-17 23:07\n"
#: tabby-local/src/components/terminalTab.component.ts:112
msgid "\"{command}\" is still running. Close?"
@@ -256,7 +256,7 @@ msgstr "Syfers"
#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSelector.component.html:5
msgid "Clear"
msgstr ""
msgstr "Opruim"
#: tabby-core/src/services/profiles.service.ts:133
msgid "Clear recent profiles"
@@ -340,7 +340,7 @@ msgstr "Kompak"
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:126
msgid "Config deleted"
msgstr ""
msgstr "Opstelling geskrap"
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:108
msgid "Config downloaded"

File diff suppressed because it is too large Load Diff

View File

@@ -10,7 +10,7 @@ msgstr ""
"Project-Id-Version: tabby\n"
"Language-Team: French\n"
"Language: fr_FR\n"
"PO-Revision-Date: 2023-02-06 19:58\n"
"PO-Revision-Date: 2023-03-17 23:07\n"
#: tabby-local/src/components/terminalTab.component.ts:112
msgid "\"{command}\" is still running. Close?"
@@ -256,7 +256,7 @@ msgstr "Chiffrement"
#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSelector.component.html:5
msgid "Clear"
msgstr ""
msgstr "Effacer"
#: tabby-core/src/services/profiles.service.ts:133
msgid "Clear recent profiles"
@@ -268,7 +268,7 @@ msgstr "Effacer le terminal"
#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:49
msgid "Clear terminal after connection"
msgstr ""
msgstr "Effacer le terminal après la connexion"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:94
msgid "Clipboard"
@@ -340,7 +340,7 @@ msgstr "Compact"
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:126
msgid "Config deleted"
msgstr ""
msgstr "Configuration supprimée"
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:108
msgid "Config downloaded"
@@ -410,7 +410,7 @@ msgstr "Copié"
#: tabby-terminal/src/tabContextMenu.ts:26
msgid "Copy"
msgstr "Copie"
msgstr "Copier"
#: tabby-terminal/src/hotkeys.ts:70
#: tabby-terminal/src/tabContextMenu.ts:66
@@ -419,7 +419,7 @@ msgstr "Copier le chemin actuel"
#: tabby-electron/src/sftpContextMenu.ts:29
msgid "Copy full path"
msgstr ""
msgstr "Copier le chemin complet"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:97
msgid "Copy on select"
@@ -545,7 +545,7 @@ msgstr "Supprimer le mot précédent"
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:114
msgid "Delete the config on the remote side?"
msgstr ""
msgstr "Supprimer la configuration du côté distant ?"
#: tabby-settings/src/components/profilesSettingsTab.component.ts:214
msgid "Delete the group's profiles?"
@@ -982,7 +982,7 @@ msgstr "Raccourcis clavier"
#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:71
msgid "How Tabby presents itself through environment vars"
msgstr ""
msgstr "Comment Tabby se présente à travers les variables d'environnement"
#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:24
msgid "HTTP proxy"
@@ -2127,7 +2127,7 @@ msgstr "Bip du terminal"
#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:70
msgid "Terminal identification"
msgstr ""
msgstr "Identification du terminal"
#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:7
msgid "Thank you for downloading Tabby!"

View File

@@ -10,7 +10,7 @@ msgstr ""
"Project-Id-Version: tabby\n"
"Language-Team: Japanese\n"
"Language: ja_JP\n"
"PO-Revision-Date: 2023-02-20 10:39\n"
"PO-Revision-Date: 2023-03-17 23:07\n"
#: tabby-local/src/components/terminalTab.component.ts:112
msgid "\"{command}\" is still running. Close?"
@@ -23,7 +23,7 @@ msgstr "{name} コピー"
#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:82
msgid "A second font family used to display characters missing in the main font"
msgstr "既定フォントに不足してる文字を補う代替フォント"
msgstr "既定フォントに不足してる文字を表示する際に使用されます"
#: tabby-core/src/components/transfersMenu.component.ts:49
msgid "Abort all"
@@ -148,7 +148,7 @@ msgstr "自動"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:156
msgid "Auto-open a terminal on app start"
msgstr "アプリケーション起動時に端末を自動で開く"
msgstr "アプリケーション起動時に新しい端末を自動で開く"
#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:13
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:53
@@ -268,7 +268,7 @@ msgstr "端末をクリア"
#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:49
msgid "Clear terminal after connection"
msgstr "接続後に端末をクリアします"
msgstr "接続後に端末をクリア"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:94
msgid "Clipboard"
@@ -581,7 +581,7 @@ msgstr "動的なタブ名を無効にする"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:229
msgid "Disable fluent background while dragging"
msgstr "ドラッグ中Fluentを無効にする"
msgstr "ドラッグ中Fluentを無効にする"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:215
msgid "Disable GPU acceleration"
@@ -646,7 +646,7 @@ msgstr "ドック表示"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:75
msgid "Double-click selection will stop at these characters"
msgstr "ダブルクリックによる選択時に区切りとなる文字を設定できます"
msgstr "ダブルクリックによるテキスト選択時に区切りとなる文字を設定できます"
#: tabby-core/src/tabContextMenu.ts:79
msgid "Down"
@@ -700,7 +700,7 @@ msgstr "アップデートが利用可能になったら自動的にインスト
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:222
msgid "Enable fluent background option"
msgstr "fluent背景の詳細設定を有効にする"
msgstr "Fluent背景設定を有効にする"
#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:16
msgid "Enable font ligatures"
@@ -841,7 +841,7 @@ msgstr "フォント"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:201
msgid "For keyboard shortcuts"
msgstr "キーボードショートカット"
msgstr "キーボードショートカット利用時に反映されます"
#: tabby-terminal/src/components/streamProcessingSettings.component.ts:51
msgid "Force CR"
@@ -982,7 +982,7 @@ msgstr "ホットキー"
#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:71
msgid "How Tabby presents itself through environment vars"
msgstr "環境変数をしてTabbyによる接続であることを接続先に送信します"
msgstr "環境変数を利用してTabbyを他の端末のように扱わせます"
#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:24
msgid "HTTP proxy"
@@ -1307,7 +1307,7 @@ msgstr "標準"
#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:22
msgid "Normal font weight"
msgstr "通常フォントの太さ"
msgstr "標準フォントの太さ"
#: tabby-terminal/src/components/searchPanel.component.ts:54
#: tabby-terminal/src/components/searchPanel.component.ts:64
@@ -1458,7 +1458,7 @@ msgstr "テキストを選択していない場合は貼り付け、選択中は
#: tabby-terminal/src/api/baseTerminalTab.component.ts:484
msgid "Paste multiple lines?"
msgstr "複数行の貼り付けを行いますか?"
msgstr "複数行の貼り付けを実行してもよろしいですか?"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:68
msgid "Paste on middle-click"
@@ -1608,7 +1608,7 @@ msgstr "リモート"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:124
msgid "Remove whitespace and newlines around the copied text"
msgstr "コピーしたテキスト前後のスペースや改行を除します"
msgstr "コピーしたテキストに含まれる前後の余分なスペースや改行を除します"
#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:25
#: tabby-core/src/tabContextMenu.ts:120
@@ -1668,7 +1668,7 @@ msgstr "変更を反映するには再起動が必要です"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:162
msgid "Restore terminal tabs on app start"
msgstr "アプリケーション起動時に端末タブを復元する"
msgstr "アプリケーション起動時に以前開いていたタブを復元する"
#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:147
msgid "Reuse session for multiple tabs"
@@ -1744,7 +1744,7 @@ msgstr "バックスクロール"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:47
msgid "Scrolls the terminal to the bottom on user input"
msgstr "ユーザー入力時に端末をにスクロール"
msgstr "入力時に端末を最下部にスクロールします"
#: tabby-terminal/src/hotkeys.ts:74
msgid "Search"
@@ -1862,7 +1862,7 @@ msgstr "{type} プロファイルセレクターを表示"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:117
msgid "Show a confirmation box when pasting multiple lines"
msgstr "複数行を貼り付けるときに確認ボックスを表示します"
msgstr "複数行を貼り付けるに確認ボックスを表示します"
#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:63
msgid "Show built-in profiles in selector"
@@ -2023,7 +2023,7 @@ msgstr "最新情報を受け取る"
#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:17
msgid "Substitutions allowed."
msgstr "置換することができます"
msgstr "置き換えに対応しています"
#: tabby-core/src/tabContextMenu.ts:290
msgid "Switch profile"
@@ -2127,7 +2127,7 @@ msgstr "端末音"
#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:70
msgid "Terminal identification"
msgstr "端末情報の送信"
msgstr "端末の識別情報"
#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:7
msgid "Thank you for downloading Tabby!"
@@ -2312,7 +2312,7 @@ msgstr "複数行貼り付け時に警告"
#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:5
msgid "Warn when closing active connections"
msgstr "使用中の接続を閉じたときに警告"
msgstr "使用中の接続を閉じる際に警告"
#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:6
msgid "Warning: remote host's key has suddenly changed!"

View File

@@ -10,11 +10,11 @@ msgstr ""
"Project-Id-Version: tabby\n"
"Language-Team: Korean\n"
"Language: ko_KR\n"
"PO-Revision-Date: 2023-02-06 19:58\n"
"PO-Revision-Date: 2023-03-17 23:07\n"
#: tabby-local/src/components/terminalTab.component.ts:112
msgid "\"{command}\" is still running. Close?"
msgstr "\"{command}\" 명령어가 여전히 동작중입니다. 닫을까요?"
msgstr "\"{command}\" 명령어가 동작중입니다. 창을 닫으시겠습니까?"
#: tabby-settings/src/components/profilesSettingsTab.component.ts:79
#: tabby-settings/src/components/profilesSettingsTab.component.ts:90
@@ -23,7 +23,7 @@ msgstr "{name} 복사"
#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:82
msgid "A second font family used to display characters missing in the main font"
msgstr "메인 글꼴에서 누락된 문자를 표시하기 위해 사용하는 2번째 글꼴"
msgstr "설정된 폰트 누락시 대체하기 위한 폰트"
#: tabby-core/src/components/transfersMenu.component.ts:49
msgid "Abort all"
@@ -35,7 +35,7 @@ msgstr "허용 후 키 저장"
#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:25
msgid "Accept just this once"
msgstr "이번 한번만 허용"
msgstr "지금만 허용하기"
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:84
msgid "Accessibility"
@@ -256,7 +256,7 @@ msgstr "암호화"
#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSelector.component.html:5
msgid "Clear"
msgstr ""
msgstr "지우기"
#: tabby-core/src/services/profiles.service.ts:133
msgid "Clear recent profiles"
@@ -268,7 +268,7 @@ msgstr "터미널 비우기"
#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:49
msgid "Clear terminal after connection"
msgstr ""
msgstr "연결 후 터미널 지우기"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:94
msgid "Clipboard"
@@ -340,7 +340,7 @@ msgstr "콤팩트"
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:126
msgid "Config deleted"
msgstr ""
msgstr "설정 삭제됨"
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:108
msgid "Config downloaded"
@@ -419,7 +419,7 @@ msgstr "현재 경로 복사"
#: tabby-electron/src/sftpContextMenu.ts:29
msgid "Copy full path"
msgstr ""
msgstr "전체 경로 복사"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:97
msgid "Copy on select"

View File

@@ -10,7 +10,7 @@ msgstr ""
"Project-Id-Version: tabby\n"
"Language-Team: Portuguese, Brazilian\n"
"Language: pt_BR\n"
"PO-Revision-Date: 2023-02-06 19:58\n"
"PO-Revision-Date: 2023-03-17 23:07\n"
#: tabby-local/src/components/terminalTab.component.ts:112
msgid "\"{command}\" is still running. Close?"
@@ -209,7 +209,7 @@ msgstr "Colar entre colchetes (requer suporte ao \"shell\")"
#: tabby-terminal/src/services/multifocus.service.ts:19
msgid "Broadcast mode. Click anywhere to cancel."
msgstr ""
msgstr "Modo de transmissão. Clique em qualquer lugar para cancelar."
#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:54
#: tabby-settings/src/components/profilesSettingsTab.component.ts:175
@@ -256,7 +256,7 @@ msgstr "Cifras"
#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSelector.component.html:5
msgid "Clear"
msgstr ""
msgstr "Limpar"
#: tabby-core/src/services/profiles.service.ts:133
msgid "Clear recent profiles"
@@ -268,7 +268,7 @@ msgstr "Limpar terminal"
#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:49
msgid "Clear terminal after connection"
msgstr ""
msgstr "Limpar terminal após conexão"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:94
msgid "Clipboard"
@@ -340,7 +340,7 @@ msgstr "Compacto"
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:126
msgid "Config deleted"
msgstr ""
msgstr "Configuração excluída"
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:108
msgid "Config downloaded"
@@ -419,7 +419,7 @@ msgstr "Copiar o caminho atual"
#: tabby-electron/src/sftpContextMenu.ts:29
msgid "Copy full path"
msgstr ""
msgstr "Copiar caminho completo"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:97
msgid "Copy on select"
@@ -545,7 +545,7 @@ msgstr "Excluir palavra anterior"
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:114
msgid "Delete the config on the remote side?"
msgstr ""
msgstr "Excluir a configuração do lado remoto?"
#: tabby-settings/src/components/profilesSettingsTab.component.ts:214
msgid "Delete the group's profiles?"
@@ -785,7 +785,7 @@ msgstr "Focar todos os painéis"
#: tabby-terminal/src/hotkeys.ts:78
msgid "Focus all panes at once (broadcast)"
msgstr "Focar todos os painéis de uma vez (Broadcast)"
msgstr "Focar todos os painéis de uma vez (Transmissão)"
#: tabby-terminal/src/tabContextMenu.ts:71
msgid "Focus all tabs"
@@ -1910,7 +1910,7 @@ msgstr "Mostrar conexões em série"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:163
msgid "Show tabs in fullscreen mode"
msgstr ""
msgstr "Mostrar abas no modo de tela cheia"
#: tabby-terminal/src/tabContextMenu.ts:58
msgid "Show toolbar"

View File

@@ -10,7 +10,7 @@ msgstr ""
"Project-Id-Version: tabby\n"
"Language-Team: Chinese Simplified\n"
"Language: zh_CN\n"
"PO-Revision-Date: 2023-02-20 10:39\n"
"PO-Revision-Date: 2023-03-17 23:07\n"
#: tabby-local/src/components/terminalTab.component.ts:112
msgid "\"{command}\" is still running. Close?"
@@ -1736,7 +1736,7 @@ msgstr "滚动终端到底部"
#: tabby-terminal/src/hotkeys.ts:86
msgid "Scroll terminal to top"
msgstr "滑动中断到顶端"
msgstr "滑动终端到顶端"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:16
msgid "Scrollback"

View File

@@ -10,7 +10,7 @@ msgstr ""
"Project-Id-Version: tabby\n"
"Language-Team: Chinese Traditional\n"
"Language: zh_TW\n"
"PO-Revision-Date: 2023-02-20 10:39\n"
"PO-Revision-Date: 2023-03-17 23:07\n"
#: tabby-local/src/components/terminalTab.component.ts:112
msgid "\"{command}\" is still running. Close?"
@@ -23,7 +23,7 @@ msgstr "{name} 複製"
#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:82
msgid "A second font family used to display characters missing in the main font"
msgstr "第二個字體系列,用於顯示主字中缺少的字元"
msgstr "備用字型用於顯示主字中缺少的字元"
#: tabby-core/src/components/transfersMenu.component.ts:49
msgid "Abort all"
@@ -52,11 +52,11 @@ msgstr "新增"
#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:16
msgid "Add a port forward"
msgstr "新增埠轉送"
msgstr "新增通訊埠轉送"
#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:115
msgid "Add a private key"
msgstr "添加私密金鑰"
msgstr "新增私鑰"
#: locale/tmp-html/tabby-settings/src/components/multiHotkeyInput.component.html:8
msgid "Add..."
@@ -328,7 +328,7 @@ msgstr "指令行"
#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:13
msgid "Command's stdin/stdout is used instead of a network connection"
msgstr "使用 stdin/stdout 指令代替網絡連"
msgstr "使用 stdin/stdout 指令代替網絡連"
#: tabby-core/src/services/commands.service.ts:104
msgid "Commands"
@@ -366,7 +366,7 @@ msgstr "設定"
#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:21
msgid "Connect through a proxy server"
msgstr "通過代理伺服器連"
msgstr "通過代理伺服器連"
#: tabby-core/src/index.ts:227
#: tabby-core/src/services/profiles.service.ts:178
@@ -375,7 +375,7 @@ msgstr "正在連線到 \"%s\"..."
#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:17
msgid "Connect to a different host first and use it as a proxy"
msgstr "先連到其它主機並將其作為代理伺服器"
msgstr "先連到其它主機並將其作為代理伺服器"
#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:19
#: tabby-serial/src/components/serialTab.component.ts:66
@@ -386,7 +386,7 @@ msgstr "正在連線"
#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:7
msgid "Connection"
msgstr "連"
msgstr "連"
#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:30
msgid "Connection failed: {error}"
@@ -394,7 +394,7 @@ msgstr "連線失敗: {error}"
#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:42
msgid "Connection name will be used instead"
msgstr "將改用連接名替换"
msgstr "連線名稱將被使用"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:61
msgid "Context menu"
@@ -581,7 +581,7 @@ msgstr "停用動態分頁標題"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:229
msgid "Disable fluent background while dragging"
msgstr "拖動時禁用 fluent 背景"
msgstr "拖曳時停用 fluent 背景"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:215
msgid "Disable GPU acceleration"
@@ -600,11 +600,11 @@ msgstr "中斷連線"
#: tabby-ssh/src/components/sshTab.component.ts:244
#: tabby-telnet/src/components/telnetTab.component.ts:113
msgid "Disconnect from {host}?"
msgstr "與 {host} 斷開連接嗎?"
msgstr "與 {host} 中斷連線嗎?"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:30
msgid "Display images via Sixel escape sequences"
msgstr "通過六像素轉義序列顯示圖"
msgstr "透過Sixel跳脫序列顯示圖"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:88
msgid "Display on"
@@ -708,7 +708,7 @@ msgstr "啟用合字"
#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:26
msgid "Enable global hotkey (Ctrl-Space)"
msgstr "啟用全域快鍵 (Ctrl+Space)"
msgstr "啟用全域快鍵 (Ctrl+Space)"
#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:6
msgid "Enables the experimental Windows ConPTY API"
@@ -757,7 +757,7 @@ msgstr "匯出"
#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:81
msgid "Fallback font"
msgstr "備字型"
msgstr "備字型"
#: locale/tmp-html/tabby-core/src/components/transfersMenu.component.html:3
msgid "File transfers"
@@ -777,7 +777,7 @@ msgstr "固定寬度"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:230
msgid "Fluent background sometimes causes drag lag"
msgstr "Fluent 背景有時會導致拖延遲"
msgstr "Fluent 背景有時會導致拖延遲"
#: tabby-terminal/src/tabContextMenu.ts:78
msgid "Focus all panes"
@@ -857,7 +857,7 @@ msgstr "強制使用 LF"
#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:25
msgid "Forces a specific SSH agent connection type."
msgstr "強制 SSH使用特定的連類型"
msgstr "強制 SSH使用特定的連類型"
#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:105
msgid "Forget"
@@ -865,11 +865,11 @@ msgstr "清除"
#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:58
msgid "Forward port"
msgstr "轉發"
msgstr "通訊埠轉發"
#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingModal.component.html:3
msgid "Forwarded ports"
msgstr "已轉發埠"
msgstr "已轉發通訊埠"
#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:47
msgid "From color scheme"
@@ -978,7 +978,7 @@ msgstr "主機金鑰驗證"
#: locale/tmp-html/tabby-settings/src/components/hotkeySettingsTab.component.html:2
#: tabby-settings/src/settings.ts:15
msgid "Hotkeys"
msgstr "快鍵"
msgstr "快鍵"
#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:71
msgid "How Tabby presents itself through environment vars"
@@ -994,7 +994,7 @@ msgstr "HTTP 代理主機位址"
#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:65
msgid "HTTP proxy port"
msgstr "HTTP 代理連接埠"
msgstr "HTTP 代理通訊埠"
#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:20
msgid "Icon"
@@ -1483,22 +1483,22 @@ msgstr "擴充功能資料夾"
#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:38
#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:10
msgid "Port"
msgstr "埠"
msgstr "通訊埠"
#: tabby-serial/src/components/serialTab.component.ts:71
msgid "Port opened"
msgstr "埠已打開"
msgstr "通訊埠已打開"
#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:119
#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:12
msgid "Ports"
msgstr "埠"
msgstr "通訊埠"
#: tabby-serial/src/components/serialTab.component.ts:86
#: tabby-ssh/src/components/sshTab.component.ts:169
#: tabby-telnet/src/components/telnetTab.component.ts:53
msgid "Press any key to reconnect"
msgstr "按下任意鍵以重新連"
msgstr "按下任意鍵以重新連"
#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:3
msgid "Press the key now"
@@ -1808,7 +1808,7 @@ msgstr "序列"
#: tabby-serial/src/profiles.ts:51
#: tabby-serial/src/profiles.ts:62
msgid "Serial connection"
msgstr "序列連接"
msgstr "序列埠連線"
#: tabby-serial/src/profiles.ts:71
msgid "Serial: {description}"
@@ -1922,7 +1922,7 @@ msgstr "顯示金鑰庫的內容"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:29
msgid "Sixel graphics support (experimental)"
msgstr "實驗性Sixel圖形支援"
msgstr "(實驗性) Sixel圖形支援"
#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:140
msgid "Skip MoTD/banner"
@@ -1995,7 +1995,7 @@ msgstr "SSH 連線"
#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:53
msgid "SSH connection management is now done through the \"Profiles & connections\" tab"
msgstr "SSH連管理現在位於「設定檔與連線」分頁下"
msgstr "SSH連管理現在位於「設定檔與連線」分頁下"
#: tabby-settings/src/components/vaultSettingsTab.component.ts:84
msgid "SSH password for {user}@{host}:{port}"
@@ -2143,7 +2143,7 @@ msgstr "正在進行檔案傳輸"
#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:102
msgid "There is a saved password for this connection"
msgstr "此次連可使用已儲存密碼"
msgstr "此次連可使用已儲存密碼"
#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:81
msgid "These apply to all profiles of a given type"
@@ -2312,7 +2312,7 @@ msgstr "貼上多行時警告"
#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:5
msgid "Warn when closing active connections"
msgstr "關閉連中的視窗時警告"
msgstr "關閉連中的視窗時警告"
#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:6
msgid "Warning: remote host's key has suddenly changed!"
@@ -2420,5 +2420,5 @@ msgstr "縮小"
#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:55
msgctxt "[Dynamic] port forwarding"
msgid "id.port-forwarding.dynamic"
msgstr "動態端口轉發"
msgstr "動態通訊埠轉發"

View File

@@ -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,53 @@
"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",
"**/graceful-fs": "^4.2.4"
"*/node-abi": "^3.33.0",
"**/graceful-fs": "^4.2.4",
"nan": "2.17.0"
},
"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
}

View File

@@ -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)

View File

@@ -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/')

View File

@@ -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/')

View File

@@ -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)
}
}
})()

22
scripts/build-modules.mjs Executable file
View File

@@ -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)
}
}
})()

View File

@@ -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

View File

@@ -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)

View File

@@ -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/')

View File

@@ -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 = {}

View File

@@ -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()

View File

@@ -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 })

View File

@@ -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)

View File

@@ -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)

View File

@@ -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'

View File

@@ -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',
@@ -22,32 +25,32 @@ exports.builtinPlugins = [
'tabby-ssh',
'tabby-serial',
'tabby-telnet',
'tabby-electron',
'tabby-local',
'tabby-electron',
'tabby-plugin-manager',
'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}`)
}

View File

@@ -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' })

View File

@@ -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
}

View File

@@ -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"

View File

@@ -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'

View File

@@ -176,6 +176,7 @@ export abstract class PlatformService {
abstract setErrorHandler (handler: (_: any) => void): void
abstract popupContextMenu (menu: MenuItemOptions[], event?: MouseEvent): void
abstract showMessageBox (options: MessageBoxOptions): Promise<MessageBoxResult>
abstract pickDirectory (): Promise<string>
abstract quit (): void
}

View File

@@ -13,4 +13,5 @@ export abstract class Theme {
macOSWindowButtonsInsetX?: number
macOSWindowButtonsInsetY?: number
followsColorScheme?: boolean
}

View File

@@ -71,7 +71,7 @@ title-bar(
ngbDropdown
)
button.btn.btn-secondary.btn-tab-bar(
[title]='button.title',
[title]='button.label',
(click)='button.run && button.run()',
[fastHtmlBind]='button.icon',
ngbDropdownToggle,

View File

@@ -10,11 +10,12 @@
cursor: default;
animation: 0.5s ease-out fadeIn;
transition: 0.25s background;
--tabs-height: calc(38px * var(--spaciness));
--side-tab-width: calc(200px * var(--spaciness));
}
$tabs-height: 38px;
$tab-border-radius: 4px;
$side-tab-width: 200px;
.wrap {
display: flex;
@@ -46,19 +47,19 @@ $side-tab-width: 200px;
.content.tabs-on-side > .tab-bar {
height: 100%;
width: $side-tab-width;
width: var(--side-tab-width);
overflow-y: auto;
overflow-x: hidden;
flex-direction: column;
background: rgba(0, 0, 0, 0.25);
.tabs {
width: $side-tab-width;
width: var(--side-tab-width);
flex: none;
flex-direction: column;
tab-header {
flex: 0 0 $tabs-height;
flex: 0 0 var(--tabs-height);
}
}
@@ -69,18 +70,22 @@ $side-tab-width: 200px;
&>.inset {
opacity: 0;
}
::ng-deep tab-header {
width: 100% !important;
}
}
.tab-bar {
flex: none;
height: $tabs-height;
height: var(--tabs-height);
display: flex;
width: 100%;
.btn-tab-bar {
line-height: $tabs-height + 2px;
height: $tabs-height;
line-height: calc(var(--tabs-height) + 2px);
height: var(--tabs-height);
cursor: pointer;
display: flex;
@@ -113,17 +118,20 @@ $side-tab-width: 200px;
&>.drag-space {
min-width: 1px;
flex: 1 0 1%;
margin-top: 2px; // for window resizing
-webkit-app-region: drag;
.tabs-on-top & {
margin-top: 2px; // for window resizing
}
&.persistent {
min-width: 72px; // 2 x 36 px height, ie 2 squares
}
}
& > .inset {
width: 85px;
height: $tabs-height;
width: calc(70px + 15px * var(--spaciness));
height: var(--tabs-height);
flex: none;
-webkit-app-region: drag;
}
@@ -170,18 +178,12 @@ hotkey-hint {
::ng-deep .btn-tab-bar svg,
::ng-deep .btn-tab-bar + .dropdown-menu svg {
width: 22px;
height: 16px;
width: calc(22px * var(--spaciness));
height: calc(16px * var(--spaciness));
fill: white;
fill-opacity: 0.75;
}
.icon-wrapper {
display: flex;
width: 16px;
height: 17px;
}
::ng-deep .btn-update svg {
fill: cyan;
}

View File

@@ -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)),
],
@@ -79,8 +79,8 @@ export class AppRootComponent {
constructor (
private hotkeys: HotkeysService,
private updater: UpdaterService,
private commands: CommandService,
public updater: UpdaterService,
public hostWindow: HostWindowService,
public hostApp: HostAppService,
public config: ConfigService,
@@ -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())

View File

@@ -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)
@@ -191,6 +192,14 @@ export abstract class BaseTabComponent extends BaseComponent {
this.viewContainer = undefined
}
get topmostParent (): BaseTabComponent|null {
let parent = this.parent
while (parent?.parent) {
parent = parent.parent
}
return parent
}
/**
* Called before the tab is closed
*/

View File

@@ -6,9 +6,9 @@ import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'
@Component({
selector: 'checkbox',
template: `
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" [(ngModel)]='model'>
<label class="custom-control-label">{{text}}</label>
<div class="form-check form-checkbox">
<input type="checkbox" class="form-check-input" [(ngModel)]='model'>
<label class="form-check-label">{{text}}</label>
</div>
`,
providers: [

View File

@@ -5,5 +5,5 @@ i.icon(
)
.icon(
[fastHtmlBind]='icon',
*ngIf='isHTML'
*ngIf='isHTML && icon'
)

View File

@@ -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

View File

@@ -14,6 +14,6 @@
[(ngModel)]='remember',
text='Remember'
)
button.btn.btn-primary.ml-auto(
button.btn.btn-primary.ms-auto(
(click)='ok()',
) OK

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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<T> {
@Input() options: SelectorOption<T>[]

View File

@@ -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() }

View File

@@ -186,7 +186,7 @@ export type SplitDropZoneInfo = {
>
</split-tab-pane-label>
`,
styles: [require('./splitTab.component.scss')],
styleUrls: ['./splitTab.component.scss'],
})
export class SplitTabComponent extends BaseTabComponent implements AfterViewInit, OnDestroy {
static DIRECTIONS: SplitDirection[] = ['t', 'r', 'b', 'l']
@@ -458,12 +458,18 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
tab.destroy()
}
let allTabs: BaseTabComponent[] = []
if (thing instanceof BaseTabComponent) {
if (thing.parent instanceof SplitTabComponent) {
thing.parent.removeTab(thing)
allTabs = [thing]
} else if (thing instanceof SplitContainer) {
allTabs = thing.getAllTabs()
}
for (const tab of allTabs) {
if (tab.parent instanceof SplitTabComponent) {
tab.parent.removeTab(tab)
}
thing.removeFromContainer()
thing.parent = this
tab.removeFromContainer()
tab.parent = this
}
let target = relative ? this.getParentOf(relative) : null

View File

@@ -18,7 +18,7 @@ import { SplitDropZoneInfo, SplitTabComponent } from './splitTab.component'
>
</div>
`,
styles: [require('./splitTabDropZone.component.scss')],
styleUrls: ['./splitTabDropZone.component.scss'],
})
export class SplitTabDropZoneComponent extends SelfPositioningComponent {
@Input() dropZone: SplitDropZoneInfo

View File

@@ -15,11 +15,11 @@ import { SelfPositioningComponent } from './selfPositioning.component'
(cdkDragStarted)='onTabDragStart(tab)'
(cdkDragEnded)='onTabDragEnd()'
>
<i class="fa fa-window-maximize mr-3"></i>
<i class="fa fa-window-maximize me-3"></i>
<label>{{tab.title}}</label>
</div>
`,
styles: [require('./splitTabPaneLabel.component.scss')],
styleUrls: ['./splitTabPaneLabel.component.scss'],
})
export class SplitTabPaneLabelComponent extends SelfPositioningComponent {
@Input() tab: BaseTabComponent

View File

@@ -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);
}
}

View File

@@ -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

View File

@@ -1,10 +1,11 @@
div
.mt-auto.mb-auto
.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 +13,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

View File

@@ -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
}
}

View File

@@ -7,9 +7,4 @@
>* {
flex: auto;
}
> perfect-scrollbar {
width: auto;
height: auto;
}
}

View File

@@ -8,9 +8,9 @@ import { BaseTabComponent } from '../components/baseTab.component'
template: `
<ng-template #placeholder></ng-template>
`,
styles: [
require('./tabBody.component.scss'),
require('./tabBody.deep.component.css'),
styleUrls: [
'./tabBody.component.scss',
'./tabBody.deep.component.css',
],
})
export class TabBodyComponent implements OnChanges {

View File

@@ -8,7 +8,7 @@
profile-icon(
*ngIf='config.store.terminal.showTabProfileIcon && tab.icon',
[icon]='tab.icon',
[color]='tab.color'
[color]='tab.color ?? undefined'
)
.name(

View File

@@ -35,7 +35,7 @@ $tabs-height: 38px;
-webkit-app-region: no-drag;
cursor: -webkit-grab;
width: 22px;
width: calc(22px * var(--spaciness));
border-radius: 10px;
text-align: center;
transition: 0.25s all;
@@ -144,6 +144,5 @@ $tabs-height: 38px;
right: 10px;
bottom: 4px;
height: 2px;
z-index: -1;
}
}

View File

@@ -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

View File

@@ -1,2 +1,2 @@
.title((dblclick)='hostApp.toggleMaximize()') Tabby
.title((dblclick)='hostWindow.toggleMaximize()') Tabby
window-controls

View File

@@ -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) { }
}

View File

@@ -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;
}
}

View File

@@ -6,12 +6,12 @@ import { CheckboxComponent } from './checkbox.component'
@Component({
selector: 'toggle',
template: `
<div class="custom-control custom-switch">
<input type="checkbox" class="custom-control-input" [(ngModel)]='model'>
<label class="custom-control-label"></label>
<div class="form-check form-switch">
<input type="checkbox" class="form-check-input" [(ngModel)]='model'>
<label class="cform-check-label"></label>
</div>
`,
styles: [require('./toggle.component.scss')],
styleUrls: ['./toggle.component.scss'],
providers: [
{ provide: NG_VALUE_ACCESSOR, useExisting: ToggleComponent, multi: true },
],

View File

@@ -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')}

View File

@@ -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[]

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -1,18 +1,18 @@
button.btn.btn-secondary.btn-minimize(
button.btn.btn-dark(
(click)='hostWindow.minimize()',
)
svg(version='1.1', width='10', height='10')
path(d='M 0,5 10,5 10,6 0,6 Z')
button.btn.btn-secondary.btn-maximize((click)='hostWindow.toggleMaximize()', *ngIf='!hostWindow.isMaximized()')
button.btn.btn-dark((click)='hostWindow.toggleMaximize()', *ngIf='!hostWindow.isMaximized()')
svg(version='1.1', width='10', height='10')
path(d='M 0,0 0,10 10,10 10,0 Z M 1,1 9,1 9,9 1,9 Z')
button.btn.btn-secondary.btn-maximize((click)='hostWindow.toggleMaximize()', *ngIf='hostWindow.isMaximized()')
button.btn.btn-dark((click)='hostWindow.toggleMaximize()', *ngIf='hostWindow.isMaximized()')
svg(version='1.1', width='10', height='10', viewBox='0 0 512 512')
path(d="M464 0H144c-26.5 0-48 21.5-48 48v48H48c-26.5 0-48 21.5-48 48v320c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h48c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM32 144c0-8.8 7.2-16 16-16h320c8.8 0 16 7.2 16 16v320c0 8.8-7.2 16-16 16H48c-8.8 0-16-7.2-16-16v-80zm448 224c0 8.8-7.2 16-16 16h-48V144c0-26.5-21.5-48-48-48H128V48c0-8.8 7.2-16 16-16h320c8.8 0 16 7.2 16 16v320z")
button.btn.btn-secondary.btn-close(
button.btn.btn-danger(
(click)='closeWindow()'
)
svg(version='1.1', width='10', height='10')

View File

@@ -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) { }

View File

@@ -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
}

View File

@@ -36,8 +36,7 @@ hotkeys:
- '⌘-8'
tab-9:
- '⌘-9'
tab-10:
- '⌘-0'
tab-10: []
duplicate-tab: []
restart-tab: []
explode-tab:

View File

@@ -18,6 +18,7 @@ appearance:
vibrancy: false
vibrancyType: 'blur'
lastTabClosesWindow: false
spaciness: 1
terminal:
showBuiltinProfiles: true
showRecentProfiles: 3

View File

@@ -6,7 +6,7 @@ import { PlatformService } from '../api/platform'
selector: '[fastHtmlBind]',
})
export class FastHtmlBindDirective implements OnChanges {
@Input() fastHtmlBind: string
@Input() fastHtmlBind?: string
constructor (
private el: ElementRef,
@@ -14,7 +14,7 @@ export class FastHtmlBindDirective implements OnChanges {
) { }
ngOnChanges (): void {
this.el.nativeElement.innerHTML = this.fastHtmlBind || ''
this.el.nativeElement.innerHTML = this.fastHtmlBind ?? ''
for (const link of this.el.nativeElement.querySelectorAll('a')) {
link.addEventListener('click', event => {
event.preventDefault()

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More