diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e45aafae3a3..3fc896f608a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -86,6 +86,7 @@ jobs: KEYGEN_TOKEN: ${{ secrets.KEYGEN_TOKEN }} CSC_LINK: ${{ secrets.CSC_LINK }} CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }} + APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} APPSTORE_USERNAME: ${{ secrets.APPSTORE_USERNAME }} APPSTORE_PASSWORD: ${{ secrets.APPSTORE_PASSWORD }} USE_HARD_LINKS: false @@ -137,7 +138,7 @@ jobs: - build-arch: arm64 arch: arm64 triplet: aarch64-linux-gnu- - - build-arch: arm + - build-arch: arm arch: armhf triplet: arm-linux-gnueabihf- env: @@ -152,7 +153,7 @@ jobs: uses: actions/checkout@v3 with: fetch-depth: 0 - + - name: Install Node uses: actions/setup-node@v3.6.0 with: @@ -161,14 +162,14 @@ jobs: - name: Install deps (amd64) run: | sudo apt-get update - sudo apt-get install libarchive-tools zsh - + sudo apt-get install libarchive-tools zsh + - name: Install npm_modules (amd64) run: | npm i -g yarn yarn --network-timeout 1000000 if: matrix.build-arch == 'x64' - + - name: Setup Crossbuild (${{matrix.arch}}) run: | sudo apt-get update -y && sudo apt-get install schroot sbuild debootstrap -y @@ -184,7 +185,7 @@ jobs: root-groups=root,sudo profile=buildd personality=linux - union-type=overlay" | sudo tee /etc/schroot/chroot.d/build-chroot.pref >/dev/null + union-type=overlay" | sudo tee /etc/schroot/chroot.d/build-chroot.pref >/dev/null echo "/home /home none rw,bind 0 0" | sudo tee -a /etc/schroot/buildd/fstab >/dev/null if: matrix.build-arch != 'x64' @@ -194,7 +195,7 @@ jobs: sudo schroot -c build-chroot -u root -- bash -c "apt-get update -y dpkg --add-architecture ${{matrix.arch}} apt-get install -y nodejs libfontconfig-dev:${{matrix.arch}} libsecret-1-dev:${{matrix.arch}} libnss3:${{matrix.arch}} libatk1.0-0:${{matrix.arch}} libatk-bridge2.0-0:${{matrix.arch}} libgdk-pixbuf2.0-0:${{matrix.arch}} libgtk-3-0:${{matrix.arch}} libgbm1:${{matrix.arch}} - export CC=${{matrix.triplet}}gcc CXX=${{matrix.triplet}}g++ LD=${{matrix.triplet}}ld + export CC=${{matrix.triplet}}gcc CXX=${{matrix.triplet}}g++ LD=${{matrix.triplet}}ld if [[ ${{matrix.arch}} == 'arm64' ]]; then export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/lib/aarch64-linux-gnu/pkgconfig/ elif [[ ${{matrix.arch}} == 'armhf' ]]; then @@ -210,7 +211,7 @@ jobs: - name: Prepackage plugins (${{matrix.arch}}) run: scripts/prepackage-plugins.mjs - + - name: Build packages (${{matrix.arch}}) run: scripts/build-linux.mjs env: @@ -218,7 +219,7 @@ jobs: KEYGEN_TOKEN: ${{ secrets.KEYGEN_TOKEN }} USE_HARD_LINKS: false # DEBUG: electron-builder,electron-builder:* - + - name: Build web resources run: zsh -c 'tar czf tabby-web.tar.gz (tabby-*|web)/dist' if: matrix.build-arch == 'x64' @@ -294,7 +295,7 @@ jobs: with: name: Linux AppImage (${{matrix.arch}}) path: dist/*.AppImage - + - uses: actions/upload-artifact@master name: Upload DEB (${{matrix.arch}}) with: diff --git a/README.md b/README.md index 1dc5a09b0ba..6259c9da5a9 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ This README is also available in: :es: Spanish ---- -[**Tabby**](https://tabby.sh) (formerly **Terminus**) is a highly configurable terminal emulator, SSH and serial client for Windows, macOS and Linux +[**Tabby**](https://tabby.sh) (formerly **Terminus**) is a highly configurable terminal emulator, SSH and serial client for Windows 10, macOS and Linux * Integrated SSH and Telnet client and connection manager * Integrated serial terminal diff --git a/app/lib/window.ts b/app/lib/window.ts index 7db05ebb2fc..a73386b1021 100644 --- a/app/lib/window.ts +++ b/app/lib/window.ts @@ -460,7 +460,7 @@ export class Window { this.window.on('resize', onBoundsChange) ipcMain.on('window-set-traffic-light-position', (_event, x, y) => { - this.window.setTrafficLightPosition({ x, y }) + this.window.setWindowButtonPosition({ x, y }) }) ipcMain.on('window-set-opacity', (_event, opacity) => { diff --git a/build/mac/afterBuildHook.cjs b/build/mac/afterBuildHook.cjs deleted file mode 100644 index a306e784813..00000000000 --- a/build/mac/afterBuildHook.cjs +++ /dev/null @@ -1,16 +0,0 @@ -const fs = require('fs') -const signHook = require('./afterSignHook.cjs') - -module.exports = async function (params) { - // notarize the app on Mac OS only. - if (process.platform !== 'darwin' || !process.env.GITHUB_REF || !process.env.GITHUB_REF.startsWith('refs/tags/')) { - return - } - console.log('afterBuild hook triggered') - - let pkgName = fs.readdirSync('dist').find(x => x.endsWith('.pkg')) - signHook({ - appOutDir: 'dist', - _pathOverride: pkgName, - }) -} diff --git a/build/mac/afterSignHook.cjs b/build/mac/afterSignHook.cjs deleted file mode 100644 index 0eb03546513..00000000000 --- a/build/mac/afterSignHook.cjs +++ /dev/null @@ -1,35 +0,0 @@ -// See: https://medium.com/@TwitterArchiveEraser/notarize-electron-apps-7a5f988406db - -const fs = require('fs') -const path = require('path') -const notarizer = require('@electron/notarize') - -module.exports = async function (params) { - // notarize the app on Mac OS only. - if (process.platform !== 'darwin' || !process.env.GITHUB_REF || !process.env.GITHUB_REF.startsWith('refs/tags/')) { - return - } - console.log('afterSign hook triggered', params) - - let appId = 'org.tabby' - - let appPath = path.join(params.appOutDir, params._pathOverride || `${params.packager.appInfo.productFilename}.app`) - if (!fs.existsSync(appPath)) { - throw new Error(`Cannot find application at: ${appPath}`) - } - - console.log(`Notarizing ${appId} found at ${appPath}`) - - try { - await notarizer.notarize({ - appBundleId: appId, - appPath: appPath, - appleId: process.env.APPSTORE_USERNAME, - appleIdPassword: process.env.APPSTORE_PASSWORD, - }) - } catch (error) { - console.error(error) - } - - console.log(`Done notarizing ${appId}`) -} diff --git a/electron-builder.yml b/electron-builder.yml index 914147dc6f5..d39f3c29556 100644 --- a/electron-builder.yml +++ b/electron-builder.yml @@ -3,8 +3,6 @@ appId: org.tabby productName: Tabby compression: normal npmRebuild: false -afterSign: "./build/mac/afterSignHook.cjs" -afterAllArtifactBuild: "./build/mac/afterBuildHook.cjs" files: - '**/*' - dist diff --git a/patches/app-builder-lib+24.0.0-alpha.1.patch b/patches/app-builder-lib+24.4.0.patch similarity index 75% rename from patches/app-builder-lib+24.0.0-alpha.1.patch rename to patches/app-builder-lib+24.4.0.patch index eba0f2e602e..a1d7299a861 100644 --- a/patches/app-builder-lib+24.0.0-alpha.1.patch +++ b/patches/app-builder-lib+24.4.0.patch @@ -1,15 +1,15 @@ diff --git a/node_modules/app-builder-lib/out/appInfo.js b/node_modules/app-builder-lib/out/appInfo.js -index 363f32c..a0434a9 100644 +index 49f6dca..0ea11f2 100644 --- a/node_modules/app-builder-lib/out/appInfo.js +++ b/node_modules/app-builder-lib/out/appInfo.js -@@ -100,9 +100,7 @@ class AppInfo { +@@ -112,9 +112,7 @@ class AppInfo { return this.info.metadata.name; } get linuxPackageName() { - const name = this.name; - // https://github.com/electron-userland/electron-builder/issues/2963 - return name.startsWith("@") ? this.sanitizedProductName : name; -+ return 'tabby-terminal' ++ return 'tabby-terminal'; } get sanitizedName() { - return filename_1.sanitizeFileName(this.name); + return (0, filename_1.sanitizeFileName)(this.name); diff --git a/scripts/build-macos.mjs b/scripts/build-macos.mjs index 1e80a78cc93..96146faaef7 100755 --- a/scripts/build-macos.mjs +++ b/scripts/build-macos.mjs @@ -13,6 +13,9 @@ if (process.env.GITHUB_HEAD_REF) { process.env.CSC_IDENTITY_AUTO_DISCOVERY = 'false' } +process.env.APPLE_ID ??= process.env.APPSTORE_USERNAME +process.env.APPLE_APP_SPECIFIC_PASSWORD ??= process.env.APPSTORE_PASSWORD + builder({ dir: true, mac: ['pkg', 'zip'], @@ -24,6 +27,10 @@ builder({ }, mac: { identity: !process.env.CI || process.env.CSC_LINK ? undefined : null, + notarize: process.env.APPLE_TEAM_ID ? { + appBundleId: 'org.tabby', + teamId: process.env.APPLE_TEAM_ID, + } : false, }, npmRebuild: process.env.ARCH !== 'arm64', publish: process.env.KEYGEN_TOKEN ? [ diff --git a/tabby-core/src/api/platform.ts b/tabby-core/src/api/platform.ts index 63bf00e634f..9a87dc1834e 100644 --- a/tabby-core/src/api/platform.ts +++ b/tabby-core/src/api/platform.ts @@ -86,14 +86,18 @@ export interface FileUploadOptions { multiple: boolean } +export type PlatformTheme = 'light'|'dark' + export abstract class PlatformService { supportsWindowControls = false get fileTransferStarted$ (): Observable { return this.fileTransferStarted } get displayMetricsChanged$ (): Observable { return this.displayMetricsChanged } + get themeChanged$ (): Observable { return this.themeChanged } protected fileTransferStarted = new Subject() protected displayMetricsChanged = new Subject() + protected themeChanged = new Subject() abstract readClipboard (): string abstract setClipboard (content: ClipboardContent): void @@ -169,6 +173,10 @@ export abstract class PlatformService { throw new Error('Not implemented') } + getTheme (): PlatformTheme { + return 'dark' + } + abstract getOSRelease (): string abstract getAppVersion (): string abstract openExternal (url: string): void diff --git a/tabby-core/src/components/selectorModal.component.ts b/tabby-core/src/components/selectorModal.component.ts index 23bcdc4b086..76092314716 100644 --- a/tabby-core/src/components/selectorModal.component.ts +++ b/tabby-core/src/components/selectorModal.component.ts @@ -76,10 +76,11 @@ export class SelectorModalComponent { { sort: true }, ).search(f) - const freeOption = this.options.find(x => x.freeInputPattern) - if (freeOption && !this.filteredOptions.includes(freeOption)) { - this.filteredOptions.push(freeOption) - } + this.options.filter(x => x.freeInputPattern).forEach(freeOption => { + if (!this.filteredOptions.includes(freeOption)) { + this.filteredOptions.push(freeOption) + } + }) } this.selectedIndex = Math.max(0, this.selectedIndex) this.selectedIndex = Math.min(this.filteredOptions.length - 1, this.selectedIndex) diff --git a/tabby-core/src/configDefaults.yaml b/tabby-core/src/configDefaults.yaml index d8624391661..693c888b5c5 100644 --- a/tabby-core/src/configDefaults.yaml +++ b/tabby-core/src/configDefaults.yaml @@ -11,7 +11,7 @@ appearance: tabsLocation: top tabsInFullscreen: false cycleTabs: true - theme: Standard + theme: Follow the color scheme frame: thin css: '/* * { color: blue !important; } */' opacity: 1.0 @@ -54,3 +54,4 @@ hacks: disableVibrancyWhileDragging: false enableFluentBackground: false language: null +defaultQuickConnectProvider: "ssh" diff --git a/tabby-core/src/index.ts b/tabby-core/src/index.ts index 5622985753b..6cf14a24a12 100644 --- a/tabby-core/src/index.ts +++ b/tabby-core/src/index.ts @@ -219,6 +219,7 @@ export default class AppModule { // eslint-disable-line @typescript-eslint/no-ex name: this.translate.instant('Quick connect'), freeInputPattern: this.translate.instant('Connect to "%s"...'), icon: 'fas fa-arrow-right', + description: `(${provider.name.toUpperCase()})`, callback: query => { const p = provider.quickConnect(query) if (p) { diff --git a/tabby-core/src/services/profiles.service.ts b/tabby-core/src/services/profiles.service.ts index 295909e781b..943d11c2ddd 100644 --- a/tabby-core/src/services/profiles.service.ts +++ b/tabby-core/src/services/profiles.service.ts @@ -177,17 +177,20 @@ export class ProfilesService { }) } catch { } - if (this.getProviders().some(x => x.supportsQuickConnect)) { + this.getProviders().filter(x => x.supportsQuickConnect).forEach(provider => { options.push({ name: this.translate.instant('Quick connect'), freeInputPattern: this.translate.instant('Connect to "%s"...'), + description: `(${provider.name.toUpperCase()})`, icon: 'fas fa-arrow-right', + weight: provider.id !== this.config.store.defaultQuickConnectProvider ? 1 : 0, callback: query => { - const profile = this.quickConnect(query) + const profile = provider.quickConnect(query) resolve(profile) }, }) - } + }) + await this.selector.show(this.translate.instant('Select profile or enter an address'), options) } catch (err) { reject(err) diff --git a/tabby-core/src/services/themes.service.ts b/tabby-core/src/services/themes.service.ts index 802ac399f9b..01a6a2bd446 100644 --- a/tabby-core/src/services/themes.service.ts +++ b/tabby-core/src/services/themes.service.ts @@ -3,6 +3,7 @@ import { Subject, Observable } from 'rxjs' import * as Color from 'color' import { ConfigService } from '../services/config.service' import { Theme } from '../api/theme' +import { PlatformService } from '../api/platform' import { NewTheme } from '../theme' @Injectable({ providedIn: 'root' }) @@ -17,6 +18,7 @@ export class ThemesService { private constructor ( private config: ConfigService, private standardTheme: NewTheme, + private platform: PlatformService, @Inject(Theme) private themes: Theme[], ) { this.rootElementStyleBackup = document.documentElement.style.cssText @@ -24,6 +26,10 @@ export class ThemesService { config.ready$.toPromise().then(() => { this.applyCurrentTheme() this.applyThemeVariables() + platform.themeChanged$.subscribe(() => { + this.applyCurrentTheme() + this.applyThemeVariables() + }) config.changed$.subscribe(() => { this.applyCurrentTheme() this.applyThemeVariables() @@ -36,7 +42,7 @@ export class ThemesService { document.documentElement.style.cssText = this.rootElementStyleBackup } - const theme = this.config.store.terminal.colorScheme + const theme = this._getActiveColorScheme() const isDark = Color(theme.background).luminosity() < Color(theme.foreground).luminosity() function more (some, factor) { @@ -106,8 +112,10 @@ export class ThemesService { const themeColors = { primary: theme.colors[accentIndex], - secondary: less(theme.background, 0.5).string(), - tertiary: theme.colors[8], + secondary: isDark + ? less(theme.background, 0.5).string() + : less(theme.background, 0.125).string(), + tertiary: more(theme.background, 0.75).string(), warning: theme.colors[3], danger: theme.colors[1], success: theme.colors[2], @@ -184,6 +192,15 @@ export class ThemesService { return this.findTheme(this.config.store.appearance.theme) ?? this.standardTheme } + /// @hidden + _getActiveColorScheme (): any { + if (this.platform.getTheme() === 'light') { + return this.config.store.terminal.lightColorScheme + } else { + return this.config.store.terminal.colorScheme + } + } + applyTheme (theme: Theme): void { if (!this.styleElement) { this.styleElement = document.createElement('style') diff --git a/tabby-core/src/theme.new.scss b/tabby-core/src/theme.new.scss index 07e35aa604a..9b86408c334 100644 --- a/tabby-core/src/theme.new.scss +++ b/tabby-core/src/theme.new.scss @@ -110,7 +110,7 @@ body { } .nav { - --bs-nav-link-color: var(--theme-fg); + --bs-nav-link-color: var(--theme-fg-more); --bs-nav-link-hover-color: var(--theme-fg-less); --bs-nav-link-disabled-color: var(--bs-gray); } @@ -119,8 +119,8 @@ body { --bs-nav-tabs-border-width: 2px; --bs-nav-tabs-border-radius: 0; --bs-nav-tabs-link-hover-border-color: var(--bs-body-bg); - --bs-nav-tabs-border-color: var(--theme-fg-less-2); - --bs-nav-tabs-link-active-color: var(--theme-fg-less-2); + --bs-nav-tabs-border-color: var(--theme-fg); + --bs-nav-tabs-link-active-color: var(--theme-fg); --bs-nav-tabs-link-active-bg: transparent; --bs-nav-tabs-link-active-border-color: transparent; diff --git a/tabby-electron/src/services/electron.service.ts b/tabby-electron/src/services/electron.service.ts index aab81e7310c..a56e32ca20d 100644 --- a/tabby-electron/src/services/electron.service.ts +++ b/tabby-electron/src/services/electron.service.ts @@ -1,5 +1,5 @@ import { Injectable } from '@angular/core' -import { App, IpcRenderer, Shell, Dialog, Clipboard, GlobalShortcut, Screen, AutoUpdater, TouchBar, BrowserWindow, Menu, MenuItem, PowerSaveBlocker } from 'electron' +import { App, IpcRenderer, Shell, Dialog, Clipboard, GlobalShortcut, Screen, AutoUpdater, TouchBar, BrowserWindow, Menu, MenuItem, PowerSaveBlocker, NativeTheme } from 'electron' import * as remote from '@electron/remote' export interface MessageBoxResponse { @@ -20,6 +20,7 @@ export class ElectronService { process: any autoUpdater: AutoUpdater powerSaveBlocker: PowerSaveBlocker + nativeTheme: NativeTheme TouchBar: typeof TouchBar BrowserWindow: typeof BrowserWindow Menu: typeof Menu @@ -43,5 +44,7 @@ export class ElectronService { this.BrowserWindow = remote.BrowserWindow this.Menu = remote.Menu this.MenuItem = remote.MenuItem + this.MenuItem = remote.MenuItem + this.nativeTheme = remote.nativeTheme } } diff --git a/tabby-electron/src/services/platform.service.ts b/tabby-electron/src/services/platform.service.ts index d6243c796fc..604cddc2c45 100644 --- a/tabby-electron/src/services/platform.service.ts +++ b/tabby-electron/src/services/platform.service.ts @@ -10,6 +10,7 @@ import { ElectronService } from '../services/electron.service' import { ElectronHostWindow } from './hostWindow.service' import { ShellIntegrationService } from './shellIntegration.service' import { ElectronHostAppService } from './hostApp.service' +import { PlatformTheme } from '../../../tabby-core/src/api/platform' const fontManager = require('fontmanager-redux') // eslint-disable-line /* eslint-disable block-scoped-var */ @@ -40,6 +41,10 @@ export class ElectronPlatformService extends PlatformService { electron.ipcRenderer.on('host:display-metrics-changed', () => { this.zone.run(() => this.displayMetricsChanged.next()) }) + + electron.nativeTheme.on('updated', () => { + this.zone.run(() => this.themeChanged.next(this.getTheme())) + }) } readClipboard (): string { @@ -243,6 +248,14 @@ export class ElectronPlatformService extends PlatformService { }, )).filePaths[0] } + + getTheme (): PlatformTheme { + if (this.electron.nativeTheme.shouldUseDarkColors) { + return 'dark' + } else { + return 'light' + } + } } class ElectronFileUpload extends FileUpload { diff --git a/tabby-settings/src/components/profilesSettingsTab.component.pug b/tabby-settings/src/components/profilesSettingsTab.component.pug index 0513f26b950..9ce3f98181a 100644 --- a/tabby-settings/src/components/profilesSettingsTab.component.pug +++ b/tabby-settings/src/components/profilesSettingsTab.component.pug @@ -149,6 +149,20 @@ ul.nav-tabs(ngbNav, #nav='ngbNav') option(ngValue='wt', translation) Windows Terminal option(ngValue='cygwin', translation) Cygwin + .form-line + .header + .title(translate) Default "Connect to" type + .description(translate) Default connection type used by quick connect feature (ex. SSH, Telnet) + + select.form-control( + [(ngModel)]='config.store.defaultQuickConnectProvider', + (ngModelChange)='config.save()', + ) + option( + *ngFor='let provider of getQuickConnectProviders()', + [ngValue]='provider.id' + ) {{provider.name}} + .form-line.content-box .header .title(translate) Default profile settings diff --git a/tabby-settings/src/components/profilesSettingsTab.component.ts b/tabby-settings/src/components/profilesSettingsTab.component.ts index 9b6e1c8b1ac..38898ae680a 100644 --- a/tabby-settings/src/components/profilesSettingsTab.component.ts +++ b/tabby-settings/src/components/profilesSettingsTab.component.ts @@ -312,4 +312,8 @@ export class ProfilesSettingsTabComponent extends BaseComponent { isProfileBlacklisted (profile: PartialProfile): boolean { return profile.id && this.config.store.profileBlacklist.includes(profile.id) } + + getQuickConnectProviders (): ProfileProvider[] { + return this.profileProviders.filter(x => x.supportsQuickConnect) + } } diff --git a/tabby-telnet/src/profiles.ts b/tabby-telnet/src/profiles.ts index 6530771e3e3..fad4f8ce652 100644 --- a/tabby-telnet/src/profiles.ts +++ b/tabby-telnet/src/profiles.ts @@ -8,7 +8,7 @@ import { TelnetProfile } from './session' export class TelnetProfilesService extends ProfileProvider { id = 'telnet' name = 'Telnet' - supportsQuickConnect = false + supportsQuickConnect = true settingsComponent = TelnetProfileSettingsComponent configDefaults = { options: { diff --git a/tabby-terminal/src/api/baseTerminalTab.component.ts b/tabby-terminal/src/api/baseTerminalTab.component.ts index c1adf56dfed..8c89074560b 100644 --- a/tabby-terminal/src/api/baseTerminalTab.component.ts +++ b/tabby-terminal/src/api/baseTerminalTab.component.ts @@ -331,6 +331,10 @@ export class BaseTerminalTabComponent

