diff --git a/app/package.json b/app/package.json index cb0a29d0..cf3d0554 100644 --- a/app/package.json +++ b/app/package.json @@ -13,14 +13,14 @@ "watch": "webpack --progress --color --watch" }, "dependencies": { - "@angular/animations": "7.2.8", - "@angular/common": "7.2.8", - "@angular/compiler": "7.2.8", - "@angular/core": "7.2.8", - "@angular/forms": "7.2.8", - "@angular/platform-browser": "7.2.8", - "@angular/platform-browser-dynamic": "7.2.8", - "@ng-bootstrap/ng-bootstrap": "^4.2.2", + "@angular/animations": "9.0.4", + "@angular/common": "9.0.4", + "@angular/compiler": "9.0.4", + "@angular/core": "9.0.4", + "@angular/forms": "9.0.4", + "@angular/platform-browser": "9.0.4", + "@angular/platform-browser-dynamic": "9.0.4", + "@ng-bootstrap/ng-bootstrap": "^6.0.0", "devtron": "1.4.0", "electron-config": "2.0.0", "electron-debug": "^3.0.1", @@ -37,11 +37,11 @@ "rxjs": "^6.5.4", "rxjs-compat": "^6.5.4", "yargs": "^15.1.0", - "zone.js": "^0.8.29" + "zone.js": "^0.10.2" }, "optionalDependencies": { - "serialport": "^8.0.7", "macos-native-processlist": "^1.0.2", + "serialport": "^8.0.7", "windows-blurbehind": "^1.0.1", "windows-native-registry": "^1.0.17", "windows-process-tree": "^0.2.4", diff --git a/app/src/app.module.ts b/app/src/app.module.ts index f792c8e0..cf90fd85 100644 --- a/app/src/app.module.ts +++ b/app/src/app.module.ts @@ -7,7 +7,7 @@ export function getRootModule (plugins: any[]) { const imports = [ BrowserModule, ...plugins, - NgbModule.forRoot(), + NgbModule, ToastrModule.forRoot({ positionClass: 'toast-bottom-center', toastClass: 'toast', diff --git a/app/yarn.lock b/app/yarn.lock index dcee7258..ddd4f4c2 100644 --- a/app/yarn.lock +++ b/app/yarn.lock @@ -2,61 +2,45 @@ # yarn lockfile v1 -"@angular/animations@7.2.8": - version "7.2.8" - resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-7.2.8.tgz#0285364c839c660a934ab0f753ec21424bfb292e" - integrity sha512-dJn9koYukyz15TouBc+z5z9fdThDk+bKgdlij25eYSu5Mpmtk04gB4eIMQA97K0UDh1d4YukgSJ5w3ZIk0m8DQ== - dependencies: - tslib "^1.9.0" +"@angular/animations@9.0.4": + version "9.0.4" + resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-9.0.4.tgz#c95c601dfb8fc4e96aee577c9c0f6cf18b64e5d7" + integrity sha512-zTCgrIAA9FYPMbqqpQnoNltiLR58q0FMfzP2t96q/1tjyVy/Y/IaNgVQ7eL0HeQ0nG6IAzQ1HVx8Xeneg4Yj5Q== -"@angular/common@7.2.8": - version "7.2.8" - resolved "https://registry.yarnpkg.com/@angular/common/-/common-7.2.8.tgz#660c816b6f08cd2919a6efb7465397e4ff14d265" - integrity sha512-LgOhf68+LPndGZhtnUlGFd2goReXYmHzaFZW8gCEi9aC+H+Io8bjYh0gkH3xDreevEOe3f0z6coXNFLIxSmTuA== - dependencies: - tslib "^1.9.0" +"@angular/common@9.0.4": + version "9.0.4" + resolved "https://registry.yarnpkg.com/@angular/common/-/common-9.0.4.tgz#7d168b22c5c43e72112d0a19242eca22b62bb4f3" + integrity sha512-F3qoYrceEdCd5SlgObcbSIIdKfRXgyTBO2gbbArQHFe4GvewkH3isTn5uqAF6sfJlb7rXWZGrD6C3d9brw/fEw== -"@angular/compiler@7.2.8": - version "7.2.8" - resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-7.2.8.tgz#9d9c1515e99914399e6915c1c90484b1d255560b" - integrity sha512-PrU97cTsOdofpaDkxK0rWUA/CGd0u6ESOI6XvFVm5xH9zJInsdY8ShSHklnr1JJnss70e1dGKZbZq32OChxWMw== - dependencies: - tslib "^1.9.0" +"@angular/compiler@9.0.4": + version "9.0.4" + resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-9.0.4.tgz#038c9cdbf76f1cce47bd1b355c7d212cc89b18f9" + integrity sha512-+Ku8RUU00yHaKVkVw6YIfM3c5Gmvas5gJcEleiagkLbc1f/jKk1cY4gaUP6xn4TLypFM7NQglneWd+E+8wh0hQ== -"@angular/core@7.2.8": - version "7.2.8" - resolved "https://registry.yarnpkg.com/@angular/core/-/core-7.2.8.tgz#6586d9b6c6321c80119b3f3e2bd0edbb32d0b649" - integrity sha512-QKwug2kWJC00zm2rvmD9mCJzsOkMVhSu8vqPWf83poWTh8+F9aIVWcy29W0VoGpBkSchOnK8hf9DnKVv28j9nw== - dependencies: - tslib "^1.9.0" +"@angular/core@9.0.4": + version "9.0.4" + resolved "https://registry.yarnpkg.com/@angular/core/-/core-9.0.4.tgz#6baa5ec6c594b47de541e47f4aa37241adec393a" + integrity sha512-6RqQb1GO2uglSlgiGbxhvy8plztZtABCWLRn0X+T1PnrxoqgxqA5WkKJjGxao+1M/ECW1V0fw4Xy7DE6KvAJwQ== -"@angular/forms@7.2.8": - version "7.2.8" - resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-7.2.8.tgz#adf194088495822d55dcf3e5bf69196dcf19465d" - integrity sha512-lbSX4IHFHz/c4e2RHiPpL8MJlzDkCuQEHnqsujDaV2X9o9fApS6+C1X4x7Z2XDKqonmeX+aHQwv9+SLejX6OyQ== - dependencies: - tslib "^1.9.0" +"@angular/forms@9.0.4": + version "9.0.4" + resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-9.0.4.tgz#31edac9917e592695a5c12b846e93dbda6afc510" + integrity sha512-WyfZ2u2JzGrwkxQmfxHvZMoYHEGfoUL+JlSXa2Sy3T/FPGNckHzIzggqweJij/qGjabWLabZDla4vak42f+4PA== -"@angular/platform-browser-dynamic@7.2.8": - version "7.2.8" - resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-7.2.8.tgz#e82768900cedfa75bf453263f931a9f90f7aaab2" - integrity sha512-nOJt28A5pRn4mdL8y98V7bA6OOdMRjsQAcWCr/isGYF0l1yDC0ijUGWkHuRtj3z1/9tmERN0BLXx+xs1h4JhCQ== - dependencies: - tslib "^1.9.0" +"@angular/platform-browser-dynamic@9.0.4": + version "9.0.4" + resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-9.0.4.tgz#343bd43fe00a279a737e02c16dd8790dc0da93a8" + integrity sha512-9vAn2QH07khuF4n7kyMJzgE6l30Yxg1AGd8GtOfa/4nbna+EZxFVYOkto9bpv4uEwDr9o7QrFLplko9a8xs7kg== -"@angular/platform-browser@7.2.8": - version "7.2.8" - resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-7.2.8.tgz#11096727b99bf3d7fd82a00a3a468b933c9713bd" - integrity sha512-SizCRMc7Or27g2CugcqWnaAikRPfgLgRvb9GFFGpcgoq8CRfOVwkyR5dFZuqN39H+uwtwuTMP5OUYhZcrFNKug== - dependencies: - tslib "^1.9.0" +"@angular/platform-browser@9.0.4": + version "9.0.4" + resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-9.0.4.tgz#03853b435c3b964660727ac9d7e15912c920cdb8" + integrity sha512-mbiqmw0rDGPxEgKVgDuK7yZvtgjJmzpMGBYAMwkQ9YIE0SoA5XP0NvZiFkHZqDXwLgCv2IJ/kvkhfCBwnBKCXQ== -"@ng-bootstrap/ng-bootstrap@^4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-4.2.2.tgz#a1c3a9576656cb4f793bbc3df56dfbdeb098f2fb" - integrity sha512-v8QmC17bv9he5Ep6zutaI9aQ2w/2NqySP0fejOKe7cacKpGUqsLIakpyd2FD7mfZu7pSCCtHYpRWR+h6yq+Ngg== - dependencies: - tslib "^1.9.0" +"@ng-bootstrap/ng-bootstrap@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-6.0.0.tgz#03b80acd711dd38a653b34339224d5063c50bd62" + integrity sha512-ho0Ssw+kwpGzc+Rvtu2pRSrcbduECMf9+uekhOMB1nzhUfF2vJQnTDpPfHZQgU/ukTMEJWvby5vcXJoPtHgE+w== "@serialport/binding-abstract@^8.0.6": version "8.0.6" @@ -3632,7 +3616,7 @@ yargs@^15.1.0: y18n "^4.0.0" yargs-parser "^16.1.0" -zone.js@^0.8.29: - version "0.8.29" - resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.8.29.tgz#8dce92aa0dd553b50bc5bfbb90af9986ad845a12" - integrity sha512-mla2acNCMkWXBD+c+yeUrBUrzOxYMNFdQ6FGfigGGtEVBPJx07BQeJekjt9DmH1FtZek4E9rE1eRR9qQpxACOQ== +zone.js@^0.10.2: + version "0.10.2" + resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.10.2.tgz#67ca084b3116fc33fc40435e0d5ea40a207e392e" + integrity sha512-UAYfiuvxLN4oyuqhJwd21Uxb4CNawrq6fPS/05Su5L4G+1TN+HVDJMUHNMobVQDFJRir2cLAODXwluaOKB7HFg== diff --git a/terminus-core/src/components/splitTab.component.ts b/terminus-core/src/components/splitTab.component.ts index 26f05fe0..fbbbc096 100644 --- a/terminus-core/src/components/splitTab.component.ts +++ b/terminus-core/src/components/splitTab.component.ts @@ -1,5 +1,5 @@ import { Observable, Subject, Subscription } from 'rxjs' -import { Component, Injectable, ViewChild, ViewContainerRef, EmbeddedViewRef, OnInit, OnDestroy } from '@angular/core' +import { Component, Injectable, ViewChild, ViewContainerRef, EmbeddedViewRef, AfterViewInit, OnDestroy } from '@angular/core' import { BaseTabComponent, BaseTabProcess } from './baseTab.component' import { TabRecoveryProvider, RecoveredTab } from '../api/tabRecovery' import { TabsService } from '../services/tabs.service' @@ -140,7 +140,7 @@ export interface SplitSpannerInfo { `, styles: [require('./splitTab.component.scss')], }) -export class SplitTabComponent extends BaseTabComponent implements OnInit, OnDestroy { +export class SplitTabComponent extends BaseTabComponent implements AfterViewInit, OnDestroy { static DIRECTIONS: SplitDirection[] = ['t', 'r', 'b', 'l'] /** @hidden */ @@ -166,6 +166,7 @@ export class SplitTabComponent extends BaseTabComponent implements OnInit, OnDes private tabRemoved = new Subject() private splitAdjusted = new Subject() private focusChanged = new Subject() + private initialized = new Subject() get tabAdded$ (): Observable { return this.tabAdded } get tabRemoved$ (): Observable { return this.tabRemoved } @@ -180,6 +181,11 @@ export class SplitTabComponent extends BaseTabComponent implements OnInit, OnDes */ get focusChanged$ (): Observable { return this.focusChanged } + /** + * Fired once tab layout is created and child tabs can be added + */ + get initialized$ (): Observable { return this.initialized } + /** @hidden */ constructor ( private hotkeys: HotkeysService, @@ -244,7 +250,7 @@ export class SplitTabComponent extends BaseTabComponent implements OnInit, OnDes } /** @hidden */ - async ngOnInit () { + async ngAfterViewInit () { if (this._recoveredState) { await this.recoverContainer(this.root, this._recoveredState) this.layout() @@ -255,6 +261,8 @@ export class SplitTabComponent extends BaseTabComponent implements OnInit, OnDes } }) } + this.initialized.next() + this.initialized.complete() } /** @hidden */ @@ -315,7 +323,9 @@ export class SplitTabComponent extends BaseTabComponent implements OnInit, OnDes /** * Inserts a new `tab` to the `side` of the `relative` tab */ - addTab (tab: BaseTabComponent, relative: BaseTabComponent|null, side: SplitDirection) { + async addTab (tab: BaseTabComponent, relative: BaseTabComponent|null, side: SplitDirection) { + await this.initialized$.toPromise() + let target = (relative ? this.getParentOf(relative) : null) || this.root let insertIndex = relative ? target.children.indexOf(relative) : -1 diff --git a/terminus-core/src/components/tabHeader.component.ts b/terminus-core/src/components/tabHeader.component.ts index 89235a6d..4db33bfc 100644 --- a/terminus-core/src/components/tabHeader.component.ts +++ b/terminus-core/src/components/tabHeader.component.ts @@ -48,14 +48,17 @@ export class TabHeaderComponent { } ngOnInit () { - if (this.hostApp.platform === Platform.macOS) { - this.parentDraggable.setDragHandle(this.handle.nativeElement) - } this.tab.progress$.subscribe(progress => { this.progress = progress }) } + ngAfterViewInit () { + if (this.hostApp.platform === Platform.macOS) { + this.parentDraggable.setDragHandle(this.handle.nativeElement) + } + } + showRenameTabModal (): void { const modal = this.ngbModal.open(RenameTabModalComponent) modal.componentInstance.value = this.tab.customTitle || this.tab.title diff --git a/terminus-core/src/index.ts b/terminus-core/src/index.ts index 258693ae..83c1eb1e 100644 --- a/terminus-core/src/index.ts +++ b/terminus-core/src/index.ts @@ -66,7 +66,7 @@ const PROVIDERS = [ BrowserModule, BrowserAnimationsModule, FormsModule, - NgbModule.forRoot(), + NgbModule, PerfectScrollbarModule, DndModule.forRoot(), ], diff --git a/terminus-core/src/services/config.service.ts b/terminus-core/src/services/config.service.ts index c3e917cd..22af6879 100644 --- a/terminus-core/src/services/config.service.ts +++ b/terminus-core/src/services/config.service.ts @@ -188,7 +188,7 @@ export class ConfigService { enabledServices (services: T[]): T[] { if (!this.servicesCache) { this.servicesCache = {} - const ngModule = window['rootModule'].ngInjectorDef + const ngModule = window['rootModule'].ɵinj for (const imp of ngModule.imports) { const module = imp['ngModule'] || imp if (module.ngInjectorDef && module.ngInjectorDef.providers) {