@energycap/components 0.44.8 → 0.44.9-Angular19Upgrade.20260217-1620
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/energycap-components.mjs +379 -354
- package/fesm2022/energycap-components.mjs.map +1 -1
- package/lib/controls/button/copy-button-base.directive.d.ts +1 -1
- package/lib/controls/date-input/date-input.component.d.ts +1 -1
- package/lib/controls/form-control-base.d.ts +1 -1
- package/lib/core/date-time-helper.d.ts +2 -2
- package/lib/display/hierarchy/hierarchy-base.d.ts +1 -1
- package/lib/display/hierarchy/hierarchy-mocks.spec.d.ts +1 -1
- package/lib/display/resizable/resizable-base.d.ts +1 -1
- package/lib/shared/display/pipes/date-display.pipe.d.ts +1 -1
- package/lib/shared/page/page-base/page-base.component.d.ts +1 -1
- package/lib/shared/testing/public-mocks.spec.d.ts +1 -1
- package/lib/shared/wizard/wizard-base/wizard-base.component.d.ts +1 -1
- package/package.json +1 -3
- package/schematics/utilities/typescript.js +3 -4
- package/schematics/utilities/typescript.js.map +1 -1
- package/schematics/utilities/workspace.d.ts +0 -8
- package/schematics/utilities/workspace.js +48 -71
- package/schematics/utilities/workspace.js.map +1 -1
- package/esm2022/energycap-components.mjs +0 -5
- package/esm2022/lib/components.module.mjs +0 -425
- package/esm2022/lib/controls/banner/banner.component.mjs +0 -112
- package/esm2022/lib/controls/button/button.component.mjs +0 -114
- package/esm2022/lib/controls/button/copy-button-base.directive.mjs +0 -67
- package/esm2022/lib/controls/button/copy-button.directive.mjs +0 -28
- package/esm2022/lib/controls/button/copy-table-button.directive.mjs +0 -43
- package/esm2022/lib/controls/calendar/calendar-item.component.mjs +0 -91
- package/esm2022/lib/controls/calendar/calendar.component.mjs +0 -251
- package/esm2022/lib/controls/calendar/calendar.types.mjs +0 -2
- package/esm2022/lib/controls/checkbox/checkbox.component.mjs +0 -140
- package/esm2022/lib/controls/collapsible-toggle/collapsible-toggle.component.mjs +0 -38
- package/esm2022/lib/controls/combobox/combobox.component.mjs +0 -879
- package/esm2022/lib/controls/date-input/date-input-selection-strategies/date-input-selection-strategy-base.mjs +0 -57
- package/esm2022/lib/controls/date-input/date-input-selection-strategies/day-selection-strategy.mjs +0 -62
- package/esm2022/lib/controls/date-input/date-input-selection-strategies/last-28-days-selection-strategy.mjs +0 -100
- package/esm2022/lib/controls/date-input/date-input-selection-strategies/last-7-days-selection-strategy.mjs +0 -101
- package/esm2022/lib/controls/date-input/date-input-selection-strategies/month-selection-strategy.mjs +0 -76
- package/esm2022/lib/controls/date-input/date-input-selection-strategies/quarter-selection-strategy.mjs +0 -79
- package/esm2022/lib/controls/date-input/date-input-selection-strategies/range-selection-strategy.mjs +0 -210
- package/esm2022/lib/controls/date-input/date-input-selection-strategies/year-selection-strategy.mjs +0 -81
- package/esm2022/lib/controls/date-input/date-input.component.mjs +0 -466
- package/esm2022/lib/controls/date-input/date-input.types.mjs +0 -44
- package/esm2022/lib/controls/dropdown/dropdown.component.mjs +0 -243
- package/esm2022/lib/controls/file-upload/file-upload.component.mjs +0 -261
- package/esm2022/lib/controls/form-control/form-control.component.mjs +0 -110
- package/esm2022/lib/controls/form-control-base.mjs +0 -151
- package/esm2022/lib/controls/form-control-label/form-control-label.component.mjs +0 -136
- package/esm2022/lib/controls/form-group/form-group.component.mjs +0 -261
- package/esm2022/lib/controls/help-popover/help-popover.component.mjs +0 -31
- package/esm2022/lib/controls/item-picker/item-picker.component.mjs +0 -329
- package/esm2022/lib/controls/link-button/link-button.component.mjs +0 -11
- package/esm2022/lib/controls/menu/menu.component.mjs +0 -485
- package/esm2022/lib/controls/navigation/link-item.mjs +0 -2
- package/esm2022/lib/controls/navigation/nav-group.mjs +0 -39
- package/esm2022/lib/controls/navigation/nav-item-active.directive.mjs +0 -92
- package/esm2022/lib/controls/navigation/nav-item.mjs +0 -2
- package/esm2022/lib/controls/numericbox/numericbox.component.mjs +0 -372
- package/esm2022/lib/controls/popover/popover.component.mjs +0 -117
- package/esm2022/lib/controls/radio-button/radio-button-option.mjs +0 -3
- package/esm2022/lib/controls/radio-button/radio-button.component.mjs +0 -82
- package/esm2022/lib/controls/select/select.component.mjs +0 -88
- package/esm2022/lib/controls/tabs/tabs.component.mjs +0 -47
- package/esm2022/lib/controls/textbox/textbox.component.mjs +0 -155
- package/esm2022/lib/core/cache.service.mjs +0 -105
- package/esm2022/lib/core/custom-validators.mjs +0 -29
- package/esm2022/lib/core/date-time-helper.mjs +0 -228
- package/esm2022/lib/core/error.service.mjs +0 -61
- package/esm2022/lib/core/router-helper.service.mjs +0 -111
- package/esm2022/lib/core/scroll.service.mjs +0 -89
- package/esm2022/lib/core/telemetry-tracker.service.mjs +0 -16
- package/esm2022/lib/core/telemetry.service.mjs +0 -38
- package/esm2022/lib/core/validation-message.service.mjs +0 -185
- package/esm2022/lib/core/validation-patterns.mjs +0 -31
- package/esm2022/lib/core/window.service.mjs +0 -186
- package/esm2022/lib/display/app-bar/app-bar.component.mjs +0 -49
- package/esm2022/lib/display/avatar/avatar.component.mjs +0 -67
- package/esm2022/lib/display/avatar/avatar.service.mjs +0 -64
- package/esm2022/lib/display/confirm/confirm.component.mjs +0 -168
- package/esm2022/lib/display/dialog/dialog-content.mjs +0 -2
- package/esm2022/lib/display/dialog/dialog-group/dialog-group.component.mjs +0 -63
- package/esm2022/lib/display/dialog/dialog-types.mjs +0 -77
- package/esm2022/lib/display/dialog/dialog.component.mjs +0 -287
- package/esm2022/lib/display/dialog/dialog.service.mjs +0 -71
- package/esm2022/lib/display/help/help-types.mjs +0 -2
- package/esm2022/lib/display/hierarchy/hierarchy-base.mjs +0 -111
- package/esm2022/lib/display/hierarchy/hierarchy-mocks.spec.mjs +0 -54
- package/esm2022/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.mjs +0 -65
- package/esm2022/lib/display/item-display/item-display.component.mjs +0 -83
- package/esm2022/lib/display/json-display/json-display.component.mjs +0 -47
- package/esm2022/lib/display/resizable/resizable-base.mjs +0 -120
- package/esm2022/lib/display/resizable/resizable.component.mjs +0 -57
- package/esm2022/lib/display/spinner/spinner.component.mjs +0 -12
- package/esm2022/lib/display/splash/splash.component.mjs +0 -61
- package/esm2022/lib/display/splash/splash.service.mjs +0 -35
- package/esm2022/lib/display/table/resizable-column.component.mjs +0 -20
- package/esm2022/lib/display/table/resizable-table.directive.mjs +0 -227
- package/esm2022/lib/display/table/searchable-table.component.mjs +0 -344
- package/esm2022/lib/display/table/table-detail-row.component.mjs +0 -28
- package/esm2022/lib/display/table/table-locked-column.component.mjs +0 -58
- package/esm2022/lib/display/table/table-master-header-row.component.mjs +0 -14
- package/esm2022/lib/display/table/table-master-row.component.mjs +0 -163
- package/esm2022/lib/display/table/table-pagination.component.mjs +0 -155
- package/esm2022/lib/display/table/table-selectable-row.component.mjs +0 -235
- package/esm2022/lib/display/table/table.component.mjs +0 -257
- package/esm2022/lib/display/tags/tag.mjs +0 -18
- package/esm2022/lib/display/tags/tags.component.mjs +0 -82
- package/esm2022/lib/display/toast/toast/toast.component.mjs +0 -77
- package/esm2022/lib/display/toast/toast-types.mjs +0 -8
- package/esm2022/lib/display/toast/toast.service.mjs +0 -35
- package/esm2022/lib/display/toast/toaster/toaster.component.mjs +0 -114
- package/esm2022/lib/display/tooltip/tooltip.component.mjs +0 -28
- package/esm2022/lib/display/tooltip/tooltip.service.mjs +0 -78
- package/esm2022/lib/display/tooltip-directive/tooltip.directive.mjs +0 -173
- package/esm2022/lib/display/tree/tree.component.mjs +0 -139
- package/esm2022/lib/display/view-overlay/view-overlay.component.mjs +0 -58
- package/esm2022/lib/shared/directives/click-area-for/click-area-for.directive.mjs +0 -32
- package/esm2022/lib/shared/directives/if-viewport-width/if-viewport-width.directive.mjs +0 -111
- package/esm2022/lib/shared/directives/keyboard-nav-container/keyboard-nav-container.directive.mjs +0 -103
- package/esm2022/lib/shared/directives/popup/popup-container.directive.mjs +0 -166
- package/esm2022/lib/shared/display/pipes/date-display-2.pipe.mjs +0 -39
- package/esm2022/lib/shared/display/pipes/date-display.pipe.mjs +0 -51
- package/esm2022/lib/shared/display/pipes/highlight-text.pipe.mjs +0 -30
- package/esm2022/lib/shared/display/pipes/relative-date.pipe.mjs +0 -62
- package/esm2022/lib/shared/display/pipes/row-count.pipe.mjs +0 -48
- package/esm2022/lib/shared/display/pipes/time-display.pipe.mjs +0 -41
- package/esm2022/lib/shared/display.mjs +0 -6
- package/esm2022/lib/shared/form-group.helper.mjs +0 -67
- package/esm2022/lib/shared/json-helper.mjs +0 -19
- package/esm2022/lib/shared/lodash-helper.mjs +0 -52
- package/esm2022/lib/shared/page/page-base/page-base.component.mjs +0 -387
- package/esm2022/lib/shared/page/page-statuses.mjs +0 -23
- package/esm2022/lib/shared/page/page-title/page-title.component.mjs +0 -23
- package/esm2022/lib/shared/page/page-view/page-view.component.mjs +0 -147
- package/esm2022/lib/shared/testing/copy-button-base-test-injector-factory.spec.mjs +0 -17
- package/esm2022/lib/shared/testing/hierarchy-base-test-injector-factory.spec.mjs +0 -17
- package/esm2022/lib/shared/testing/page-base-component-test-helper.spec.mjs +0 -38
- package/esm2022/lib/shared/testing/page-base-component-test-injector-factory.spec.mjs +0 -98
- package/esm2022/lib/shared/testing/public-mocks.spec.mjs +0 -148
- package/esm2022/lib/shared/testing/spy-factory.spec.mjs +0 -40
- package/esm2022/lib/shared/testing/translation-mocks.spec.mjs +0 -57
- package/esm2022/lib/shared/user-preference.service.mjs +0 -17
- package/esm2022/lib/shared/wizard/wizard-base/wizard-base.component.mjs +0 -246
- package/esm2022/lib/shared/wizard/wizard-buttons/wizard-buttons.component.mjs +0 -68
- package/esm2022/lib/shared/wizard/wizard-progress/wizard-progress.component.mjs +0 -18
- package/esm2022/public-api.mjs +0 -115
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { Subject } from 'rxjs';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export class SplashService {
|
|
5
|
-
constructor() {
|
|
6
|
-
/** Used to interact with the splash component
|
|
7
|
-
* The splash component will subscribe to this and any components
|
|
8
|
-
* that wish to bring the splash visible can use this to communicate
|
|
9
|
-
* with the splash component.
|
|
10
|
-
*/
|
|
11
|
-
this._splashVisibility = new Subject();
|
|
12
|
-
this.splashVisibility = this._splashVisibility;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Shows the splash screen
|
|
16
|
-
*/
|
|
17
|
-
showSplash(options) {
|
|
18
|
-
this._splashVisibility.next({ show: true, ...options });
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Hides the splash screen
|
|
22
|
-
*/
|
|
23
|
-
hideSplash() {
|
|
24
|
-
this._splashVisibility.next({ show: false });
|
|
25
|
-
}
|
|
26
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SplashService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
27
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SplashService, providedIn: 'root' }); }
|
|
28
|
-
}
|
|
29
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SplashService, decorators: [{
|
|
30
|
-
type: Injectable,
|
|
31
|
-
args: [{
|
|
32
|
-
providedIn: 'root'
|
|
33
|
-
}]
|
|
34
|
-
}], ctorParameters: () => [] });
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsYXNoLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvZGlzcGxheS9zcGxhc2gvc3BsYXNoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQWdCM0MsTUFBTSxPQUFPLGFBQWE7SUFTeEI7UUFSQTs7OztXQUlHO1FBQ0ssc0JBQWlCLEdBQTRCLElBQUksT0FBTyxFQUFFLENBQUM7UUFDNUQscUJBQWdCLEdBQStCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUU3RCxDQUFDO0lBRWpCOztPQUVHO0lBQ0ksVUFBVSxDQUFDLE9BQTBCO1FBQzFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxVQUFVO1FBQ2YsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7K0dBdkJVLGFBQWE7bUhBQWIsYUFBYSxjQUZaLE1BQU07OzRGQUVQLGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgdHlwZSBBcHBTcGxhc2hPcHRpb25zID0ge1xuICAvKiogT3B0aW9uYWwgdGl0bGUgdG8gZGlzcGxheSBpbiB0aGUgc3BsYXNoICovXG4gIHRpdGxlPzogc3RyaW5nO1xuICAvKiogT3B0aW9uYWwgbWVzc2FnZXMgdG8gZGlzcGxheSBpbiB0aGUgc3BsYXNoLiBUaGVzZSBhcmUgcm90YXRlZCBldmVyeSA1IHNlY29uZHMsIGFuZCB0aGUgc3RhcnRpbmcgbWVzc2FnZSBpcyBwaWNrZWQgYXQgcmFuZG9tLiAqL1xuICBtZXNzYWdlcz86IHN0cmluZ1tdO1xufTtcblxuZXhwb3J0IHR5cGUgQXBwU3BsYXNoRXZlbnQgPSB7XG4gIHNob3c6IGJvb2xlYW47XG59ICYgQXBwU3BsYXNoT3B0aW9ucztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgU3BsYXNoU2VydmljZSB7XG4gIC8qKiBVc2VkIHRvIGludGVyYWN0IHdpdGggdGhlIHNwbGFzaCBjb21wb25lbnRcbiAgICogIFRoZSBzcGxhc2ggY29tcG9uZW50IHdpbGwgc3Vic2NyaWJlIHRvIHRoaXMgYW5kIGFueSBjb21wb25lbnRzXG4gICAqICB0aGF0IHdpc2ggdG8gYnJpbmcgdGhlIHNwbGFzaCB2aXNpYmxlIGNhbiB1c2UgdGhpcyB0byBjb21tdW5pY2F0ZVxuICAgKiAgd2l0aCB0aGUgc3BsYXNoIGNvbXBvbmVudC5cbiAgICovXG4gIHByaXZhdGUgX3NwbGFzaFZpc2liaWxpdHk6IFN1YmplY3Q8QXBwU3BsYXNoRXZlbnQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgcHVibGljIHNwbGFzaFZpc2liaWxpdHk6IE9ic2VydmFibGU8QXBwU3BsYXNoRXZlbnQ+ID0gdGhpcy5fc3BsYXNoVmlzaWJpbGl0eTtcblxuICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gIC8qKlxuICAgKiBTaG93cyB0aGUgc3BsYXNoIHNjcmVlblxuICAgKi9cbiAgcHVibGljIHNob3dTcGxhc2gob3B0aW9ucz86IEFwcFNwbGFzaE9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLl9zcGxhc2hWaXNpYmlsaXR5Lm5leHQoeyBzaG93OiB0cnVlLCAuLi5vcHRpb25zIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEhpZGVzIHRoZSBzcGxhc2ggc2NyZWVuXG4gICAqL1xuICBwdWJsaWMgaGlkZVNwbGFzaCgpOiB2b2lkIHtcbiAgICB0aGlzLl9zcGxhc2hWaXNpYmlsaXR5Lm5leHQoeyBzaG93OiBmYWxzZSB9KTtcbiAgfVxufVxuIl19
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { Component, EventEmitter, Output } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export class ResizableColumnComponent {
|
|
4
|
-
constructor(el) {
|
|
5
|
-
this.el = el;
|
|
6
|
-
this.onResize = new EventEmitter();
|
|
7
|
-
}
|
|
8
|
-
emitWidth(width) {
|
|
9
|
-
this.onResize.emit(width);
|
|
10
|
-
}
|
|
11
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResizableColumnComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
12
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ResizableColumnComponent, selector: "th.is-resizable", outputs: { onResize: "onResize" }, ngImport: i0, template: "<div class=\"content-wrapper\">\n <div class=\"content\">\n <ng-content></ng-content>\n </div>\n</div>\n<div class=\"handle\"></div>\n" }); }
|
|
13
|
-
}
|
|
14
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResizableColumnComponent, decorators: [{
|
|
15
|
-
type: Component,
|
|
16
|
-
args: [{ selector: 'th.is-resizable', template: "<div class=\"content-wrapper\">\n <div class=\"content\">\n <ng-content></ng-content>\n </div>\n</div>\n<div class=\"handle\"></div>\n" }]
|
|
17
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { onResize: [{
|
|
18
|
-
type: Output
|
|
19
|
-
}] } });
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXphYmxlLWNvbHVtbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvZGlzcGxheS90YWJsZS9yZXNpemFibGUtY29sdW1uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9kaXNwbGF5L3RhYmxlL3Jlc2l6YWJsZS1jb2x1bW4uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU01RSxNQUFNLE9BQU8sd0JBQXdCO0lBSW5DLFlBQW1CLEVBQWM7UUFBZCxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBRnZCLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0lBRVgsQ0FBQztJQUUvQixTQUFTLENBQUMsS0FBYTtRQUM1QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDOytHQVJVLHdCQUF3QjttR0FBeEIsd0JBQXdCLDBGQ05yQyw2SUFNQTs7NEZEQWEsd0JBQXdCO2tCQUpwQyxTQUFTOytCQUNFLGlCQUFpQjsrRUFLakIsUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGguaXMtcmVzaXphYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Jlc2l6YWJsZS1jb2x1bW4uY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFJlc2l6YWJsZUNvbHVtbkNvbXBvbmVudCB7XG5cbiAgQE91dHB1dCgpIG9uUmVzaXplID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGVsOiBFbGVtZW50UmVmKSB7IH1cblxuICBwdWJsaWMgZW1pdFdpZHRoKHdpZHRoOiBudW1iZXIpIHtcbiAgICB0aGlzLm9uUmVzaXplLmVtaXQod2lkdGgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY29udGVudC13cmFwcGVyXCI+XG4gIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cImhhbmRsZVwiPjwvZGl2PlxuIl19
|
|
@@ -1,227 +0,0 @@
|
|
|
1
|
-
import { Directive, Inject, Input } from '@angular/core';
|
|
2
|
-
import { DOCUMENT } from '@angular/common';
|
|
3
|
-
import { ResizableBase } from '../resizable/resizable-base';
|
|
4
|
-
import { Subject } from 'rxjs';
|
|
5
|
-
import { takeUntil } from 'rxjs/operators';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "../../core/cache.service";
|
|
8
|
-
/**
|
|
9
|
-
* Add the ability to resize columns to a standard HTML table.
|
|
10
|
-
* Specify a column as resizable by adding the .is-resizable class to a <th>.
|
|
11
|
-
*
|
|
12
|
-
* Usage:
|
|
13
|
-
```html
|
|
14
|
-
<table [ecResizableTable]>
|
|
15
|
-
<colgroup><col><col><col></colgroup>
|
|
16
|
-
<thead>
|
|
17
|
-
<tr>
|
|
18
|
-
<th class="is-resizable">Resizable</th>
|
|
19
|
-
<th class="is-resizable">Resizable</th>
|
|
20
|
-
<th>Static</th>
|
|
21
|
-
</tr>
|
|
22
|
-
</thead>
|
|
23
|
-
...
|
|
24
|
-
</table>
|
|
25
|
-
|
|
26
|
-
```
|
|
27
|
-
* Note: this directive is meant to be used internally with the TableComponent
|
|
28
|
-
* and is not exposed in the public-api of the library
|
|
29
|
-
*/
|
|
30
|
-
export class ResizableTableDirective extends ResizableBase {
|
|
31
|
-
constructor(el, renderer, cacheService, document) {
|
|
32
|
-
super(renderer, cacheService, document);
|
|
33
|
-
this.el = el;
|
|
34
|
-
this.sortableTable = false;
|
|
35
|
-
/**
|
|
36
|
-
* Stored reference to the <col> element children. Will throw if none are found. Will
|
|
37
|
-
* warn if the number of <col> elements do not match the number of <th> elements
|
|
38
|
-
*/
|
|
39
|
-
this.cols = [];
|
|
40
|
-
/**
|
|
41
|
-
* The widths of each table column. These are updated as columns are resized and
|
|
42
|
-
* are used to calculate the new table width.
|
|
43
|
-
*/
|
|
44
|
-
this.colWidths = [];
|
|
45
|
-
/**
|
|
46
|
-
* The current table width
|
|
47
|
-
*/
|
|
48
|
-
this.currentTableWidth = 0;
|
|
49
|
-
/**
|
|
50
|
-
* The width of the table when the component was initialized. The table cannot
|
|
51
|
-
* be shrunk below this width. If a column resize would cause the current table
|
|
52
|
-
* width to be below this value, the last column is widened instead.
|
|
53
|
-
*/
|
|
54
|
-
this.minTableWidth = 0;
|
|
55
|
-
/**
|
|
56
|
-
* The width the column can not be resized below.
|
|
57
|
-
*/
|
|
58
|
-
this.minColWidth = 32;
|
|
59
|
-
this.destroyed = new Subject();
|
|
60
|
-
}
|
|
61
|
-
ngOnInit() {
|
|
62
|
-
this.initResizableColumns();
|
|
63
|
-
this.resizableColumns.changes.pipe(takeUntil(this.destroyed)).subscribe(() => this.initResizableColumns());
|
|
64
|
-
}
|
|
65
|
-
ngOnDestroy() {
|
|
66
|
-
this.destroyed.next();
|
|
67
|
-
this.destroyed.complete();
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Initialize
|
|
71
|
-
* * Check that the host element is a table and that <col> elements are present
|
|
72
|
-
* * Save the initial width of table as the minimum table width
|
|
73
|
-
* * Store a reference to all <col> elements
|
|
74
|
-
* * Add a handle to each resizable column and set up mousedown listeners to start dragging
|
|
75
|
-
*/
|
|
76
|
-
initResizableColumns() {
|
|
77
|
-
if (this.isResizable !== false) {
|
|
78
|
-
this.tableEl = this.el.nativeElement;
|
|
79
|
-
if (this.tableEl.tagName !== 'TABLE') {
|
|
80
|
-
throw new Error(`The 'ecResizableTable' directive can only be placed on a <table> element.`);
|
|
81
|
-
}
|
|
82
|
-
if (this.sortableTable) {
|
|
83
|
-
this.minColWidth = 48;
|
|
84
|
-
}
|
|
85
|
-
const headers = this.tableEl.querySelectorAll('th');
|
|
86
|
-
const cols = this.tableEl.querySelectorAll('col');
|
|
87
|
-
this.cols = [];
|
|
88
|
-
this.colWidths = [];
|
|
89
|
-
if (cols.length === 0) {
|
|
90
|
-
const fragment = this.document.createDocumentFragment();
|
|
91
|
-
const colgroup = this.renderer.createElement('colgroup');
|
|
92
|
-
headers.forEach(() => {
|
|
93
|
-
const col = this.renderer.createElement('col');
|
|
94
|
-
this.cols.push(col);
|
|
95
|
-
this.renderer.appendChild(fragment, col);
|
|
96
|
-
});
|
|
97
|
-
this.renderer.appendChild(colgroup, fragment);
|
|
98
|
-
this.renderer.insertBefore(this.tableEl, colgroup, this.tableEl.firstElementChild);
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
cols.forEach(colEl => {
|
|
102
|
-
this.cols.push(colEl);
|
|
103
|
-
});
|
|
104
|
-
if (headers.length !== cols.length) {
|
|
105
|
-
console.warn(`There are ${headers.length} <th> elements and ${this.cols.length} <col> elements in this this table. The number of columns and table headers must match. <th> elements with a 'colspan' attribute are currently not supported.`);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
const lastResizableIndex = Array.from(headers).reverse().findIndex(el => el.classList.contains('is-resizable')) + 1;
|
|
109
|
-
this.lastColIndex = this.cols.length - lastResizableIndex;
|
|
110
|
-
headers.forEach(th => {
|
|
111
|
-
if (th.classList.contains('is-resizable')) {
|
|
112
|
-
const handle = th.querySelector('.handle');
|
|
113
|
-
this.renderer.listen(handle, 'mousedown', (event) => {
|
|
114
|
-
this.currentEl = th;
|
|
115
|
-
this.startDrag(event);
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
});
|
|
119
|
-
// We need to wait a tick for a view that was previously loaded to be removed
|
|
120
|
-
// from the DOM and allow this directive's parent view to fully expand in the
|
|
121
|
-
// viewport before getting widths.
|
|
122
|
-
window.setTimeout(() => {
|
|
123
|
-
this.setInitialWidths(headers);
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Update the column with the calculated width while resizing.
|
|
129
|
-
* If the column is narrowed so that the table would be narrower than the min-width,
|
|
130
|
-
* expand the last column. If the table is then widened, return the last column
|
|
131
|
-
* to its initial width.
|
|
132
|
-
* @param width
|
|
133
|
-
*/
|
|
134
|
-
setWidth(width) {
|
|
135
|
-
if (this.currentEl) {
|
|
136
|
-
const cellIndex = this.currentEl.cellIndex;
|
|
137
|
-
width = Math.max(width, this.minColWidth);
|
|
138
|
-
this.colWidths[cellIndex] = width;
|
|
139
|
-
this.renderer.setStyle(this.cols[cellIndex], 'width', width + 'px');
|
|
140
|
-
let totalColWidths = 0;
|
|
141
|
-
this.colWidths.forEach(w => {
|
|
142
|
-
totalColWidths += w;
|
|
143
|
-
});
|
|
144
|
-
const containerWidth = this.containerEl.nativeElement.clientWidth;
|
|
145
|
-
if (this.minTableWidth !== containerWidth) {
|
|
146
|
-
this.minTableWidth = containerWidth;
|
|
147
|
-
}
|
|
148
|
-
const diff = totalColWidths - this.minTableWidth;
|
|
149
|
-
if (diff < 0) {
|
|
150
|
-
const colIndex = cellIndex === this.lastColIndex ? this.lastColIndex - 1 : this.lastColIndex;
|
|
151
|
-
const colWidth = Math.max(this.colWidths[colIndex] + Math.abs(diff), this.minColWidth);
|
|
152
|
-
this.renderer.setStyle(this.cols[colIndex], 'width', colWidth + 'px');
|
|
153
|
-
this.renderer.setStyle(this.tableEl, 'width', this.minTableWidth + 'px');
|
|
154
|
-
}
|
|
155
|
-
else {
|
|
156
|
-
this.renderer.setStyle(this.tableEl, 'width', totalColWidths + 'px');
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
stopDrag(event) {
|
|
161
|
-
super.stopDrag(event);
|
|
162
|
-
if (this.currentEl) {
|
|
163
|
-
const cellIndex = this.currentEl.cellIndex;
|
|
164
|
-
const currentCol = this.resizableColumns.find(col => col.el.nativeElement.cellIndex === cellIndex);
|
|
165
|
-
if (currentCol) {
|
|
166
|
-
currentCol.emitWidth(Math.round(this.colWidths[cellIndex]));
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
/**
|
|
171
|
-
* Capture the initial width of the table and the table headers.
|
|
172
|
-
* @param headers
|
|
173
|
-
*/
|
|
174
|
-
setInitialWidths(headers) {
|
|
175
|
-
this.currentTableWidth = this.tableEl.offsetWidth;
|
|
176
|
-
this.minTableWidth = this.containerEl.nativeElement.clientWidth;
|
|
177
|
-
headers.forEach(th => {
|
|
178
|
-
this.colWidths[th.cellIndex] = th.offsetWidth;
|
|
179
|
-
const width = th.style.width;
|
|
180
|
-
if (width) {
|
|
181
|
-
this.renderer.setStyle(this.cols[th.cellIndex], 'width', width);
|
|
182
|
-
this.renderer.removeStyle(th, 'width');
|
|
183
|
-
}
|
|
184
|
-
});
|
|
185
|
-
let totalColWidths = 0;
|
|
186
|
-
this.colWidths.forEach(w => {
|
|
187
|
-
totalColWidths += w;
|
|
188
|
-
});
|
|
189
|
-
// Check to see if our total column widths is greater than our table width
|
|
190
|
-
let colWidthDifference = totalColWidths - this.currentTableWidth;
|
|
191
|
-
// If the total column widths is greater than zero then its larger than our table container
|
|
192
|
-
// To prevent a horizontal scroll we will bump a columns width down to match the table size
|
|
193
|
-
if (colWidthDifference > 0) {
|
|
194
|
-
// Ideally we will choose the second to the last column, but if there is only one that'll do
|
|
195
|
-
let columnToReduce = headers.length > 1 ? headers.length - 2 : 0;
|
|
196
|
-
// Shrink the column
|
|
197
|
-
let th = headers[columnToReduce];
|
|
198
|
-
this.colWidths[th.cellIndex] = th.offsetWidth - colWidthDifference;
|
|
199
|
-
this.renderer.setStyle(this.cols[th.cellIndex], 'width', this.colWidths[th.cellIndex] + 'px');
|
|
200
|
-
// Reduce our totalColWidths to reflect
|
|
201
|
-
totalColWidths = totalColWidths - colWidthDifference;
|
|
202
|
-
}
|
|
203
|
-
this.renderer.setStyle(this.tableEl, 'width', Math.max(this.currentTableWidth, totalColWidths) + 'px');
|
|
204
|
-
this.renderer.setStyle(this.tableEl, 'minWidth', '100%');
|
|
205
|
-
}
|
|
206
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResizableTableDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.CacheService }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
207
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: ResizableTableDirective, selector: "[ecResizableTable]", inputs: { isResizable: ["ecResizableTable", "isResizable"], containerEl: "containerEl", sortableTable: "sortableTable", resizableColumns: "resizableColumns" }, usesInheritance: true, ngImport: i0 }); }
|
|
208
|
-
}
|
|
209
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResizableTableDirective, decorators: [{
|
|
210
|
-
type: Directive,
|
|
211
|
-
args: [{
|
|
212
|
-
selector: '[ecResizableTable]'
|
|
213
|
-
}]
|
|
214
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.CacheService }, { type: Document, decorators: [{
|
|
215
|
-
type: Inject,
|
|
216
|
-
args: [DOCUMENT]
|
|
217
|
-
}] }], propDecorators: { isResizable: [{
|
|
218
|
-
type: Input,
|
|
219
|
-
args: ['ecResizableTable']
|
|
220
|
-
}], containerEl: [{
|
|
221
|
-
type: Input
|
|
222
|
-
}], sortableTable: [{
|
|
223
|
-
type: Input
|
|
224
|
-
}], resizableColumns: [{
|
|
225
|
-
type: Input
|
|
226
|
-
}] } });
|
|
227
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXphYmxlLXRhYmxlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9kaXNwbGF5L3RhYmxlL3Jlc2l6YWJsZS10YWJsZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBaUMsTUFBTSxFQUFFLEtBQUssRUFBd0IsTUFBTSxlQUFlLENBQUM7QUFDOUcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBRzNDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFJSCxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsYUFBYTtJQStDeEQsWUFDVSxFQUFjLEVBQ3RCLFFBQW1CLEVBQ25CLFlBQTBCLEVBQ1IsUUFBa0I7UUFFcEMsS0FBSyxDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFMaEMsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQTdDZixrQkFBYSxHQUFZLEtBQUssQ0FBQztRQVd4Qzs7O1dBR0c7UUFDSyxTQUFJLEdBQTBCLEVBQUUsQ0FBQztRQUV6Qzs7O1dBR0c7UUFDSyxjQUFTLEdBQWEsRUFBRSxDQUFDO1FBRWpDOztXQUVHO1FBQ0ssc0JBQWlCLEdBQVcsQ0FBQyxDQUFDO1FBRXRDOzs7O1dBSUc7UUFDSyxrQkFBYSxHQUFXLENBQUMsQ0FBQztRQUVsQzs7V0FFRztRQUNLLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBSXpCLGNBQVMsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQVNqRCxDQUFDO0lBRU0sUUFBUTtR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QUFTLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBRTlGLHVDQUF1QztZQUN2QyxjQUFjLEdBQUcsY0FBYyxHQUFHLGtCQUFrQixDQUFDO1FBQ3ZELENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUN2RyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMzRCxDQUFDOytHQWhPVSx1QkFBdUIsaUdBbUR4QixRQUFRO21HQW5EUCx1QkFBdUI7OzRGQUF2Qix1QkFBdUI7a0JBSG5DLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG9CQUFvQjtpQkFDL0I7OzBCQW9ESSxNQUFNOzJCQUFDLFFBQVE7eUNBbERTLFdBQVc7c0JBQXJDLEtBQUs7dUJBQUMsa0JBQWtCO2dCQUNoQixXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBTUcsZ0JBQWdCO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBPbkluaXQsIFJlbmRlcmVyMiwgSW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBRdWVyeUxpc3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFJlc2l6YWJsZUJhc2UgfSBmcm9tICcuLi9yZXNpemFibGUvcmVzaXphYmxlLWJhc2UnO1xuaW1wb3J0IHsgQ2FjaGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9jYWNoZS5zZXJ2aWNlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFJlc2l6YWJsZUNvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4vcmVzaXphYmxlLWNvbHVtbi5jb21wb25lbnQnO1xuXG4vKipcbiAqIEFkZCB0aGUgYWJpbGl0eSB0byByZXNpemUgY29sdW1ucyB0byBhIHN0YW5kYXJkIEhUTUwgdGFibGUuXG4gKiBTcGVjaWZ5IGEgY29sdW1uIGFzIHJlc2l6YWJsZSBieSBhZGRpbmcgdGhlIC5pcy1yZXNpemFibGUgY2xhc3MgdG8gYSA8dGg+LlxuICogXG4gKiBVc2FnZTpcbiAgYGBgaHRtbFxuICA8dGFibGUgW2VjUmVzaXphYmxlVGFibGVdPlxuICAgIDxjb2xncm91cD48Y29sPjxjb2w+PGNvbD48L2NvbGdyb3VwPlxuICAgIDx0aGVhZD5cbiAgICAgIDx0cj5cbiAgICAgICAgPHRoIGNsYXNzPVwiaXMtcmVzaXphYmxlXCI+UmVzaXphYmxlPC90aD5cbiAgICAgICAgPHRoIGNsYXNzPVwiaXMtcmVzaXphYmxlXCI+UmVzaXphYmxlPC90aD5cbiAgICAgICAgPHRoPlN0YXRpYzwvdGg+XG4gICAgICA8L3RyPlxuICAgIDwvdGhlYWQ+XG4gICAgLi4uXG4gIDwvdGFibGU+XG5cbiAgYGBgXG4gICogTm90ZTogdGhpcyBkaXJlY3RpdmUgaXMgbWVhbnQgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IHdpdGggdGhlIFRhYmxlQ29tcG9uZW50XG4gICogYW5kIGlzIG5vdCBleHBvc2VkIGluIHRoZSBwdWJsaWMtYXBpIG9mIHRoZSBsaWJyYXJ5XG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tlY1Jlc2l6YWJsZVRhYmxlXSdcbn0pXG5leHBvcnQgY2xhc3MgUmVzaXphYmxlVGFibGVEaXJlY3RpdmUgZXh0ZW5kcyBSZXNpemFibGVCYXNlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoJ2VjUmVzaXphYmxlVGFibGUnKSBpc1Jlc2l6YWJsZTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgQElucHV0KCkgY29udGFpbmVyRWwhOiBFbGVtZW50UmVmO1xuICBASW5wdXQoKSBzb3J0YWJsZVRhYmxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIFxuICAgKiBVc2VkIHRvIG5vdGlmeSB0aGUgcmVzaXphYmxlIGRpcmVjdGl2ZSB0aGF0IHRoZSBjb2x1bW5zIGFyZSByZWFkeSB0byBiZSBjb25maWd1cmVkLlxuICAgKiBNdXN0IGJlIHVzZWQgaWYgdGhlIG51bWJlciBvZiBjb2x1bW5zIGNhbiBjaGFuZ2Ugb3ZlciB0aGUgdGFibGUncyBsaWZlY3ljbGUuXG4gICAqL1xuICBASW5wdXQoKSByZXNpemFibGVDb2x1bW5zITogUXVlcnlMaXN0PFJlc2l6YWJsZUNvbHVtbkNvbXBvbmVudD47XG5cbiAgLyoqIFRoZSBob3N0IDx0YWJsZT4gZWxlbWVudC4gV2lsbCB0aHJvdyBpZiBob3N0IGVsZW1lbnQgaXMgbm90IGEgPHRhYmxlPiAqL1xuICBwcml2YXRlIHRhYmxlRWwhOiBIVE1MVGFibGVFbGVtZW50O1xuXG4gIC8qKiBcbiAgICogU3RvcmVkIHJlZmVyZW5jZSB0byB0aGUgPGNvbD4gZWxlbWVudCBjaGlsZHJlbi4gV2lsbCB0aHJvdyBpZiBub25lIGFyZSBmb3VuZC4gV2lsbFxuICAgKiB3YXJuIGlmIHRoZSBudW1iZXIgb2YgPGNvbD4gZWxlbWVudHMgZG8gbm90IG1hdGNoIHRoZSBudW1iZXIgb2YgPHRoPiBlbGVtZW50c1xuICAgKi9cbiAgcHJpdmF0ZSBjb2xzOiBIVE1MVGFibGVDb2xFbGVtZW50W10gPSBbXTtcblxuICAvKipcbiAgICogVGhlIHdpZHRocyBvZiBlYWNoIHRhYmxlIGNvbHVtbi4gVGhlc2UgYXJlIHVwZGF0ZWQgYXMgY29sdW1ucyBhcmUgcmVzaXplZCBhbmRcbiAgICogYXJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBuZXcgdGFibGUgd2lkdGguXG4gICAqL1xuICBwcml2YXRlIGNvbFdpZHRoczogbnVtYmVyW10gPSBbXTtcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgdGFibGUgd2lkdGhcbiAgICovXG4gIHByaXZhdGUgY3VycmVudFRhYmxlV2lkdGg6IG51bWJlciA9IDA7XG5cbiAgLyoqXG4gICAqIFRoZSB3aWR0aCBvZiB0aGUgdGFibGUgd2hlbiB0aGUgY29tcG9uZW50IHdhcyBpbml0aWFsaXplZC4gVGhlIHRhYmxlIGNhbm5vdFxuICAgKiBiZSBzaHJ1bmsgYmVsb3cgdGhpcyB3aWR0aC4gSWYgYSBjb2x1bW4gcmVzaXplIHdvdWxkIGNhdXNlIHRoZSBjdXJyZW50IHRhYmxlXG4gICAqIHdpZHRoIHRvIGJlIGJlbG93IHRoaXMgdmFsdWUsIHRoZSBsYXN0IGNvbHVtbiBpcyB3aWRlbmVkIGluc3RlYWQuXG4gICAqL1xuICBwcml2YXRlIG1pblRhYmxlV2lkdGg6IG51bWJlciA9IDA7XG5cbiAgLyoqXG4gICAqIFRoZSB3aWR0aCB0aGUgY29sdW1uIGNhbiBub3QgYmUgcmVzaXplZCBiZWxvdy5cbiAgICovXG4gIHByaXZhdGUgbWluQ29sV2lkdGg6IG51bWJlciA9IDMyO1xuXG4gIHByaXZhdGUgbGFzdENvbEluZGV4ITogbnVtYmVyO1xuXG4gIHByaXZhdGUgZGVzdHJveWVkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxuICAgIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgY2FjaGVTZXJ2aWNlOiBDYWNoZVNlcnZpY2UsXG4gICAgQEluamVjdChET0NVTUVOVCkgZG9jdW1lbnQ6IERvY3VtZW50XG4gICkge1xuICAgIHN1cGVyKHJlbmRlcmVyLCBjYWNoZVNlcnZpY2UsIGRvY3VtZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRSZXNpemFibGVDb2x1bW5zKCk7XG5cbiAgICB0aGlzLnJlc2l6YWJsZUNvbHVtbnMuY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLmluaXRSZXNpemFibGVDb2x1bW5zKCkpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95ZWQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveWVkLmNvbXBsZXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZVxuICAgKiAqIENoZWNrIHRoYXQgdGhlIGhvc3QgZWxlbWVudCBpcyBhIHRhYmxlIGFuZCB0aGF0IDxjb2w+IGVsZW1lbnRzIGFyZSBwcmVzZW50XG4gICAqICogU2F2ZSB0aGUgaW5pdGlhbCB3aWR0aCBvZiB0YWJsZSBhcyB0aGUgbWluaW11bSB0YWJsZSB3aWR0aFxuICAgKiAqIFN0b3JlIGEgcmVmZXJlbmNlIHRvIGFsbCA8Y29sPiBlbGVtZW50c1xuICAgKiAqIEFkZCBhIGhhbmRsZSB0byBlYWNoIHJlc2l6YWJsZSBjb2x1bW4gYW5kIHNldCB1cCBtb3VzZWRvd24gbGlzdGVuZXJzIHRvIHN0YXJ0IGRyYWdnaW5nXG4gICAqL1xuICBwcml2YXRlIGluaXRSZXNpemFibGVDb2x1bW5zKCkge1xuICAgIGlmICh0aGlzLmlzUmVzaXphYmxlICE9PSBmYWxzZSkge1xuXG4gICAgICB0aGlzLnRhYmxlRWwgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBpZiAodGhpcy50YWJsZUVsLnRhZ05hbWUgIT09ICdUQUJMRScpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgJ2VjUmVzaXphYmxlVGFibGUnIGRpcmVjdGl2ZSBjYW4gb25seSBiZSBwbGFjZWQgb24gYSA8dGFibGU+IGVsZW1lbnQuYCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnNvcnRhYmxlVGFibGUpIHtcbiAgICAgICAgdGhpcy5taW5Db2xXaWR0aCA9IDQ4O1xuICAgICAgfVxuICBcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLnRhYmxlRWwucXVlcnlTZWxlY3RvckFsbCgndGgnKTtcbiAgICAgIGNvbnN0IGNvbHMgPSB0aGlzLnRhYmxlRWwucXVlcnlTZWxlY3RvckFsbCgnY29sJyk7XG4gICAgICB0aGlzLmNvbHMgPSBbXTtcbiAgICAgIHRoaXMuY29sV2lkdGhzID0gW107XG4gIFxuICAgICAgaWYgKGNvbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnN0IGZyYWdtZW50ID0gdGhpcy5kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICAgIGNvbnN0IGNvbGdyb3VwOiBIVE1MRWxlbWVudCA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnY29sZ3JvdXAnKTtcbiAgICAgICAgaGVhZGVycy5mb3JFYWNoKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBjb2wgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2NvbCcpO1xuICAgICAgICAgIHRoaXMuY29scy5wdXNoKGNvbCk7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChmcmFnbWVudCwgY29sKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoY29sZ3JvdXAsIGZyYWdtZW50KTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5pbnNlcnRCZWZvcmUodGhpcy50YWJsZUVsLCBjb2xncm91cCwgdGhpcy50YWJsZUVsLmZpcnN0RWxlbWVudENoaWxkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbHMuZm9yRWFjaChjb2xFbCA9PiB7XG4gICAgICAgICAgdGhpcy5jb2xzLnB1c2goY29sRWwpO1xuICAgICAgICB9KTtcbiAgXG4gICAgICAgIGlmIChoZWFkZXJzLmxlbmd0aCAhPT0gY29scy5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oYFRoZXJlIGFyZSAke2hlYWRlcnMubGVuZ3RofSA8dGg+IGVsZW1lbnRzIGFuZCAke3RoaXMuY29scy5sZW5ndGh9IDxjb2w+IGVsZW1lbnRzIGluIHRoaXMgdGhpcyB0YWJsZS4gVGhlIG51bWJlciBvZiBjb2x1bW5zIGFuZCB0YWJsZSBoZWFkZXJzIG11c3QgbWF0Y2guIDx0aD4gZWxlbWVudHMgd2l0aCBhICdjb2xzcGFuJyBhdHRyaWJ1dGUgYXJlIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLmApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxhc3RSZXNpemFibGVJbmRleCA9IEFycmF5LmZyb20oaGVhZGVycykucmV2ZXJzZSgpLmZpbmRJbmRleChlbCA9PiBlbC5jbGFzc0xpc3QuY29udGFpbnMoJ2lzLXJlc2l6YWJsZScpKSArIDE7XG4gICAgICB0aGlzLmxhc3RDb2xJbmRleCA9IHRoaXMuY29scy5sZW5ndGggLSBsYXN0UmVzaXphYmxlSW5kZXg7XG4gIFxuICAgICAgaGVhZGVycy5mb3JFYWNoKHRoID0+IHtcbiAgICAgICAgaWYgKHRoLmNsYXNzTGlzdC5jb250YWlucygnaXMtcmVzaXphYmxlJykpIHtcbiAgICAgICAgICBjb25zdCBoYW5kbGUgPSB0aC5xdWVyeVNlbGVjdG9yKCcuaGFuZGxlJyk7XG5cbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLmxpc3RlbihoYW5kbGUsICdtb3VzZWRvd24nLCAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEVsID0gdGg7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0RHJhZyhldmVudCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICBcbiAgICAgIC8vIFdlIG5lZWQgdG8gd2FpdCBhIHRpY2sgZm9yIGEgdmlldyB0aGF0IHdhcyBwcmV2aW91c2x5IGxvYWRlZCB0byBiZSByZW1vdmVkXG4gICAgICAvLyBmcm9tIHRoZSBET00gYW5kIGFsbG93IHRoaXMgZGlyZWN0aXZlJ3MgcGFyZW50IHZpZXcgdG8gZnVsbHkgZXhwYW5kIGluIHRoZSBcbiAgICAgIC8vIHZpZXdwb3J0IGJlZm9yZSBnZXR0aW5nIHdpZHRocy5cbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRJbml0aWFsV2lkdGhzKGhlYWRlcnMpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgY29sdW1uIHdpdGggdGhlIGNhbGN1bGF0ZWQgd2lkdGggd2hpbGUgcmVzaXppbmcuXG4gICAqIElmIHRoZSBjb2x1bW4gaXMgbmFycm93ZWQgc28gdGhhdCB0aGUgdGFibGUgd291bGQgYmUgbmFycm93ZXIgdGhhbiB0aGUgbWluLXdpZHRoLFxuICAgKiBleHBhbmQgdGhlIGxhc3QgY29sdW1uLiBJZiB0aGUgdGFibGUgaXMgdGhlbiB3aWRlbmVkLCByZXR1cm4gdGhlIGxhc3QgY29sdW1uXG4gICAqIHRvIGl0cyBpbml0aWFsIHdpZHRoLlxuICAgKiBAcGFyYW0gd2lkdGggXG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0V2lkdGgod2lkdGg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLmN1cnJlbnRFbCkge1xuICAgICAgY29uc3QgY2VsbEluZGV4OiBudW1iZXIgPSAoPEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50PnRoaXMuY3VycmVudEVsKS5jZWxsSW5kZXg7XG4gICAgICB3aWR0aCA9IE1hdGgubWF4KHdpZHRoLCB0aGlzLm1pbkNvbFdpZHRoKTtcbiAgICAgIHRoaXMuY29sV2lkdGhzW2NlbGxJbmRleF0gPSB3aWR0aDtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5jb2xzW2NlbGxJbmRleF0sICd3aWR0aCcsIHdpZHRoICsgJ3B4Jyk7XG5cbiAgICAgIGxldCB0b3RhbENvbFdpZHRocyA9IDA7XG4gICAgICB0aGlzLmNvbFdpZHRocy5mb3JFYWNoKHcgPT4ge1xuICAgICAgICB0b3RhbENvbFdpZHRocyArPSB3O1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gKDxIVE1MRGl2RWxlbWVudD50aGlzLmNvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQpLmNsaWVudFdpZHRoO1xuICAgICAgaWYgKHRoaXMubWluVGFibGVXaWR0aCAhPT0gY29udGFpbmVyV2lkdGgpIHtcbiAgICAgICAgdGhpcy5taW5UYWJsZVdpZHRoID0gY29udGFpbmVyV2lkdGg7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRpZmYgPSB0b3RhbENvbFdpZHRocyAtIHRoaXMubWluVGFibGVXaWR0aDsgICAgICBcbiAgICAgIGlmIChkaWZmIDwgMCkge1xuICAgICAgICBjb25zdCBjb2xJbmRleCA9IGNlbGxJbmRleCA9PT0gdGhpcy5sYXN0Q29sSW5kZXggPyB0aGlzLmxhc3RDb2xJbmRleCAtIDEgOiB0aGlzLmxhc3RDb2xJbmRleDtcbiAgICAgICAgY29uc3QgY29sV2lkdGggPSBNYXRoLm1heCh0aGlzLmNvbFdpZHRoc1tjb2xJbmRleF0gKyBNYXRoLmFicyhkaWZmKSwgdGhpcy5taW5Db2xXaWR0aCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5jb2xzW2NvbEluZGV4XSwgJ3dpZHRoJywgY29sV2lkdGggKyAncHgnKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnRhYmxlRWwsICd3aWR0aCcsIHRoaXMubWluVGFibGVXaWR0aCArICdweCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnRhYmxlRWwsICd3aWR0aCcsIHRvdGFsQ29sV2lkdGhzICsgJ3B4Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHN0b3BEcmFnKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgc3VwZXIuc3RvcERyYWcoZXZlbnQpO1xuICAgIFxuICAgIGlmICh0aGlzLmN1cnJlbnRFbCkge1xuICAgICAgY29uc3QgY2VsbEluZGV4ID0gKDxIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudD50aGlzLmN1cnJlbnRFbCkuY2VsbEluZGV4O1xuICAgICAgY29uc3QgY3VycmVudENvbCA9IHRoaXMucmVzaXphYmxlQ29sdW1ucy5maW5kKGNvbCA9PiAoPEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50PmNvbC5lbC5uYXRpdmVFbGVtZW50KS5jZWxsSW5kZXggPT09IGNlbGxJbmRleCk7XG4gICAgICBpZiAoY3VycmVudENvbCkge1xuICAgICAgICBjdXJyZW50Q29sLmVtaXRXaWR0aChNYXRoLnJvdW5kKHRoaXMuY29sV2lkdGhzW2NlbGxJbmRleF0pKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FwdHVyZSB0aGUgaW5pdGlhbCB3aWR0aCBvZiB0aGUgdGFibGUgYW5kIHRoZSB0YWJsZSBoZWFkZXJzLlxuICAgKiBAcGFyYW0gaGVhZGVycyBcbiAgICovXG4gIHByaXZhdGUgc2V0SW5pdGlhbFdpZHRocyhoZWFkZXJzOiBOb2RlTGlzdE9mPEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50Pik6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudFRhYmxlV2lkdGggPSB0aGlzLnRhYmxlRWwub2Zmc2V0V2lkdGg7XG4gICAgdGhpcy5taW5UYWJsZVdpZHRoID0gdGhpcy5jb250YWluZXJFbC5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoO1xuXG4gICAgaGVhZGVycy5mb3JFYWNoKHRoID0+IHtcbiAgICAgIHRoaXMuY29sV2lkdGhzW3RoLmNlbGxJbmRleF0gPSB0aC5vZmZzZXRXaWR0aDtcbiAgICAgIGNvbnN0IHdpZHRoID0gdGguc3R5bGUud2lkdGg7XG4gICAgICBpZiAod2lkdGgpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmNvbHNbdGguY2VsbEluZGV4XSwgJ3dpZHRoJywgd2lkdGgpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKHRoLCAnd2lkdGgnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGxldCB0b3RhbENvbFdpZHRocyA9IDA7XG4gICAgdGhpcy5jb2xXaWR0aHMuZm9yRWFjaCh3ID0+IHtcbiAgICAgIHRvdGFsQ29sV2lkdGhzICs9IHc7XG4gICAgfSk7XG5cbiAgICAvLyBDaGVjayB0byBzZWUgaWYgb3VyIHRvdGFsIGNvbHVtbiB3aWR0aHMgaXMgZ3JlYXRlciB0aGFuIG91ciB0YWJsZSB3aWR0aFxuICAgIGxldCBjb2xXaWR0aERpZmZlcmVuY2UgPSB0b3RhbENvbFdpZHRocyAtIHRoaXMuY3VycmVudFRhYmxlV2lkdGg7XG4gICBcbiAgICAvLyBJZiB0aGUgdG90YWwgY29sdW1uIHdpZHRocyBpcyBncmVhdGVyIHRoYW4gemVybyB0aGVuIGl0cyBsYXJnZXIgdGhhbiBvdXIgdGFibGUgY29udGFpbmVyXG4gICAgLy8gVG8gcHJldmVudCBhIGhvcml6b250YWwgc2Nyb2xsIHdlIHdpbGwgYnVtcCBhIGNvbHVtbnMgd2lkdGggZG93biB0byBtYXRjaCB0aGUgdGFibGUgc2l6ZVxuICAgIGlmIChjb2xXaWR0aERpZmZlcmVuY2UgPiAwKSB7XG4gICAgICAvLyBJZGVhbGx5IHdlIHdpbGwgY2hvb3NlIHRoZSBzZWNvbmQgdG8gdGhlIGxhc3QgY29sdW1uLCBidXQgaWYgdGhlcmUgaXMgb25seSBvbmUgdGhhdCdsbCBkb1xuICAgICAgbGV0IGNvbHVtblRvUmVkdWNlID0gaGVhZGVycy5sZW5ndGggPiAxID8gaGVhZGVycy5sZW5ndGggLSAyIDogMDtcblxuICAgICAgLy8gU2hyaW5rIHRoZSBjb2x1bW5cbiAgICAgIGxldCB0aCA9IGhlYWRlcnNbY29sdW1uVG9SZWR1Y2VdO1xuICAgICAgdGhpcy5jb2xXaWR0aHNbdGguY2VsbEluZGV4XSA9IHRoLm9mZnNldFdpZHRoIC0gY29sV2lkdGhEaWZmZXJlbmNlO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmNvbHNbdGguY2VsbEluZGV4XSwgJ3dpZHRoJywgdGhpcy5jb2xXaWR0aHNbdGguY2VsbEluZGV4XSArICdweCcpO1xuICAgIFxuICAgICAgLy8gUmVkdWNlIG91ciB0b3RhbENvbFdpZHRocyB0byByZWZsZWN0XG4gICAgICB0b3RhbENvbFdpZHRocyA9IHRvdGFsQ29sV2lkdGhzIC0gY29sV2lkdGhEaWZmZXJlbmNlO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy50YWJsZUVsLCAnd2lkdGgnLCBNYXRoLm1heCh0aGlzLmN1cnJlbnRUYWJsZVdpZHRoLCB0b3RhbENvbFdpZHRocykgKyAncHgnKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudGFibGVFbCwgJ21pbldpZHRoJywgJzEwMCUnKTtcbiAgfVxufVxuIl19
|