extends Bas this.frontend?.focus() }) + this.subscribeUntilDestroyed(this.platform.themeChanged$, () => { + this.configure() + }) + const cls: new (..._) => Frontend = { xterm: XTermFrontend, 'xterm-webgl': XTermWebGLFrontend, diff --git a/tabby-terminal/src/colorSchemes.ts b/tabby-terminal/src/colorSchemes.ts index 22b799c53af..32e763e874b 100644 --- a/tabby-terminal/src/colorSchemes.ts +++ b/tabby-terminal/src/colorSchemes.ts @@ -27,9 +27,41 @@ export class DefaultColorSchemes extends TerminalColorSchemeProvider { '#b7fff9', '#ffffff', ], + selection: undefined, + cursorAccent: undefined, + } + + static defaultLightColorScheme: TerminalColorScheme = { + name: 'Tabby Default Light', + foreground: '#4d4d4c', + background: '#ffffff', + cursor: '#4d4d4c', + colors: [ + '#000000', + '#c82829', + '#718c00', + '#eab700', + '#4271ae', + '#8959a8', + '#3e999f', + '#ffffff', + '#000000', + '#c82829', + '#718c00', + '#eab700', + '#4271ae', + '#8959a8', + '#3e999f', + '#ffffff', + ], + selection: undefined, + cursorAccent: undefined, } async getSchemes (): Promise { - return [DefaultColorSchemes.defaultColorScheme] + return [ + DefaultColorSchemes.defaultColorScheme, + DefaultColorSchemes.defaultLightColorScheme, + ] } } diff --git a/tabby-terminal/src/components/colorSchemeSettingsForMode.component.pug b/tabby-terminal/src/components/colorSchemeSettingsForMode.component.pug new file mode 100644 index 00000000000..31f73b8563c --- /dev/null +++ b/tabby-terminal/src/components/colorSchemeSettingsForMode.component.pug @@ -0,0 +1,116 @@ +.head + .d-flex.align-items-center(*ngIf='!editing') + strong.me-2(translate) Current color scheme + span {{getCurrentSchemeName()}} + .me-auto + .btn-toolbar + button.btn.btn-secondary((click)='editScheme()') + i.fas.fa-pen + span(translate) Edit + .me-1 + button.btn.btn-danger( + (click)='deleteScheme(config.store.terminal[this.configKey])', + *ngIf='currentCustomScheme' + ) + i.fas.fa-trash + span(translate) Delete + + div(*ngIf='editing') + .mb-3 + label(translate) Name + input.form-control(type='text', [(ngModel)]='config.store.terminal[this.configKey].name') + + .mb-3 + color-picker( + [(model)]='config.store.terminal[this.configKey].foreground', + (modelChange)='config.save()', + title='FG', + hint='Foreground' + ) + color-picker( + [(model)]='config.store.terminal[this.configKey].background', + (modelChange)='config.save()', + title='BG', + hint='Background' + ) + color-picker( + [(model)]='config.store.terminal[this.configKey].cursor', + (modelChange)='config.save()', + title='CU', + hint='Cursor color' + ) + color-picker( + [(model)]='config.store.terminal[this.configKey].cursorAccent', + (modelChange)='config.save()', + title='CA', + hint='Block cursor foreground' + ) + color-picker( + [(model)]='config.store.terminal[this.configKey].selection', + (modelChange)='config.save()', + title='SB', + hint='Selection background' + ) + color-picker( + [(model)]='config.store.terminal[this.configKey].selectionForeground', + (modelChange)='config.save()', + title='SF', + hint='Selection foreground' + ) + color-picker( + *ngFor='let _ of config.store.terminal[this.configKey].colors; let idx = index; trackBy: colorsTrackBy', + [(model)]='config.store.terminal[this.configKey].colors[idx]', + (modelChange)='config.save()', + [title]='idx.toString()', + hint='ANSI color {{idx}}' + ) + + color-scheme-preview([scheme]='config.store.terminal[this.configKey]') + + .btn-toolbar.d-flex.mt-2(*ngIf='editing') + .me-auto + button.btn.btn-primary((click)='saveScheme()') + i.fas.fa-check + span(translate) Save + .me-1 + button.btn.btn-secondary((click)='cancelEditing()') + i.fas.fa-times + span(translate) Cancel + + hr.mt-3.mb-4 + + .input-group.mb-3 + .input-group-text + i.fas.fa-fw.fa-search + input.form-control(type='search', [placeholder]='"Search color schemes"|translate', [(ngModel)]='filter') + +.body + .list-group.list-group-light.mb-3 + ng-container(*ngFor='let scheme of allColorSchemes') + .list-group-item.list-group-item-action( + [hidden]='filter && !scheme.name.toLowerCase().includes(filter.toLowerCase())', + (click)='selectScheme(scheme)', + [class.active]='(currentCustomScheme || currentStockScheme) === scheme' + ) + .d-flex.w-100.align-items-center + i.fas.fa-fw([class.fa-check]='(currentCustomScheme || currentStockScheme) === scheme') + + .ms-2 + + .me-auto + span {{scheme.name}} + .badge.text-bg-info.ms-2(*ngIf='customColorSchemes.includes(scheme)', translate) Custom + + div + .d-flex + .swatch( + *ngFor='let index of colorIndexes.slice(0, 8)', + [style.background-color]='scheme.colors[index]' + ) + .d-flex + .swatch( + *ngFor='let index of colorIndexes.slice(8, 16)', + [style.background-color]='scheme.colors[index]' + ) + + color-scheme-preview([scheme]='scheme') diff --git a/tabby-terminal/src/components/colorSchemeSettingsTab.component.scss b/tabby-terminal/src/components/colorSchemeSettingsForMode.component.scss similarity index 100% rename from tabby-terminal/src/components/colorSchemeSettingsTab.component.scss rename to tabby-terminal/src/components/colorSchemeSettingsForMode.component.scss diff --git a/tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts b/tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts new file mode 100644 index 00000000000..1adeb69c8aa --- /dev/null +++ b/tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts @@ -0,0 +1,117 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +import deepEqual from 'deep-equal' +import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker' + +import { Component, Inject, Input, ChangeDetectionStrategy, ChangeDetectorRef, HostBinding } from '@angular/core' +import { ConfigService, PlatformService, TranslateService } from 'tabby-core' +import { TerminalColorSchemeProvider } from '../api/colorSchemeProvider' +import { TerminalColorScheme } from '../api/interfaces' + +_('Search color schemes') + +/** @hidden */ +@Component({ + selector: 'color-scheme-settings-for-mode', + templateUrl: './colorSchemeSettingsForMode.component.pug', + styleUrls: ['./colorSchemeSettingsForMode.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ColorSchemeSettingsForModeComponent { + @Input() configKey: 'colorScheme'|'lightColorScheme' + + @Input() stockColorSchemes: TerminalColorScheme[] = [] + @Input() customColorSchemes: TerminalColorScheme[] = [] + @Input() allColorSchemes: TerminalColorScheme[] = [] + @Input() filter = '' + @Input() editing = false + colorIndexes = [...new Array(16).keys()] + + currentStockScheme: TerminalColorScheme|null = null + currentCustomScheme: TerminalColorScheme|null = null + + @HostBinding('class.content-box') true + + constructor ( + @Inject(TerminalColorSchemeProvider) private colorSchemeProviders: TerminalColorSchemeProvider[], + private changeDetector: ChangeDetectorRef, + private platform: PlatformService, + private translate: TranslateService, + public config: ConfigService, + ) { } + + async ngOnInit () { + this.stockColorSchemes = (await Promise.all(this.config.enabledServices(this.colorSchemeProviders).map(x => x.getSchemes()))).reduce((a, b) => a.concat(b)) + this.stockColorSchemes.sort((a, b) => a.name.localeCompare(b.name)) + this.customColorSchemes = this.config.store.terminal.customColorSchemes + this.changeDetector.markForCheck() + + this.update() + } + + ngOnChanges () { + this.update() + } + + selectScheme (scheme: TerminalColorScheme) { + this.config.store.terminal[this.configKey] = { ...scheme } + this.config.save() + this.cancelEditing() + this.update() + } + + update () { + this.currentCustomScheme = this.findMatchingScheme(this.config.store.terminal[this.configKey], this.customColorSchemes) + this.currentStockScheme = this.findMatchingScheme(this.config.store.terminal[this.configKey], this.stockColorSchemes) + this.allColorSchemes = this.customColorSchemes.concat(this.stockColorSchemes) + this.changeDetector.markForCheck() + } + + editScheme () { + this.editing = true + } + + saveScheme () { + this.customColorSchemes = this.customColorSchemes.filter(x => x.name !== this.config.store.terminal[this.configKey].name) + this.customColorSchemes.push(this.config.store.terminal[this.configKey]) + this.config.store.terminal.customColorSchemes = this.customColorSchemes + this.config.save() + this.cancelEditing() + this.update() + } + + cancelEditing () { + this.editing = false + } + + async deleteScheme (scheme: TerminalColorScheme) { + if ((await this.platform.showMessageBox( + { + type: 'warning', + message: this.translate.instant('Delete "{name}"?', scheme), + buttons: [ + this.translate.instant('Delete'), + this.translate.instant('Keep'), + ], + defaultId: 1, + cancelId: 1, + }, + )).response === 0) { + this.customColorSchemes = this.customColorSchemes.filter(x => x.name !== scheme.name) + this.config.store.terminal.customColorSchemes = this.customColorSchemes + this.config.save() + this.update() + } + } + + getCurrentSchemeName () { + return (this.currentCustomScheme ?? this.currentStockScheme)?.name ?? 'Custom' + } + + findMatchingScheme (scheme: TerminalColorScheme, schemes: TerminalColorScheme[]) { + return schemes.find(x => deepEqual(x, scheme)) ?? null + } + + colorsTrackBy (index) { + return index + } +} diff --git a/tabby-terminal/src/components/colorSchemeSettingsTab.component.pug b/tabby-terminal/src/components/colorSchemeSettingsTab.component.pug index 21444a2c7cd..dfc2294f8f8 100644 --- a/tabby-terminal/src/components/colorSchemeSettingsTab.component.pug +++ b/tabby-terminal/src/components/colorSchemeSettingsTab.component.pug @@ -1,117 +1,14 @@ -.head - h3.mb-3(translate) Current color scheme +h3.mb-3(translate) Color schemes - .d-flex.align-items-center(*ngIf='!editing') - span {{getCurrentSchemeName()}} - .me-auto - .btn-toolbar - button.btn.btn-secondary((click)='editScheme()') - i.fas.fa-pen - span(translate) Edit - .me-1 - button.btn.btn-danger( - (click)='deleteScheme(config.store.terminal.colorScheme)', - *ngIf='currentCustomScheme' - ) - i.fas.fa-trash - span(translate) Delete +ul.nav-tabs(ngbNav, #nav='ngbNav', [activeId]='defaultTab') + li(ngbNavItem='dark') + a(ngbNavLink, translate) Dark mode + ng-template(ngbNavContent) + color-scheme-settings-for-mode(configKey='colorScheme') - div(*ngIf='editing') - .mb-3 - label(translate) Name - input.form-control(type='text', [(ngModel)]='config.store.terminal.colorScheme.name') + li(ngbNavItem='light') + a(ngbNavLink, translate) Light mode + ng-template(ngbNavContent) + color-scheme-settings-for-mode(configKey='lightColorScheme') - .mb-3 - color-picker( - [(model)]='config.store.terminal.colorScheme.foreground', - (modelChange)='config.save()', - title='FG', - hint='Foreground' - ) - color-picker( - [(model)]='config.store.terminal.colorScheme.background', - (modelChange)='config.save()', - title='BG', - hint='Background' - ) - color-picker( - [(model)]='config.store.terminal.colorScheme.cursor', - (modelChange)='config.save()', - title='CU', - hint='Cursor color' - ) - color-picker( - [(model)]='config.store.terminal.colorScheme.cursorAccent', - (modelChange)='config.save()', - title='CA', - hint='Block cursor foreground' - ) - color-picker( - [(model)]='config.store.terminal.colorScheme.selection', - (modelChange)='config.save()', - title='SB', - hint='Selection background' - ) - color-picker( - [(model)]='config.store.terminal.colorScheme.selectionForeground', - (modelChange)='config.save()', - title='SF', - hint='Selection foreground' - ) - color-picker( - *ngFor='let _ of config.store.terminal.colorScheme.colors; let idx = index; trackBy: colorsTrackBy', - [(model)]='config.store.terminal.colorScheme.colors[idx]', - (modelChange)='config.save()', - [title]='idx.toString()', - hint='ANSI color {{idx}}' - ) - - color-scheme-preview([scheme]='config.store.terminal.colorScheme') - - .btn-toolbar.d-flex.mt-2(*ngIf='editing') - .me-auto - button.btn.btn-primary((click)='saveScheme()') - i.fas.fa-check - span(translate) Save - .me-1 - button.btn.btn-secondary((click)='cancelEditing()') - i.fas.fa-times - span(translate) Cancel - - hr.mt-3.mb-4 - - .input-group.mb-3 - .input-group-text - i.fas.fa-fw.fa-search - input.form-control(type='search', [placeholder]='"Search color schemes"|translate', [(ngModel)]='filter') - -.body - .list-group.list-group-light.mb-3 - ng-container(*ngFor='let scheme of allColorSchemes') - .list-group-item.list-group-item-action( - [hidden]='filter && !scheme.name.toLowerCase().includes(filter.toLowerCase())', - (click)='selectScheme(scheme)', - [class.active]='(currentCustomScheme || currentStockScheme) === scheme' - ) - .d-flex.w-100.align-items-center - i.fas.fa-fw([class.fa-check]='(currentCustomScheme || currentStockScheme) === scheme') - - .ms-2 - - .me-auto - span {{scheme.name}} - .badge.text-bg-info.ms-2(*ngIf='customColorSchemes.includes(scheme)', translate) Custom - - div - .d-flex - .swatch( - *ngFor='let index of colorIndexes.slice(0, 8)', - [style.background-color]='scheme.colors[index]' - ) - .d-flex - .swatch( - *ngFor='let index of colorIndexes.slice(8, 16)', - [style.background-color]='scheme.colors[index]' - ) - - color-scheme-preview([scheme]='scheme') +div([ngbNavOutlet]='nav') diff --git a/tabby-terminal/src/components/colorSchemeSettingsTab.component.ts b/tabby-terminal/src/components/colorSchemeSettingsTab.component.ts index 03443ea435d..dc2d849fa81 100644 --- a/tabby-terminal/src/components/colorSchemeSettingsTab.component.ts +++ b/tabby-terminal/src/components/colorSchemeSettingsTab.component.ts @@ -1,114 +1,16 @@ -/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ -import deepEqual from 'deep-equal' -import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker' - -import { Component, Inject, Input, ChangeDetectionStrategy, ChangeDetectorRef, HostBinding } from '@angular/core' -import { ConfigService, PlatformService, TranslateService } from 'tabby-core' -import { TerminalColorSchemeProvider } from '../api/colorSchemeProvider' -import { TerminalColorScheme } from '../api/interfaces' - -_('Search color schemes') +import { Component } from '@angular/core' +import { PlatformService } from 'tabby-core' /** @hidden */ @Component({ templateUrl: './colorSchemeSettingsTab.component.pug', - styleUrls: ['./colorSchemeSettingsTab.component.scss'], - changeDetection: ChangeDetectionStrategy.OnPush, }) export class ColorSchemeSettingsTabComponent { - @Input() stockColorSchemes: TerminalColorScheme[] = [] - @Input() customColorSchemes: TerminalColorScheme[] = [] - @Input() allColorSchemes: TerminalColorScheme[] = [] - @Input() filter = '' - @Input() editing = false - colorIndexes = [...new Array(16).keys()] - - currentStockScheme: TerminalColorScheme|null = null - currentCustomScheme: TerminalColorScheme|null = null - - @HostBinding('class.content-box') true + defaultTab = 'dark' constructor ( - @Inject(TerminalColorSchemeProvider) private colorSchemeProviders: TerminalColorSchemeProvider[], - private changeDetector: ChangeDetectorRef, - private platform: PlatformService, - private translate: TranslateService, - public config: ConfigService, - ) { } - - async ngOnInit () { - this.stockColorSchemes = (await Promise.all(this.config.enabledServices(this.colorSchemeProviders).map(x => x.getSchemes()))).reduce((a, b) => a.concat(b)) - this.stockColorSchemes.sort((a, b) => a.name.localeCompare(b.name)) - this.customColorSchemes = this.config.store.terminal.customColorSchemes - this.changeDetector.markForCheck() - - this.update() - } - - ngOnChanges () { - this.update() - } - - selectScheme (scheme: TerminalColorScheme) { - this.config.store.terminal.colorScheme = { ...scheme } - this.config.save() - this.cancelEditing() - this.update() - } - - update () { - this.currentCustomScheme = this.findMatchingScheme(this.config.store.terminal.colorScheme, this.customColorSchemes) - this.currentStockScheme = this.findMatchingScheme(this.config.store.terminal.colorScheme, this.stockColorSchemes) - this.allColorSchemes = this.customColorSchemes.concat(this.stockColorSchemes) - this.changeDetector.markForCheck() - } - - editScheme () { - this.editing = true - } - - saveScheme () { - this.customColorSchemes = this.customColorSchemes.filter(x => x.name !== this.config.store.terminal.colorScheme.name) - this.customColorSchemes.push(this.config.store.terminal.colorScheme) - this.config.store.terminal.customColorSchemes = this.customColorSchemes - this.config.save() - this.cancelEditing() - this.update() - } - - cancelEditing () { - this.editing = false - } - - async deleteScheme (scheme: TerminalColorScheme) { - if ((await this.platform.showMessageBox( - { - type: 'warning', - message: this.translate.instant('Delete "{name}"?', scheme), - buttons: [ - this.translate.instant('Delete'), - this.translate.instant('Keep'), - ], - defaultId: 1, - cancelId: 1, - }, - )).response === 0) { - this.customColorSchemes = this.customColorSchemes.filter(x => x.name !== scheme.name) - this.config.store.terminal.customColorSchemes = this.customColorSchemes - this.config.save() - this.update() - } - } - - getCurrentSchemeName () { - return (this.currentCustomScheme ?? this.currentStockScheme)?.name ?? 'Custom' - } - - findMatchingScheme (scheme: TerminalColorScheme, schemes: TerminalColorScheme[]) { - return schemes.find(x => deepEqual(x, scheme)) ?? null - } - - colorsTrackBy (index) { - return index + platform: PlatformService, + ) { + this.defaultTab = platform.getTheme() } } diff --git a/tabby-terminal/src/config.ts b/tabby-terminal/src/config.ts index 25a75317108..2daf66f6403 100644 --- a/tabby-terminal/src/config.ts +++ b/tabby-terminal/src/config.ts @@ -33,10 +33,12 @@ export class TerminalConfigProvider extends ConfigProvider { wordSeparator: ' ()[]{}\'"', colorScheme: { __nonStructural: true, - selection: null, - cursorAccent: null, ...DefaultColorSchemes.defaultColorScheme, }, + lightColorScheme: { + __nonStructural: true, + ...DefaultColorSchemes.defaultLightColorScheme, + }, customColorSchemes: [], warnOnMultilinePaste: true, searchRegexAlwaysEnabled: false, diff --git a/tabby-terminal/src/frontends/xtermFrontend.ts b/tabby-terminal/src/frontends/xtermFrontend.ts index 309a819f76c..bfec17657e9 100644 --- a/tabby-terminal/src/frontends/xtermFrontend.ts +++ b/tabby-terminal/src/frontends/xtermFrontend.ts @@ -363,7 +363,7 @@ export class XTermFrontend extends Frontend { private configureColors (scheme: TerminalColorScheme|undefined): void { const config = this.configService.store - scheme = scheme ?? config.terminal.colorScheme + scheme = scheme ?? this.themes._getActiveColorScheme() const theme: ITheme = { foreground: scheme!.foreground, diff --git a/tabby-terminal/src/index.ts b/tabby-terminal/src/index.ts index 2ae09431b7e..76226124401 100644 --- a/tabby-terminal/src/index.ts +++ b/tabby-terminal/src/index.ts @@ -19,6 +19,7 @@ import { LoginScriptsSettingsComponent } from './components/loginScriptsSettings import { TerminalToolbarComponent } from './components/terminalToolbar.component' import { ColorSchemeSelectorComponent } from './components/colorSchemeSelector.component' import { InputProcessingSettingsComponent } from './components/inputProcessingSettings.component' +import { ColorSchemeSettingsForModeComponent } from './components/colorSchemeSettingsForMode.component' import { TerminalDecorator } from './api/decorator' import { TerminalContextMenuItemProvider } from './api/contextMenuProvider' @@ -78,6 +79,7 @@ import { DefaultColorSchemes } from './colorSchemes' LoginScriptsSettingsComponent, TerminalToolbarComponent, InputProcessingSettingsComponent, + ColorSchemeSettingsForModeComponent, ], exports: [ ColorPickerComponent, diff --git a/yarn.lock b/yarn.lock index 22e72e75698..34e3c61205c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -316,6 +316,16 @@ resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== +"@electron/asar@^3.2.1": + version "3.2.4" + resolved "https://registry.yarnpkg.com/@electron/asar/-/asar-3.2.4.tgz#7e8635a3c4f6d8b3f8ae6efaf5ecb9fbf3bd9864" + integrity sha512-lykfY3TJRRWFeTxccEKdf1I6BLl2Plw81H0bbp4Fc5iEc67foDCa5pjJQULVgo0wF+Dli75f3xVcdb/67FFZ/g== + dependencies: + chromium-pickle-js "^0.2.0" + commander "^5.0.0" + glob "^7.1.6" + minimatch "^3.0.4" + "@electron/get@^2.0.0": version "2.0.2" resolved "https://registry.yarnpkg.com/@electron/get/-/get-2.0.2.tgz#ae2a967b22075e9c25aaf00d5941cd79c21efd7e" @@ -339,15 +349,46 @@ debug "^4.1.1" fs-extra "^9.0.1" -"@electron/universal@1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@electron/universal/-/universal-1.2.1.tgz#3c2c4ff37063a4e9ab1e6ff57db0bc619bc82339" - integrity sha512-7323HyMh7KBAl/nPDppdLsC87G6RwRU02dy5FPeGB1eS7rUePh55+WNWiDPLhFQqqVPHzh77M69uhmoT8XnwMQ== +"@electron/osx-sign@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@electron/osx-sign/-/osx-sign-1.0.4.tgz#8e91442846471636ca0469426a82b253b9170151" + integrity sha512-xfhdEcIOfAZg7scZ9RQPya1G1lWo8/zMCwUXAulq0SfY7ONIW+b9qGyKdMyuMctNYwllrIS+vmxfijSfjeh97g== + dependencies: + compare-version "^0.1.2" + debug "^4.3.4" + fs-extra "^10.0.0" + isbinaryfile "^4.0.8" + minimist "^1.2.6" + plist "^3.0.5" + +"@electron/rebuild@^3.2.13": + version "3.2.13" + resolved "https://registry.yarnpkg.com/@electron/rebuild/-/rebuild-3.2.13.tgz#98fbb98981b1a86162546a2ab91b2355569cca4c" + integrity sha512-DH9Ol4JCnHDYVOD0fKWq+Qqbn/0WU1O6QR0mIpMXEVU4YFM4PlaqNC9K36mGShNBxxGFotZCMDrB1wl/iHM12g== + dependencies: + "@malept/cross-spawn-promise" "^2.0.0" + chalk "^4.0.0" + debug "^4.1.1" + detect-libc "^2.0.1" + fs-extra "^10.0.0" + got "^11.7.0" + node-abi "^3.0.0" + node-api-version "^0.1.4" + node-gyp "^9.0.0" + ora "^5.1.0" + semver "^7.3.5" + tar "^6.0.5" + yargs "^17.0.1" + +"@electron/universal@1.3.4": + version "1.3.4" + resolved "https://registry.yarnpkg.com/@electron/universal/-/universal-1.3.4.tgz#bccd94b635d7c85eeed5eabba457eb4ed2be2777" + integrity sha512-BdhBgm2ZBnYyYRLRgOjM5VHkyFItsbggJ0MHycOjKWdFGYwK97ZFXH54dTvUWEfha81vfvwr5On6XBjt99uDcg== dependencies: + "@electron/asar" "^3.2.1" "@malept/cross-spawn-promise" "^1.1.0" - asar "^3.1.0" debug "^4.3.1" - dir-compare "^2.4.0" + dir-compare "^3.0.0" fs-extra "^9.0.1" minimatch "^3.0.4" plist "^3.0.4" @@ -726,9 +767,9 @@ "@types/responselike" "*" "@types/debug@^4.1.6": - version "4.1.7" - resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.7.tgz#7cc0ea761509124709b8b2d1090d8f6c17aadb82" - integrity sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg== + version "4.1.8" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.8.tgz#cef723a5d0a90990313faec2d1e22aee5eecb317" + integrity sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ== dependencies: "@types/ms" "*" @@ -772,7 +813,7 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== -"@types/fs-extra@^9.0.1", "@types/fs-extra@^9.0.11", "@types/fs-extra@^9.0.13": +"@types/fs-extra@9.0.13", "@types/fs-extra@^9.0.1", "@types/fs-extra@^9.0.11", "@types/fs-extra@^9.0.13": version "9.0.13" resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.13.tgz#7594fbae04fe7f1918ce8b3d213f74ff44ac1f45" integrity sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA== @@ -824,7 +865,12 @@ resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197" integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== -"@types/node@*", "@types/node@20.3.1": +"@types/node@*": + version "20.4.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.2.tgz#129cc9ae69f93824f92fac653eebfb4812ab4af9" + integrity sha512-Dd0BYtWgnWJKwO1jkmTrzofjK2QXXcai0dmtzvIBhcA+RsG5h8R3xlyta0kGOZRNfL9GuRtb1knmPEhQrePCEw== + +"@types/node@20.3.1": version "20.3.1" resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.1.tgz#e8a83f1aa8b649377bb1fb5d7bac5cb90e784dfe" integrity sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg== @@ -869,18 +915,6 @@ resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.18.0.tgz#ed6ecaa8e5ed5dfe8b2b3d00181702c9925f13fb" integrity sha512-56/MAlX5WMsPVbOg7tAxnYvNYMMWr/QJiIp6BxVSW3JJXUVzzOn64qW8TzQyMSqSUFM2+PVI4aUHcHOzIz/1tg== -"@types/yargs-parser@*": - version "21.0.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" - integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== - -"@types/yargs@^17.0.1": - version "17.0.13" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.13.tgz#34cced675ca1b1d51fcf4d34c3c6f0fa142a5c76" - integrity sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg== - dependencies: - "@types/yargs-parser" "*" - "@types/yauzl@^2.9.1": version "2.10.0" resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599" @@ -1141,6 +1175,11 @@ resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.1.tgz#34bdc31727a1889198855913db2f270ace6d7bf8" integrity sha512-0G7tNyS+yW8TdgHwZKlDWYXFA6OJQnoLCQvYKkQP0Q2X205PSQ6RNUj0M+1OB/9gRQaUZ/ccYfaxd0nhaWKfjw== +"@xmldom/xmldom@^0.8.8": + version "0.8.9" + resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.9.tgz#b6ef7457e826be8049667ae673eda7876eb049be" + integrity sha512-4VSbbcMoxc4KLjb1gs96SRmi7w4h1SF+fCoiK0XaQX62buCc1G5d0DC5bJ9xJBNPDSVCmIrcl8BiYxzjrqaaJA== + "@xtuc/ieee754@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" @@ -1358,37 +1397,39 @@ app-builder-bin@4.0.0: resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-4.0.0.tgz#1df8e654bd1395e4a319d82545c98667d7eed2f0" integrity sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA== -app-builder-lib@24.0.0-alpha.1: - version "24.0.0-alpha.1" - resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-24.0.0-alpha.1.tgz#3379edc9c7b099cc2ab1c3c3b0acb375cb4d9038" - integrity sha512-nf+XQvfHBCgpdCYKQZzEdeaaa4YxTMSJVY4yOvWDpitikWSBqecx4ywCxZv1SFcPKb3xEPRIF1N3ZJwlF18lTw== +app-builder-lib@24.4.0: + version "24.4.0" + resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-24.4.0.tgz#1606f94e99366eea9e7507228961b8396e40d546" + integrity sha512-EcdqtWvg1LAApKCfyRBukcVkmsa94s2e1VKHjZLpvA9/D14QEt8rHhffYeaA+cH/pVeoNVn2ob735KnfJKEEow== dependencies: "7zip-bin" "~5.1.1" "@develar/schema-utils" "~2.6.5" - "@electron/universal" "1.2.1" + "@electron/notarize" "^1.2.3" + "@electron/osx-sign" "^1.0.4" + "@electron/rebuild" "^3.2.13" + "@electron/universal" "1.3.4" "@malept/flatpak-bundler" "^0.4.0" + "@types/fs-extra" "9.0.13" async-exit-hook "^2.0.1" bluebird-lst "^1.0.9" - builder-util "23.6.0" - builder-util-runtime "9.1.1" + builder-util "24.4.0" + builder-util-runtime "9.2.1" chromium-pickle-js "^0.2.0" debug "^4.3.4" - ejs "^3.1.7" - electron-osx-sign "^0.6.0" - electron-publish "23.6.0" - electron-rebuild "^3.2.9" + ejs "^3.1.8" + electron-publish "24.4.0" form-data "^4.0.0" fs-extra "^10.1.0" hosted-git-info "^4.1.0" is-ci "^3.0.0" - isbinaryfile "^4.0.10" + isbinaryfile "^5.0.0" js-yaml "^4.1.0" lazy-val "^1.0.5" - minimatch "^3.1.2" + minimatch "^5.1.1" read-config-file "6.3.2" sanitize-filename "^1.6.3" - semver "^7.3.7" - tar "^6.1.11" + semver "^7.3.8" + tar "^6.1.12" temp-file "^3.4.0" apply-loader@2.0.0: @@ -1509,18 +1550,6 @@ asar@^3.0.0: optionalDependencies: "@types/glob" "^7.1.1" -asar@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/asar/-/asar-3.2.0.tgz#e6edb5edd6f627ebef04db62f771c61bea9c1221" - integrity sha512-COdw2ZQvKdFGFxXwX3oYh2/sOsJWJegrdJCGxnN4MZ7IULgRBp9P6665aqj9z1v9VwP4oP1hRBojRDQ//IGgAg== - dependencies: - chromium-pickle-js "^0.2.0" - commander "^5.0.0" - glob "^7.1.6" - minimatch "^3.0.4" - optionalDependencies: - "@types/glob" "^7.1.1" - asn1.js@^5.2.0: version "5.4.1" resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" @@ -1852,10 +1881,10 @@ buffer-crc32@~0.2.3: resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= -buffer-equal@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.0.tgz#59616b498304d556abd466966b22eeda3eca5fbe" - integrity sha512-tcBWO2Dl4e7Asr9hTGcpVrCe+F7DubpmqWCTbj4FHLmjqO2hIaC383acQubWtRJhdceqs5uBHs6Es+Sk//RKiQ== +buffer-equal@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.1.tgz#2f7651be5b1b3f057fcd6e7ee16cf34767077d90" + integrity sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg== buffer-fill@^1.0.0: version "1.0.0" @@ -1885,31 +1914,30 @@ buildcheck@0.0.3: resolved "https://registry.yarnpkg.com/buildcheck/-/buildcheck-0.0.3.tgz#70451897a95d80f7807e68fc412eb2e7e35ff4d5" integrity sha512-pziaA+p/wdVImfcbsZLNF32EiWyujlQLwolMqUQE8xpKNOH7KmZQaY8sXN7DGOEzPAElo9QTaeNRfGnf3iOJbA== -builder-util-runtime@9.1.1: - version "9.1.1" - resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-9.1.1.tgz#2da7b34e78a64ad14ccd070d6eed4662d893bd60" - integrity sha512-azRhYLEoDvRDR8Dhis4JatELC/jUvYjm4cVSj7n9dauGTOM2eeNn9KS0z6YA6oDsjI1xphjNbY6PZZeHPzzqaw== +builder-util-runtime@9.2.1: + version "9.2.1" + resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-9.2.1.tgz#3184dcdf7ed6c47afb8df733813224ced4f624fd" + integrity sha512-2rLv/uQD2x+dJ0J3xtsmI12AlRyk7p45TEbE/6o/fbb633e/S3pPgm+ct+JHsoY7r39dKHnGEFk/AASRFdnXmA== dependencies: debug "^4.3.4" sax "^1.2.4" -builder-util@23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-23.6.0.tgz#1880ec6da7da3fd6fa19b8bd71df7f39e8d17dd9" - integrity sha512-QiQHweYsh8o+U/KNCZFSvISRnvRctb8m/2rB2I1JdByzvNKxPeFLlHFRPQRXab6aYeXc18j9LpsDLJ3sGQmWTQ== +builder-util@24.4.0: + version "24.4.0" + resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-24.4.0.tgz#dbb201a118fd573180e6a1070cf4c0be6de80cd7" + integrity sha512-tONb/GIK1MKa1BcOPHE1naId3o5nj6gdka5kP7yUJh2DOfF+jMq3laiu+UOZH6A7ZtkMtnGNMYFKFTIv408n/A== dependencies: "7zip-bin" "~5.1.1" "@types/debug" "^4.1.6" - "@types/fs-extra" "^9.0.11" app-builder-bin "4.0.0" bluebird-lst "^1.0.9" - builder-util-runtime "9.1.1" - chalk "^4.1.1" + builder-util-runtime "9.2.1" + chalk "^4.1.2" cross-spawn "^7.0.3" debug "^4.3.4" - fs-extra "^10.0.0" + fs-extra "^10.1.0" http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.1" is-ci "^3.0.0" js-yaml "^4.1.0" source-map-support "^0.5.19" @@ -2084,7 +2112,7 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1: +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -2150,9 +2178,9 @@ ci-info@^2.0.0: integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== ci-info@^3.2.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.4.0.tgz#b28484fd436cbc267900364f096c9dc185efb251" - integrity sha512-t5QdPT5jq3o262DOQ8zA6E1tlH2upmUc4Hlvrbx1pGYJuiiHl7O7rvVNI+l8HTVhd/q3Qc9vqimkNk5yiXsAug== + version "3.8.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" + integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" @@ -2299,11 +2327,6 @@ colorette@^2.0.14: resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== -colors@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" - integrity sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw== - columnify@~1.5.4: version "1.5.4" resolved "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz" @@ -2319,13 +2342,6 @@ combined-stream@^1.0.5, combined-stream@^1.0.6, combined-stream@^1.0.8, combined dependencies: delayed-stream "~1.0.0" -commander@2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" - integrity sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A== - dependencies: - graceful-readlink ">= 1.0.0" - commander@^2.20.0, commander@^2.8.1, commander@^2.9.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -2644,7 +2660,7 @@ debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, d dependencies: ms "2.1.2" -debug@^2.1.3, debug@^2.2.0, debug@^2.6.8: +debug@^2.1.3, debug@^2.2.0: version "2.6.9" resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -2781,15 +2797,13 @@ dezalgo@^1.0.0, dezalgo@~1.0.3: asap "^2.0.0" wrappy "1" -dir-compare@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/dir-compare/-/dir-compare-2.4.0.tgz#785c41dc5f645b34343a4eafc50b79bac7f11631" - integrity sha512-l9hmu8x/rjVC9Z2zmGzkhOEowZvW7pmYws5CWHutg8u1JgvsKWMx7Q/UODeu4djLZ4FgW5besw5yvMQnBHzuCA== +dir-compare@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/dir-compare/-/dir-compare-3.3.0.tgz#2c749f973b5c4b5d087f11edaae730db31788416" + integrity sha512-J7/et3WlGUCxjdnD3HAAzQ6nsnc0WL6DD7WcwJb7c39iH1+AWfg+9OqzJNaI6PkBwBvm1mhZNL9iY/nRiZXlPg== dependencies: - buffer-equal "1.0.0" - colors "1.0.3" - commander "2.9.0" - minimatch "3.0.4" + buffer-equal "^1.0.0" + minimatch "^3.0.4" dir-glob@^3.0.1: version "3.0.1" @@ -2798,15 +2812,15 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" -dmg-builder@24.0.0-alpha.1: - version "24.0.0-alpha.1" - resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-24.0.0-alpha.1.tgz#434fc501bfdf73c1e914109ee6eb93ff153ab0f8" - integrity sha512-3nJ1FLH1ctn1wWhDRAWZmuAaY16MEcOSrAY2iZuYsAHNNdDhT0mLaGP44GlT+uS3gU464F1uhL/F0hLp2Q2M5A== +dmg-builder@24.4.0: + version "24.4.0" + resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-24.4.0.tgz#46c80f119465f6a7275766c72b4f3d514cc8013d" + integrity sha512-p5z9Cx539GSBYb+b09Z+hMhuBTh/BrI71VRg4rgF6f2xtIRK/YlTGVS/O08k5OojoyhZcpS7JXxDVSmQoWgiiQ== dependencies: - app-builder-lib "24.0.0-alpha.1" - builder-util "23.6.0" - builder-util-runtime "9.1.1" - fs-extra "^10.0.0" + app-builder-lib "24.4.0" + builder-util "24.4.0" + builder-util-runtime "9.2.1" + fs-extra "^10.1.0" iconv-lite "^0.6.2" js-yaml "^4.1.0" optionalDependencies: @@ -2908,30 +2922,29 @@ editor@~1.0.0: resolved "https://registry.npmjs.org/editor/-/editor-1.0.0.tgz" integrity sha1-YMf4e9YrzGqJT6jM1q+3gjok90I= -ejs@^3.1.7: - version "3.1.8" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.8.tgz#758d32910c78047585c7ef1f92f9ee041c1c190b" - integrity sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ== +ejs@^3.1.8: + version "3.1.9" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" + integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== dependencies: jake "^10.8.5" electron-builder@^24.0.0-alpha.1: - version "24.0.0-alpha.1" - resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-24.0.0-alpha.1.tgz#769b4881b4db5ed2d06e20bd8dc231a9874994dc" - integrity sha512-lHt/e4oTIEcxQcbfSZgVIJ6B+sCmcj8AkStOkXyUIoRyF71UyP5soeXVv1VGKfOf78YD01k7AiRfmmbRjgIsMA== - dependencies: - "@types/yargs" "^17.0.1" - app-builder-lib "24.0.0-alpha.1" - builder-util "23.6.0" - builder-util-runtime "9.1.1" - chalk "^4.1.1" - dmg-builder "24.0.0-alpha.1" - fs-extra "^10.0.0" + version "24.4.0" + resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-24.4.0.tgz#8846efa45bac8f6b9afc181abf71a4e12530f045" + integrity sha512-D5INxodxaUIJgEX6p/fqBd8wQNS8XRAToNIJ9SQC+taNS5D73ZsjLuXiRraFGCB0cVk9KeKhEkdEOH5AaVya4g== + dependencies: + app-builder-lib "24.4.0" + builder-util "24.4.0" + builder-util-runtime "9.2.1" + chalk "^4.1.2" + dmg-builder "24.4.0" + fs-extra "^10.1.0" is-ci "^3.0.0" lazy-val "^1.0.5" read-config-file "6.3.2" - simple-update-notifier "^1.0.7" - yargs "^17.5.1" + simple-update-notifier "^1.1.0" + yargs "^17.6.2" electron-config@*: version "2.0.0" @@ -3016,28 +3029,16 @@ electron-localshortcut@^3.1.0: keyboardevent-from-electron-accelerator "^2.0.0" keyboardevents-areequal "^0.2.1" -electron-osx-sign@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/electron-osx-sign/-/electron-osx-sign-0.6.0.tgz#9b69c191d471d9458ef5b1e4fdd52baa059f1bb8" - integrity sha512-+hiIEb2Xxk6eDKJ2FFlpofCnemCbjbT5jz+BKGpVBrRNT3kWTGs4DfNX6IzGwgi33hUcXF+kFs9JW+r6Wc1LRg== - dependencies: - bluebird "^3.5.0" - compare-version "^0.1.2" - debug "^2.6.8" - isbinaryfile "^3.0.2" - minimist "^1.2.0" - plist "^3.0.1" - -electron-publish@23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-23.6.0.tgz#ac9b469e0b07752eb89357dd660e5fb10b3d1ce9" - integrity sha512-jPj3y+eIZQJF/+t5SLvsI5eS4mazCbNYqatv5JihbqOstIM13k0d1Z3vAWntvtt13Itl61SO6seicWdioOU5dg== +electron-publish@24.4.0: + version "24.4.0" + resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-24.4.0.tgz#a58f49ecd727620f65372881788ebb1a9b853284" + integrity sha512-U3mnVSxIfNrLW7ZnwiedFhcLf6ExPFXgAsx89WpfQFsV4gFAt/LG+H74p0m9NSvsLXiZuF82yXoxi7Ou8GHq4Q== dependencies: "@types/fs-extra" "^9.0.11" - builder-util "23.6.0" - builder-util-runtime "9.1.1" - chalk "^4.1.1" - fs-extra "^10.0.0" + builder-util "24.4.0" + builder-util-runtime "9.2.1" + chalk "^4.1.2" + fs-extra "^10.1.0" lazy-val "^1.0.5" mime "^2.5.2" @@ -3622,7 +3623,7 @@ file-loader@^6.2.0: loader-utils "^2.0.0" schema-utils "^3.0.0" -filelist@^1.0.1: +filelist@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== @@ -4226,11 +4227,6 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== -"graceful-readlink@>= 1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" - integrity sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w== - grapheme-splitter@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" @@ -4487,7 +4483,7 @@ https-proxy-agent@^2.0.0: agent-base "^4.3.0" debug "^3.1.0" -https-proxy-agent@^5.0.0: +https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== @@ -4993,18 +4989,16 @@ isarray@~1.0.0: resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= -isbinaryfile@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.3.tgz#5d6def3edebf6e8ca8cae9c30183a804b5f8be80" - integrity sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw== - dependencies: - buffer-alloc "^1.2.0" - -isbinaryfile@^4.0.10: +isbinaryfile@^4.0.8: version "4.0.10" resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.10.tgz#0c5b5e30c2557a2f06febd37b7322946aaee42b3" integrity sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw== +isbinaryfile@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-5.0.0.tgz#034b7e54989dab8986598cbcea41f66663c65234" + integrity sha512-UDdnyGvMajJUWCkib7Cei/dvyJrrvo4FIrsvSFWdPpXSUorzXrDJ0S+X5Q4ZlasfPjca4yqCNNsjbCeiy8FFeg== + isemail@2.x.x: version "2.2.1" resolved "https://registry.npmjs.org/isemail/-/isemail-2.2.1.tgz" @@ -5031,14 +5025,14 @@ items@2.x.x: integrity sha512-kezcEqgB97BGeZZYtX/MA8AG410ptURstvnz5RAgyFZ8wQFPMxHY8GpTq+/ZHKT3frSlIthUq7EvLt9xn3TvXg== jake@^10.8.5: - version "10.8.5" - resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.5.tgz#f2183d2c59382cb274226034543b9c03b8164c46" - integrity sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw== + version "10.8.7" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" + integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== dependencies: async "^3.2.3" chalk "^4.0.2" - filelist "^1.0.1" - minimatch "^3.0.4" + filelist "^1.0.4" + minimatch "^3.1.2" javascript-stringify@^2.0.1: version "2.1.0" @@ -5182,12 +5176,7 @@ json5@^2.1.2: dependencies: minimist "^1.2.5" -json5@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" - integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== - -json5@^2.2.1: +json5@^2.2.0, json5@^2.2.1: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== @@ -5709,13 +5698,6 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -minimatch@3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -5723,18 +5705,30 @@ minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatc dependencies: brace-expansion "^1.1.7" -minimatch@^5.0.1, minimatch@^5.1.0: +minimatch@^5.0.1, minimatch@^5.1.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== dependencies: brace-expansion "^2.0.1" -minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: +minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.5: version "1.2.6" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== +minimist@^1.2.0: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + minimist@^1.2.6: version "1.2.7" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" @@ -5779,10 +5773,10 @@ minipass-sized@^1.0.3: dependencies: minipass "^3.0.0" -minipass@^3.0.0, minipass@^3.1.6: - version "3.3.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.4.tgz#ca99f95dd77c43c7a76bf51e6d200025eee0ffae" - integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw== +minipass@^3.0.0: + version "3.3.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== dependencies: yallist "^4.0.0" @@ -5793,6 +5787,18 @@ minipass@^3.1.1: dependencies: yallist "^4.0.0" +minipass@^3.1.6: + version "3.3.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.4.tgz#ca99f95dd77c43c7a76bf51e6d200025eee0ffae" + integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw== + dependencies: + yallist "^4.0.0" + +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + minizlib@^2.1.1, minizlib@^2.1.2: version "2.1.2" resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" @@ -6800,11 +6806,12 @@ pkg-up@^2.0.0: dependencies: find-up "^2.1.0" -plist@^3.0.1, plist@^3.0.4: - version "3.0.6" - resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.6.tgz#7cfb68a856a7834bca6dbfe3218eb9c7740145d3" - integrity sha512-WiIVYyrp8TD4w8yCvyeIr+lkmrGRd5u0VbRnU+tP/aRLxP/YadJUYOMZJ/6hIa3oUyVCsycXvtNRgd5XBJIbiA== +plist@^3.0.4, plist@^3.0.5: + version "3.1.0" + resolved "https://registry.yarnpkg.com/plist/-/plist-3.1.0.tgz#797a516a93e62f5bde55e0b9cc9c967f860893c9" + integrity sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ== dependencies: + "@xmldom/xmldom" "^0.8.8" base64-js "^1.5.1" xmlbuilder "^15.1.1" @@ -7198,7 +7205,12 @@ punycode@^1.4.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= -punycode@^2.1.0, punycode@^2.1.1: +punycode@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + +punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== @@ -7748,13 +7760,20 @@ semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.0.0, semver@^7.1.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8: +semver@^7.0.0, semver@^7.1.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.8: version "7.3.8" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== dependencies: lru-cache "^6.0.0" +semver@^7.3.7: + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + dependencies: + lru-cache "^6.0.0" + semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" @@ -7878,10 +7897,10 @@ simple-html-tokenizer@^0.1.1: resolved "https://registry.npmjs.org/simple-html-tokenizer/-/simple-html-tokenizer-0.1.1.tgz" integrity sha1-BcLuxXn//+FFoDCsJs/qYbmA+r4= -simple-update-notifier@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz#7edf75c5bdd04f88828d632f762b2bc32996a9cc" - integrity sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew== +simple-update-notifier@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz#67694c121de354af592b347cdba798463ed49c82" + integrity sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg== dependencies: semver "~7.0.0" @@ -8384,7 +8403,7 @@ tar@^2.0.0, tar@~2.2.1: fstream "^1.0.12" inherits "2" -tar@^6.0.5, tar@^6.1.11, tar@^6.1.2: +tar@^6.0.5, tar@^6.1.2: version "6.1.11" resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== @@ -8396,6 +8415,18 @@ tar@^6.0.5, tar@^6.1.11, tar@^6.1.2: mkdirp "^1.0.3" yallist "^4.0.0" +tar@^6.1.11, tar@^6.1.12: + version "6.1.15" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.15.tgz#c9738b0b98845a3b344d334b8fa3041aaba53a69" + integrity sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^5.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + temp-file@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/temp-file/-/temp-file-3.4.0.tgz#766ea28911c683996c248ef1a20eea04d51652c7" @@ -8706,12 +8737,7 @@ typedoc@^0.22.18: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.5.tgz#d8c953832d28924a9e3d37c73d729c846c5896f3" integrity sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA== -typescript@^4.0.2: - version "4.8.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.4.tgz#c464abca159669597be5f96b8943500b238e60e6" - integrity sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ== - -typescript@^4.9.5: +typescript@^4.0.2, typescript@^4.9.5: version "4.9.5" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== @@ -9343,7 +9369,7 @@ yargs@^15.0.1: y18n "^4.0.0" yargs-parser "^18.1.2" -yargs@^17.0.1, yargs@^17.5.1: +yargs@^17.0.1: version "17.6.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.6.0.tgz#e134900fc1f218bc230192bdec06a0a5f973e46c" integrity sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g== @@ -9369,6 +9395,19 @@ yargs@^17.2.1: y18n "^5.0.5" yargs-parser "^21.1.1" +yargs@^17.6.2: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + yauzl@^2.10.0: version "2.10.0" resolved "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz"