@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.
Files changed (145) hide show
  1. package/fesm2022/energycap-components.mjs +379 -354
  2. package/fesm2022/energycap-components.mjs.map +1 -1
  3. package/lib/controls/button/copy-button-base.directive.d.ts +1 -1
  4. package/lib/controls/date-input/date-input.component.d.ts +1 -1
  5. package/lib/controls/form-control-base.d.ts +1 -1
  6. package/lib/core/date-time-helper.d.ts +2 -2
  7. package/lib/display/hierarchy/hierarchy-base.d.ts +1 -1
  8. package/lib/display/hierarchy/hierarchy-mocks.spec.d.ts +1 -1
  9. package/lib/display/resizable/resizable-base.d.ts +1 -1
  10. package/lib/shared/display/pipes/date-display.pipe.d.ts +1 -1
  11. package/lib/shared/page/page-base/page-base.component.d.ts +1 -1
  12. package/lib/shared/testing/public-mocks.spec.d.ts +1 -1
  13. package/lib/shared/wizard/wizard-base/wizard-base.component.d.ts +1 -1
  14. package/package.json +1 -3
  15. package/schematics/utilities/typescript.js +3 -4
  16. package/schematics/utilities/typescript.js.map +1 -1
  17. package/schematics/utilities/workspace.d.ts +0 -8
  18. package/schematics/utilities/workspace.js +48 -71
  19. package/schematics/utilities/workspace.js.map +1 -1
  20. package/esm2022/energycap-components.mjs +0 -5
  21. package/esm2022/lib/components.module.mjs +0 -425
  22. package/esm2022/lib/controls/banner/banner.component.mjs +0 -112
  23. package/esm2022/lib/controls/button/button.component.mjs +0 -114
  24. package/esm2022/lib/controls/button/copy-button-base.directive.mjs +0 -67
  25. package/esm2022/lib/controls/button/copy-button.directive.mjs +0 -28
  26. package/esm2022/lib/controls/button/copy-table-button.directive.mjs +0 -43
  27. package/esm2022/lib/controls/calendar/calendar-item.component.mjs +0 -91
  28. package/esm2022/lib/controls/calendar/calendar.component.mjs +0 -251
  29. package/esm2022/lib/controls/calendar/calendar.types.mjs +0 -2
  30. package/esm2022/lib/controls/checkbox/checkbox.component.mjs +0 -140
  31. package/esm2022/lib/controls/collapsible-toggle/collapsible-toggle.component.mjs +0 -38
  32. package/esm2022/lib/controls/combobox/combobox.component.mjs +0 -879
  33. package/esm2022/lib/controls/date-input/date-input-selection-strategies/date-input-selection-strategy-base.mjs +0 -57
  34. package/esm2022/lib/controls/date-input/date-input-selection-strategies/day-selection-strategy.mjs +0 -62
  35. package/esm2022/lib/controls/date-input/date-input-selection-strategies/last-28-days-selection-strategy.mjs +0 -100
  36. package/esm2022/lib/controls/date-input/date-input-selection-strategies/last-7-days-selection-strategy.mjs +0 -101
  37. package/esm2022/lib/controls/date-input/date-input-selection-strategies/month-selection-strategy.mjs +0 -76
  38. package/esm2022/lib/controls/date-input/date-input-selection-strategies/quarter-selection-strategy.mjs +0 -79
  39. package/esm2022/lib/controls/date-input/date-input-selection-strategies/range-selection-strategy.mjs +0 -210
  40. package/esm2022/lib/controls/date-input/date-input-selection-strategies/year-selection-strategy.mjs +0 -81
  41. package/esm2022/lib/controls/date-input/date-input.component.mjs +0 -466
  42. package/esm2022/lib/controls/date-input/date-input.types.mjs +0 -44
  43. package/esm2022/lib/controls/dropdown/dropdown.component.mjs +0 -243
  44. package/esm2022/lib/controls/file-upload/file-upload.component.mjs +0 -261
  45. package/esm2022/lib/controls/form-control/form-control.component.mjs +0 -110
  46. package/esm2022/lib/controls/form-control-base.mjs +0 -151
  47. package/esm2022/lib/controls/form-control-label/form-control-label.component.mjs +0 -136
  48. package/esm2022/lib/controls/form-group/form-group.component.mjs +0 -261
  49. package/esm2022/lib/controls/help-popover/help-popover.component.mjs +0 -31
  50. package/esm2022/lib/controls/item-picker/item-picker.component.mjs +0 -329
  51. package/esm2022/lib/controls/link-button/link-button.component.mjs +0 -11
  52. package/esm2022/lib/controls/menu/menu.component.mjs +0 -485
  53. package/esm2022/lib/controls/navigation/link-item.mjs +0 -2
  54. package/esm2022/lib/controls/navigation/nav-group.mjs +0 -39
  55. package/esm2022/lib/controls/navigation/nav-item-active.directive.mjs +0 -92
  56. package/esm2022/lib/controls/navigation/nav-item.mjs +0 -2
  57. package/esm2022/lib/controls/numericbox/numericbox.component.mjs +0 -372
  58. package/esm2022/lib/controls/popover/popover.component.mjs +0 -117
  59. package/esm2022/lib/controls/radio-button/radio-button-option.mjs +0 -3
  60. package/esm2022/lib/controls/radio-button/radio-button.component.mjs +0 -82
  61. package/esm2022/lib/controls/select/select.component.mjs +0 -88
  62. package/esm2022/lib/controls/tabs/tabs.component.mjs +0 -47
  63. package/esm2022/lib/controls/textbox/textbox.component.mjs +0 -155
  64. package/esm2022/lib/core/cache.service.mjs +0 -105
  65. package/esm2022/lib/core/custom-validators.mjs +0 -29
  66. package/esm2022/lib/core/date-time-helper.mjs +0 -228
  67. package/esm2022/lib/core/error.service.mjs +0 -61
  68. package/esm2022/lib/core/router-helper.service.mjs +0 -111
  69. package/esm2022/lib/core/scroll.service.mjs +0 -89
  70. package/esm2022/lib/core/telemetry-tracker.service.mjs +0 -16
  71. package/esm2022/lib/core/telemetry.service.mjs +0 -38
  72. package/esm2022/lib/core/validation-message.service.mjs +0 -185
  73. package/esm2022/lib/core/validation-patterns.mjs +0 -31
  74. package/esm2022/lib/core/window.service.mjs +0 -186
  75. package/esm2022/lib/display/app-bar/app-bar.component.mjs +0 -49
  76. package/esm2022/lib/display/avatar/avatar.component.mjs +0 -67
  77. package/esm2022/lib/display/avatar/avatar.service.mjs +0 -64
  78. package/esm2022/lib/display/confirm/confirm.component.mjs +0 -168
  79. package/esm2022/lib/display/dialog/dialog-content.mjs +0 -2
  80. package/esm2022/lib/display/dialog/dialog-group/dialog-group.component.mjs +0 -63
  81. package/esm2022/lib/display/dialog/dialog-types.mjs +0 -77
  82. package/esm2022/lib/display/dialog/dialog.component.mjs +0 -287
  83. package/esm2022/lib/display/dialog/dialog.service.mjs +0 -71
  84. package/esm2022/lib/display/help/help-types.mjs +0 -2
  85. package/esm2022/lib/display/hierarchy/hierarchy-base.mjs +0 -111
  86. package/esm2022/lib/display/hierarchy/hierarchy-mocks.spec.mjs +0 -54
  87. package/esm2022/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.mjs +0 -65
  88. package/esm2022/lib/display/item-display/item-display.component.mjs +0 -83
  89. package/esm2022/lib/display/json-display/json-display.component.mjs +0 -47
  90. package/esm2022/lib/display/resizable/resizable-base.mjs +0 -120
  91. package/esm2022/lib/display/resizable/resizable.component.mjs +0 -57
  92. package/esm2022/lib/display/spinner/spinner.component.mjs +0 -12
  93. package/esm2022/lib/display/splash/splash.component.mjs +0 -61
  94. package/esm2022/lib/display/splash/splash.service.mjs +0 -35
  95. package/esm2022/lib/display/table/resizable-column.component.mjs +0 -20
  96. package/esm2022/lib/display/table/resizable-table.directive.mjs +0 -227
  97. package/esm2022/lib/display/table/searchable-table.component.mjs +0 -344
  98. package/esm2022/lib/display/table/table-detail-row.component.mjs +0 -28
  99. package/esm2022/lib/display/table/table-locked-column.component.mjs +0 -58
  100. package/esm2022/lib/display/table/table-master-header-row.component.mjs +0 -14
  101. package/esm2022/lib/display/table/table-master-row.component.mjs +0 -163
  102. package/esm2022/lib/display/table/table-pagination.component.mjs +0 -155
  103. package/esm2022/lib/display/table/table-selectable-row.component.mjs +0 -235
  104. package/esm2022/lib/display/table/table.component.mjs +0 -257
  105. package/esm2022/lib/display/tags/tag.mjs +0 -18
  106. package/esm2022/lib/display/tags/tags.component.mjs +0 -82
  107. package/esm2022/lib/display/toast/toast/toast.component.mjs +0 -77
  108. package/esm2022/lib/display/toast/toast-types.mjs +0 -8
  109. package/esm2022/lib/display/toast/toast.service.mjs +0 -35
  110. package/esm2022/lib/display/toast/toaster/toaster.component.mjs +0 -114
  111. package/esm2022/lib/display/tooltip/tooltip.component.mjs +0 -28
  112. package/esm2022/lib/display/tooltip/tooltip.service.mjs +0 -78
  113. package/esm2022/lib/display/tooltip-directive/tooltip.directive.mjs +0 -173
  114. package/esm2022/lib/display/tree/tree.component.mjs +0 -139
  115. package/esm2022/lib/display/view-overlay/view-overlay.component.mjs +0 -58
  116. package/esm2022/lib/shared/directives/click-area-for/click-area-for.directive.mjs +0 -32
  117. package/esm2022/lib/shared/directives/if-viewport-width/if-viewport-width.directive.mjs +0 -111
  118. package/esm2022/lib/shared/directives/keyboard-nav-container/keyboard-nav-container.directive.mjs +0 -103
  119. package/esm2022/lib/shared/directives/popup/popup-container.directive.mjs +0 -166
  120. package/esm2022/lib/shared/display/pipes/date-display-2.pipe.mjs +0 -39
  121. package/esm2022/lib/shared/display/pipes/date-display.pipe.mjs +0 -51
  122. package/esm2022/lib/shared/display/pipes/highlight-text.pipe.mjs +0 -30
  123. package/esm2022/lib/shared/display/pipes/relative-date.pipe.mjs +0 -62
  124. package/esm2022/lib/shared/display/pipes/row-count.pipe.mjs +0 -48
  125. package/esm2022/lib/shared/display/pipes/time-display.pipe.mjs +0 -41
  126. package/esm2022/lib/shared/display.mjs +0 -6
  127. package/esm2022/lib/shared/form-group.helper.mjs +0 -67
  128. package/esm2022/lib/shared/json-helper.mjs +0 -19
  129. package/esm2022/lib/shared/lodash-helper.mjs +0 -52
  130. package/esm2022/lib/shared/page/page-base/page-base.component.mjs +0 -387
  131. package/esm2022/lib/shared/page/page-statuses.mjs +0 -23
  132. package/esm2022/lib/shared/page/page-title/page-title.component.mjs +0 -23
  133. package/esm2022/lib/shared/page/page-view/page-view.component.mjs +0 -147
  134. package/esm2022/lib/shared/testing/copy-button-base-test-injector-factory.spec.mjs +0 -17
  135. package/esm2022/lib/shared/testing/hierarchy-base-test-injector-factory.spec.mjs +0 -17
  136. package/esm2022/lib/shared/testing/page-base-component-test-helper.spec.mjs +0 -38
  137. package/esm2022/lib/shared/testing/page-base-component-test-injector-factory.spec.mjs +0 -98
  138. package/esm2022/lib/shared/testing/public-mocks.spec.mjs +0 -148
  139. package/esm2022/lib/shared/testing/spy-factory.spec.mjs +0 -40
  140. package/esm2022/lib/shared/testing/translation-mocks.spec.mjs +0 -57
  141. package/esm2022/lib/shared/user-preference.service.mjs +0 -17
  142. package/esm2022/lib/shared/wizard/wizard-base/wizard-base.component.mjs +0 -246
  143. package/esm2022/lib/shared/wizard/wizard-buttons/wizard-buttons.component.mjs +0 -68
  144. package/esm2022/lib/shared/wizard/wizard-progress/wizard-progress.component.mjs +0 -18
  145. 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