Compare commits

...

125 Commits

Author SHA1 Message Date
dependabot[bot]
c4081aff83 Bump yaml from 2.2.1 to 2.2.2
Bumps [yaml](https://github.com/eemeli/yaml) from 2.2.1 to 2.2.2.
- [Release notes](https://github.com/eemeli/yaml/releases)
- [Commits](https://github.com/eemeli/yaml/compare/v2.2.1...v2.2.2)

---
updated-dependencies:
- dependency-name: yaml
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-25 21:07:35 +00:00
Eugene Pankov
b9b98bd949 Merge branch 'master' of github.com:Eugeny/tabby 2023-04-23 21:34:17 -07:00
Eugene
ff66f050e0 Merge pull request #8206 from Clem-Fern/feat#7751
[feature] add configurable behavior when session ends
2023-04-24 06:07:07 +02:00
Eugene Pankov
20479e9f27 bumped plugins 2023-04-23 10:22:38 -07:00
Eugene Pankov
e48b2032ad updated peerDependencies 2023-04-23 08:57:05 -07:00
Eugene Pankov
dc8ddfcd15 #8282 - updated package.json files 2023-04-23 08:40:17 -07:00
Clem
b1acfe2519 resolves Eugeny/tabby#7751, Eugeny/tabby#8062, Eugeny/tabby#6617 add behavior when session ends 2023-04-23 10:50:39 +02:00
Eugene Pankov
19d59a4cfb allow disabling individual providers and commands through config 2023-04-22 13:41:15 -07:00
Clem
f2a62413da ref(tabby-local): use setSession method in terminalTab component 2023-04-22 15:51:29 +02:00
Clem
6498c4f923 ref: implement recentInputs on baseTerminalTab 2023-04-22 15:23:59 +02:00
Clem
f423be1510 Revert "resolves Eugeny/tabby#7751, Eugeny/tabby#8062, Eugeny/tabby#6617 add configurable behavior when session ends"
This reverts commit 268af8806c.
2023-04-22 14:36:43 +02:00
Clem
8cb75e14a2 Revert "lint"
This reverts commit b0973791a8.
2023-04-22 14:36:14 +02:00
Eugene
6997c24dfa Merge pull request #8249 from mottcha/patch-1 2023-04-17 08:52:55 +02:00
mottcha
94c5133104 Update README.ja-JP.md
Added an advertisement about Warpgate
2023-04-17 14:51:29 +09:00
mottcha
98f20cfb5d Update README.ja-JP.md
Hi! I fixed some expressions in Japanese and translated newly text.
- Fixed some sentences to be more natural and polite expressions.
- Added new sponsor keygen
2023-04-17 10:27:37 +09:00
Eugene Pankov
1450e0436f include the default color scheme in the list 2023-04-16 18:03:10 +02:00
Eugene Pankov
65756a62bc ui: fixed secondary button contrast 2023-04-16 17:47:47 +02:00
Eugene Pankov
84b0e13dc8 fixed #7162, fixed #7309, fixed #6812 - "hide on focus loss" not working with multiple windows/modals 2023-04-16 14:08:27 +02:00
Eugene Pankov
b144331396 updated contributors 2023-04-14 15:56:06 +02:00
Clem
b0973791a8 lint 2023-04-12 23:52:25 +02:00
Clem
268af8806c resolves Eugeny/tabby#7751, Eugeny/tabby#8062, Eugeny/tabby#6617 add configurable behavior when session ends 2023-04-12 23:20:06 +02:00
Eugene
c5d79135ab Merge pull request #7808 from Eugeny/dependabot/npm_and_yarn/app/windows-process-tree-0.4.0 2023-04-12 09:43:46 +02:00
Eugene
f54908d603 Merge pull request #8003 from Eugeny/dependabot/npm_and_yarn/eslint-plugin-import-2.27.5 2023-04-12 09:43:23 +02:00
Eugene
1fee5fbc58 Merge pull request #8048 from Eugeny/dependabot/npm_and_yarn/typescript-eslint/parser-5.54.1 2023-04-12 09:43:07 +02:00
Eugene
ada47d0cfa Merge pull request #8201 from Clem-Fern/feat#7723 2023-04-12 09:42:50 +02:00
Clem
bbca7a6a84 feat: reconnect current tab hotkey 2023-04-11 23:47:24 +02:00
Clem
d1b45812d5 lint + refactor 2023-04-11 22:53:05 +02:00
Eugene Pankov
6a0c5f1e1f bumped angular 2023-04-10 21:26:01 +02:00
Eugene Pankov
3b8ca0d592 lint 2023-04-10 21:21:49 +02:00
Eugene Pankov
73fae43027 fixed #8133 - added active tab indicator, updated default color scheme 2023-04-10 20:53:45 +02:00
Eugene Pankov
34188debd4 lint 2023-04-10 20:38:59 +02:00
Eugene Pankov
9f050d8e0d updated locales 2023-04-10 20:14:21 +02:00
Clem
178e4a6527 resolve Eugeny/tabby#7723 reconnect command palette 2023-04-10 19:48:27 +02:00
Eugene Pankov
c0837febfe fixed #8171 - bumped xterm-addon-canvas 2023-04-10 19:30:12 +02:00
Eugene Pankov
dfc7a2cb94 fixed modal background color 2023-04-10 19:20:38 +02:00
Eugene
7da2a15bf7 Merge pull request #8198 from Clem-Fern/fix#8154
fix Eugeny/tabby#8154 : search panel counter starts from 0
2023-04-10 16:29:36 +02:00
Clem
8bcb7d443a Merge branch 'fix#8154' of https://github.com/Clem-Fern/tabby into fix#8154 2023-04-10 15:22:19 +02:00
Clem
ab593ac1f3 (corrected) fix Eugeny/tabby#8154 : search panel counter starts from 0 2023-04-10 15:18:51 +02:00
Clem
9835466e68 fix Eugeny/tabby#8154 : search panel counter starts from 0 2023-04-10 12:44:39 +02:00
Eugene Pankov
3e559832ec updated contributors 2023-04-06 15:00:41 +02:00
Eugene Pankov
01953ff064 ui: new theme contrast fixes - fixed #8128 2023-03-23 23:18:08 +01:00
Eugene Pankov
a22f9a8b43 lint 2023-03-23 22:24:09 +01:00
Eugene Pankov
b710c1711f ui: better contrast between active and inactive tabs 2023-03-23 21:31:39 +01:00
Eugene Pankov
4e6b1d2ed2 fixed #8134 - can't change serial session baudrate 2023-03-23 21:04:30 +01:00
Eugene Pankov
2a8b7c3e79 fixed #8124 - animation toggle didn't affect pane maximizing 2023-03-21 21:03:14 +01:00
Eugene Pankov
9a6e684f9e added minimum contrast ratio support to the theme 2023-03-21 20:55:31 +01:00
Eugene Pankov
1ebf29a977 Merge branch 'master' of github.com:Eugeny/tabby 2023-03-21 19:35:27 +01:00
Eugene Pankov
0cd856b51f replaced hashbin with which 2023-03-21 17:24:56 +01:00
Eugene Pankov
307b4ea266 removed unused ngbDropdown directives 2023-03-21 15:55:03 +01:00
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
dependabot[bot]
1f2fa5cce7 Bump @typescript-eslint/parser from 5.45.0 to 5.54.1
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 5.45.0 to 5.54.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.54.1/packages/parser)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/parser"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-07 05:00:13 +00: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
dependabot[bot]
344fd5d05a Bump eslint-plugin-import from 2.26.0 to 2.27.5
Bumps [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import) from 2.26.0 to 2.27.5.
- [Release notes](https://github.com/import-js/eslint-plugin-import/releases)
- [Changelog](https://github.com/import-js/eslint-plugin-import/blob/main/CHANGELOG.md)
- [Commits](https://github.com/import-js/eslint-plugin-import/compare/v2.26.0...v2.27.5)

---
updated-dependencies:
- dependency-name: eslint-plugin-import
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-02-27 05:00:30 +00:00
Eugene Pankov
441f442915 typing fixes 2023-02-27 00:09:04 +01:00
dependabot[bot]
6225bceab4 Bump windows-process-tree from 0.3.4 to 0.4.0 in /app
Bumps [windows-process-tree](https://github.com/Microsoft/vscode-windows-process-tree) from 0.3.4 to 0.4.0.
- [Release notes](https://github.com/Microsoft/vscode-windows-process-tree/releases)
- [Commits](https://github.com/Microsoft/vscode-windows-process-tree/compare/0.3.4...0.4.0)

---
updated-dependencies:
- dependency-name: windows-process-tree
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-02-26 19:43:54 +00: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
Eugene Pankov
7a8108b20d updated locales 2023-02-20 11:40:49 +01:00
Eugene Pankov
34cf60617a . 2023-02-14 09:05:05 +01:00
Eugene Pankov
c113d4d082 updated locales 2023-02-06 20:58:37 +01:00
Eugene Pankov
0a2011acba Merge branch 'master' of github.com:Eugeny/tabby 2023-02-04 19:55:27 +01:00
Eugene Pankov
45ea4f4532 updated locales - fixes #7876 2023-02-04 19:55:08 +01:00
Clem
ac5019f4d9 fix Eugeny/tabby#4684 - removing profile's hotkeys on profile delete 2023-02-04 19:53:33 +01:00
Clem
44a39b022c ref: export AppHotkeyProvider from tabby-core 2023-02-04 19:53:33 +01:00
Eugene Pankov
01b0be6d22 Update README.md 2023-02-04 19:52:14 +01:00
Eugene Pankov
69d884e164 separate color schemes per profile - fixes #5885, fixes #4593, fixes #3516, fixes #7457, fixes #765 2023-02-04 19:51:16 +01:00
Eugene Pankov
e0181973f7 avoid infinite loop on incorrect private key passphrase 2023-02-04 19:19:46 +01:00
Eugene Pankov
85bb7a2e95 potentially fix config corruption - #5355, #7874 2023-02-04 09:46:05 +01:00
Clem
9e5c9ede44 fix: prevent backspace in profile selection 2023-02-03 14:13:47 +01:00
allcontributors[bot]
1738caa4a8 update README.es-ES.md [skip ci] 2023-01-30 20:09:32 +01:00
allcontributors[bot]
da41526166 update README.pt-BR.md [skip ci] 2023-01-30 20:09:32 +01:00
allcontributors[bot]
e410d76f96 update .all-contributorsrc [skip ci] 2023-01-30 20:09:32 +01:00
allcontributors[bot]
a3334db22b update README.ja-JP.md [skip ci] 2023-01-30 20:09:32 +01:00
allcontributors[bot]
89cbdd1cc5 update README.id-ID.md [skip ci] 2023-01-30 20:09:32 +01:00
allcontributors[bot]
3307042134 update README.de-DE.md [skip ci] 2023-01-30 20:09:32 +01:00
allcontributors[bot]
276430fb02 update README.it-IT.md [skip ci] 2023-01-30 20:09:32 +01:00
allcontributors[bot]
ca9308e5e4 update README.ko-KR.md [skip ci] 2023-01-30 20:09:32 +01:00
allcontributors[bot]
b2b8847aa1 update README.ru-RU.md [skip ci] 2023-01-30 20:09:32 +01:00
allcontributors[bot]
1c6f0745b5 update README.zh-CN.md [skip ci] 2023-01-30 20:09:32 +01:00
allcontributors[bot]
70fe869b2c update README.md [skip ci] 2023-01-30 20:09:32 +01:00
Sicco
e4ab127567 Fix issues 2023-01-30 19:52:18 +01:00
Clem
f095a3abec lint: indentation 2023-01-30 18:37:54 +01:00
Clem
ce6ed5267c feat: add button to delete remote config sync 2023-01-30 18:37:54 +01:00
Eugene Pankov
9ceb6b4416 bumped plugins 2023-01-29 13:21:51 +01:00
Eugene Pankov
6ccb48fc62 delay loading SSH importers until all plugins are ready 2023-01-29 13:17:30 +01:00
Eugene Pankov
2f5c6fafa9 run patch-package from the prepare script 2023-01-29 12:35:06 +01:00
Eugene Pankov
010c18a07b updated contributors 2023-01-29 10:46:35 +01:00
Elizabeth Martín Campos
7ab1d4b778 feat: publish typings for tabby-ssh 2023-01-29 10:20:58 +01:00
Eugene Pankov
f3d3e10afb fixed #7775 - line height changing unexpectedly when zooming in/out 2023-01-27 23:19:35 +01:00
Eugene Pankov
7491c3119f fixed #7841 - clear SSH service messages by default 2023-01-27 23:14:29 +01:00
Eugene Pankov
842636aa15 #7315 - added terminal identification option on windows 2023-01-27 22:40:16 +01:00
allcontributors[bot]
5e2976ab3d update .all-contributorsrc [skip ci] 2023-01-23 23:51:01 +01:00
allcontributors[bot]
07c1bda92c update README.pt-BR.md [skip ci] 2023-01-23 23:51:01 +01:00
allcontributors[bot]
94c2aa505c update README.ja-JP.md [skip ci] 2023-01-23 23:51:01 +01:00
allcontributors[bot]
5711b3489b update README.es-ES.md [skip ci] 2023-01-23 23:51:01 +01:00
allcontributors[bot]
86c423257d update README.id-ID.md [skip ci] 2023-01-23 23:51:01 +01:00
allcontributors[bot]
c765e8e487 update README.de-DE.md [skip ci] 2023-01-23 23:51:01 +01:00
allcontributors[bot]
ffe8b6973d update README.it-IT.md [skip ci] 2023-01-23 23:51:01 +01:00
allcontributors[bot]
dbfea265b0 update README.ko-KR.md [skip ci] 2023-01-23 23:51:01 +01:00
allcontributors[bot]
97a13ec53f update README.ru-RU.md [skip ci] 2023-01-23 23:51:01 +01:00
allcontributors[bot]
70571d27d3 update README.zh-CN.md [skip ci] 2023-01-23 23:51:01 +01:00
allcontributors[bot]
49074adece update README.md [skip ci] 2023-01-23 23:51:01 +01:00
Clem
8bf5065187 fix Eugeny/tabby#7254 - config sync replace ngModelChange by key down enter 2023-01-23 23:39:59 +01:00
Eugene Pankov
b624218feb fixed #7745 - skip incorrect WSL registry entries 2023-01-14 19:41:34 +01:00
Eugene Pankov
62d2735f86 sftp: added "copy full path" context menu item - fixed #7013, fixed #6866 2023-01-08 20:26:22 +01:00
Eugene Pankov
1397d0faed allow editing the current SFTP path by double-clicking - #7154, fixed #7291, fixed #7295, fixed #6666, fixed #6646, fixed #6354, fixed #5646 2023-01-08 20:23:23 +01:00
Eugene Pankov
24f8a4bd43 fixed #7755 - prevent release notes links from navigating away 2023-01-08 20:09:26 +01:00
Benjamin Brandmeier
c57a7e73ea improve hotkey filter performance 2023-01-08 18:59:13 +01:00
Eugene Pankov
9fd23779b0 updated contributors 2023-01-07 09:56:00 +01:00
353 changed files with 11197 additions and 8654 deletions

View File

@@ -1085,6 +1085,69 @@
"contributions": [
"financial"
]
},
{
"login": "ukulanne",
"name": "Anne Summers",
"avatar_url": "https://avatars.githubusercontent.com/u/28586666?v=4",
"profile": "https://github.com/ukulanne",
"contributions": [
"financial"
]
},
{
"login": "Clem-Fern",
"name": "Clem",
"avatar_url": "https://avatars.githubusercontent.com/u/20025949?v=4",
"profile": "https://github.com/Clem-Fern",
"contributions": [
"code"
]
},
{
"login": "elizabeth-dev",
"name": "Elizabeth Martín Campos",
"avatar_url": "https://avatars.githubusercontent.com/u/13015727?v=4",
"profile": "https://github.com/elizabeth-dev",
"contributions": [
"code"
]
},
{
"login": "siccous",
"name": "Tomáš Hruška",
"avatar_url": "https://avatars.githubusercontent.com/u/7812885?v=4",
"profile": "https://github.com/siccous",
"contributions": [
"code"
]
},
{
"login": "karaketir16",
"name": "Osman Karaketir",
"avatar_url": "https://avatars.githubusercontent.com/u/27349806?v=4",
"profile": "https://github.com/karaketir16",
"contributions": [
"code"
]
},
{
"login": "CryptoGnome",
"name": "Crypto Gnome",
"avatar_url": "https://avatars.githubusercontent.com/u/33667144?v=4",
"profile": "https://www.gnomegarden.io/",
"contributions": [
"financial"
]
},
{
"login": "rbukovansky",
"name": "Richard Bukovansky",
"avatar_url": "https://avatars.githubusercontent.com/u/1004491?v=4",
"profile": "https://github.com/rbukovansky",
"contributions": [
"financial"
]
}
],
"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

@@ -305,6 +305,15 @@ Dank geht an diese wunderbaren Menschen ([emoji key](https://allcontributors.org
<td align="center"><a href="https://github.com/hermitpopcorn"><img src="https://avatars.githubusercontent.com/u/16042129?v=4?s=100" width="100px;" alt=""/><br /><sub><b>hermitpopcorn</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=hermitpopcorn" title="Code">💻</a></td>
<td align="center"><a href="https://joshuatz.com/"><img src="https://avatars.githubusercontent.com/u/17817563?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Joshua Tzucker</b></sub></a><br /><a href="#financial-joshuatz" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/luxifr"><img src="https://avatars.githubusercontent.com/u/665715?v=4?s=100" width="100px;" alt=""/><br /><sub><b>luxifr</b></sub></a><br /><a href="#financial-luxifr" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/ukulanne"><img src="https://avatars.githubusercontent.com/u/28586666?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Anne Summers</b></sub></a><br /><a href="#financial-ukulanne" title="Financial">💵</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/Clem-Fern"><img src="https://avatars.githubusercontent.com/u/20025949?v=4?s=100" width="100px;" alt=""/><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"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt=""/><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"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt=""/><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"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
<td align="center"><a href="https://www.gnomegarden.io/"><img src="https://avatars.githubusercontent.com/u/33667144?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Crypto Gnome</b></sub></a><br /><a href="#financial-CryptoGnome" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/rbukovansky"><img src="https://avatars.githubusercontent.com/u/1004491?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Richard Bukovansky</b></sub></a><br /><a href="#financial-rbukovansky" title="Financial">💵</a></td>
</tr>
</table>

View File

@@ -307,6 +307,15 @@ Gracias a estas maravillosas personas ([emoji key](https://allcontributors.org/d
<td align="center"><a href="https://github.com/hermitpopcorn"><img src="https://avatars.githubusercontent.com/u/16042129?v=4?s=100" width="100px;" alt=""/><br /><sub><b>hermitpopcorn</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=hermitpopcorn" title="Code">💻</a></td>
<td align="center"><a href="https://joshuatz.com/"><img src="https://avatars.githubusercontent.com/u/17817563?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Joshua Tzucker</b></sub></a><br /><a href="#financial-joshuatz" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/luxifr"><img src="https://avatars.githubusercontent.com/u/665715?v=4?s=100" width="100px;" alt=""/><br /><sub><b>luxifr</b></sub></a><br /><a href="#financial-luxifr" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/ukulanne"><img src="https://avatars.githubusercontent.com/u/28586666?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Anne Summers</b></sub></a><br /><a href="#financial-ukulanne" title="Financial">💵</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/Clem-Fern"><img src="https://avatars.githubusercontent.com/u/20025949?v=4?s=100" width="100px;" alt=""/><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"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt=""/><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"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt=""/><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"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
<td align="center"><a href="https://www.gnomegarden.io/"><img src="https://avatars.githubusercontent.com/u/33667144?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Crypto Gnome</b></sub></a><br /><a href="#financial-CryptoGnome" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/rbukovansky"><img src="https://avatars.githubusercontent.com/u/1004491?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Richard Bukovansky</b></sub></a><br /><a href="#financial-rbukovansky" title="Financial">💵</a></td>
</tr>
</table>

View File

@@ -304,6 +304,15 @@ Terima kasih kepada mereka yang telah membantu ([emoji key](https://allcontribut
<td align="center"><a href="https://github.com/hermitpopcorn"><img src="https://avatars.githubusercontent.com/u/16042129?v=4?s=100" width="100px;" alt=""/><br /><sub><b>hermitpopcorn</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=hermitpopcorn" title="Code">💻</a></td>
<td align="center"><a href="https://joshuatz.com/"><img src="https://avatars.githubusercontent.com/u/17817563?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Joshua Tzucker</b></sub></a><br /><a href="#financial-joshuatz" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/luxifr"><img src="https://avatars.githubusercontent.com/u/665715?v=4?s=100" width="100px;" alt=""/><br /><sub><b>luxifr</b></sub></a><br /><a href="#financial-luxifr" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/ukulanne"><img src="https://avatars.githubusercontent.com/u/28586666?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Anne Summers</b></sub></a><br /><a href="#financial-ukulanne" title="Financial">💵</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/Clem-Fern"><img src="https://avatars.githubusercontent.com/u/20025949?v=4?s=100" width="100px;" alt=""/><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"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt=""/><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"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt=""/><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"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
<td align="center"><a href="https://www.gnomegarden.io/"><img src="https://avatars.githubusercontent.com/u/33667144?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Crypto Gnome</b></sub></a><br /><a href="#financial-CryptoGnome" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/rbukovansky"><img src="https://avatars.githubusercontent.com/u/1004491?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Richard Bukovansky</b></sub></a><br /><a href="#financial-rbukovansky" title="Financial">💵</a></td>
</tr>
</table>

View File

@@ -300,6 +300,15 @@ Grazie a queste persone meravigliose ([emoji key](https://allcontributors.org/do
<td align="center"><a href="https://github.com/hermitpopcorn"><img src="https://avatars.githubusercontent.com/u/16042129?v=4?s=100" width="100px;" alt=""/><br /><sub><b>hermitpopcorn</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=hermitpopcorn" title="Code">💻</a></td>
<td align="center"><a href="https://joshuatz.com/"><img src="https://avatars.githubusercontent.com/u/17817563?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Joshua Tzucker</b></sub></a><br /><a href="#financial-joshuatz" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/luxifr"><img src="https://avatars.githubusercontent.com/u/665715?v=4?s=100" width="100px;" alt=""/><br /><sub><b>luxifr</b></sub></a><br /><a href="#financial-luxifr" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/ukulanne"><img src="https://avatars.githubusercontent.com/u/28586666?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Anne Summers</b></sub></a><br /><a href="#financial-ukulanne" title="Financial">💵</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/Clem-Fern"><img src="https://avatars.githubusercontent.com/u/20025949?v=4?s=100" width="100px;" alt=""/><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"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt=""/><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"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt=""/><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"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
<td align="center"><a href="https://www.gnomegarden.io/"><img src="https://avatars.githubusercontent.com/u/33667144?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Crypto Gnome</b></sub></a><br /><a href="#financial-CryptoGnome" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/rbukovansky"><img src="https://avatars.githubusercontent.com/u/1004491?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Richard Bukovansky</b></sub></a><br /><a href="#financial-rbukovansky" title="Financial">💵</a></td>
</tr>
</table>

View File

@@ -11,17 +11,24 @@
</a>
</p>
---
> 👋 リモート環境の管理に困ってませんか? [WarpgateというSSH/HTTP/MySQL向けの便利な踏み台サーバー](https://github.com/warp-tech/warpgate)も作ってます。Tabbyとも相性ばっちりなので良かったらお試しください。
----
### ダウンロード:
* [Latest release](https://github.com/Eugeny/tabby/releases/latest)
* [Repositories](https://packagecloud.io/eugeny/tabby): [Debian/Ubuntu-based](https://packagecloud.io/eugeny/tabby/install#bash-deb), [RPM-based](https://packagecloud.io/eugeny/tabby/install#bash-rpm)
* [Latest nightly build](https://nightly.link/Eugeny/tabby/workflows/build/master)
* [最新のリリース](https://github.com/Eugeny/tabby/releases/latest)
* [リポジトリ](https://packagecloud.io/eugeny/tabby): [Debian/Ubuntu向け](https://packagecloud.io/eugeny/tabby/install#bash-deb), [RPM向け](https://packagecloud.io/eugeny/tabby/install#bash-rpm)
* [最新の開発ビルド版](https://nightly.link/Eugeny/tabby/workflows/build/master)
<br/>
<p align="center">
このREADMEは次の言語にも対応: <a href="./README.md">:gb: English</a> · <a href="./README.es-ES.md">:es: Spanish</a> · <a href="./README.ru-RU.md">:ru: Русский</a> · <a href="./README.ko-KR.md">:kr: 한국어</a> · <a href="./README.zh-CN.md">:cn: 简体中文</a> · <a href="./README.it-IT.md">:it: Italiano</a> · <a href="./README.de-DE.md">:de: Deutsch</a> · <a href="./README.id-ID.md">:id: Bahasa Indonesia</a> · <a href="./README.pt-BR.md">:br: Português</a>
このREADMEは次の言語でもご覧いただけます: <a href="./README.md">:gb: English</a> · <a href="./README.es-ES.md">:es: Spanish</a> · <a href="./README.ru-RU.md">:ru: Русский</a> · <a href="./README.ko-KR.md">:kr: 한국어</a> · <a href="./README.zh-CN.md">:cn: 简体中文</a> · <a href="./README.it-IT.md">:it: Italiano</a> · <a href="./README.de-DE.md">:de: Deutsch</a> · <a href="./README.id-ID.md">:id: Bahasa Indonesia</a> · <a href="./README.pt-BR.md">:br: Português</a>
</p>
----
@@ -40,7 +47,7 @@
* 大量の出力にも止まることはありません
* タブキーによる補完機能にも対応したWindows上での快適なシェル (Clink使用)
* SSHの機密性の高い情報と設定を保存する暗号化コンテナの搭載
* SSH、SFTP、Telnetクライアントが[Webアプリ](https://tabby.sh/app)として利用可能 ([セルフホスティング](https://github.com/Eugeny/tabby-web)も可能)
* SSH、SFTP、Telnetクライアントが[Webアプリ](https://tabby.sh/app)として利用できます ([セルフホスティング](https://github.com/Eugeny/tabby-web)も可能)
# コンテンツ <!-- omit in toc -->
@@ -87,7 +94,7 @@
* SSH2クライアントと接続マネージャー
* X11とポートフォワーディング
* 自動ジャンプサーバー管理
* エージェント転送(PageantとWindows標準OpenSSHエージェントを含む)
* エージェント転送PageantとWindows標準OpenSSHエージェントを含む
* ログインスクリプト
<a name="serial"></a>
@@ -104,7 +111,7 @@
# ポータブル機能
Windows上では、`Tabby.exe`がある場所と同じ場所に`data`フォルダを作成すれば、ポータブルアプリケーションとして実行することができます。
Windows上では、`Tabby.exe`がある場所と同じ場所に`data`フォルダを作成すれば、ポータブルアプリとして実行することができます。
<a name="plugins"></a>
@@ -116,10 +123,10 @@ Windows上では、`Tabby.exe`がある場所と同じ場所に`data`フォル
* [title-control](https://github.com/kbjr/terminus-title-control) - タブ名の前後に文字を入れたり指定した文字の削除をすることができます
* [quick-cmds](https://github.com/Domain/terminus-quick-cmds) - 一つもしくは複数のタブに手軽にコマンド送信することができます
* [save-output](https://github.com/Eugeny/tabby-save-output) - ターミナルの出力をファイルに保存することができます
* [sync-config](https://github.com/starxg/terminus-sync-config) - GistやGitee設定ファイルを同期することができます
* [clippy](https://github.com/Eugeny/tabby-clippy) - いつもあなたを悩ますプラグインの作例
* [sync-config](https://github.com/starxg/terminus-sync-config) - GistやGitee設定ファイルを同期することができます
* [clippy](https://github.com/Eugeny/tabby-clippy) - プラグインの作例として、いつも厄介なあいつが出てくるプラグイン
* [workspace-manager](https://github.com/composer404/tabby-workspace-manager) - 指定された設定からカスタマイズされたワークスペースを作成することができます
* [search-in-browser](https://github.com/composer404/tabby-search-in-browser) - Tabby内の端末で選択したテキストを標準の既定ブラウザで開くことができます。
* [search-in-browser](https://github.com/composer404/tabby-search-in-browser) - Tabby内の端末で選択したテキストを既定ブラウザで開くことができます。
<a name="themes"></a>
@@ -137,17 +144,21 @@ Windows上では、`Tabby.exe`がある場所と同じ場所に`data`フォル
[**packagecloud**](https://packagecloud.io)は、Debian/RPMリポジトリのホスティングを無償で提供しています
[![](https://user-images.githubusercontent.com/161476/200423885-7aba2202-fea7-4409-95b9-3a062ce902c7.png)](https://keygen.sh/?via=eugene)
[**keygen**](https://keygen.sh/?via=eugene)は、自動リリース機能および自動更新機能のホスティングを無償で提供しています
<a name="contributing"></a>
# コントリビュート
プルリクエストやプラグインは大歓迎です!
プロジェクトの構成や、ごく簡単なプラグイン開発のチュートリアルについては、[HACKING.md](https://github.com/Eugeny/tabby/blob/master/HACKING.md)び、[API docs](https://docs.tabby.sh/)を参照してください。
プロジェクトの構成や、非常に簡単なプラグイン開発のチュートリアルについては、[HACKING.md](https://github.com/Eugeny/tabby/blob/master/HACKING.md)および、[API docs](https://docs.tabby.sh/)を参照してください。
---
<a name="contributors"></a>
の素晴らしい人たち([emoji key](https://allcontributors.org/docs/en/emoji-key))に感謝します:
以下の素晴らしい方々([emoji key](https://allcontributors.org/docs/en/emoji-key))に感謝いたします:
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start -->
@@ -304,6 +315,15 @@ Windows上では、`Tabby.exe`がある場所と同じ場所に`data`フォル
<td align="center"><a href="https://github.com/hermitpopcorn"><img src="https://avatars.githubusercontent.com/u/16042129?v=4?s=100" width="100px;" alt=""/><br /><sub><b>hermitpopcorn</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=hermitpopcorn" title="Code">💻</a></td>
<td align="center"><a href="https://joshuatz.com/"><img src="https://avatars.githubusercontent.com/u/17817563?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Joshua Tzucker</b></sub></a><br /><a href="#financial-joshuatz" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/luxifr"><img src="https://avatars.githubusercontent.com/u/665715?v=4?s=100" width="100px;" alt=""/><br /><sub><b>luxifr</b></sub></a><br /><a href="#financial-luxifr" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/ukulanne"><img src="https://avatars.githubusercontent.com/u/28586666?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Anne Summers</b></sub></a><br /><a href="#financial-ukulanne" title="Financial">💵</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/Clem-Fern"><img src="https://avatars.githubusercontent.com/u/20025949?v=4?s=100" width="100px;" alt=""/><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"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt=""/><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"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt=""/><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"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
<td align="center"><a href="https://www.gnomegarden.io/"><img src="https://avatars.githubusercontent.com/u/33667144?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Crypto Gnome</b></sub></a><br /><a href="#financial-CryptoGnome" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/rbukovansky"><img src="https://avatars.githubusercontent.com/u/1004491?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Richard Bukovansky</b></sub></a><br /><a href="#financial-rbukovansky" title="Financial">💵</a></td>
</tr>
</table>
@@ -312,4 +332,4 @@ Windows上では、`Tabby.exe`がある場所と同じ場所に`data`フォル
<!-- ALL-CONTRIBUTORS-LIST:END -->
このプロジェクトは[all-contributors](https://github.com/all-contributors/all-contributors)の仕様に準拠しています。どのような形の貢献でも歓迎します!
このプロジェクトは[all-contributors](https://github.com/all-contributors/all-contributors)の仕様に準拠しています。どのような形の貢献でも歓迎いたします

View File

@@ -294,6 +294,15 @@ Pull requests and plugins are welcome!
<td align="center"><a href="https://github.com/hermitpopcorn"><img src="https://avatars.githubusercontent.com/u/16042129?v=4?s=100" width="100px;" alt=""/><br /><sub><b>hermitpopcorn</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=hermitpopcorn" title="Code">💻</a></td>
<td align="center"><a href="https://joshuatz.com/"><img src="https://avatars.githubusercontent.com/u/17817563?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Joshua Tzucker</b></sub></a><br /><a href="#financial-joshuatz" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/luxifr"><img src="https://avatars.githubusercontent.com/u/665715?v=4?s=100" width="100px;" alt=""/><br /><sub><b>luxifr</b></sub></a><br /><a href="#financial-luxifr" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/ukulanne"><img src="https://avatars.githubusercontent.com/u/28586666?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Anne Summers</b></sub></a><br /><a href="#financial-ukulanne" title="Financial">💵</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/Clem-Fern"><img src="https://avatars.githubusercontent.com/u/20025949?v=4?s=100" width="100px;" alt=""/><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"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt=""/><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"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt=""/><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"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
<td align="center"><a href="https://www.gnomegarden.io/"><img src="https://avatars.githubusercontent.com/u/33667144?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Crypto Gnome</b></sub></a><br /><a href="#financial-CryptoGnome" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/rbukovansky"><img src="https://avatars.githubusercontent.com/u/1004491?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Richard Bukovansky</b></sub></a><br /><a href="#financial-rbukovansky" title="Financial">💵</a></td>
</tr>
</table>

View File

@@ -27,7 +27,7 @@
<br/>
<p align="center">
This README is also available in: <a href="./README.es-ES.md">:es: Spanish</a> · <a href="./README.ru-RU.md">:ru: Русский</a> · <a href="./README.ko-KR.md">:kr: 한국어</a> · <a href="./README.zh-CN.md">:cn: 简体中文</a> · <a href="./README.it-IT.md">:it: Italiano</a> · <a href="./README.de-DE.md">:de: Deutsch</a> · <a href="./README.ja-JP.md">:jp: 日本語</a> · <a href="./README.id-ID.md">:id: Bahasa Indonesia</a> · <a href="./README.pt-BR.md">:br: Português</a>
This README is also available in: <a href="./README.es-ES.md">:es: Spanish</a> · <a href="./README.ru-RU.md">:ru: Русский</a> · <a href="./README.ko-KR.md">:kr: 한국어</a> · <a href="./README.zh-CN.md">:cn: 简体中文</a> · <a href="./README.it-IT.md">:it: Italiano</a> · <a href="./README.de-DE.md">:de: Deutsch</a> · <a href="./README.ja-JP.md">:jp: 日本語</a> · <a href="./README.id-ID.md">:id: Bahasa Indonesia</a> · <a href="./README.pt-BR.md">🇧🇷 Português</a>
</p>
----
@@ -314,6 +314,15 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
<td align="center"><a href="https://github.com/hermitpopcorn"><img src="https://avatars.githubusercontent.com/u/16042129?v=4?s=100" width="100px;" alt=""/><br /><sub><b>hermitpopcorn</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=hermitpopcorn" title="Code">💻</a></td>
<td align="center"><a href="https://joshuatz.com/"><img src="https://avatars.githubusercontent.com/u/17817563?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Joshua Tzucker</b></sub></a><br /><a href="#financial-joshuatz" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/luxifr"><img src="https://avatars.githubusercontent.com/u/665715?v=4?s=100" width="100px;" alt=""/><br /><sub><b>luxifr</b></sub></a><br /><a href="#financial-luxifr" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/ukulanne"><img src="https://avatars.githubusercontent.com/u/28586666?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Anne Summers</b></sub></a><br /><a href="#financial-ukulanne" title="Financial">💵</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/Clem-Fern"><img src="https://avatars.githubusercontent.com/u/20025949?v=4?s=100" width="100px;" alt=""/><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"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt=""/><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"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt=""/><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"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
<td align="center"><a href="https://www.gnomegarden.io/"><img src="https://avatars.githubusercontent.com/u/33667144?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Crypto Gnome</b></sub></a><br /><a href="#financial-CryptoGnome" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/rbukovansky"><img src="https://avatars.githubusercontent.com/u/1004491?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Richard Bukovansky</b></sub></a><br /><a href="#financial-rbukovansky" title="Financial">💵</a></td>
</tr>
</table>

View File

@@ -308,6 +308,15 @@ Obrigado vai para essas pessoas maravilhosas ([emoji key](https://allcontributor
<td align="center"><a href="https://github.com/hermitpopcorn"><img src="https://avatars.githubusercontent.com/u/16042129?v=4?s=100" width="100px;" alt=""/><br /><sub><b>hermitpopcorn</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=hermitpopcorn" title="Code">💻</a></td>
<td align="center"><a href="https://joshuatz.com/"><img src="https://avatars.githubusercontent.com/u/17817563?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Joshua Tzucker</b></sub></a><br /><a href="#financial-joshuatz" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/luxifr"><img src="https://avatars.githubusercontent.com/u/665715?v=4?s=100" width="100px;" alt=""/><br /><sub><b>luxifr</b></sub></a><br /><a href="#financial-luxifr" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/ukulanne"><img src="https://avatars.githubusercontent.com/u/28586666?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Anne Summers</b></sub></a><br /><a href="#financial-ukulanne" title="Financial">💵</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/Clem-Fern"><img src="https://avatars.githubusercontent.com/u/20025949?v=4?s=100" width="100px;" alt=""/><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"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt=""/><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"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt=""/><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"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
<td align="center"><a href="https://www.gnomegarden.io/"><img src="https://avatars.githubusercontent.com/u/33667144?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Crypto Gnome</b></sub></a><br /><a href="#financial-CryptoGnome" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/rbukovansky"><img src="https://avatars.githubusercontent.com/u/1004491?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Richard Bukovansky</b></sub></a><br /><a href="#financial-rbukovansky" title="Financial">💵</a></td>
</tr>
</table>

View File

@@ -300,6 +300,15 @@ Pull-запросы и плагины приветствуются!
<td align="center"><a href="https://github.com/hermitpopcorn"><img src="https://avatars.githubusercontent.com/u/16042129?v=4?s=100" width="100px;" alt=""/><br /><sub><b>hermitpopcorn</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=hermitpopcorn" title="Code">💻</a></td>
<td align="center"><a href="https://joshuatz.com/"><img src="https://avatars.githubusercontent.com/u/17817563?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Joshua Tzucker</b></sub></a><br /><a href="#financial-joshuatz" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/luxifr"><img src="https://avatars.githubusercontent.com/u/665715?v=4?s=100" width="100px;" alt=""/><br /><sub><b>luxifr</b></sub></a><br /><a href="#financial-luxifr" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/ukulanne"><img src="https://avatars.githubusercontent.com/u/28586666?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Anne Summers</b></sub></a><br /><a href="#financial-ukulanne" title="Financial">💵</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/Clem-Fern"><img src="https://avatars.githubusercontent.com/u/20025949?v=4?s=100" width="100px;" alt=""/><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"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt=""/><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"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt=""/><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"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
<td align="center"><a href="https://www.gnomegarden.io/"><img src="https://avatars.githubusercontent.com/u/33667144?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Crypto Gnome</b></sub></a><br /><a href="#financial-CryptoGnome" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/rbukovansky"><img src="https://avatars.githubusercontent.com/u/1004491?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Richard Bukovansky</b></sub></a><br /><a href="#financial-rbukovansky" title="Financial">💵</a></td>
</tr>
</table>

View File

@@ -299,6 +299,15 @@
<td align="center"><a href="https://github.com/hermitpopcorn"><img src="https://avatars.githubusercontent.com/u/16042129?v=4?s=100" width="100px;" alt=""/><br /><sub><b>hermitpopcorn</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=hermitpopcorn" title="Code">💻</a></td>
<td align="center"><a href="https://joshuatz.com/"><img src="https://avatars.githubusercontent.com/u/17817563?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Joshua Tzucker</b></sub></a><br /><a href="#financial-joshuatz" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/luxifr"><img src="https://avatars.githubusercontent.com/u/665715?v=4?s=100" width="100px;" alt=""/><br /><sub><b>luxifr</b></sub></a><br /><a href="#financial-luxifr" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/ukulanne"><img src="https://avatars.githubusercontent.com/u/28586666?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Anne Summers</b></sub></a><br /><a href="#financial-ukulanne" title="Financial">💵</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/Clem-Fern"><img src="https://avatars.githubusercontent.com/u/20025949?v=4?s=100" width="100px;" alt=""/><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"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt=""/><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"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt=""/><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"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
<td align="center"><a href="https://www.gnomegarden.io/"><img src="https://avatars.githubusercontent.com/u/33667144?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Crypto Gnome</b></sub></a><br /><a href="#financial-CryptoGnome" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/rbukovansky"><img src="https://avatars.githubusercontent.com/u/1004491?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Richard Bukovansky</b></sub></a><br /><a href="#financial-rbukovansky" title="Financial">💵</a></td>
</tr>
</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

@@ -169,7 +169,7 @@ export class Application {
broadcastExcept (event: string, except: WebContents, ...args: any[]): void {
for (const window of this.windows) {
if (window.webContents.id === except.id) {
if (window.webContents.id !== except.id) {
window.send(event, ...args)
}
}

View File

@@ -125,7 +125,11 @@ export class Window {
})
this.window.on('blur', () => {
if ((this.configStore.appearance?.dock ?? 'off') !== 'off' && this.configStore.appearance?.dockHideOnBlur) {
if (
(this.configStore.appearance?.dock ?? 'off') !== 'off' &&
this.configStore.appearance?.dockHideOnBlur &&
!BrowserWindow.getFocusedWindow()
) {
this.hide()
}
})
@@ -413,7 +417,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"
"windows-process-tree": "^0.4.0"
},
"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",
"patch-package": "^6.5.0"
"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"
@@ -2245,7 +2257,7 @@ mz@^2.7.0:
object-assign "^4.0.1"
thenify-all "^1.0.0"
nan@^2.13.2, nan@^2.16.0, "nan@github:jkleinsc/nan#remove_accessor_signature":
nan@^2.16.0, nan@^2.17.0, "nan@github:jkleinsc/nan#remove_accessor_signature":
version "2.16.0"
resolved "https://codeload.github.com/jkleinsc/nan/tar.gz/6a2f95a6a2209d8aa7542fb18099fd808a802059"
@@ -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"
@@ -3923,12 +3939,12 @@ windows-native-registry@^3.2.1:
dependencies:
node-addon-api "^3.1.0"
windows-process-tree@^0.3.4:
version "0.3.4"
resolved "https://registry.yarnpkg.com/windows-process-tree/-/windows-process-tree-0.3.4.tgz#6bc4b8010129c30ff95bcd333b9f94744dd3c4fb"
integrity sha512-rtSX73i9OnkDxSdBP9c1YBunEwheZdO/hjRwNk9uSoWqO92x0zDRGfIIK0MtUn8gZZD+2kPEVpj5MmfNl7JpJA==
windows-process-tree@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/windows-process-tree/-/windows-process-tree-0.4.0.tgz#31ac49c5da557e628ce7e37a5800972173d3349a"
integrity sha512-9LunDnc1WwuhyLeTAXMFX8wbActGJtDCBaiapQXFYk/nO4W4X9YxOKV5g/lQL3XX69QYxveDbjVVrdnTt1qqCQ==
dependencies:
nan "^2.13.2"
nan "^2.17.0"
worker-farm@^1.6.0, worker-farm@^1.7.0:
version "1.7.0"

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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

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.2.6",
"@angular/cdk": "^15.2.6",
"@angular/common": "^15.2.6",
"@angular/compiler": "^15.2.6",
"@angular/compiler-cli": "^15.2.6",
"@angular/core": "^15.2.6",
"@angular/forms": "^15.2.6",
"@angular/platform-browser": "^15.2.6",
"@angular/platform-browser-dynamic": "^15.2.6",
"@biesbjerg/ngx-translate-extract-marker": "^1.0.0",
"@fortawesome/fontawesome-free": "^6.2.0",
"@ng-bootstrap/ng-bootstrap": "^10.0.0",
"@fortawesome/fontawesome-free": "^6.4.0",
"@ng-bootstrap/ng-bootstrap": "^14.1.0",
"@ngtools/webpack": "^15.2.5",
"@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,29 +23,29 @@
"@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",
"@typescript-eslint/parser": "^5.54.1",
"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.0",
"electron": "22.3.1",
"electron-builder": "^24.0.0-alpha.1",
"electron-download": "^4.1.1",
"electron-installer-snap": "^5.1.0",
"electron-notarize": "^1.2.2",
"electron-rebuild": "^3.2.9",
"eslint": "^8.29.0",
"eslint": "^8.38.0",
"eslint-import-resolver-typescript": "^3.5.2",
"eslint-plugin-import": "^2.26.0",
"eslint-plugin-import": "^2.27.5",
"file-loader": "^6.2.0",
"gettext-extractor": "^3.5.4",
"graceful-fs": "^4.2.10",
@@ -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#22735cecf1d9c118b2b8af1c2f80fe5b04996fe1",
"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",
"zone.js": "^0.11.5"
"webpack-cli": "^5.0.1",
"yaml-loader": "0.8.0",
"zone.js": "^0.13.0"
},
"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 +1,6 @@
{
"name": "tabby-community-color-schemes",
"version": "1.0.187-nightly.1",
"version": "1.0.197-nightly.1",
"description": "Community color schemes for Tabby",
"keywords": [
"tabby-builtin-plugin"
@@ -17,7 +17,7 @@
"author": "Eugene Pankov",
"license": "MIT",
"peerDependencies": {
"@angular/core": "^9.1.9",
"@angular/core": "^15",
"tabby-core": "*",
"tabby-terminal": "*"
}

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.187-nightly.1",
"version": "1.0.197-nightly.1",
"description": "Tabby core",
"keywords": [
"tabby-builtin-plugin"
@@ -12,31 +12,30 @@
"watch": "webpack --progress --color --watch"
},
"files": [
"dist",
"typings"
],
"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"
},
"peerDependencies": {
"@angular/animations": "^9.1.9",
"@angular/common": "^9.1.11",
"@angular/core": "^9.1.9",
"@angular/forms": "^9.1.11",
"@angular/platform-browser": "^9.1.11",
"@angular/platform-browser-dynamic": "^9.1.11",
"rxjs": "^6.6.3"
"@angular/animations": "^15",
"@angular/common": "^15",
"@angular/core": "^15",
"@angular/forms": "^15",
"@angular/platform-browser": "^15",
"@angular/platform-browser-dynamic": "^15",
"rxjs": "^7"
}
}

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

@@ -14,6 +14,7 @@ export interface Profile {
icon?: string
color?: string
disableDynamicTitle: boolean
behaviorOnSessionEnd: 'auto'|'keep'|'reconnect'|'close'
weight: number
isBuiltin: boolean

View File

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

View File

@@ -27,7 +27,7 @@ export class CoreCommandProvider extends CommandProvider {
async provide (): Promise<Command[]> {
return [
{
id: 'profile-selector',
id: 'core:profile-selector',
locations: [CommandLocation.LeftToolbar, CommandLocation.StartPage],
label: this.translate.instant('Profiles & connections'),
icon: this.hostApp.platform === Platform.Web
@@ -35,7 +35,8 @@ export class CoreCommandProvider extends CommandProvider {
: require('./icons/profiles.svg'),
run: async () => this.activate(),
},
...this.profilesService.getRecentProfiles().map(profile => ({
...this.profilesService.getRecentProfiles().map((profile, index) => ({
id: `core:recent-profile-${index}`,
label: profile.name,
locations: [CommandLocation.StartPage],
icon: require('./icons/history.svg'),

View File

@@ -37,14 +37,12 @@ title-bar(
.btn-group.background
.d-flex(
*ngFor='let button of leftToolbarButtons',
ngbDropdown
*ngFor='let button of leftToolbarButtons'
)
button.btn.btn-secondary.btn-tab-bar(
[title]='button.label',
(click)='button.run && button.run()',
[fastHtmlBind]='button.icon',
ngbDropdownToggle,
[fastHtmlBind]='button.icon'
)
.d-flex(
@@ -67,14 +65,12 @@ title-bar(
.btn-group.background
.d-flex(
*ngFor='let button of rightToolbarButtons',
ngbDropdown
*ngFor='let button of rightToolbarButtons'
)
button.btn.btn-secondary.btn-tab-bar(
[title]='button.title',
[title]='button.label',
(click)='button.run && button.run()',
[fastHtmlBind]='button.icon',
ngbDropdownToggle,
[fastHtmlBind]='button.icon'
)
button.btn.btn-secondary.btn-tab-bar.btn-update(

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()')
span Backspace
i.fas.fa-pencil.ml-1
.no-wrap.badge.badge-secondary.text-muted.ml-2(*ngIf='selectedIndex == i')
span Enter
i.fas.fa-arrow-right.ml-1
.ms-auto
.no-wrap.badge.text-bg-secondary.ms-2(*ngIf='selectedIndex == i && canEditSelected()')
span BACKSPACE
i.fas.fa-pencil.ms-1
.no-wrap.badge.text-bg-secondary.ms-2(*ngIf='selectedIndex == i')
span ENTER
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>[]
@@ -47,6 +47,7 @@ export class SelectorModalComponent<T> {
this.close()
}
if (event.key === 'Backspace' && this.canEditSelected()) {
event.preventDefault()
this.filter = this.filteredOptions[this.selectedIndex].freeInputEquivalent!
this.onFilterChange()
}

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

@@ -24,3 +24,7 @@
border-radius: 10px;
}
}
::ng-deep .no-animations split-tab > .child {
transition: none;
}

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 {

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