Compare commits

...

29 Commits

Author SHA1 Message Date
Eugene Pankov
0c601592e3 detect store-installed powershell - fixes #5212 2021-12-23 14:15:48 +01:00
Eugene Pankov
d644c299ae serial: fixed parity settings on Windows - fixes #5267 2021-12-23 11:29:50 +01:00
Eugene Pankov
6119c2b73d Merge branch 'master' of github.com:Eugeny/tabby 2021-12-22 22:36:10 +01:00
Eugene Pankov
ccf4f05437 disallow disabling the plugin manager - #5257 2021-12-22 22:36:06 +01:00
Eugeny
5110808069 Update issue-report.md 2021-12-22 22:33:08 +01:00
Eugene Pankov
ba61a7f359 Revert "electron-remote fixes"
This reverts commit 8587cd31dd.
2021-12-22 22:23:02 +01:00
Eugene Pankov
f2aef8d6d5 Merge branch 'master' of github.com:Eugeny/tabby 2021-12-22 21:16:53 +01:00
Eugene Pankov
8587cd31dd electron-remote fixes 2021-12-22 21:16:50 +01:00
Eugene Pankov
8a8e7cd99f upgraded xterm 2021-12-22 21:16:45 +01:00
Eugeny
ddb01b3722 Merge pull request #5198 from Eugeny/dependabot/npm_and_yarn/electron-16.0.5 2021-12-22 21:01:01 +01:00
dependabot[bot]
66bb03a463 Bump electron from 13.5.1 to 16.0.5
Bumps [electron](https://github.com/electron/electron) from 13.5.1 to 16.0.5.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v13.5.1...v16.0.5)

---
updated-dependencies:
- dependency-name: electron
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-12-22 09:10:20 +00:00
Eugene Pankov
5f88a02647 Merge branch 'electron-upgrade' 2021-12-22 10:06:51 +01:00
Eugene Pankov
538df37f5e support for unencrypted PuTTY v3 keys - #5145 2021-12-22 00:28:14 +01:00
Eugene Pankov
aba5e9dcfa show font name autocompletion hint 2021-12-22 00:04:11 +01:00
Eugene Pankov
c7589acc87 prevent window controls flickering 2021-12-22 00:04:01 +01:00
Eugene Pankov
39786e023e expose the terminal.scrollbackLines setting 2021-12-21 23:37:22 +01:00
Eugene Pankov
7900134f67 expose the terminal.linePadding setting 2021-12-21 23:37:09 +01:00
Eugene Pankov
d080adc19d fixed terminal toolbar padding when on top on macOS - fixes #5220 2021-12-19 18:44:12 +01:00
Eugene Pankov
4f189f6839 fixed #5219 2021-12-19 18:40:19 +01:00
Eugene Pankov
87ed979588 lint 2021-12-19 18:11:46 +01:00
Eugene Pankov
e90db7f07f UI switch for --disable-gpu - #5131, #3499 2021-12-19 18:11:43 +01:00
Eugene Pankov
5249a9076a config defaults tweaks 2021-12-19 17:56:50 +01:00
Eugene Pankov
cfc9333c02 use real file modes for zmodem uploads - fixes #4141 2021-12-19 17:56:42 +01:00
Eugene Pankov
81aa747d83 lint 2021-12-15 23:30:33 +01:00
Eugene Pankov
0e9723cb3b updated window docking logic 2021-12-15 23:21:56 +01:00
Eugene Pankov
899484a5d9 fixed config sync - fixes #5146, fixes #3164 2021-12-15 21:48:54 +01:00
Eugeny
4c2feb1b35 Update issue-report.md 2021-12-14 10:08:52 +01:00
Eugeny
d6d75b8c53 Update issue templates 2021-12-14 10:07:39 +01:00
Eugene Pankov
6eff3902ca don't disable vibrancy while dragging if it's not fluent 2021-12-12 14:24:55 +01:00
34 changed files with 427 additions and 113 deletions

View File

@@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

23
.github/ISSUE_TEMPLATE/issue-report.md vendored Normal file
View File

@@ -0,0 +1,23 @@
---
name: Issue report
about: Report a problem
title: ''
labels: 'T: Bug'
assignees: ''
---
<!--
Before submitting an issue, make sure that:
* You're running the latest Tabby version: https://github.com/Eugeny/tabby/releases
* You've searched the existing issues: https://github.com/Eugeny/tabby/issues
* Your problem is not caused by third-party plugins (disable _third-party_ plugins, restart and try to reproduce the problem).
*Reports are accepted in English ONLY.*
-->
**Describe the problem**:
[A clear and concise description of what the bug is.]
**To Reproduce**:
[Steps to reproduce the behavior]

View File

@@ -23,6 +23,7 @@ export class Application {
private windows: Window[] = [] private windows: Window[] = []
private globalHotkey$ = new Subject<void>() private globalHotkey$ = new Subject<void>()
private quitRequested = false private quitRequested = false
private configStore: any
userPluginsPath: string userPluginsPath: string
constructor () { constructor () {
@@ -32,6 +33,7 @@ export class Application {
ipcMain.on('app:config-change', (_event, config) => { ipcMain.on('app:config-change', (_event, config) => {
this.broadcast('host:config-change', config) this.broadcast('host:config-change', config)
this.configStore = config
}) })
ipcMain.on('app:register-global-hotkey', (_event, specs) => { ipcMain.on('app:register-global-hotkey', (_event, specs) => {
@@ -61,13 +63,17 @@ export class Application {
} }
}) })
const configData = loadConfig() this.configStore = loadConfig()
if (process.platform === 'linux') { if (process.platform === 'linux') {
app.commandLine.appendSwitch('no-sandbox') app.commandLine.appendSwitch('no-sandbox')
if (((configData.appearance || {}).opacity || 1) !== 1) { if (((this.configStore.appearance || {}).opacity || 1) !== 1) {
app.commandLine.appendSwitch('enable-transparent-visuals') app.commandLine.appendSwitch('enable-transparent-visuals')
app.disableHardwareAcceleration() app.disableHardwareAcceleration()
} }
if (this.configStore.hacks?.disableGPU) {
app.commandLine.appendSwitch('disable-gpu')
app.disableHardwareAcceleration()
}
} }
this.userPluginsPath = path.join( this.userPluginsPath = path.join(
@@ -83,7 +89,7 @@ export class Application {
app.commandLine.appendSwitch('max-active-webgl-contexts', '9000') app.commandLine.appendSwitch('max-active-webgl-contexts', '9000')
app.commandLine.appendSwitch('lang', 'EN') app.commandLine.appendSwitch('lang', 'EN')
for (const flag of configData.flags || [['force_discrete_gpu', '0']]) { for (const flag of this.configStore.flags || [['force_discrete_gpu', '0']]) {
app.commandLine.appendSwitch(flag[0], flag[1]) app.commandLine.appendSwitch(flag[0], flag[1])
} }
@@ -103,6 +109,9 @@ export class Application {
async newWindow (options?: WindowOptions): Promise<Window> { async newWindow (options?: WindowOptions): Promise<Window> {
const window = new Window(this, options) const window = new Window(this, options)
this.windows.push(window) this.windows.push(window)
if (this.windows.length === 1){
window.makeMain()
}
window.visible$.subscribe(visible => { window.visible$.subscribe(visible => {
if (visible) { if (visible) {
this.disableTray() this.disableTray()
@@ -112,16 +121,28 @@ export class Application {
}) })
window.closed$.subscribe(() => { window.closed$.subscribe(() => {
this.windows = this.windows.filter(x => x !== window) this.windows = this.windows.filter(x => x !== window)
if (!this.windows.some(x => x.isMainWindow)) {
this.windows[0]?.makeMain()
this.windows[0]?.present()
}
}) })
if (process.platform === 'darwin') { if (process.platform === 'darwin') {
this.setupMenu() this.setupMenu()
} }
await window.ready await window.ready
window.present()
return window return window
} }
onGlobalHotkey (): void { onGlobalHotkey (): void {
if (this.windows.some(x => x.isFocused() && x.isVisible())) { let isPresent = this.windows.some(x => x.isFocused() && x.isVisible())
const isDockedOnTop = this.windows.some(x => x.isDockedOnTop())
if (isDockedOnTop) {
// if docked and on top, hide even if not focused right now
isPresent = this.windows.some(x => x.isVisible())
}
if (isPresent) {
for (const window of this.windows) { for (const window of this.windows) {
window.hide() window.hide()
} }
@@ -190,7 +211,7 @@ export class Application {
focus (): void { focus (): void {
for (const window of this.windows) { for (const window of this.windows) {
window.show() window.present()
} }
} }

View File

@@ -33,6 +33,7 @@ const activityIcon = nativeImage.createFromPath(`${app.getAppPath()}/assets/acti
export class Window { export class Window {
ready: Promise<void> ready: Promise<void>
isMainWindow = false
private visible = new Subject<boolean>() private visible = new Subject<boolean>()
private closed = new Subject<void>() private closed = new Subject<void>()
private window?: GlasstronWindow private window?: GlasstronWindow
@@ -43,6 +44,8 @@ export class Window {
private disableVibrancyWhileDragging = false private disableVibrancyWhileDragging = false
private configStore: any private configStore: any
private touchBarControl: any private touchBarControl: any
private isFluentVibrancy = false
private dockHidden = false
get visible$ (): Observable<boolean> { return this.visible } get visible$ (): Observable<boolean> { return this.visible }
get closed$ (): Observable<void> { return this.closed } get closed$ (): Observable<void> { return this.closed }
@@ -158,6 +161,11 @@ export class Window {
}) })
} }
makeMain (): void {
this.isMainWindow = true
this.window.webContents.send('host:became-main-window')
}
setVibrancy (enabled: boolean, type?: string, userRequested?: boolean): void { setVibrancy (enabled: boolean, type?: string, userRequested?: boolean): void {
if (userRequested ?? true) { if (userRequested ?? true) {
this.lastVibrancy = { enabled, type } this.lastVibrancy = { enabled, type }
@@ -167,6 +175,7 @@ export class Window {
this.window.blurType = enabled ? type === 'fluent' ? 'acrylic' : 'blurbehind' : null this.window.blurType = enabled ? type === 'fluent' ? 'acrylic' : 'blurbehind' : null
try { try {
this.window.setBlur(enabled) this.window.setBlur(enabled)
this.isFluentVibrancy = enabled && type === 'fluent'
} catch (error) { } catch (error) {
console.error('Failed to set window blur', error) console.error('Failed to set window blur', error)
} }
@@ -181,11 +190,6 @@ export class Window {
} }
} }
show (): void {
this.window.show()
this.window.moveTop()
}
focus (): void { focus (): void {
this.window.focus() this.window.focus()
} }
@@ -197,6 +201,7 @@ export class Window {
this.window.webContents.send(event, ...args) this.window.webContents.send(event, ...args)
if (event === 'host:config-change') { if (event === 'host:config-change') {
this.configStore = args[0] this.configStore = args[0]
this.enableDockedWindowStyles(this.isDockedOnTop())
} }
} }
@@ -212,45 +217,69 @@ export class Window {
return this.window.isVisible() return this.window.isVisible()
} }
hide (): void { isDockedOnTop (): boolean {
return this.isMainWindow && this.configStore.appearance?.dock && this.configStore.appearance?.dock !== 'off' && (this.configStore.appearance?.dockAlwaysOnTop ?? true)
}
async hide (): Promise<void> {
if (process.platform === 'darwin') { if (process.platform === 'darwin') {
// Lose focus // Lose focus
Menu.sendActionToFirstResponder('hide:') Menu.sendActionToFirstResponder('hide:')
} if (this.isDockedOnTop()) {
this.window.blur() await this.enableDockedWindowStyles(false)
if (process.platform !== 'darwin') {
this.window.hide()
}
}
present (): void {
if (!this.window.isVisible()) {
// unfocused, invisible
this.window.show()
this.window.focus()
} else {
if (!this.configStore.appearance?.dock || this.configStore.appearance?.dock === 'off') {
// not docked, visible
setTimeout(() => {
this.window.show()
this.window.focus()
})
} else {
if (this.configStore.appearance?.dockAlwaysOnTop) {
// docked, visible, on top
this.window.hide()
} else {
// docked, visible, not on top
this.window.focus()
}
} }
} }
this.window.blur()
this.window.hide()
}
async show (): Promise<void> {
await this.enableDockedWindowStyles(this.isDockedOnTop())
this.window.show()
this.window.focus()
}
async present (): Promise<void> {
await this.show()
this.window.moveTop()
} }
passCliArguments (argv: string[], cwd: string, secondInstance: boolean): void { passCliArguments (argv: string[], cwd: string, secondInstance: boolean): void {
this.send('cli', parseArgs(argv, cwd), cwd, secondInstance) this.send('cli', parseArgs(argv, cwd), cwd, secondInstance)
} }
private async enableDockedWindowStyles (enabled: boolean) {
if (process.platform === 'darwin') {
if (enabled) {
if (!this.dockHidden) {
app.dock.hide()
this.dockHidden = true
}
this.window.setAlwaysOnTop(true, 'screen-saver', 1)
if (!this.window.isVisibleOnAllWorkspaces()) {
this.window.setVisibleOnAllWorkspaces(true, { visibleOnFullScreen: true })
}
if (this.window.fullScreenable) {
this.window.setFullScreenable(false)
}
} else {
if (this.dockHidden) {
await app.dock.show()
this.dockHidden = false
}
if (this.window.isAlwaysOnTop()) {
this.window.setAlwaysOnTop(false)
}
if (this.window.isVisibleOnAllWorkspaces()) {
this.window.setVisibleOnAllWorkspaces(false)
}
if (!this.window.fullScreenable) {
this.window.setFullScreenable(true)
}
}
}
}
private setupWindowManagement () { private setupWindowManagement () {
this.window.on('show', () => { this.window.on('show', () => {
this.visible.next(true) this.visible.next(true)
@@ -312,7 +341,7 @@ export class Window {
config: this.configStore, config: this.configStore,
executable: app.getPath('exe'), executable: app.getPath('exe'),
windowID: this.window.id, windowID: this.window.id,
isFirstWindow: this.window.id === 1, isMainWindow: this.isMainWindow,
userPluginsPath: this.application.userPluginsPath, userPluginsPath: this.application.userPluginsPath,
}) })
}) })
@@ -359,8 +388,7 @@ export class Window {
if (this.window.isMinimized()) { if (this.window.isMinimized()) {
this.window.restore() this.window.restore()
} }
this.window.show() this.present()
this.window.moveTop()
}) })
ipcMain.on('window-close', event => { ipcMain.on('window-close', event => {
@@ -387,7 +415,7 @@ export class Window {
let moveEndedTimeout: any = null let moveEndedTimeout: any = null
const onBoundsChange = () => { const onBoundsChange = () => {
if (!this.lastVibrancy?.enabled || !this.disableVibrancyWhileDragging) { if (!this.lastVibrancy?.enabled || !this.disableVibrancyWhileDragging || !this.isFluentVibrancy) {
return return
} }
this.setVibrancy(false, undefined, false) this.setVibrancy(false, undefined, false)

View File

@@ -10,6 +10,7 @@
"main": "dist/main.js", "main": "dist/main.js",
"version": "1.0.0-alpha.1", "version": "1.0.0-alpha.1",
"scripts": { "scripts": {
"postinstall": "patch-package",
"build": "webpack --progress --color --display-modules", "build": "webpack --progress --color --display-modules",
"watch": "webpack --progress --color --watch" "watch": "webpack --progress --color --watch"
}, },
@@ -44,7 +45,8 @@
"devDependencies": { "devDependencies": {
"@types/mz": "2.7.4", "@types/mz": "2.7.4",
"@types/node": "16.0.1", "@types/node": "16.0.1",
"ngx-filesize": "^2.0.16" "ngx-filesize": "^2.0.16",
"patch-package": "^6.4.7"
}, },
"peerDependencies": { "peerDependencies": {
"tabby-community-color-schemes": "*", "tabby-community-color-schemes": "*",

View File

@@ -0,0 +1,14 @@
diff --git a/node_modules/@serialport/bindings/src/serialport.cpp b/node_modules/@serialport/bindings/src/serialport.cpp
index c48e150..00a5f5a 100644
--- a/node_modules/@serialport/bindings/src/serialport.cpp
+++ b/node_modules/@serialport/bindings/src/serialport.cpp
@@ -269,7 +269,8 @@ Napi::Value Drain(const Napi::CallbackInfo& info) {
}
inline SerialPortParity ToParityEnum(const Napi::String& napistr) {
- const char* str = napistr.Utf8Value().c_str();
+ auto tmp = napistr.Utf8Value();
+ const char* str = tmp.c_str();
size_t count = strlen(str);
SerialPortParity parity = SERIALPORT_PARITY_NONE;
if (!strncasecmp(str, "none", count)) {

View File

@@ -132,6 +132,11 @@
resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.9.tgz#152c6c20a7688c30b967ec1841d31ace569863fc" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.9.tgz#152c6c20a7688c30b967ec1841d31ace569863fc"
integrity sha512-L/TMpyURfBkf+o/526Zb6kd/tchUP3iBDEPjqjb+U2MAJhVRxxrmr2fwpe08E7QsV7YLcpq0tUaQ9O9x97ZIxQ== integrity sha512-L/TMpyURfBkf+o/526Zb6kd/tchUP3iBDEPjqjb+U2MAJhVRxxrmr2fwpe08E7QsV7YLcpq0tUaQ9O9x97ZIxQ==
"@yarnpkg/lockfile@^1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31"
integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==
JSONStream@^1.3.4, JSONStream@^1.3.5: JSONStream@^1.3.4, JSONStream@^1.3.5:
version "1.3.5" version "1.3.5"
resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0"
@@ -363,6 +368,13 @@ brace-expansion@^1.1.7:
balanced-match "^1.0.0" balanced-match "^1.0.0"
concat-map "0.0.1" concat-map "0.0.1"
braces@^3.0.1:
version "3.0.2"
resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
dependencies:
fill-range "^7.0.1"
buffer-from@^1.0.0: buffer-from@^1.0.0:
version "1.1.1" version "1.1.1"
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
@@ -453,7 +465,7 @@ caseless@~0.12.0:
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz"
integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
chalk@^2.0.1: chalk@^2.0.1, chalk@^2.4.2:
version "2.4.2" version "2.4.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
@@ -680,6 +692,17 @@ cross-spawn@^5.0.1:
shebang-command "^1.2.0" shebang-command "^1.2.0"
which "^1.2.9" which "^1.2.9"
cross-spawn@^6.0.5:
version "6.0.5"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
dependencies:
nice-try "^1.0.4"
path-key "^2.0.1"
semver "^5.5.0"
shebang-command "^1.2.0"
which "^1.2.9"
crypto-random-string@^1.0.0: crypto-random-string@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e"
@@ -1053,6 +1076,13 @@ file-uri-to-path@1.0.0:
resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.3.0.tgz#dff53cfb3f104c9e422f346d53be8dbcc971bf11" resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.3.0.tgz#dff53cfb3f104c9e422f346d53be8dbcc971bf11"
integrity sha512-ytx0ruGpDHKWVoiui6+BY/QMNngtDQ/pJaFwfBpQif0J63+E8DLdFyqS3NkKQn7vIruUEpoGD9JUJSg7Kp+I0g== integrity sha512-ytx0ruGpDHKWVoiui6+BY/QMNngtDQ/pJaFwfBpQif0J63+E8DLdFyqS3NkKQn7vIruUEpoGD9JUJSg7Kp+I0g==
fill-range@^7.0.1:
version "7.0.1"
resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
dependencies:
to-regex-range "^5.0.1"
find-npm-prefix@^1.0.2: find-npm-prefix@^1.0.2:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/find-npm-prefix/-/find-npm-prefix-1.0.2.tgz#8d8ce2c78b3b4b9e66c8acc6a37c231eb841cfdf" resolved "https://registry.yarnpkg.com/find-npm-prefix/-/find-npm-prefix-1.0.2.tgz#8d8ce2c78b3b4b9e66c8acc6a37c231eb841cfdf"
@@ -1072,6 +1102,13 @@ find-up@^3.0.0:
dependencies: dependencies:
locate-path "^3.0.0" locate-path "^3.0.0"
find-yarn-workspace-root@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz#f47fb8d239c900eb78179aa81b66673eac88f7bd"
integrity sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==
dependencies:
micromatch "^4.0.2"
flush-write-stream@^1.0.0: flush-write-stream@^1.0.0:
version "1.1.1" version "1.1.1"
resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8"
@@ -1131,6 +1168,15 @@ fs-extra@^10.0.0:
jsonfile "^6.0.1" jsonfile "^6.0.1"
universalify "^2.0.0" universalify "^2.0.0"
fs-extra@^7.0.1:
version "7.0.1"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9"
integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==
dependencies:
graceful-fs "^4.1.2"
jsonfile "^4.0.0"
universalify "^0.1.0"
fs-minipass@^1.2.7: fs-minipass@^1.2.7:
version "1.2.7" version "1.2.7"
resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7"
@@ -1485,6 +1531,13 @@ is-ci@^1.0.10:
dependencies: dependencies:
ci-info "^1.5.0" ci-info "^1.5.0"
is-ci@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c"
integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==
dependencies:
ci-info "^2.0.0"
is-cidr@^3.0.0: is-cidr@^3.0.0:
version "3.1.1" version "3.1.1"
resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-3.1.1.tgz#e92ef121bdec2782271a77ce487a8b8df3718ab7" resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-3.1.1.tgz#e92ef121bdec2782271a77ce487a8b8df3718ab7"
@@ -1504,6 +1557,11 @@ is-date-object@^1.0.1:
resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e"
integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==
is-docker@^2.0.0:
version "2.2.1"
resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
is-electron-renderer@^2.0.1: is-electron-renderer@^2.0.1:
version "2.0.1" version "2.0.1"
resolved "https://registry.yarnpkg.com/is-electron-renderer/-/is-electron-renderer-2.0.1.tgz#a469d056f975697c58c98c6023eb0aa79af895a2" resolved "https://registry.yarnpkg.com/is-electron-renderer/-/is-electron-renderer-2.0.1.tgz#a469d056f975697c58c98c6023eb0aa79af895a2"
@@ -1544,6 +1602,11 @@ is-npm@^1.0.0:
resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4"
integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ= integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ=
is-number@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
is-obj@^1.0.0: is-obj@^1.0.0:
version "1.0.1" version "1.0.1"
resolved "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz" resolved "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz"
@@ -1590,6 +1653,13 @@ is-typedarray@~1.0.0:
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz"
integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
is-wsl@^2.1.1:
version "2.2.0"
resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
dependencies:
is-docker "^2.0.0"
isarray@0.0.1: isarray@0.0.1:
version "0.0.1" version "0.0.1"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
@@ -1647,6 +1717,13 @@ json-stringify-safe@~5.0.1:
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz"
integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
jsonfile@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=
optionalDependencies:
graceful-fs "^4.1.6"
jsonfile@^6.0.1: jsonfile@^6.0.1:
version "6.1.0" version "6.1.0"
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
@@ -1689,6 +1766,13 @@ keytar@^7.7.0:
node-addon-api "^3.0.0" node-addon-api "^3.0.0"
prebuild-install "^6.0.0" prebuild-install "^6.0.0"
klaw-sync@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/klaw-sync/-/klaw-sync-6.0.0.tgz#1fd2cfd56ebb6250181114f0a581167099c2b28c"
integrity sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==
dependencies:
graceful-fs "^4.1.11"
latest-version@^3.0.0: latest-version@^3.0.0:
version "3.1.0" version "3.1.0"
resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15"
@@ -2007,6 +2091,14 @@ mem@^1.1.0:
dependencies: dependencies:
mimic-fn "^1.0.0" mimic-fn "^1.0.0"
micromatch@^4.0.2:
version "4.0.4"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9"
integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==
dependencies:
braces "^3.0.1"
picomatch "^2.2.3"
mime-db@1.44.0: mime-db@1.44.0:
version "1.44.0" version "1.44.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz"
@@ -2155,6 +2247,11 @@ ngx-filesize@^2.0.16:
filesize ">= 4.0.0" filesize ">= 4.0.0"
tslib "^2.0.0" tslib "^2.0.0"
nice-try@^1.0.4:
version "1.0.5"
resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
node-abi@^2.20.0, node-abi@^2.7.0: node-abi@^2.20.0, node-abi@^2.7.0:
version "2.30.1" version "2.30.1"
resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.30.1.tgz#c437d4b1fe0e285aaf290d45b45d4d7afedac4cf" resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.30.1.tgz#c437d4b1fe0e285aaf290d45b45d4d7afedac4cf"
@@ -2538,6 +2635,14 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0, once@~1.4.0:
dependencies: dependencies:
wrappy "1" wrappy "1"
open@^7.4.2:
version "7.4.2"
resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321"
integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==
dependencies:
is-docker "^2.0.0"
is-wsl "^2.1.1"
opener@^1.5.2: opener@^1.5.2:
version "1.5.2" version "1.5.2"
resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598"
@@ -2557,7 +2662,7 @@ os-locale@^2.0.0:
lcid "^1.0.0" lcid "^1.0.0"
mem "^1.1.0" mem "^1.1.0"
os-tmpdir@^1.0.0: os-tmpdir@^1.0.0, os-tmpdir@~1.0.2:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
@@ -2680,6 +2785,25 @@ parse5@^5.0.0:
resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178"
integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==
patch-package@^6.4.7:
version "6.4.7"
resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-6.4.7.tgz#2282d53c397909a0d9ef92dae3fdeb558382b148"
integrity sha512-S0vh/ZEafZ17hbhgqdnpunKDfzHQibQizx9g8yEf5dcVk3KOflOfdufRXQX8CSEkyOQwuM/bNz1GwKvFj54kaQ==
dependencies:
"@yarnpkg/lockfile" "^1.1.0"
chalk "^2.4.2"
cross-spawn "^6.0.5"
find-yarn-workspace-root "^2.0.0"
fs-extra "^7.0.1"
is-ci "^2.0.0"
klaw-sync "^6.0.0"
minimist "^1.2.0"
open "^7.4.2"
rimraf "^2.6.3"
semver "^5.6.0"
slash "^2.0.0"
tmp "^0.0.33"
path-exists@^3.0.0: path-exists@^3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz"
@@ -2695,7 +2819,7 @@ path-is-inside@^1.0.1, path-is-inside@^1.0.2, path-is-inside@~1.0.2:
resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=
path-key@^2.0.0: path-key@^2.0.0, path-key@^2.0.1:
version "2.0.1" version "2.0.1"
resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
@@ -2717,6 +2841,11 @@ performance-now@^2.1.0:
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz"
integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
picomatch@^2.2.3:
version "2.3.0"
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972"
integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==
pify@^2.0.0: pify@^2.0.0:
version "2.3.0" version "2.3.0"
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
@@ -3128,7 +3257,7 @@ semver-diff@^2.0.0:
dependencies: dependencies:
semver "^5.0.3" semver "^5.0.3"
"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.4.1, semver@^5.5.1, semver@^5.6.0, semver@^5.7.1: "semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.1:
version "5.7.1" version "5.7.1"
resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz"
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
@@ -3216,6 +3345,11 @@ simple-get@^4.0.0:
once "^1.3.1" once "^1.3.1"
simple-concat "^1.0.0" simple-concat "^1.0.0"
slash@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44"
integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==
slide@^1.1.6, slide@~1.1.3, slide@~1.1.6: slide@^1.1.6, slide@~1.1.3, slide@~1.1.6:
version "1.1.6" version "1.1.6"
resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707"
@@ -3548,6 +3682,20 @@ tiny-relative-date@^1.3.0:
resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz" resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz"
integrity sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A== integrity sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A==
tmp@^0.0.33:
version "0.0.33"
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
dependencies:
os-tmpdir "~1.0.2"
to-regex-range@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
dependencies:
is-number "^7.0.0"
tough-cookie@~2.5.0: tough-cookie@~2.5.0:
version "2.5.0" version "2.5.0"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz"
@@ -3619,6 +3767,11 @@ unique-string@^1.0.0:
dependencies: dependencies:
crypto-random-string "^1.0.0" crypto-random-string "^1.0.0"
universalify@^0.1.0:
version "0.1.2"
resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
universalify@^2.0.0: universalify@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"

View File

@@ -30,7 +30,7 @@
"cross-env": "7.0.3", "cross-env": "7.0.3",
"css-loader": "^6.5.1", "css-loader": "^6.5.1",
"deep-equal": "2.0.5", "deep-equal": "2.0.5",
"electron": "16.0.2", "electron": "16.0.5",
"electron-builder": "^22.14.5", "electron-builder": "^22.14.5",
"electron-download": "^4.1.1", "electron-download": "^4.1.1",
"electron-installer-snap": "^5.1.0", "electron-installer-snap": "^5.1.0",

View File

@@ -16,7 +16,7 @@ export interface PluginInfo {
export interface BootstrapData { export interface BootstrapData {
config: Record<string, any> config: Record<string, any>
executable: string executable: string
isFirstWindow: boolean isMainWindow: boolean
windowID: number windowID: number
installedPlugins: PluginInfo[] installedPlugins: PluginInfo[]
userPluginsPath: string userPluginsPath: string

View File

@@ -76,4 +76,3 @@ hotkeys:
- 'Ctrl-Alt-T' - 'Ctrl-Alt-T'
profile-selector: profile-selector:
- 'Ctrl-Shift-T' - 'Ctrl-Shift-T'
pluginBlacklist: ['ssh']

View File

@@ -75,4 +75,3 @@ hotkeys:
- '⌘-E' - '⌘-E'
switch-profile: switch-profile:
- '⌘-Shift-E' - '⌘-Shift-E'
pluginBlacklist: ['ssh']

View File

@@ -77,4 +77,3 @@ hotkeys:
- 'Ctrl-Alt-T' - 'Ctrl-Alt-T'
profile-selector: profile-selector:
- 'Ctrl-Shift-T' - 'Ctrl-Shift-T'
pluginBlacklist: []

View File

@@ -35,3 +35,6 @@ version: 1
vault: null vault: null
encrypted: false encrypted: false
enableExperimentalFeatures: false enableExperimentalFeatures: false
pluginBlacklist: []
hacks:
disableGPU: false

View File

@@ -89,7 +89,7 @@ export class AppService {
}, 30000) }, 30000)
config.ready$.toPromise().then(async () => { config.ready$.toPromise().then(async () => {
if (this.bootstrapData.isFirstWindow) { if (this.bootstrapData.isMainWindow) {
if (config.store.recoverTabs) { if (config.store.recoverTabs) {
const tabs = await this.tabRecovery.recoverTabs() const tabs = await this.tabRecovery.recoverTabs()
for (const tab of tabs) { for (const tab of tabs) {
@@ -115,7 +115,7 @@ export class AppService {
this.tabsChanged.next() this.tabsChanged.next()
this.tabOpened.next(tab) this.tabOpened.next(tab)
if (this.bootstrapData.isFirstWindow) { if (this.bootstrapData.isMainWindow) {
tab.recoveryStateChangedHint$.subscribe(() => { tab.recoveryStateChangedHint$.subscribe(() => {
this.tabRecovery.saveTabs(this.tabs) this.tabRecovery.saveTabs(this.tabs)
}) })

View File

@@ -1,6 +1,6 @@
import { Injectable, NgZone } from '@angular/core' import { Injectable, NgZone, Inject } from '@angular/core'
import type { Display } from 'electron' import type { Display } from 'electron'
import { ConfigService, DockingService, Screen, PlatformService } from 'tabby-core' import { ConfigService, DockingService, Screen, PlatformService, BootstrapData, BOOTSTRAP_DATA } from 'tabby-core'
import { ElectronService } from '../services/electron.service' import { ElectronService } from '../services/electron.service'
import { ElectronHostWindow, Bounds } from './hostWindow.service' import { ElectronHostWindow, Bounds } from './hostWindow.service'
@@ -12,6 +12,7 @@ export class ElectronDockingService extends DockingService {
private zone: NgZone, private zone: NgZone,
private hostWindow: ElectronHostWindow, private hostWindow: ElectronHostWindow,
platform: PlatformService, platform: PlatformService,
@Inject(BOOTSTRAP_DATA) private bootstrapData: BootstrapData,
) { ) {
super() super()
this.screensChanged$.subscribe(() => this.repositionWindow()) this.screensChanged$.subscribe(() => this.repositionWindow())
@@ -25,7 +26,7 @@ export class ElectronDockingService extends DockingService {
dock (): void { dock (): void {
const dockSide = this.config.store.appearance.dock const dockSide = this.config.store.appearance.dock
if (dockSide === 'off') { if (dockSide === 'off' || !this.bootstrapData.isMainWindow) {
this.hostWindow.setAlwaysOnTop(false) this.hostWindow.setAlwaysOnTop(false)
return return
} }

View File

@@ -43,6 +43,10 @@ export class ElectronHostWindow extends HostWindowService {
electron.ipcRenderer.on('host:window-focused', () => zone.run(() => { electron.ipcRenderer.on('host:window-focused', () => zone.run(() => {
this.windowFocused.next() this.windowFocused.next()
})) }))
electron.ipcRenderer.on('host:became-main-window', () => zone.run(() => {
this.bootstrapData.isMainWindow = true
}))
} }
getWindow (): BrowserWindow { getWindow (): BrowserWindow {

View File

@@ -30,7 +30,7 @@ export class ElectronUpdaterService extends UpdaterService {
} }
this.autoUpdater = electron.remote.require('electron-updater').autoUpdater this.autoUpdater = electron.remote.require('electron-updater').autoUpdater
this.autoUpdater.autoDownload = false this.autoUpdater.autoDownload = true
this.autoUpdater.autoInstallOnAppQuit = false this.autoUpdater.autoInstallOnAppQuit = false
this.autoUpdater.on('update-available', () => { this.autoUpdater.on('update-available', () => {

View File

@@ -73,21 +73,22 @@ export class WindowsStockShellsProvider extends ShellProvider {
} }
private async getPowerShellPath () { private async getPowerShellPath () {
const ps = 'powershell.exe' for (const name of ['pwsh.exe', 'powershell.exe']) {
if (await promisify(hasbin)(name)) {
if (!await promisify(hasbin)(ps)) { return name
for (const searchPath of [
`${process.env.SystemRoot}\\System32\\WindowsPowerShell\\v1.0`,
`${process.env.SystemRoot}\\System32`,
process.env.SystemRoot ?? 'C:\\Windows',
]) {
const newPath = path.join(searchPath, ps)
try {
await fs.stat(newPath)
return newPath
} catch { }
} }
} }
return ps for (const psPath of [
`${process.env.USERPROFILE}\\AppData\\Local\\Microsoft\\WindowsApps\\pwsh.exe`,
`${process.env.SystemRoot}\\System32\\WindowsPowerShell\\v1.0\\powershell.exe`,
`${process.env.SystemRoot}\\System32\\powershell.exe`,
(process.env.SystemRoot ?? 'C:\\Windows') + '\\powerhshell.exe',
]) {
try {
await fs.stat(psPath)
return psPath
} catch { }
}
return 'powershell.exe'
} }
} }

View File

@@ -8,7 +8,7 @@ import { PluginManagerService } from '../services/pluginManager.service'
enum BusyState { Installing = 'Installing', Uninstalling = 'Uninstalling' } enum BusyState { Installing = 'Installing', Uninstalling = 'Uninstalling' }
const FORCE_ENABLE = ['tabby-core', 'tabby-settings', 'tabby-electron', 'tabby-web'] const FORCE_ENABLE = ['tabby-core', 'tabby-settings', 'tabby-electron', 'tabby-web', 'tabby-plugin-manager']
/** @hidden */ /** @hidden */
@Component({ @Component({

View File

@@ -51,11 +51,15 @@ ul.nav-tabs(ngbNav, #nav='ngbNav')
.form-line .form-line
.header .header
.title Parity .title Parity
input.form-control( select.form-control(
type='text', type='text',
[(ngModel)]='profile.options.parity', [(ngModel)]='profile.options.parity'
placeholder='none'
) )
option(value='none') None
option(value='even') Even
option(value='odd') Odd
option(value='mark', ng:if='hostApp.platform === Platform.Windows') Mark
option(value='space', ng:if='hostApp.platform === Platform.Windows') Space
.form-line .form-line
.header .header

View File

@@ -98,6 +98,8 @@ h3.mb-3 Window
) )
| Full | Full
h3.mt-4 Docking
.form-line(*ngIf='docking') .form-line(*ngIf='docking')
.header .header
.title Dock the terminal .title Dock the terminal
@@ -211,6 +213,8 @@ h3.mb-3 Window
(ngModelChange)='saveConfiguration(); ', (ngModelChange)='saveConfiguration(); ',
) )
h3.mt-4 Tabs
.form-line .form-line
.header .header
.title Tabs location .title Tabs location
@@ -288,3 +292,15 @@ h3.mb-3 Window
[(ngModel)]='config.store.terminal.hideCloseButton', [(ngModel)]='config.store.terminal.hideCloseButton',
(ngModelChange)='config.save();', (ngModelChange)='config.save();',
) )
h3.mt-4 Hacks
.form-line
.header
.title Disable GPU acceleration
.description Tick this if you're experiencing aliasing, ghosting or other visual issues
toggle(
[(ngModel)]='config.store.hacks.disableGPU',
(ngModelChange)='config.save(); config.requestRestart()'
)

View File

@@ -41,7 +41,7 @@ export class ConfigSyncService {
} }
isAvailable (): boolean { isAvailable (): boolean {
return this.config.store.enableExperimentalFeatures && this.hostApp.platform !== Platform.Web return this.hostApp.platform !== Platform.Web
} }
isEnabled (): boolean { isEnabled (): boolean {

View File

@@ -24,7 +24,7 @@
"@types/node": "16.0.1", "@types/node": "16.0.1",
"@types/ssh2": "^0.5.46", "@types/ssh2": "^0.5.46",
"ansi-colors": "^4.1.1", "ansi-colors": "^4.1.1",
"sshpk": "Eugeny/node-sshpk#89ed17dfae425a8b629873c8337e77d26838c04f", "sshpk": "Eugeny/node-sshpk#d92ddb8def1778e876703f90cd6ff2c90900f390",
"strip-ansi": "^7.0.0" "strip-ansi": "^7.0.0"
}, },
"dependencies": { "dependencies": {

View File

@@ -1,9 +1,6 @@
:host { :host {
display: flex; display: flex;
flex-direction: column;; flex-direction: column;
> * {
}
> .header { > .header {
padding: 5px 15px 0 20px; padding: 5px 15px 0 20px;

View File

@@ -227,9 +227,9 @@ sprintf@0.1.x:
resolved "https://registry.yarnpkg.com/sprintf/-/sprintf-0.1.5.tgz#8f83e39a9317c1a502cb7db8050e51c679f6edcf" resolved "https://registry.yarnpkg.com/sprintf/-/sprintf-0.1.5.tgz#8f83e39a9317c1a502cb7db8050e51c679f6edcf"
integrity sha1-j4PjmpMXwaUCy324BQ5Rxnn27c8= integrity sha1-j4PjmpMXwaUCy324BQ5Rxnn27c8=
sshpk@Eugeny/node-sshpk#89ed17dfae425a8b629873c8337e77d26838c04f: sshpk@Eugeny/node-sshpk#d92ddb8def1778e876703f90cd6ff2c90900f390:
version "1.16.1" version "1.16.1"
resolved "https://codeload.github.com/Eugeny/node-sshpk/tar.gz/89ed17dfae425a8b629873c8337e77d26838c04f" resolved "https://codeload.github.com/Eugeny/node-sshpk/tar.gz/d92ddb8def1778e876703f90cd6ff2c90900f390"
dependencies: dependencies:
asn1 "~0.2.3" asn1 "~0.2.3"
assert-plus "^1.0.0" assert-plus "^1.0.0"

View File

@@ -25,13 +25,13 @@
"hexer": "^1.5.0", "hexer": "^1.5.0",
"ps-node": "^0.1.6", "ps-node": "^0.1.6",
"runes": "^0.4.2", "runes": "^0.4.2",
"xterm": "npm:@tabby-gang/xterm@^4.15.1-beta.1", "xterm": "npm:@tabby-gang/xterm@^4.16.0",
"xterm-addon-fit": "^0.5.0", "xterm-addon-fit": "^0.5.0",
"xterm-addon-ligatures": "^0.5.0", "xterm-addon-ligatures": "^0.5.0",
"xterm-addon-search": "^0.8.1", "xterm-addon-search": "^0.8.2",
"xterm-addon-serialize": "^0.6.1", "xterm-addon-serialize": "^0.6.1",
"xterm-addon-unicode11": "^0.3.0", "xterm-addon-unicode11": "^0.3.0",
"xterm-addon-webgl": "^0.11.3", "xterm-addon-webgl": "^0.11.4",
"zmodem.js": "^0.1.9" "zmodem.js": "^0.1.9"
}, },
"resolutions": { "resolutions": {

View File

@@ -8,6 +8,7 @@ h3.mb-3 Appearance
.input-group.w-75 .input-group.w-75
input.form-control.w-75( input.form-control.w-75(
type='text', type='text',
[showHint]='true',
[ngbTypeahead]='fontAutocomplete', [ngbTypeahead]='fontAutocomplete',
[(ngModel)]='config.store.terminal.font', [(ngModel)]='config.store.terminal.font',
(ngModelChange)='config.save()', (ngModelChange)='config.save()',
@@ -107,6 +108,16 @@ h3.mb-3 Appearance
(ngModelChange)='config.save()' (ngModelChange)='config.save()'
) )
.form-line
.header
.title Line padding
.description Additional space between lines
input.form-control(
type='number',
[(ngModel)]='config.store.terminal.linePadding',
(ngModelChange)='config.save()',
)
.form-line .form-line
.header .header

View File

@@ -72,3 +72,7 @@
height: $toolbarHeight; height: $toolbarHeight;
} }
} }
:host-context(.platform-darwin) .terminal-toolbar {
padding-left: 90px;
}

View File

@@ -13,6 +13,16 @@ div
option(value='xterm') xterm option(value='xterm') xterm
option(value='xterm-webgl') xterm (WebGL) option(value='xterm-webgl') xterm (WebGL)
.form-line
.header
.title Scrollback
.description Number of lines kept in the buffer
input.form-control(
type='number',
[(ngModel)]='config.store.terminal.scrollbackLines',
(ngModelChange)='config.save()',
)
div.mt-4 div.mt-4
h3 Keyboard h3 Keyboard

View File

@@ -153,6 +153,7 @@ export class TerminalConfigProvider extends ConfigProvider {
[Platform.Linux]: { [Platform.Linux]: {
terminal: { terminal: {
font: 'Liberation Mono', font: 'Liberation Mono',
pasteOnMiddleClick: false, // handled by OS
}, },
hotkeys: { hotkeys: {
'ctrl-c': ['Ctrl-C'], 'ctrl-c': ['Ctrl-C'],

View File

@@ -163,7 +163,7 @@ export class ZModemDecorator extends TerminalDecorator {
const offer = { const offer = {
name: transfer.getName(), name: transfer.getName(),
size: transfer.getSize(), size: transfer.getSize(),
mode: 0o755, mode: transfer.getMode(),
files_remaining: filesRemaining, files_remaining: filesRemaining,
bytes_remaining: sizeRemaining, bytes_remaining: sizeRemaining,
} }

View File

@@ -36,7 +36,6 @@
*/ */
.xterm { .xterm {
font-feature-settings: "liga" 0;
position: relative; position: relative;
user-select: none; user-select: none;
-ms-user-select: none; -ms-user-select: none;
@@ -55,21 +54,21 @@
* The z-index of the helpers must be higher than the canvases in order for * The z-index of the helpers must be higher than the canvases in order for
* IMEs to appear on top. * IMEs to appear on top.
*/ */
z-index: 10; z-index: 5;
} }
.xterm .xterm-helper-textarea { .xterm .xterm-helper-textarea {
/* padding: 0;
* HACK: to fix IE's blinking cursor border: 0;
* Move textarea out of the screen to the far left, so that the cursor is not visible. margin: 0;
*/ /* Move textarea out of the screen to the far left, so that the cursor is not visible */
position: absolute; position: absolute;
opacity: 0; opacity: 0;
left: -9999em; left: -9999em;
top: 0; top: 0;
width: 0; width: 0;
height: 0; height: 0;
z-index: -10; z-index: -5;
/** Prevent wrapping so the IME appears against the textarea at the correct position */ /** Prevent wrapping so the IME appears against the textarea at the correct position */
white-space: nowrap; white-space: nowrap;
overflow: hidden; overflow: hidden;
@@ -134,7 +133,8 @@
cursor: default; cursor: default;
} }
.xterm.xterm-cursor-pointer { .xterm.xterm-cursor-pointer,
.xterm .xterm-cursor-pointer {
cursor: pointer; cursor: pointer;
} }
@@ -150,7 +150,7 @@
top: 0; top: 0;
bottom: 0; bottom: 0;
right: 0; right: 0;
z-index: 100; z-index: 10;
color: transparent; color: transparent;
} }
@@ -170,6 +170,10 @@
text-decoration: underline; text-decoration: underline;
} }
.xterm-strikethrough {
text-decoration: line-through;
}
/*----*/ /*----*/
@font-face { @font-face {

View File

@@ -164,10 +164,10 @@ xterm-addon-ligatures@^0.5.0:
font-finder "^1.1.0" font-finder "^1.1.0"
font-ligatures "^1.4.0" font-ligatures "^1.4.0"
xterm-addon-search@^0.8.1: xterm-addon-search@^0.8.2:
version "0.8.1" version "0.8.2"
resolved "https://registry.yarnpkg.com/xterm-addon-search/-/xterm-addon-search-0.8.1.tgz#dfc557e9bcf5fd8ed96292c0d271aa865bc545d5" resolved "https://registry.yarnpkg.com/xterm-addon-search/-/xterm-addon-search-0.8.2.tgz#be7aa74d5ff12c901707c6ff674229f214318032"
integrity sha512-OtOaC9gxD2Q4ZnjZrCSRZmKLwwUjXX3gP7mIzq8Rs50317DGRDqgTLuHTYv/Nx/LvI5ceVFRYCxK36Ixs1nXNw== integrity sha512-I1863mjn8P6uVrqm/X+btalVsqjAKLhnhpbP7SavAOpEkI1jJhbHU2UTp7NjeRtcKTks6UWk/ycgds5snDSejg==
xterm-addon-serialize@^0.6.1: xterm-addon-serialize@^0.6.1:
version "0.6.1" version "0.6.1"
@@ -179,15 +179,15 @@ xterm-addon-unicode11@^0.3.0:
resolved "https://registry.yarnpkg.com/xterm-addon-unicode11/-/xterm-addon-unicode11-0.3.0.tgz#e4435c3c91a5294a7eb8b79c380acbb28a659463" resolved "https://registry.yarnpkg.com/xterm-addon-unicode11/-/xterm-addon-unicode11-0.3.0.tgz#e4435c3c91a5294a7eb8b79c380acbb28a659463"
integrity sha512-x5fHDZT2j9tlTlHnzPHt++9uKZ2kJ/lYQOj3L6xJA22xoJsS8UQRw/5YIFg2FUHqEAbV77Z1fZij/9NycMSH/A== integrity sha512-x5fHDZT2j9tlTlHnzPHt++9uKZ2kJ/lYQOj3L6xJA22xoJsS8UQRw/5YIFg2FUHqEAbV77Z1fZij/9NycMSH/A==
xterm-addon-webgl@^0.11.3: xterm-addon-webgl@^0.11.4:
version "0.11.3" version "0.11.4"
resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.11.3.tgz#4d13933d8810d146613bbb66d59ea90de561f999" resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.11.4.tgz#e22f3ec0cafca3d4adcabb89bb7c16efaaf3c8db"
integrity sha512-Lr6VjLYOrgxLNaUNLDdCBehkr1Vaja/laDMTtvghfRusUMRXTlRKlCb7E3yqx4VgCg5KcV96cArmh88KcwSpUg== integrity sha512-/a/VFeftc+etGXQYWaaks977j1P7/wickBXn15zDxZzXYYMT9RN17ztqyIDVLXg9krtg28+icKK6lvgIYghJ0w==
"xterm@npm:@tabby-gang/xterm@^4.15.1-beta.1": "xterm@npm:@tabby-gang/xterm@^4.16.0":
version "4.15.1-beta.1" version "4.16.0"
resolved "https://registry.yarnpkg.com/@tabby-gang/xterm/-/xterm-4.15.1-beta.1.tgz#217a52f4e614cbbe567413e921b221e12a4f31c2" resolved "https://registry.yarnpkg.com/@tabby-gang/xterm/-/xterm-4.16.0.tgz#5706adc800aa515d3ae214cba9ceec670500735d"
integrity sha512-rn7AfdAQwl4sLvgUVJqJNyZP/0rnrBHjENV/iwgbd6bPfKcpynhjog7fv4Jxmp73itPnLuIs71D2kk9t1Hu0Wg== integrity sha512-TeEhVmMtbkLyUIELHhWO39oxvD/KG7ZTLlx/OyDRXAeU6FoZFRATBKa8S70teJkyZ0yDgy8QZlRyx0HdRIIoyA==
yallist@^4.0.0: yallist@^4.0.0:
version "4.0.0" version "4.0.0"

View File

@@ -2664,10 +2664,10 @@ electron-to-chromium@^1.3.723:
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.736.tgz#f632d900a1f788dab22fec9c62ec5c9c8f0c4052" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.736.tgz#f632d900a1f788dab22fec9c62ec5c9c8f0c4052"
integrity sha512-DY8dA7gR51MSo66DqitEQoUMQ0Z+A2DSXFi7tK304bdTVqczCAfUuyQw6Wdg8hIoo5zIxkU1L24RQtUce1Ioig== integrity sha512-DY8dA7gR51MSo66DqitEQoUMQ0Z+A2DSXFi7tK304bdTVqczCAfUuyQw6Wdg8hIoo5zIxkU1L24RQtUce1Ioig==
electron@16.0.2: electron@16.0.5:
version "16.0.2" version "16.0.5"
resolved "https://registry.yarnpkg.com/electron/-/electron-16.0.2.tgz#6d0ae3152c410478dfffdbf80852a3840679b8c5" resolved "https://registry.yarnpkg.com/electron/-/electron-16.0.5.tgz#16394c196e42215a82da1f4f39a3f757caf33cb1"
integrity sha512-kT746yVMztrP4BbT3nrFNcUcfgFu2yelUw6TWBVTy0pju+fBISaqcvoiMrq+8U0vRpoXSu2MJYygOf4T0Det7g== integrity sha512-TgQXWmEGQ3uH2P2JDq5GyJDEu/fimRgqp1iNisARtGreU1k3630PqWlR+4SPnSEHN9NuSv92ng6NWxtefeFzxg==
dependencies: dependencies:
"@electron/get" "^1.13.0" "@electron/get" "^1.13.0"
"@types/node" "^14.6.2" "@types/node" "^14.6.2"