ontimize-web-ngx 15.0.0-beta.4 → 15.0.0-rc.0

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.
Files changed (59) hide show
  1. package/esm2020/lib/components/form/navigation/o-form.navigation.class.mjs +5 -2
  2. package/esm2020/lib/components/form/o-form.component.mjs +11 -2
  3. package/esm2020/lib/components/grid/o-grid.component.mjs +11 -1
  4. package/esm2020/lib/components/image/o-image.component.mjs +3 -3
  5. package/esm2020/lib/components/index.mjs +2 -1
  6. package/esm2020/lib/components/input/combo/combo-search/o-combo-search.component.mjs +3 -3
  7. package/esm2020/lib/components/input/currency-input/o-currency-input.component.mjs +4 -4
  8. package/esm2020/lib/components/input/file-input/o-file-input.component.mjs +2 -18
  9. package/esm2020/lib/components/input/o-form-service-component.class.mjs +7 -9
  10. package/esm2020/lib/components/o-service-component.class.mjs +3 -6
  11. package/esm2020/lib/components/table/column/cell-renderer/service/o-table-cell-renderer-service.component.mjs +26 -4
  12. package/esm2020/lib/components/table/extensions/header/table-menu/o-table-menu.component.mjs +20 -4
  13. package/esm2020/lib/components/table/o-table.component.mjs +4 -1
  14. package/esm2020/lib/components/tree/header/index.mjs +2 -0
  15. package/esm2020/lib/components/tree/header/tree-menu/o-tree-menu.component.mjs +33 -0
  16. package/esm2020/lib/components/tree/index.mjs +5 -0
  17. package/esm2020/lib/components/tree/o-tree-dao.service.mjs +43 -0
  18. package/esm2020/lib/components/tree/o-tree.component.mjs +523 -0
  19. package/esm2020/lib/components/tree/o-tree.datasource.mjs +79 -0
  20. package/esm2020/lib/components/tree/o-tree.module.mjs +24 -0
  21. package/esm2020/lib/components/tree/tree-node/tree-node.component.mjs +49 -0
  22. package/esm2020/lib/config/o-modules.mjs +8 -6
  23. package/esm2020/lib/directives/o-mat-error.directive.mjs +4 -1
  24. package/esm2020/lib/i18n/i18n.mjs +17 -8
  25. package/esm2020/lib/layouts/form-layout/o-form-layout-manager-base.class.mjs +1 -1
  26. package/esm2020/lib/ontimize-web-ngx.module.mjs +4 -3
  27. package/esm2020/lib/services/permissions/o-permissions.module.mjs +1 -3
  28. package/esm2020/lib/services/permissions/permissions.service.mjs +18 -8
  29. package/esm2020/lib/services/state/o-tree-component-state.class.mjs +4 -0
  30. package/esm2020/lib/services/state/o-tree-component-state.service.mjs +50 -0
  31. package/fesm2015/ontimize-web-ngx.mjs +6441 -5678
  32. package/fesm2015/ontimize-web-ngx.mjs.map +1 -1
  33. package/fesm2020/ontimize-web-ngx.mjs +6424 -5665
  34. package/fesm2020/ontimize-web-ngx.mjs.map +1 -1
  35. package/lib/components/form/o-form.component.d.ts +4 -1
  36. package/lib/components/grid/o-grid.component.d.ts +1 -0
  37. package/lib/components/index.d.ts +1 -0
  38. package/lib/components/input/file-input/o-file-input.component.d.ts +1 -1
  39. package/lib/components/table/extensions/header/table-menu/o-table-menu.component.d.ts +5 -0
  40. package/lib/components/table/o-table.component.d.ts +1 -1
  41. package/lib/components/tree/header/index.d.ts +1 -0
  42. package/lib/components/tree/header/tree-menu/o-tree-menu.component.d.ts +13 -0
  43. package/lib/components/tree/index.d.ts +4 -0
  44. package/lib/components/tree/o-tree-dao.service.d.ts +18 -0
  45. package/lib/components/tree/o-tree.component.d.ts +111 -0
  46. package/lib/components/tree/o-tree.datasource.d.ts +22 -0
  47. package/lib/components/tree/o-tree.module.d.ts +14 -0
  48. package/lib/components/tree/tree-node/tree-node.component.d.ts +14 -0
  49. package/lib/i18n/i18n.d.ts +9 -0
  50. package/lib/layouts/form-layout/o-form-layout-manager-base.class.d.ts +1 -0
  51. package/lib/ontimize-web-ngx.module.d.ts +2 -1
  52. package/lib/services/state/o-tree-component-state.class.d.ts +3 -0
  53. package/lib/services/state/o-tree-component-state.service.d.ts +13 -0
  54. package/package.json +1 -1
  55. package/theme.scss +2 -2
  56. package/theming/ontimize-style-v8.scss +2 -1
  57. package/theming/styles/density.scss +6 -2
  58. package/theming/styles/ontimize-v8/o-form-field-style.scss +6 -3
  59. package/theming/themes/ontimize-black-yellow.scss +13 -3
@@ -0,0 +1,2 @@
1
+ export * from './tree-menu/o-tree-menu.component';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvY29tcG9uZW50cy90cmVlL2hlYWRlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1DQUFtQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi90cmVlLW1lbnUvby10cmVlLW1lbnUuY29tcG9uZW50JzsiXX0=
@@ -0,0 +1,33 @@
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, ViewChild } from '@angular/core';
2
+ import { MatMenu } from '@angular/material/menu';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ import * as i2 from "@angular/forms";
6
+ import * as i3 from "@angular/material/checkbox";
7
+ import * as i4 from "@angular/material/menu";
8
+ import * as i5 from "../../../../pipes/o-translate.pipe";
9
+ export class OTreeMenuComponent {
10
+ constructor() {
11
+ this.selectAllCheckbox = false;
12
+ this.selectAllCheckboxVisible = false;
13
+ this.onSelectCheckboxChange = new EventEmitter();
14
+ }
15
+ toggleShowCheckbox(event) {
16
+ this.onSelectCheckboxChange.emit(event.checked);
17
+ }
18
+ }
19
+ OTreeMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OTreeMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
20
+ OTreeMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: OTreeMenuComponent, selector: "o-tree-menu", inputs: { selectAllCheckbox: ["select-all-checkbox", "selectAllCheckbox"], selectAllCheckboxVisible: ["select-all-checkbox-visible", "selectAllCheckboxVisible"] }, outputs: { onSelectCheckboxChange: "onSelectCheckboxChange" }, viewQueries: [{ propertyName: "matMenu", first: true, predicate: ["menu"], descendants: true, static: true }], ngImport: i0, template: "<mat-menu #menu=\"matMenu\" x-position=\"before\" class=\"o-tree-menu o-mat-menu\">\n <span mat-menu-item *ngIf=\"selectAllCheckbox\">\n <mat-checkbox (change)=\"toggleShowCheckbox($event)\" [(ngModel)]=\"selectAllCheckboxVisible\">\n {{ 'TREE.BUTTONS.SELECT' | oTranslate }}\n </mat-checkbox>\n </span>\n</mat-menu>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i4.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i4.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "pipe", type: i5.OTranslatePipe, name: "oTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
21
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OTreeMenuComponent, decorators: [{
22
+ type: Component,
23
+ args: [{ selector: 'o-tree-menu', changeDetection: ChangeDetectionStrategy.OnPush, inputs: [
24
+ 'selectAllCheckbox: select-all-checkbox',
25
+ 'selectAllCheckboxVisible: select-all-checkbox-visible',
26
+ ], outputs: [
27
+ 'onSelectCheckboxChange'
28
+ ], template: "<mat-menu #menu=\"matMenu\" x-position=\"before\" class=\"o-tree-menu o-mat-menu\">\n <span mat-menu-item *ngIf=\"selectAllCheckbox\">\n <mat-checkbox (change)=\"toggleShowCheckbox($event)\" [(ngModel)]=\"selectAllCheckboxVisible\">\n {{ 'TREE.BUTTONS.SELECT' | oTranslate }}\n </mat-checkbox>\n </span>\n</mat-menu>\n" }]
29
+ }], propDecorators: { matMenu: [{
30
+ type: ViewChild,
31
+ args: ['menu', { static: true }]
32
+ }] } });
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10cmVlLW1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2NvbXBvbmVudHMvdHJlZS9oZWFkZXIvdHJlZS1tZW51L28tdHJlZS1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL3RyZWUvaGVhZGVyL3RyZWUtbWVudS9vLXRyZWUtbWVudS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7O0FBZWpELE1BQU0sT0FBTyxrQkFBa0I7SUFaL0I7UUFnQkUsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQzFCLDZCQUF3QixHQUFHLEtBQUssQ0FBQztRQUUxQiwyQkFBc0IsR0FBMEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztLQU0zRTtJQUpDLGtCQUFrQixDQUFDLEtBQXdCO1FBQ3pDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xELENBQUM7OytHQVhVLGtCQUFrQjttR0FBbEIsa0JBQWtCLHFZQ2pCL0IsOFVBT0E7MkZEVWEsa0JBQWtCO2tCQVo5QixTQUFTOytCQUNFLGFBQWEsbUJBRU4sdUJBQXVCLENBQUMsTUFBTSxVQUN2Qzt3QkFDTix3Q0FBd0M7d0JBQ3hDLHVEQUF1RDtxQkFDeEQsV0FDUTt3QkFDUCx3QkFBd0I7cUJBQ3pCOzhCQUlELE9BQU87c0JBRE4sU0FBUzt1QkFBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdENoZWNrYm94Q2hhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xuaW1wb3J0IHsgTWF0TWVudSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ28tdHJlZS1tZW51JyxcbiAgdGVtcGxhdGVVcmw6ICcuL28tdHJlZS1tZW51LmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGlucHV0czogW1xuICAgICdzZWxlY3RBbGxDaGVja2JveDogc2VsZWN0LWFsbC1jaGVja2JveCcsXG4gICAgJ3NlbGVjdEFsbENoZWNrYm94VmlzaWJsZTogc2VsZWN0LWFsbC1jaGVja2JveC12aXNpYmxlJyxcbiAgXSxcbiAgb3V0cHV0czogW1xuICAgICdvblNlbGVjdENoZWNrYm94Q2hhbmdlJ1xuICBdXG59KVxuZXhwb3J0IGNsYXNzIE9UcmVlTWVudUNvbXBvbmVudCB7XG4gIEBWaWV3Q2hpbGQoJ21lbnUnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBtYXRNZW51OiBNYXRNZW51O1xuXG4gIHNlbGVjdEFsbENoZWNrYm94ID0gZmFsc2U7XG4gIHNlbGVjdEFsbENoZWNrYm94VmlzaWJsZSA9IGZhbHNlO1xuXG4gIHB1YmxpYyBvblNlbGVjdENoZWNrYm94Q2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgdG9nZ2xlU2hvd0NoZWNrYm94KGV2ZW50OiBNYXRDaGVja2JveENoYW5nZSkge1xuICAgIHRoaXMub25TZWxlY3RDaGVja2JveENoYW5nZS5lbWl0KGV2ZW50LmNoZWNrZWQpO1xuICB9XG5cbn1cblxuXG4iLCI8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCIgeC1wb3NpdGlvbj1cImJlZm9yZVwiIGNsYXNzPVwiby10cmVlLW1lbnUgby1tYXQtbWVudVwiPlxuICA8c3BhbiBtYXQtbWVudS1pdGVtICpuZ0lmPVwic2VsZWN0QWxsQ2hlY2tib3hcIj5cbiAgICA8bWF0LWNoZWNrYm94IChjaGFuZ2UpPVwidG9nZ2xlU2hvd0NoZWNrYm94KCRldmVudClcIiAgWyhuZ01vZGVsKV09XCJzZWxlY3RBbGxDaGVja2JveFZpc2libGVcIj5cbiAgICAgIHt7ICdUUkVFLkJVVFRPTlMuU0VMRUNUJyB8IG9UcmFuc2xhdGUgfX1cbiAgICA8L21hdC1jaGVja2JveD5cbiAgPC9zcGFuPlxuPC9tYXQtbWVudT5cbiJdfQ==
@@ -0,0 +1,5 @@
1
+ export * from './o-tree.module';
2
+ export * from './o-tree.component';
3
+ export * from './tree-node/tree-node.component';
4
+ export * from './header/index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvY29tcG9uZW50cy90cmVlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL28tdHJlZS5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9vLXRyZWUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdHJlZS1ub2RlL3RyZWUtbm9kZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9oZWFkZXIvaW5kZXgnO1xuXG4iXX0=
@@ -0,0 +1,43 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { BehaviorSubject, of } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ export class OTreeDao {
5
+ constructor() {
6
+ this._isLoadingResults = false;
7
+ this.dataChange = new BehaviorSubject([]);
8
+ this.sqlTypesChange = new BehaviorSubject({});
9
+ this.rootLevelNodes = [];
10
+ this.flatNodeMap = new Map();
11
+ }
12
+ get data() { return this.dataChange.value; }
13
+ setDataArray(data) {
14
+ this.dataChange.next(data);
15
+ return of(data);
16
+ }
17
+ get isLoadingResults() {
18
+ return this._isLoadingResults;
19
+ }
20
+ set isLoadingResults(val) {
21
+ if (val) {
22
+ this.cleanTimer();
23
+ this.loadingTimer = setTimeout(() => {
24
+ this._isLoadingResults = val;
25
+ }, 500);
26
+ }
27
+ else {
28
+ this.cleanTimer();
29
+ this._isLoadingResults = val;
30
+ }
31
+ }
32
+ cleanTimer() {
33
+ if (this.loadingTimer) {
34
+ clearTimeout(this.loadingTimer);
35
+ }
36
+ }
37
+ }
38
+ OTreeDao.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OTreeDao, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
39
+ OTreeDao.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OTreeDao });
40
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OTreeDao, decorators: [{
41
+ type: Injectable
42
+ }] });
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10cmVlLWRhby5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2NvbXBvbmVudHMvdHJlZS9vLXRyZWUtZGFvLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFLM0MsTUFBTSxPQUFPLFFBQVE7SUFEckI7UUFFWSxzQkFBaUIsR0FBWSxLQUFLLENBQUM7UUFHN0MsZUFBVSxHQUFHLElBQUksZUFBZSxDQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLG1CQUFjLEdBQUcsSUFBSSxlQUFlLENBQVMsRUFBRSxDQUFDLENBQUM7UUFHakQsbUJBQWMsR0FBb0IsRUFBRSxDQUFDO1FBRXJDLGdCQUFXLEdBQUcsSUFBSSxHQUFHLEVBQXNCLENBQUM7S0E0QjdDO0lBaENDLElBQUksSUFBSSxLQUFZLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBTW5ELFlBQVksQ0FBQyxJQUFnQjtRQUMzQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQUksZ0JBQWdCLENBQUMsR0FBWTtRQUMvQixJQUFJLEdBQUcsRUFBRTtZQUNQLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2xDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLENBQUM7WUFDL0IsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ1Q7YUFBTTtZQUNMLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxDQUFDO1NBQzlCO0lBQ0gsQ0FBQztJQUVTLFVBQVU7UUFDbEIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDakM7SUFDSCxDQUFDOztxR0FyQ1UsUUFBUTt5R0FBUixRQUFROzJGQUFSLFFBQVE7a0JBRHBCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIG9mIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE9UcmVlRmxhdE5vZGUgfSBmcm9tICcuL28tdHJlZS5jb21wb25lbnQnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgT1RyZWVEYW8ge1xuICBwcm90ZWN0ZWQgX2lzTG9hZGluZ1Jlc3VsdHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJvdGVjdGVkIGxvYWRpbmdUaW1lcjtcbiAgLyoqIFN0cmVhbSB0aGF0IGVtaXRzIHdoZW5ldmVyIHRoZSBkYXRhIGhhcyBiZWVuIG1vZGlmaWVkLiAqL1xuICBkYXRhQ2hhbmdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4oW10pO1xuICBzcWxUeXBlc0NoYW5nZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8b2JqZWN0Pih7fSk7XG4gIGdldCBkYXRhKCk6IGFueVtdIHsgcmV0dXJuIHRoaXMuZGF0YUNoYW5nZS52YWx1ZTsgfVxuXG4gIHJvb3RMZXZlbE5vZGVzOiBPVHJlZUZsYXROb2RlW10gPSBbXTtcbiAgLyoqIE1hcCBmcm9tIGZsYXQgbm9kZSB0byBuZXN0ZWQgbm9kZS4gVGhpcyBoZWxwcyB1cyBmaW5kaW5nIHRoZSBuZXN0ZWQgbm9kZSB0byBiZSBtb2RpZmllZCAqL1xuICBmbGF0Tm9kZU1hcCA9IG5ldyBNYXA8T1RyZWVGbGF0Tm9kZSwgYW55PigpO1xuXG4gIHNldERhdGFBcnJheShkYXRhOiBBcnJheTxhbnk+KSB7XG4gICAgdGhpcy5kYXRhQ2hhbmdlLm5leHQoZGF0YSk7XG4gICAgcmV0dXJuIG9mKGRhdGEpO1xuICB9XG5cbiAgZ2V0IGlzTG9hZGluZ1Jlc3VsdHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzTG9hZGluZ1Jlc3VsdHM7XG4gIH1cblxuICBzZXQgaXNMb2FkaW5nUmVzdWx0cyh2YWw6IGJvb2xlYW4pIHtcbiAgICBpZiAodmFsKSB7XG4gICAgICB0aGlzLmNsZWFuVGltZXIoKTtcbiAgICAgIHRoaXMubG9hZGluZ1RpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuX2lzTG9hZGluZ1Jlc3VsdHMgPSB2YWw7XG4gICAgICB9LCA1MDApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsZWFuVGltZXIoKTtcbiAgICAgIHRoaXMuX2lzTG9hZGluZ1Jlc3VsdHMgPSB2YWw7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGNsZWFuVGltZXIoKSB7XG4gICAgaWYgKHRoaXMubG9hZGluZ1RpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5sb2FkaW5nVGltZXIpO1xuICAgIH1cbiAgfVxufVxuIl19