@skyux/ag-grid 8.7.0 → 9.0.0-alpha.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 (99) hide show
  1. package/{esm2020 → esm2022}/lib/modules/ag-grid/ag-grid-adapter.service.mjs +8 -11
  2. package/esm2022/lib/modules/ag-grid/ag-grid-data-manager-adapter.directive.mjs +240 -0
  3. package/{esm2020 → esm2022}/lib/modules/ag-grid/ag-grid-row-delete.component.mjs +6 -6
  4. package/esm2022/lib/modules/ag-grid/ag-grid-row-delete.directive.mjs +268 -0
  5. package/esm2022/lib/modules/ag-grid/ag-grid-wrapper.component.mjs +259 -0
  6. package/{esm2020 → esm2022}/lib/modules/ag-grid/ag-grid.module.mjs +51 -51
  7. package/esm2022/lib/modules/ag-grid/ag-grid.service.mjs +457 -0
  8. package/esm2022/lib/modules/ag-grid/cell-editors/cell-editor-autocomplete/cell-editor-autocomplete.component.mjs +72 -0
  9. package/{esm2020 → esm2022}/lib/modules/ag-grid/cell-editors/cell-editor-autocomplete/cell-editor-autocomplete.module.mjs +9 -9
  10. package/esm2022/lib/modules/ag-grid/cell-editors/cell-editor-currency/cell-editor-currency.component.mjs +95 -0
  11. package/{esm2020 → esm2022}/lib/modules/ag-grid/cell-editors/cell-editor-currency/cell-editor-currency.module.mjs +9 -9
  12. package/esm2022/lib/modules/ag-grid/cell-editors/cell-editor-datepicker/cell-editor-datepicker.component.mjs +119 -0
  13. package/{esm2020 → esm2022}/lib/modules/ag-grid/cell-editors/cell-editor-datepicker/cell-editor-datepicker.module.mjs +5 -5
  14. package/esm2022/lib/modules/ag-grid/cell-editors/cell-editor-lookup/cell-editor-lookup.component.mjs +109 -0
  15. package/{esm2020 → esm2022}/lib/modules/ag-grid/cell-editors/cell-editor-lookup/cell-editor-lookup.module.mjs +13 -13
  16. package/esm2022/lib/modules/ag-grid/cell-editors/cell-editor-number/cell-editor-number.component.mjs +77 -0
  17. package/{esm2020 → esm2022}/lib/modules/ag-grid/cell-editors/cell-editor-number/cell-editor-number.module.mjs +5 -5
  18. package/esm2022/lib/modules/ag-grid/cell-editors/cell-editor-text/cell-editor-text.component.mjs +75 -0
  19. package/{esm2020 → esm2022}/lib/modules/ag-grid/cell-editors/cell-editor-text/cell-editor-text.module.mjs +5 -5
  20. package/esm2022/lib/modules/ag-grid/cell-renderers/cell-renderer-currency/cell-renderer-currency-validator.component.mjs +42 -0
  21. package/esm2022/lib/modules/ag-grid/cell-renderers/cell-renderer-currency/cell-renderer-currency.component.mjs +49 -0
  22. package/{esm2020 → esm2022}/lib/modules/ag-grid/cell-renderers/cell-renderer-currency/cell-renderer-currency.module.mjs +15 -15
  23. package/esm2022/lib/modules/ag-grid/cell-renderers/cell-renderer-lookup/cell-renderer-lookup.component.mjs +31 -0
  24. package/{esm2020 → esm2022}/lib/modules/ag-grid/cell-renderers/cell-renderer-lookup/cell-renderer-lookup.module.mjs +5 -5
  25. package/esm2022/lib/modules/ag-grid/cell-renderers/cell-renderer-row-selector/cell-renderer-row-selector.component.mjs +78 -0
  26. package/{esm2020 → esm2022}/lib/modules/ag-grid/cell-renderers/cell-renderer-row-selector/cell-renderer-row-selector.module.mjs +5 -5
  27. package/esm2022/lib/modules/ag-grid/cell-renderers/cell-renderer-validator-tooltip/cell-renderer-validator-tooltip.component.mjs +38 -0
  28. package/{esm2020 → esm2022}/lib/modules/ag-grid/cell-renderers/cell-renderer-validator-tooltip/cell-renderer-validator-tooltip.module.mjs +5 -5
  29. package/esm2022/lib/modules/ag-grid/cell-validator/ag-grid-cell-validator-tooltip.component.mjs +88 -0
  30. package/{esm2020 → esm2022}/lib/modules/ag-grid/cell-validator/ag-grid-cell-validator.module.mjs +5 -5
  31. package/esm2022/lib/modules/ag-grid/header/header-group.component.mjs +97 -0
  32. package/esm2022/lib/modules/ag-grid/header/header.component.mjs +144 -0
  33. package/{esm2020 → esm2022}/lib/modules/ag-grid/types/header-group-info.mjs +4 -4
  34. package/{esm2020 → esm2022}/lib/modules/ag-grid/types/header-info.mjs +4 -4
  35. package/esm2022/lib/modules/shared/sky-ag-grid-resources.module.mjs +74 -0
  36. package/fesm2022/skyux-ag-grid.mjs +3025 -0
  37. package/fesm2022/skyux-ag-grid.mjs.map +1 -0
  38. package/lib/modules/ag-grid/ag-grid-data-manager-adapter.directive.d.ts +1 -1
  39. package/lib/modules/ag-grid/ag-grid-row-delete.directive.d.ts +1 -1
  40. package/lib/modules/ag-grid/cell-renderers/cell-renderer-currency/cell-renderer-currency-validator.component.d.ts +1 -1
  41. package/lib/modules/ag-grid/cell-renderers/cell-renderer-currency/cell-renderer-currency.component.d.ts +1 -1
  42. package/lib/modules/ag-grid/cell-renderers/cell-renderer-validator-tooltip/cell-renderer-validator-tooltip.component.d.ts +1 -1
  43. package/lib/modules/ag-grid/cell-validator/ag-grid-cell-validator-tooltip.component.d.ts +1 -1
  44. package/package.json +19 -25
  45. package/esm2020/lib/modules/ag-grid/ag-grid-data-manager-adapter.directive.mjs +0 -233
  46. package/esm2020/lib/modules/ag-grid/ag-grid-row-delete.directive.mjs +0 -264
  47. package/esm2020/lib/modules/ag-grid/ag-grid-wrapper.component.mjs +0 -247
  48. package/esm2020/lib/modules/ag-grid/ag-grid.service.mjs +0 -453
  49. package/esm2020/lib/modules/ag-grid/cell-editors/cell-editor-autocomplete/cell-editor-autocomplete.component.mjs +0 -75
  50. package/esm2020/lib/modules/ag-grid/cell-editors/cell-editor-currency/cell-editor-currency.component.mjs +0 -98
  51. package/esm2020/lib/modules/ag-grid/cell-editors/cell-editor-datepicker/cell-editor-datepicker.component.mjs +0 -122
  52. package/esm2020/lib/modules/ag-grid/cell-editors/cell-editor-lookup/cell-editor-lookup.component.mjs +0 -112
  53. package/esm2020/lib/modules/ag-grid/cell-editors/cell-editor-number/cell-editor-number.component.mjs +0 -80
  54. package/esm2020/lib/modules/ag-grid/cell-editors/cell-editor-text/cell-editor-text.component.mjs +0 -78
  55. package/esm2020/lib/modules/ag-grid/cell-renderers/cell-renderer-currency/cell-renderer-currency-validator.component.mjs +0 -45
  56. package/esm2020/lib/modules/ag-grid/cell-renderers/cell-renderer-currency/cell-renderer-currency.component.mjs +0 -52
  57. package/esm2020/lib/modules/ag-grid/cell-renderers/cell-renderer-lookup/cell-renderer-lookup.component.mjs +0 -34
  58. package/esm2020/lib/modules/ag-grid/cell-renderers/cell-renderer-row-selector/cell-renderer-row-selector.component.mjs +0 -80
  59. package/esm2020/lib/modules/ag-grid/cell-renderers/cell-renderer-validator-tooltip/cell-renderer-validator-tooltip.component.mjs +0 -41
  60. package/esm2020/lib/modules/ag-grid/cell-validator/ag-grid-cell-validator-tooltip.component.mjs +0 -90
  61. package/esm2020/lib/modules/ag-grid/header/header-group.component.mjs +0 -95
  62. package/esm2020/lib/modules/ag-grid/header/header.component.mjs +0 -141
  63. package/esm2020/lib/modules/shared/sky-ag-grid-resources.module.mjs +0 -74
  64. package/fesm2015/skyux-ag-grid.mjs +0 -2996
  65. package/fesm2015/skyux-ag-grid.mjs.map +0 -1
  66. package/fesm2020/skyux-ag-grid.mjs +0 -3012
  67. package/fesm2020/skyux-ag-grid.mjs.map +0 -1
  68. /package/{esm2020 → esm2022}/index.mjs +0 -0
  69. /package/{esm2020 → esm2022}/lib/modules/ag-grid/apply-lookup-properties-defaults.mjs +0 -0
  70. /package/{esm2020 → esm2022}/lib/modules/ag-grid/icons/icon-map.mjs +0 -0
  71. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/ag-grid-row-delete-cancel-args.mjs +0 -0
  72. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/ag-grid-row-delete-config.mjs +0 -0
  73. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/ag-grid-row-delete-confirm-args.mjs +0 -0
  74. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/ag-grid-row-delete-contents.mjs +0 -0
  75. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/autocomplete-properties.mjs +0 -0
  76. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/cell-class.mjs +0 -0
  77. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/cell-editor-autocomplete-params.mjs +0 -0
  78. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/cell-editor-currency-params.mjs +0 -0
  79. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/cell-editor-datepicker-params.mjs +0 -0
  80. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/cell-editor-initial-action.mjs +0 -0
  81. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/cell-editor-lookup-params.mjs +0 -0
  82. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/cell-editor-number-params.mjs +0 -0
  83. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/cell-editor-text-params.mjs +0 -0
  84. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/cell-editor-utils.mjs +0 -0
  85. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/cell-renderer-currency-params.mjs +0 -0
  86. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/cell-renderer-lookup-params.mjs +0 -0
  87. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/cell-renderer-validator-params.mjs +0 -0
  88. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/cell-type.mjs +0 -0
  89. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/currency-properties.mjs +0 -0
  90. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/datepicker-properties.mjs +0 -0
  91. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/header-class.mjs +0 -0
  92. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/header-group-params.mjs +0 -0
  93. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/header-params.mjs +0 -0
  94. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/lookup-properties.mjs +0 -0
  95. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/number-properties.mjs +0 -0
  96. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/sky-grid-options.mjs +0 -0
  97. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/text-properties.mjs +0 -0
  98. /package/{esm2020 → esm2022}/lib/modules/ag-grid/types/validator-properties.mjs +0 -0
  99. /package/{esm2020 → esm2022}/skyux-ag-grid.mjs +0 -0
@@ -1,264 +0,0 @@
1
- var _SkyAgGridRowDeleteDirective_instances, _SkyAgGridRowDeleteDirective_rowDeleteConfigs, _SkyAgGridRowDeleteDirective_ngUnsubscribe, _SkyAgGridRowDeleteDirective_rowDeleteComponent, _SkyAgGridRowDeleteDirective_rowDeleteContents, _SkyAgGridRowDeleteDirective_rowDeleteIdsInternal, _SkyAgGridRowDeleteDirective_affixService, _SkyAgGridRowDeleteDirective_changeDetector, _SkyAgGridRowDeleteDirective_elementRef, _SkyAgGridRowDeleteDirective_overlayService, _SkyAgGridRowDeleteDirective_viewContainerRef, _SkyAgGridRowDeleteDirective_scrollableHostService, _SkyAgGridRowDeleteDirective_clipPath, _SkyAgGridRowDeleteDirective_zIndex, _SkyAgGridRowDeleteDirective_hasStackingContext, _SkyAgGridRowDeleteDirective_affixToRow, _SkyAgGridRowDeleteDirective_destroyRowDelete, _SkyAgGridRowDeleteDirective_updateRowDeleteStates;
2
- import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
3
- import { ContentChild, Directive, EventEmitter, Inject, Input, Optional, Output, } from '@angular/core';
4
- import { SKY_STACKING_CONTEXT, SkyAffixAutoFitContext, } from '@skyux/core';
5
- import { AgGridAngular } from 'ag-grid-angular';
6
- import { BehaviorSubject, Subject } from 'rxjs';
7
- import { takeUntil } from 'rxjs/operators';
8
- import { SkyAgGridRowDeleteComponent } from './ag-grid-row-delete.component';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "@skyux/core";
11
- export class SkyAgGridRowDeleteDirective {
12
- /**
13
- * The IDs of the data in the rows where the inline delete appears.
14
- */
15
- set rowDeleteIds(value) {
16
- __classPrivateFieldSet(this, _SkyAgGridRowDeleteDirective_rowDeleteIdsInternal, value, "f");
17
- if (!value) {
18
- for (const config of __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_rowDeleteConfigs, "f")) {
19
- __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_instances, "m", _SkyAgGridRowDeleteDirective_destroyRowDelete).call(this, config.id);
20
- }
21
- __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_changeDetector, "f").markForCheck();
22
- return;
23
- }
24
- for (const id of value) {
25
- const existingConfig = __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_rowDeleteConfigs, "f").find((config) => config.id === id);
26
- if (existingConfig) {
27
- existingConfig.pending = false;
28
- }
29
- else if (__classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_rowDeleteComponent, "f") && this.agGrid) {
30
- __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_rowDeleteConfigs, "f").push({
31
- id: id,
32
- pending: false,
33
- });
34
- const overlay = __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_overlayService, "f").create({
35
- enableScroll: true,
36
- showBackdrop: false,
37
- closeOnNavigation: true,
38
- enableClose: false,
39
- enablePointerEvents: true,
40
- });
41
- if (__classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_rowDeleteComponent, "f").inlineDeleteTemplateRef) {
42
- overlay.attachTemplate(__classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_rowDeleteComponent, "f").inlineDeleteTemplateRef, {
43
- $implicit: this.agGrid.api.getRowNode(id),
44
- tableWidth: () => __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_elementRef, "f").nativeElement.querySelector('.sky-ag-grid')
45
- .offsetWidth,
46
- getRowDeleteItem: (row) => this.getRowDeleteItem(row),
47
- cancelRowDelete: (row) => this.cancelRowDelete(row),
48
- confirmRowDelete: (row) => this.confirmRowDelete(row),
49
- });
50
- }
51
- /**
52
- * We are manually setting the z-index here because overlays will always be on top of
53
- * the omnibar. The default manual setting is 2 less than the omnibar's z-index of 1000 and one less than
54
- * the header row's viewkeeper which is 999. We discussed changing the overlay service to allow for this
55
- * but decided against that change at this time due to its niche nature.
56
- */
57
- __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_zIndex, "f")
58
- .pipe(takeUntil(__classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_ngUnsubscribe, "f")))
59
- .subscribe((zIndex) => {
60
- overlay.componentRef.instance.zIndex = zIndex.toString(10);
61
- });
62
- __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_clipPath, "f")
63
- .pipe(takeUntil(__classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_ngUnsubscribe, "f")))
64
- .subscribe((clipPath) => {
65
- overlay.componentRef.instance.updateClipPath(clipPath);
66
- });
67
- setTimeout(() => {
68
- const inlineDeleteRef = __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_rowDeleteComponent, "f")?.inlineDeleteRefs
69
- ?.toArray()
70
- .find((elRef) => elRef.nativeElement.id === 'row-delete-ref-' + id);
71
- const affixer = __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_affixService, "f").createAffixer(inlineDeleteRef);
72
- __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_instances, "m", _SkyAgGridRowDeleteDirective_affixToRow).call(this, affixer, id);
73
- __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_rowDeleteContents, "f")[id] = {
74
- affixer: affixer,
75
- overlay: overlay,
76
- };
77
- });
78
- }
79
- }
80
- for (const config of __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_rowDeleteConfigs, "f")) {
81
- if (value.indexOf(config.id) < 0) {
82
- __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_instances, "m", _SkyAgGridRowDeleteDirective_destroyRowDelete).call(this, config.id);
83
- }
84
- }
85
- __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_changeDetector, "f").markForCheck();
86
- }
87
- get rowDeleteIds() {
88
- return __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_rowDeleteIdsInternal, "f");
89
- }
90
- constructor(affixService, changeDetector, elementRef, overlayService, viewContainerRef, scrollableHostService, stackingContext) {
91
- _SkyAgGridRowDeleteDirective_instances.add(this);
92
- /**
93
- * Emits a `SkyAgGridRowDeleteCancelArgs` object when a row's inline delete is cancelled.
94
- */
95
- this.rowDeleteCancel = new EventEmitter();
96
- /**
97
- * Emits a `SkyAgGridRowDeleteConfirmArgs` object when a row's inline delete is confirmed.
98
- */
99
- this.rowDeleteConfirm = new EventEmitter();
100
- /**
101
- * Emits when the list of ids of the data in the rows where inline deletes are shown changes.
102
- */
103
- this.rowDeleteIdsChange = new EventEmitter();
104
- _SkyAgGridRowDeleteDirective_rowDeleteConfigs.set(this, []);
105
- _SkyAgGridRowDeleteDirective_ngUnsubscribe.set(this, new Subject());
106
- _SkyAgGridRowDeleteDirective_rowDeleteComponent.set(this, void 0);
107
- _SkyAgGridRowDeleteDirective_rowDeleteContents.set(this, {});
108
- _SkyAgGridRowDeleteDirective_rowDeleteIdsInternal.set(this, void 0);
109
- _SkyAgGridRowDeleteDirective_affixService.set(this, void 0);
110
- _SkyAgGridRowDeleteDirective_changeDetector.set(this, void 0);
111
- _SkyAgGridRowDeleteDirective_elementRef.set(this, void 0);
112
- _SkyAgGridRowDeleteDirective_overlayService.set(this, void 0);
113
- _SkyAgGridRowDeleteDirective_viewContainerRef.set(this, void 0);
114
- _SkyAgGridRowDeleteDirective_scrollableHostService.set(this, void 0);
115
- _SkyAgGridRowDeleteDirective_clipPath.set(this, new BehaviorSubject(undefined));
116
- _SkyAgGridRowDeleteDirective_zIndex.set(this, new BehaviorSubject(998));
117
- _SkyAgGridRowDeleteDirective_hasStackingContext.set(this, void 0);
118
- __classPrivateFieldSet(this, _SkyAgGridRowDeleteDirective_affixService, affixService, "f");
119
- __classPrivateFieldSet(this, _SkyAgGridRowDeleteDirective_changeDetector, changeDetector, "f");
120
- __classPrivateFieldSet(this, _SkyAgGridRowDeleteDirective_elementRef, elementRef, "f");
121
- __classPrivateFieldSet(this, _SkyAgGridRowDeleteDirective_overlayService, overlayService, "f");
122
- __classPrivateFieldSet(this, _SkyAgGridRowDeleteDirective_viewContainerRef, viewContainerRef, "f");
123
- __classPrivateFieldSet(this, _SkyAgGridRowDeleteDirective_scrollableHostService, scrollableHostService, "f");
124
- __classPrivateFieldSet(this, _SkyAgGridRowDeleteDirective_hasStackingContext, !!stackingContext, "f");
125
- if (stackingContext) {
126
- stackingContext.zIndex
127
- .pipe(takeUntil(__classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_ngUnsubscribe, "f")))
128
- .subscribe((zIndex) => {
129
- __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_zIndex, "f").next(zIndex);
130
- });
131
- }
132
- }
133
- ngAfterContentInit() {
134
- __classPrivateFieldSet(this, _SkyAgGridRowDeleteDirective_rowDeleteComponent, __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_viewContainerRef, "f").createComponent(SkyAgGridRowDeleteComponent).instance, "f");
135
- if (this.agGrid) {
136
- this.agGrid.rowDataUpdated
137
- .pipe(takeUntil(__classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_ngUnsubscribe, "f")))
138
- .subscribe(() => {
139
- __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_instances, "m", _SkyAgGridRowDeleteDirective_updateRowDeleteStates).call(this);
140
- });
141
- this.agGrid.sortChanged
142
- .pipe(takeUntil(__classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_ngUnsubscribe, "f")))
143
- .subscribe(() => {
144
- __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_instances, "m", _SkyAgGridRowDeleteDirective_updateRowDeleteStates).call(this);
145
- });
146
- this.agGrid.filterChanged
147
- .pipe(takeUntil(__classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_ngUnsubscribe, "f")))
148
- .subscribe(() => {
149
- __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_instances, "m", _SkyAgGridRowDeleteDirective_updateRowDeleteStates).call(this);
150
- });
151
- }
152
- }
153
- ngAfterViewInit() {
154
- if (__classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_hasStackingContext, "f")) {
155
- __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_scrollableHostService, "f")
156
- .watchScrollableHostClipPathChanges(__classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_elementRef, "f"))
157
- .pipe(takeUntil(__classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_ngUnsubscribe, "f")))
158
- .subscribe((clipPath) => {
159
- __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_clipPath, "f").next(clipPath);
160
- });
161
- }
162
- }
163
- ngOnDestroy() {
164
- __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_ngUnsubscribe, "f").next();
165
- __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_ngUnsubscribe, "f").complete();
166
- Object.keys(__classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_rowDeleteContents, "f")).forEach((id) => {
167
- __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_instances, "m", _SkyAgGridRowDeleteDirective_destroyRowDelete).call(this, id);
168
- });
169
- }
170
- cancelRowDelete(row) {
171
- if (row.id) {
172
- __classPrivateFieldSet(this, _SkyAgGridRowDeleteDirective_rowDeleteConfigs, __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_rowDeleteConfigs, "f").filter((config) => config.id !== row.id), "f");
173
- this.rowDeleteCancel.emit({ id: row.id });
174
- __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_instances, "m", _SkyAgGridRowDeleteDirective_destroyRowDelete).call(this, row.id);
175
- }
176
- }
177
- confirmRowDelete(row) {
178
- if (row.id) {
179
- const rowConfig = __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_rowDeleteConfigs, "f").find((config) => config.id === row.id);
180
- if (rowConfig) {
181
- rowConfig.pending = true;
182
- this.rowDeleteConfirm.emit({ id: row.id });
183
- }
184
- }
185
- }
186
- getRowDeleteItem(row) {
187
- return __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_rowDeleteConfigs, "f").find((rowDelete) => rowDelete.id === row.id);
188
- }
189
- }
190
- _SkyAgGridRowDeleteDirective_rowDeleteConfigs = new WeakMap(), _SkyAgGridRowDeleteDirective_ngUnsubscribe = new WeakMap(), _SkyAgGridRowDeleteDirective_rowDeleteComponent = new WeakMap(), _SkyAgGridRowDeleteDirective_rowDeleteContents = new WeakMap(), _SkyAgGridRowDeleteDirective_rowDeleteIdsInternal = new WeakMap(), _SkyAgGridRowDeleteDirective_affixService = new WeakMap(), _SkyAgGridRowDeleteDirective_changeDetector = new WeakMap(), _SkyAgGridRowDeleteDirective_elementRef = new WeakMap(), _SkyAgGridRowDeleteDirective_overlayService = new WeakMap(), _SkyAgGridRowDeleteDirective_viewContainerRef = new WeakMap(), _SkyAgGridRowDeleteDirective_scrollableHostService = new WeakMap(), _SkyAgGridRowDeleteDirective_clipPath = new WeakMap(), _SkyAgGridRowDeleteDirective_zIndex = new WeakMap(), _SkyAgGridRowDeleteDirective_hasStackingContext = new WeakMap(), _SkyAgGridRowDeleteDirective_instances = new WeakSet(), _SkyAgGridRowDeleteDirective_affixToRow = function _SkyAgGridRowDeleteDirective_affixToRow(affixer, id) {
191
- let rowElement = __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_elementRef, "f").nativeElement.querySelector(`
192
- [row-id="${id}"] div[aria-colindex="1"],
193
- .ag-row.sky-ag-grid-row-${id} div[aria-colindex="1"]
194
- `);
195
- // This covers cases where AG Grid places the column index on an inner element (such as with the `enableCellTextSelection` option)
196
- // This appears to have been fixed by AG Grid in version 24 and so it is not testable after that version.
197
- /* istanbul ignore if */
198
- if (!rowElement) {
199
- const columns = __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_elementRef, "f").nativeElement.querySelectorAll('[row-id="' + id + '"] > div');
200
- for (let i = 0; i < columns.length; i++) {
201
- if (columns[i].querySelector('[aria-colindex="1"]')) {
202
- rowElement = columns[i];
203
- break;
204
- }
205
- }
206
- }
207
- affixer.affixTo(rowElement, {
208
- autoFitContext: SkyAffixAutoFitContext.Viewport,
209
- isSticky: true,
210
- placement: 'above',
211
- verticalAlignment: 'top',
212
- horizontalAlignment: 'left',
213
- enableAutoFit: false,
214
- });
215
- }, _SkyAgGridRowDeleteDirective_destroyRowDelete = function _SkyAgGridRowDeleteDirective_destroyRowDelete(id) {
216
- const rowDeleteContents = __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_rowDeleteContents, "f")[id];
217
- /* sanity check */
218
- /* istanbul ignore else */
219
- if (rowDeleteContents) {
220
- rowDeleteContents.affixer.destroy();
221
- __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_overlayService, "f").close(rowDeleteContents.overlay);
222
- delete __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_rowDeleteContents, "f")[id];
223
- __classPrivateFieldSet(this, _SkyAgGridRowDeleteDirective_rowDeleteConfigs, __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_rowDeleteConfigs, "f").filter((config) => config.id !== id), "f");
224
- __classPrivateFieldSet(this, _SkyAgGridRowDeleteDirective_rowDeleteIdsInternal, this.rowDeleteIds?.filter((arrayId) => arrayId !== id), "f");
225
- this.rowDeleteIdsChange.emit(__classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_rowDeleteIdsInternal, "f"));
226
- }
227
- }, _SkyAgGridRowDeleteDirective_updateRowDeleteStates = function _SkyAgGridRowDeleteDirective_updateRowDeleteStates() {
228
- __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_rowDeleteConfigs, "f").forEach((config) => {
229
- if (!this.agGrid?.api.getRowNode(config.id)) {
230
- __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_instances, "m", _SkyAgGridRowDeleteDirective_destroyRowDelete).call(this, config.id);
231
- }
232
- else {
233
- // We must reaffix things when the data changes because the rows rerender and the previous element that the delete was affixed
234
- // to is destroyed.
235
- __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_instances, "m", _SkyAgGridRowDeleteDirective_affixToRow).call(this, __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_rowDeleteContents, "f")[config.id].affixer, config.id);
236
- }
237
- });
238
- __classPrivateFieldGet(this, _SkyAgGridRowDeleteDirective_changeDetector, "f").markForCheck();
239
- };
240
- SkyAgGridRowDeleteDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyAgGridRowDeleteDirective, deps: [{ token: i1.SkyAffixService }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.SkyOverlayService }, { token: i0.ViewContainerRef }, { token: i1.SkyScrollableHostService }, { token: SKY_STACKING_CONTEXT, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
241
- SkyAgGridRowDeleteDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: SkyAgGridRowDeleteDirective, selector: "[skyAgGridRowDelete]", inputs: { rowDeleteIds: "rowDeleteIds" }, outputs: { rowDeleteCancel: "rowDeleteCancel", rowDeleteConfirm: "rowDeleteConfirm", rowDeleteIdsChange: "rowDeleteIdsChange" }, queries: [{ propertyName: "agGrid", first: true, predicate: AgGridAngular, descendants: true }], ngImport: i0 });
242
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyAgGridRowDeleteDirective, decorators: [{
243
- type: Directive,
244
- args: [{
245
- selector: '[skyAgGridRowDelete]',
246
- }]
247
- }], ctorParameters: function () { return [{ type: i1.SkyAffixService }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1.SkyOverlayService }, { type: i0.ViewContainerRef }, { type: i1.SkyScrollableHostService }, { type: undefined, decorators: [{
248
- type: Optional
249
- }, {
250
- type: Inject,
251
- args: [SKY_STACKING_CONTEXT]
252
- }] }]; }, propDecorators: { rowDeleteIds: [{
253
- type: Input
254
- }], rowDeleteCancel: [{
255
- type: Output
256
- }], rowDeleteConfirm: [{
257
- type: Output
258
- }], rowDeleteIdsChange: [{
259
- type: Output
260
- }], agGrid: [{
261
- type: ContentChild,
262
- args: [AgGridAngular]
263
- }] } });
264
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWctZ3JpZC1yb3ctZGVsZXRlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9hZy1ncmlkL3NyYy9saWIvbW9kdWxlcy9hZy1ncmlkL2FnLWdyaWQtcm93LWRlbGV0ZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBSUwsWUFBWSxFQUNaLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxRQUFRLEVBQ1IsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsc0JBQXNCLEdBTXZCLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVoRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7OztBQVM3RSxNQUFNLE9BQU8sMkJBQTJCO0lBR3RDOztPQUVHO0lBQ0gsSUFDVyxZQUFZLENBQUMsS0FBMkI7UUFDakQsdUJBQUEsSUFBSSxxREFBeUIsS0FBSyxNQUFBLENBQUM7UUFFbkMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNWLEtBQUssTUFBTSxNQUFNLElBQUksdUJBQUEsSUFBSSxxREFBa0IsRUFBRTtnQkFDM0MsdUJBQUEsSUFBSSw2RkFBa0IsTUFBdEIsSUFBSSxFQUFtQixNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDbkM7WUFFRCx1QkFBQSxJQUFJLG1EQUFnQixDQUFDLFlBQVksRUFBRSxDQUFDO1lBRXBDLE9BQU87U0FDUjtRQUVELEtBQUssTUFBTSxFQUFFLElBQUksS0FBSyxFQUFFO1lBQ3RC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QkFxSkksUUFBUTs7MEJBQ1IsTUFBTTsyQkFBQyxvQkFBb0I7NENBOUluQixZQUFZO3NCQUR0QixLQUFLO2dCQXFHQyxlQUFlO3NCQURyQixNQUFNO2dCQU9BLGdCQUFnQjtzQkFEdEIsTUFBTTtnQkFPQSxrQkFBa0I7c0JBRHhCLE1BQU07Z0JBTUEsTUFBTTtzQkFEWixZQUFZO3VCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29udGVudENoaWxkLFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIFNLWV9TVEFDS0lOR19DT05URVhULFxuICBTa3lBZmZpeEF1dG9GaXRDb250ZXh0LFxuICBTa3lBZmZpeFNlcnZpY2UsXG4gIFNreUFmZml4ZXIsXG4gIFNreU92ZXJsYXlTZXJ2aWNlLFxuICBTa3lTY3JvbGxhYmxlSG9zdFNlcnZpY2UsXG4gIFNreVN0YWNraW5nQ29udGV4dCxcbn0gZnJvbSAnQHNreXV4L2NvcmUnO1xuXG5pbXBvcnQgeyBBZ0dyaWRBbmd1bGFyIH0gZnJvbSAnYWctZ3JpZC1hbmd1bGFyJztcbmltcG9ydCB7IFJvd05vZGUgfSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgU2t5QWdHcmlkUm93RGVsZXRlQ29tcG9uZW50IH0gZnJvbSAnLi9hZy1ncmlkLXJvdy1kZWxldGUuY29tcG9uZW50JztcbmltcG9ydCB7IFNreUFnR3JpZFJvd0RlbGV0ZUNhbmNlbEFyZ3MgfSBmcm9tICcuL3R5cGVzL2FnLWdyaWQtcm93LWRlbGV0ZS1jYW5jZWwtYXJncyc7XG5pbXBvcnQgeyBTa3lBZ0dyaWRSb3dEZWxldGVDb25maWcgfSBmcm9tICcuL3R5cGVzL2FnLWdyaWQtcm93LWRlbGV0ZS1jb25maWcnO1xuaW1wb3J0IHsgU2t5QWdHcmlkUm93RGVsZXRlQ29uZmlybUFyZ3MgfSBmcm9tICcuL3R5cGVzL2FnLWdyaWQtcm93LWRlbGV0ZS1jb25maXJtLWFyZ3MnO1xuaW1wb3J0IHsgU2t5QWdHcmlkUm93RGVsZXRlQ29udGVudHMgfSBmcm9tICcuL3R5cGVzL2FnLWdyaWQtcm93LWRlbGV0ZS1jb250ZW50cyc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tza3lBZ0dyaWRSb3dEZWxldGVdJyxcbn0pXG5leHBvcnQgY2xhc3MgU2t5QWdHcmlkUm93RGVsZXRlRGlyZWN0aXZlXG4gIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95XG57XG4gIC8qKlxuICAgKiBUaGUgSURzIG9mIHRoZSBkYXRhIGluIHRoZSByb3dzIHdoZXJlIHRoZSBpbmxpbmUgZGVsZXRlIGFwcGVhcnMuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHJvd0RlbGV0ZUlkcyh2YWx1ZTogc3RyaW5nW10gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNyb3dEZWxldGVJZHNJbnRlcm5hbCA9IHZhbHVlO1xuXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgZm9yIChjb25zdCBjb25maWcgb2YgdGhpcy4jcm93RGVsZXRlQ29uZmlncykge1xuICAgICAgICB0aGlzLiNkZXN0cm95Um93RGVsZXRlKGNvbmZpZy5pZCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBpZCBvZiB2YWx1ZSkge1xuICAgICAgY29uc3QgZXhpc3RpbmdDb25maWcgPSB0aGlzLiNyb3dEZWxldGVDb25maWdzLmZpbmQoXG4gICAgICAgIChjb25maWcpID0+IGNvbmZpZy5pZCA9PT0gaWRcbiAgICAgICk7XG4gICAgICBpZiAoZXhpc3RpbmdDb25maWcpIHtcbiAgICAgICAgZXhpc3RpbmdDb25maWcucGVuZGluZyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLiNyb3dEZWxldGVDb21wb25lbnQgJiYgdGhpcy5hZ0dyaWQpIHtcbiAgICAgICAgdGhpcy4jcm93RGVsZXRlQ29uZmlncy5wdXNoKHtcbiAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgcGVuZGluZzogZmFsc2UsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IG92ZXJsYXkgPSB0aGlzLiNvdmVybGF5U2VydmljZS5jcmVhdGUoe1xuICAgICAgICAgIGVuYWJsZVNjcm9sbDogdHJ1ZSxcbiAgICAgICAgICBzaG93QmFja2Ryb3A6IGZhbHNlLFxuICAgICAgICAgIGNsb3NlT25OYXZpZ2F0aW9uOiB0cnVlLFxuICAgICAgICAgIGVuYWJsZUNsb3NlOiBmYWxzZSxcbiAgICAgICAgICBlbmFibGVQb2ludGVyRXZlbnRzOiB0cnVlLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy4jcm93RGVsZXRlQ29tcG9uZW50LmlubGluZURlbGV0ZVRlbXBsYXRlUmVmKSB7XG4gICAgICAgICAgb3ZlcmxheS5hdHRhY2hUZW1wbGF0ZShcbiAgICAgICAgICAgIHRoaXMuI3Jvd0RlbGV0ZUNvbXBvbmVudC5pbmxpbmVEZWxldGVUZW1wbGF0ZVJlZixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgJGltcGxpY2l0OiB0aGlzLmFnR3JpZC5hcGkuZ2V0Um93Tm9kZShpZCksXG4gICAgICAgICAgICAgIHRhYmxlV2lkdGg6ICgpID0+XG4gICAgICAgICAgICAgICAgdGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5za3ktYWctZ3JpZCcpXG4gICAgICAgICAgICAgICAgICAub2Zmc2V0V2lkdGgsXG4gICAgICAgICAgICAgIGdldFJvd0RlbGV0ZUl0ZW06IChyb3c6IFJvd05vZGUpID0+IHRoaXMuZ2V0Um93RGVsZXRlSXRlbShyb3cpLFxuICAgICAgICAgICAgICBjYW5jZWxSb3dEZWxldGU6IChyb3c6IFJvd05vZGUpID0+IHRoaXMuY2FuY2VsUm93RGVsZXRlKHJvdyksXG4gICAgICAgICAgICAgIGNvbmZpcm1Sb3dEZWxldGU6IChyb3c6IFJvd05vZGUpID0+IHRoaXMuY29uZmlybVJvd0RlbGV0ZShyb3cpLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogV2UgYXJlIG1hbnVhbGx5IHNldHRpbmcgdGhlIHotaW5kZXggaGVyZSBiZWNhdXNlIG92ZXJsYXlzIHdpbGwgYWx3YXlzIGJlIG9uIHRvcCBvZlxuICAgICAgICAgKiB0aGUgb21uaWJhci4gVGhlIGRlZmF1bHQgbWFudWFsIHNldHRpbmcgaXMgMiBsZXNzIHRoYW4gdGhlIG9tbmliYXIncyB6LWluZGV4IG9mIDEwMDAgYW5kIG9uZSBsZXNzIHRoYW5cbiAgICAgICAgICogdGhlIGhlYWRlciByb3cncyB2aWV3a2VlcGVyIHdoaWNoIGlzIDk5OS4gV2UgZGlzY3Vzc2VkIGNoYW5naW5nIHRoZSBvdmVybGF5IHNlcnZpY2UgdG8gYWxsb3cgZm9yIHRoaXNcbiAgICAgICAgICogYnV0IGRlY2lkZWQgYWdhaW5zdCB0aGF0IGNoYW5nZSBhdCB0aGlzIHRpbWUgZHVlIHRvIGl0cyBuaWNoZSBuYXR1cmUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLiN6SW5kZXhcbiAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgLnN1YnNjcmliZSgoekluZGV4KSA9PiB7XG4gICAgICAgICAgICBvdmVybGF5LmNvbXBvbmVudFJlZi5pbnN0YW5jZS56SW5kZXggPSB6SW5kZXgudG9TdHJpbmcoMTApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB0aGlzLiNjbGlwUGF0aFxuICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKChjbGlwUGF0aCkgPT4ge1xuICAgICAgICAgICAgb3ZlcmxheS5jb21wb25lbnRSZWYuaW5zdGFuY2UudXBkYXRlQ2xpcFBhdGgoY2xpcFBhdGgpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlubGluZURlbGV0ZVJlZiA9IHRoaXMuI3Jvd0RlbGV0ZUNvbXBvbmVudD8uaW5saW5lRGVsZXRlUmVmc1xuICAgICAgICAgICAgPy50b0FycmF5KClcbiAgICAgICAgICAgIC5maW5kKFxuICAgICAgICAgICAgICAoZWxSZWYpID0+IGVsUmVmLm5hdGl2ZUVsZW1lbnQuaWQgPT09ICdyb3ctZGVsZXRlLXJlZi0nICsgaWRcbiAgICAgICAgICAgICkgYXMgRWxlbWVudFJlZjtcbiAgICAgICAgICBjb25zdCBhZmZpeGVyID0gdGhpcy4jYWZmaXhTZXJ2aWNlLmNyZWF0ZUFmZml4ZXIoaW5saW5lRGVsZXRlUmVmKTtcblxuICAgICAgICAgIHRoaXMuI2FmZml4VG9Sb3coYWZmaXhlciwgaWQpO1xuXG4gICAgICAgICAgdGhpcy4jcm93RGVsZXRlQ29udGVudHNbaWRdID0ge1xuICAgICAgICAgICAgYWZmaXhlcjogYWZmaXhlcixcbiAgICAgICAgICAgIG92ZXJsYXk6IG92ZXJsYXksXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjb25maWcgb2YgdGhpcy4jcm93RGVsZXRlQ29uZmlncykge1xuICAgICAgaWYgKHZhbHVlLmluZGV4T2YoY29uZmlnLmlkKSA8IDApIHtcbiAgICAgICAgdGhpcy4jZGVzdHJveVJvd0RlbGV0ZShjb25maWcuaWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHVibGljIGdldCByb3dEZWxldGVJZHMoKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNyb3dEZWxldGVJZHNJbnRlcm5hbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyBhIGBTa3lBZ0dyaWRSb3dEZWxldGVDYW5jZWxBcmdzYCBvYmplY3Qgd2hlbiBhIHJvdydzIGlubGluZSBkZWxldGUgaXMgY2FuY2VsbGVkLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyByb3dEZWxldGVDYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPFNreUFnR3JpZFJvd0RlbGV0ZUNhbmNlbEFyZ3M+KCk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGEgYFNreUFnR3JpZFJvd0RlbGV0ZUNvbmZpcm1BcmdzYCBvYmplY3Qgd2hlbiBhIHJvdydzIGlubGluZSBkZWxldGUgaXMgY29uZmlybWVkLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyByb3dEZWxldGVDb25maXJtID0gbmV3IEV2ZW50RW1pdHRlcjxTa3lBZ0dyaWRSb3dEZWxldGVDb25maXJtQXJncz4oKTtcblxuICAvKipcbiAgICogRW1pdHMgd2hlbiB0aGUgbGlzdCBvZiBpZHMgb2YgdGhlIGRhdGEgaW4gdGhlIHJvd3Mgd2hlcmUgaW5saW5lIGRlbGV0ZXMgYXJlIHNob3duIGNoYW5nZXMuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIHJvd0RlbGV0ZUlkc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KCk7XG5cbiAgI3Jvd0RlbGV0ZUNvbmZpZ3M6IFNreUFnR3JpZFJvd0RlbGV0ZUNvbmZpZ1tdID0gW107XG5cbiAgQENvbnRlbnRDaGlsZChBZ0dyaWRBbmd1bGFyKVxuICBwdWJsaWMgYWdHcmlkOiBBZ0dyaWRBbmd1bGFyIHwgdW5kZWZpbmVkO1xuXG4gICNuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgI3Jvd0RlbGV0ZUNvbXBvbmVudDogU2t5QWdHcmlkUm93RGVsZXRlQ29tcG9uZW50IHwgdW5kZWZpbmVkO1xuICAjcm93RGVsZXRlQ29udGVudHM6IHsgW2lkOiBzdHJpbmddOiBTa3lBZ0dyaWRSb3dEZWxldGVDb250ZW50cyB9ID0ge307XG5cbiAgI3Jvd0RlbGV0ZUlkc0ludGVybmFsOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbiAgI2FmZml4U2VydmljZTogU2t5QWZmaXhTZXJ2aWNlO1xuICAjY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmO1xuICAjZWxlbWVudFJlZjogRWxlbWVudFJlZjtcbiAgI292ZXJsYXlTZXJ2aWNlOiBTa3lPdmVybGF5U2VydmljZTtcbiAgI3ZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWY7XG4gICNzY3JvbGxhYmxlSG9zdFNlcnZpY2U6IFNreVNjcm9sbGFibGVIb3N0U2VydmljZTtcbiAgI2NsaXBQYXRoID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gICN6SW5kZXggPSBuZXcgQmVoYXZpb3JTdWJqZWN0KDk5OCk7XG4gICNoYXNTdGFja2luZ0NvbnRleHQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgYWZmaXhTZXJ2aWNlOiBTa3lBZmZpeFNlcnZpY2UsXG4gICAgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgb3ZlcmxheVNlcnZpY2U6IFNreU92ZXJsYXlTZXJ2aWNlLFxuICAgIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgc2Nyb2xsYWJsZUhvc3RTZXJ2aWNlOiBTa3lTY3JvbGxhYmxlSG9zdFNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KFNLWV9TVEFDS0lOR19DT05URVhUKVxuICAgIHN0YWNraW5nQ29udGV4dD86IFNreVN0YWNraW5nQ29udGV4dFxuICApIHtcbiAgICB0aGlzLiNhZmZpeFNlcnZpY2UgPSBhZmZpeFNlcnZpY2U7XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IgPSBjaGFuZ2VEZXRlY3RvcjtcbiAgICB0aGlzLiNlbGVtZW50UmVmID0gZWxlbWVudFJlZjtcbiAgICB0aGlzLiNvdmVybGF5U2VydmljZSA9IG92ZXJsYXlTZXJ2aWNlO1xuICAgIHRoaXMuI3ZpZXdDb250YWluZXJSZWYgPSB2aWV3Q29udGFpbmVyUmVmO1xuICAgIHRoaXMuI3Njcm9sbGFibGVIb3N0U2VydmljZSA9IHNjcm9sbGFibGVIb3N0U2VydmljZTtcbiAgICB0aGlzLiNoYXNTdGFja2luZ0NvbnRleHQgPSAhIXN0YWNraW5nQ29udGV4dDtcbiAgICBpZiAoc3RhY2tpbmdDb250ZXh0KSB7XG4gICAgICBzdGFja2luZ0NvbnRleHQuekluZGV4XG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgLnN1YnNjcmliZSgoekluZGV4KSA9PiB7XG4gICAgICAgICAgdGhpcy4jekluZGV4Lm5leHQoekluZGV4KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLiNyb3dEZWxldGVDb21wb25lbnQgPSB0aGlzLiN2aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChcbiAgICAgIFNreUFnR3JpZFJvd0RlbGV0ZUNvbXBvbmVudFxuICAgICkuaW5zdGFuY2U7XG5cbiAgICBpZiAodGhpcy5hZ0dyaWQpIHtcbiAgICAgIHRoaXMuYWdHcmlkLnJvd0RhdGFVcGRhdGVkXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy4jdXBkYXRlUm93RGVsZXRlU3RhdGVzKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICB0aGlzLmFnR3JpZC5zb3J0Q2hhbmdlZFxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuI3VwZGF0ZVJvd0RlbGV0ZVN0YXRlcygpO1xuICAgICAgICB9KTtcblxuICAgICAgdGhpcy5hZ0dyaWQuZmlsdGVyQ2hhbmdlZFxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuI3VwZGF0ZVJvd0RlbGV0ZVN0YXRlcygpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLiNoYXNTdGFja2luZ0NvbnRleHQpIHtcbiAgICAgIHRoaXMuI3Njcm9sbGFibGVIb3N0U2VydmljZVxuICAgICAgICAud2F0Y2hTY3JvbGxhYmxlSG9zdENsaXBQYXRoQ2hhbmdlcyh0aGlzLiNlbGVtZW50UmVmKVxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKGNsaXBQYXRoKSA9PiB7XG4gICAgICAgICAgdGhpcy4jY2xpcFBhdGgubmV4dChjbGlwUGF0aCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG5cbiAgICBPYmplY3Qua2V5cyh0aGlzLiNyb3dEZWxldGVDb250ZW50cykuZm9yRWFjaCgoaWQpID0+IHtcbiAgICAgIHRoaXMuI2Rlc3Ryb3lSb3dEZWxldGUoaWQpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGNhbmNlbFJvd0RlbGV0ZShyb3c6IFJvd05vZGUpOiB2b2lkIHtcbiAgICBpZiAocm93LmlkKSB7XG4gICAgICB0aGlzLiNyb3dEZWxldGVDb25maWdzID0gdGhpcy4jcm93RGVsZXRlQ29uZmlncy5maWx0ZXIoXG4gICAgICAgIChjb25maWcpID0+IGNvbmZpZy5pZCAhPT0gcm93LmlkXG4gICAgICApO1xuICAgICAgdGhpcy5yb3dEZWxldGVDYW5jZWwuZW1pdCh7IGlkOiByb3cuaWQgfSk7XG5cbiAgICAgIHRoaXMuI2Rlc3Ryb3lSb3dEZWxldGUocm93LmlkKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY29uZmlybVJvd0RlbGV0ZShyb3c6IFJvd05vZGUpOiB2b2lkIHtcbiAgICBpZiAocm93LmlkKSB7XG4gICAgICBjb25zdCByb3dDb25maWcgPSB0aGlzLiNyb3dEZWxldGVDb25maWdzLmZpbmQoXG4gICAgICAgIChjb25maWcpID0+IGNvbmZpZy5pZCA9PT0gcm93LmlkXG4gICAgICApO1xuXG4gICAgICBpZiAocm93Q29uZmlnKSB7XG4gICAgICAgIHJvd0NvbmZpZy5wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yb3dEZWxldGVDb25maXJtLmVtaXQoeyBpZDogcm93LmlkIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRSb3dEZWxldGVJdGVtKHJvdzogUm93Tm9kZSk6IFNreUFnR3JpZFJvd0RlbGV0ZUNvbmZpZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI3Jvd0RlbGV0ZUNvbmZpZ3MuZmluZCgocm93RGVsZXRlKSA9PiByb3dEZWxldGUuaWQgPT09IHJvdy5pZCk7XG4gIH1cblxuICAjYWZmaXhUb1JvdyhhZmZpeGVyOiBTa3lBZmZpeGVyLCBpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgbGV0IHJvd0VsZW1lbnQ6IEhUTUxFbGVtZW50ID0gdGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYFxuICAgICAgW3Jvdy1pZD1cIiR7aWR9XCJdIGRpdlthcmlhLWNvbGluZGV4PVwiMVwiXSxcbiAgICAgIC5hZy1yb3cuc2t5LWFnLWdyaWQtcm93LSR7aWR9IGRpdlthcmlhLWNvbGluZGV4PVwiMVwiXVxuICAgIGApO1xuXG4gICAgLy8gVGhpcyBjb3ZlcnMgY2FzZXMgd2hlcmUgQUcgR3JpZCBwbGFjZXMgdGhlIGNvbHVtbiBpbmRleCBvbiBhbiBpbm5lciBlbGVtZW50IChzdWNoIGFzIHdpdGggdGhlIGBlbmFibGVDZWxsVGV4dFNlbGVjdGlvbmAgb3B0aW9uKVxuICAgIC8vIFRoaXMgYXBwZWFycyB0byBoYXZlIGJlZW4gZml4ZWQgYnkgQUcgR3JpZCBpbiB2ZXJzaW9uIDI0IGFuZCBzbyBpdCBpcyBub3QgdGVzdGFibGUgYWZ0ZXIgdGhhdCB2ZXJzaW9uLlxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghcm93RWxlbWVudCkge1xuICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICAnW3Jvdy1pZD1cIicgKyBpZCArICdcIl0gPiBkaXYnXG4gICAgICApO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGNvbHVtbnNbaV0ucXVlcnlTZWxlY3RvcignW2FyaWEtY29saW5kZXg9XCIxXCJdJykpIHtcbiAgICAgICAgICByb3dFbGVtZW50ID0gY29sdW1uc1tpXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGFmZml4ZXIuYWZmaXhUbyhyb3dFbGVtZW50LCB7XG4gICAgICBhdXRvRml0Q29udGV4dDogU2t5QWZmaXhBdXRvRml0Q29udGV4dC5WaWV3cG9ydCxcbiAgICAgIGlzU3RpY2t5OiB0cnVlLFxuICAgICAgcGxhY2VtZW50OiAnYWJvdmUnLFxuICAgICAgdmVydGljYWxBbGlnbm1lbnQ6ICd0b3AnLFxuICAgICAgaG9yaXpvbnRhbEFsaWdubWVudDogJ2xlZnQnLFxuICAgICAgZW5hYmxlQXV0b0ZpdDogZmFsc2UsXG4gICAgfSk7XG4gIH1cblxuICAjZGVzdHJveVJvd0RlbGV0ZShpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgcm93RGVsZXRlQ29udGVudHMgPSB0aGlzLiNyb3dEZWxldGVDb250ZW50c1tpZF07XG5cbiAgICAvKiBzYW5pdHkgY2hlY2sgKi9cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChyb3dEZWxldGVDb250ZW50cykge1xuICAgICAgcm93RGVsZXRlQ29udGVudHMuYWZmaXhlci5kZXN0cm95KCk7XG4gICAgICB0aGlzLiNvdmVybGF5U2VydmljZS5jbG9zZShyb3dEZWxldGVDb250ZW50cy5vdmVybGF5KTtcbiAgICAgIGRlbGV0ZSB0aGlzLiNyb3dEZWxldGVDb250ZW50c1tpZF07XG4gICAgICB0aGlzLiNyb3dEZWxldGVDb25maWdzID0gdGhpcy4jcm93RGVsZXRlQ29uZmlncy5maWx0ZXIoXG4gICAgICAgIChjb25maWcpID0+IGNvbmZpZy5pZCAhPT0gaWRcbiAgICAgICk7XG4gICAgICB0aGlzLiNyb3dEZWxldGVJZHNJbnRlcm5hbCA9IHRoaXMucm93RGVsZXRlSWRzPy5maWx0ZXIoXG4gICAgICAgIChhcnJheUlkKSA9PiBhcnJheUlkICE9PSBpZFxuICAgICAgKTtcbiAgICAgIHRoaXMucm93RGVsZXRlSWRzQ2hhbmdlLmVtaXQodGhpcy4jcm93RGVsZXRlSWRzSW50ZXJuYWwpO1xuICAgIH1cbiAgfVxuXG4gICN1cGRhdGVSb3dEZWxldGVTdGF0ZXMoKTogdm9pZCB7XG4gICAgdGhpcy4jcm93RGVsZXRlQ29uZmlncy5mb3JFYWNoKChjb25maWc6IFNreUFnR3JpZFJvd0RlbGV0ZUNvbmZpZykgPT4ge1xuICAgICAgaWYgKCF0aGlzLmFnR3JpZD8uYXBpLmdldFJvd05vZGUoY29uZmlnLmlkKSkge1xuICAgICAgICB0aGlzLiNkZXN0cm95Um93RGVsZXRlKGNvbmZpZy5pZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBXZSBtdXN0IHJlYWZmaXggdGhpbmdzIHdoZW4gdGhlIGRhdGEgY2hhbmdlcyBiZWNhdXNlIHRoZSByb3dzIHJlcmVuZGVyIGFuZCB0aGUgcHJldmlvdXMgZWxlbWVudCB0aGF0IHRoZSBkZWxldGUgd2FzIGFmZml4ZWRcbiAgICAgICAgLy8gdG8gaXMgZGVzdHJveWVkLlxuICAgICAgICB0aGlzLiNhZmZpeFRvUm93KHRoaXMuI3Jvd0RlbGV0ZUNvbnRlbnRzW2NvbmZpZy5pZF0uYWZmaXhlciwgY29uZmlnLmlkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxufVxuIl19
@@ -1,247 +0,0 @@
1
- var _SkyAgGridWrapperComponent_instances, _SkyAgGridWrapperComponent_isInEditMode_get, _SkyAgGridWrapperComponent__viewkeeperClasses, _SkyAgGridWrapperComponent_agGridService, _SkyAgGridWrapperComponent_ngUnsubscribe, _SkyAgGridWrapperComponent_themeSvc, _SkyAgGridWrapperComponent_wrapperClasses, _SkyAgGridWrapperComponent_currentTheme, _SkyAgGridWrapperComponent_adapterService, _SkyAgGridWrapperComponent_changeDetector, _SkyAgGridWrapperComponent_parentChangeDetector, _SkyAgGridWrapperComponent_elementRef, _SkyAgGridWrapperComponent_document, _SkyAgGridWrapperComponent_mutationObserverService, _SkyAgGridWrapperComponent_hasEditableClass, _SkyAgGridWrapperComponent_moveHorizontalScroll, _SkyAgGridWrapperComponent_updateGridTheme;
2
- import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
3
- import { DOCUMENT } from '@angular/common';
4
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ElementRef, HostBinding, inject, } from '@angular/core';
5
- import { SkyMutationObserverService } from '@skyux/core';
6
- import { SkyThemeService } from '@skyux/theme';
7
- import { AgGridAngular } from 'ag-grid-angular';
8
- import { BehaviorSubject, Subject } from 'rxjs';
9
- import { take, takeUntil } from 'rxjs/operators';
10
- import { SkyAgGridAdapterService } from './ag-grid-adapter.service';
11
- import { SkyAgGridService } from './ag-grid.service';
12
- import * as i0 from "@angular/core";
13
- import * as i1 from "@angular/common";
14
- import * as i2 from "@skyux/core";
15
- let idIndex = 0;
16
- export class SkyAgGridWrapperComponent {
17
- get viewkeeperClasses() {
18
- return __classPrivateFieldGet(this, _SkyAgGridWrapperComponent__viewkeeperClasses, "f");
19
- }
20
- set viewkeeperClasses(value) {
21
- __classPrivateFieldSet(this, _SkyAgGridWrapperComponent__viewkeeperClasses, value, "f");
22
- __classPrivateFieldGet(this, _SkyAgGridWrapperComponent_changeDetector, "f").markForCheck();
23
- }
24
- constructor() {
25
- _SkyAgGridWrapperComponent_instances.add(this);
26
- this.isNormalLayout = false;
27
- _SkyAgGridWrapperComponent__viewkeeperClasses.set(this, []);
28
- _SkyAgGridWrapperComponent_agGridService.set(this, inject(SkyAgGridService));
29
- _SkyAgGridWrapperComponent_ngUnsubscribe.set(this, new Subject());
30
- _SkyAgGridWrapperComponent_themeSvc.set(this, inject(SkyThemeService, {
31
- optional: true,
32
- }));
33
- _SkyAgGridWrapperComponent_wrapperClasses.set(this, new BehaviorSubject([
34
- `ag-theme-sky-data-grid-default`,
35
- ]));
36
- _SkyAgGridWrapperComponent_currentTheme.set(this, undefined);
37
- _SkyAgGridWrapperComponent_adapterService.set(this, inject(SkyAgGridAdapterService));
38
- _SkyAgGridWrapperComponent_changeDetector.set(this, inject(ChangeDetectorRef));
39
- _SkyAgGridWrapperComponent_parentChangeDetector.set(this, inject(ChangeDetectorRef, {
40
- optional: true,
41
- skipSelf: true,
42
- }));
43
- _SkyAgGridWrapperComponent_elementRef.set(this, inject(ElementRef));
44
- _SkyAgGridWrapperComponent_document.set(this, inject(DOCUMENT));
45
- _SkyAgGridWrapperComponent_mutationObserverService.set(this, inject(SkyMutationObserverService));
46
- _SkyAgGridWrapperComponent_hasEditableClass.set(this, false);
47
- idIndex++;
48
- this.afterAnchorId = 'sky-ag-grid-nav-anchor-after-' + idIndex;
49
- this.beforeAnchorId = 'sky-ag-grid-nav-anchor-before-' + idIndex;
50
- this.gridId = 'sky-ag-grid-' + idIndex;
51
- this.wrapperClasses$ = __classPrivateFieldGet(this, _SkyAgGridWrapperComponent_wrapperClasses, "f").asObservable();
52
- }
53
- ngAfterContentInit() {
54
- if (this.agGrid) {
55
- const domLayout = this.agGrid.gridOptions?.domLayout;
56
- if (domLayout === 'autoHeight') {
57
- if (this.agGrid.gridOptions.context?.enableTopScroll) {
58
- this.viewkeeperClasses.push('.ag-header', '.ag-body-horizontal-scroll');
59
- }
60
- else {
61
- this.viewkeeperClasses.push('.ag-header');
62
- }
63
- }
64
- else if (domLayout === 'normal') {
65
- this.isNormalLayout = true;
66
- __classPrivateFieldGet(this, _SkyAgGridWrapperComponent_parentChangeDetector, "f")?.detectChanges();
67
- }
68
- this.agGrid.gridReady
69
- .pipe(takeUntil(__classPrivateFieldGet(this, _SkyAgGridWrapperComponent_ngUnsubscribe, "f")))
70
- .subscribe(() => {
71
- __classPrivateFieldGet(this, _SkyAgGridWrapperComponent_instances, "m", _SkyAgGridWrapperComponent_moveHorizontalScroll).call(this);
72
- });
73
- this.agGrid.firstDataRendered
74
- .pipe(takeUntil(__classPrivateFieldGet(this, _SkyAgGridWrapperComponent_ngUnsubscribe, "f")))
75
- .subscribe(() => {
76
- __classPrivateFieldGet(this, _SkyAgGridWrapperComponent_instances, "m", _SkyAgGridWrapperComponent_moveHorizontalScroll).call(this);
77
- });
78
- this.agGrid.rowDataUpdated
79
- .pipe(takeUntil(__classPrivateFieldGet(this, _SkyAgGridWrapperComponent_ngUnsubscribe, "f")))
80
- .subscribe(() => {
81
- __classPrivateFieldGet(this, _SkyAgGridWrapperComponent_instances, "m", _SkyAgGridWrapperComponent_moveHorizontalScroll).call(this);
82
- });
83
- this.agGrid.cellEditingStarted
84
- .pipe(takeUntil(__classPrivateFieldGet(this, _SkyAgGridWrapperComponent_ngUnsubscribe, "f")))
85
- .subscribe((params) => {
86
- if (params.colDef.type) {
87
- const types = Array.isArray(params.colDef.type)
88
- ? params.colDef.type
89
- : [params.colDef.type];
90
- const addClasses = types.map((t) => `sky-ag-grid-cell-editing-${t}`);
91
- __classPrivateFieldGet(this, _SkyAgGridWrapperComponent_wrapperClasses, "f").next([
92
- ...__classPrivateFieldGet(this, _SkyAgGridWrapperComponent_wrapperClasses, "f").getValue(),
93
- ...addClasses,
94
- ]);
95
- }
96
- });
97
- this.agGrid.cellEditingStopped
98
- .pipe(takeUntil(__classPrivateFieldGet(this, _SkyAgGridWrapperComponent_ngUnsubscribe, "f")))
99
- .subscribe(() => {
100
- __classPrivateFieldGet(this, _SkyAgGridWrapperComponent_wrapperClasses, "f").next(__classPrivateFieldGet(this, _SkyAgGridWrapperComponent_wrapperClasses, "f")
101
- .getValue()
102
- .filter((c) => c.startsWith('ag-theme-')));
103
- });
104
- }
105
- }
106
- ngOnDestroy() {
107
- __classPrivateFieldGet(this, _SkyAgGridWrapperComponent_ngUnsubscribe, "f").next();
108
- __classPrivateFieldGet(this, _SkyAgGridWrapperComponent_ngUnsubscribe, "f").complete();
109
- }
110
- ngOnInit() {
111
- __classPrivateFieldGet(this, _SkyAgGridWrapperComponent_themeSvc, "f")?.settingsChange
112
- .pipe(takeUntil(__classPrivateFieldGet(this, _SkyAgGridWrapperComponent_ngUnsubscribe, "f")))
113
- .subscribe((settings) => {
114
- __classPrivateFieldGet(this, _SkyAgGridWrapperComponent_instances, "m", _SkyAgGridWrapperComponent_updateGridTheme).call(this, settings.currentSettings);
115
- if (!__classPrivateFieldGet(this, _SkyAgGridWrapperComponent_currentTheme, "f")) {
116
- // Initial theme settings.
117
- __classPrivateFieldSet(this, _SkyAgGridWrapperComponent_currentTheme, settings.currentSettings, "f");
118
- }
119
- else if (this.agGrid?.api) {
120
- // On subsequent theme changes, we need to call the api to re-render the grid.
121
- __classPrivateFieldSet(this, _SkyAgGridWrapperComponent_currentTheme, settings.currentSettings, "f");
122
- this.agGrid.api.setHeaderHeight(__classPrivateFieldGet(this, _SkyAgGridWrapperComponent_agGridService, "f").getHeaderHeight());
123
- this.agGrid.api.resetRowHeights();
124
- this.agGrid.api.refreshCells();
125
- }
126
- });
127
- }
128
- ngAfterViewInit() {
129
- const agGridElement = __classPrivateFieldGet(this, _SkyAgGridWrapperComponent_elementRef, "f").nativeElement.querySelector('ag-grid-angular');
130
- const callback = () => {
131
- __classPrivateFieldSet(this, _SkyAgGridWrapperComponent_hasEditableClass, !!agGridElement?.classList.contains('sky-ag-grid-editable'), "f");
132
- __classPrivateFieldGet(this, _SkyAgGridWrapperComponent_instances, "m", _SkyAgGridWrapperComponent_updateGridTheme).call(this, __classPrivateFieldGet(this, _SkyAgGridWrapperComponent_currentTheme, "f"));
133
- };
134
- if (agGridElement) {
135
- const agGridClassObserver = __classPrivateFieldGet(this, _SkyAgGridWrapperComponent_mutationObserverService, "f").create(callback);
136
- agGridClassObserver.observe(agGridElement, {
137
- attributes: true,
138
- });
139
- __classPrivateFieldGet(this, _SkyAgGridWrapperComponent_ngUnsubscribe, "f").pipe(take(1)).subscribe(() => {
140
- agGridClassObserver.disconnect();
141
- });
142
- }
143
- setTimeout(callback);
144
- }
145
- /**
146
- * Prevent closing a modal when focused in AG Grid.
147
- */
148
- onKeyUpEscape($event) {
149
- $event.stopPropagation();
150
- this.agGrid?.api.stopEditing(true);
151
- }
152
- onGridKeydown(event) {
153
- if (this.agGrid && !__classPrivateFieldGet(this, _SkyAgGridWrapperComponent_instances, "a", _SkyAgGridWrapperComponent_isInEditMode_get) && event.key === 'Tab') {
154
- const idToFocus = event.shiftKey
155
- ? this.beforeAnchorId
156
- : this.afterAnchorId;
157
- __classPrivateFieldGet(this, _SkyAgGridWrapperComponent_adapterService, "f").setFocusedElementById(__classPrivateFieldGet(this, _SkyAgGridWrapperComponent_elementRef, "f").nativeElement, idToFocus);
158
- }
159
- }
160
- onAnchorFocus(event) {
161
- const relatedTarget = event.relatedTarget;
162
- const previousWasGrid = relatedTarget && !!__classPrivateFieldGet(this, _SkyAgGridWrapperComponent_elementRef, "f").nativeElement.contains(relatedTarget);
163
- if (this.agGrid && !previousWasGrid) {
164
- const firstColumn = this.agGrid.columnApi.getAllDisplayedColumns()[0];
165
- if (firstColumn) {
166
- this.agGrid.api.ensureColumnVisible(firstColumn);
167
- __classPrivateFieldGet(this, _SkyAgGridWrapperComponent_adapterService, "f").focusOnColumnHeader(__classPrivateFieldGet(this, _SkyAgGridWrapperComponent_elementRef, "f").nativeElement, firstColumn.getColId());
168
- }
169
- }
170
- }
171
- }
172
- _SkyAgGridWrapperComponent__viewkeeperClasses = new WeakMap(), _SkyAgGridWrapperComponent_agGridService = new WeakMap(), _SkyAgGridWrapperComponent_ngUnsubscribe = new WeakMap(), _SkyAgGridWrapperComponent_themeSvc = new WeakMap(), _SkyAgGridWrapperComponent_wrapperClasses = new WeakMap(), _SkyAgGridWrapperComponent_currentTheme = new WeakMap(), _SkyAgGridWrapperComponent_adapterService = new WeakMap(), _SkyAgGridWrapperComponent_changeDetector = new WeakMap(), _SkyAgGridWrapperComponent_parentChangeDetector = new WeakMap(), _SkyAgGridWrapperComponent_elementRef = new WeakMap(), _SkyAgGridWrapperComponent_document = new WeakMap(), _SkyAgGridWrapperComponent_mutationObserverService = new WeakMap(), _SkyAgGridWrapperComponent_hasEditableClass = new WeakMap(), _SkyAgGridWrapperComponent_instances = new WeakSet(), _SkyAgGridWrapperComponent_isInEditMode_get = function _SkyAgGridWrapperComponent_isInEditMode_get() {
173
- /* istanbul ignore else */
174
- if (this.agGrid && this.agGrid.api) {
175
- const primaryGridEditing = this.agGrid.api.getEditingCells().length > 0;
176
- if (primaryGridEditing) {
177
- return true;
178
- }
179
- else {
180
- let innerEditing = false;
181
- this.agGrid.api.forEachDetailGridInfo((detailGrid) => {
182
- if (detailGrid?.api && detailGrid.api.getEditingCells().length > 0) {
183
- innerEditing = true;
184
- }
185
- });
186
- return innerEditing;
187
- }
188
- }
189
- else {
190
- return false;
191
- }
192
- }, _SkyAgGridWrapperComponent_moveHorizontalScroll = function _SkyAgGridWrapperComponent_moveHorizontalScroll() {
193
- if (this.agGrid && this.agGrid.api) {
194
- const toTop = !!this.agGrid.gridOptions.context?.enableTopScroll;
195
- const root = __classPrivateFieldGet(this, _SkyAgGridWrapperComponent_elementRef, "f").nativeElement.querySelector('.ag-root');
196
- const header = root.querySelector('.ag-header');
197
- const floatingBottom = root.querySelector('.ag-floating-bottom');
198
- const scrollbar = root.querySelector('.ag-body-horizontal-scroll');
199
- if (header && floatingBottom && scrollbar) {
200
- if (scrollbar.style.height !==
201
- scrollbar.style.getPropertyValue('--sky-ag-body-horizontal-scroll-width')) {
202
- scrollbar.style.setProperty('--sky-ag-body-horizontal-scroll-width', scrollbar.style.height);
203
- }
204
- const isTop = !!root.children[1].matches('.ag-body-horizontal-scroll');
205
- if (toTop && !isTop) {
206
- const fragment = __classPrivateFieldGet(this, _SkyAgGridWrapperComponent_document, "f").createDocumentFragment();
207
- fragment.appendChild(scrollbar);
208
- header.after(fragment);
209
- }
210
- else if (!toTop && isTop) {
211
- const fragment = __classPrivateFieldGet(this, _SkyAgGridWrapperComponent_document, "f").createDocumentFragment();
212
- fragment.appendChild(scrollbar);
213
- floatingBottom.after(fragment);
214
- }
215
- }
216
- }
217
- }, _SkyAgGridWrapperComponent_updateGridTheme = function _SkyAgGridWrapperComponent_updateGridTheme(themeSettings) {
218
- let agTheme;
219
- if (themeSettings?.theme.name === 'modern') {
220
- agTheme = `modern-${themeSettings.mode.name}`;
221
- }
222
- else {
223
- agTheme = `default`;
224
- }
225
- const variation = __classPrivateFieldGet(this, _SkyAgGridWrapperComponent_hasEditableClass, "f") ? 'data-entry-grid' : 'data-grid';
226
- __classPrivateFieldGet(this, _SkyAgGridWrapperComponent_wrapperClasses, "f").next([
227
- ...__classPrivateFieldGet(this, _SkyAgGridWrapperComponent_wrapperClasses, "f")
228
- .getValue()
229
- .filter((c) => !c.startsWith('ag-theme-')),
230
- `ag-theme-sky-${variation}-${agTheme}`,
231
- ]);
232
- };
233
- SkyAgGridWrapperComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyAgGridWrapperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
234
- SkyAgGridWrapperComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: SkyAgGridWrapperComponent, selector: "sky-ag-grid-wrapper", host: { properties: { "class.sky-ag-grid-layout-normal": "this.isNormalLayout" } }, queries: [{ propertyName: "agGrid", first: true, predicate: AgGridAngular, descendants: true, static: true }], ngImport: i0, template: "<span\n class=\"nav-anchor\"\n tabindex=\"0\"\n [id]=\"beforeAnchorId\"\n (focusin)=\"onAnchorFocus($event)\"\n>\n</span>\n<div\n class=\"sky-ag-grid\"\n [class.sky-ag-grid-top-scrollbar]=\"\n agGrid?.gridOptions?.context &&\n agGrid?.gridOptions?.context['enableTopScroll']\n \"\n [ngClass]=\"wrapperClasses$ | async\"\n tabindex=\"0\"\n [id]=\"gridId\"\n [skyViewkeeper]=\"viewkeeperClasses\"\n (keydown)=\"onGridKeydown($event)\"\n (keyup.escape)=\"onKeyUpEscape($event)\"\n>\n <ng-content></ng-content>\n</div>\n<span\n tabindex=\"0\"\n class=\"nav-anchor\"\n [id]=\"afterAnchorId\"\n (focusin)=\"onAnchorFocus($event)\"\n>\n</span>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.λ3, selector: "[skyViewkeeper]", inputs: ["skyViewkeeper"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
235
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyAgGridWrapperComponent, decorators: [{
236
- type: Component,
237
- args: [{ selector: 'sky-ag-grid-wrapper', changeDetection: ChangeDetectionStrategy.OnPush, template: "<span\n class=\"nav-anchor\"\n tabindex=\"0\"\n [id]=\"beforeAnchorId\"\n (focusin)=\"onAnchorFocus($event)\"\n>\n</span>\n<div\n class=\"sky-ag-grid\"\n [class.sky-ag-grid-top-scrollbar]=\"\n agGrid?.gridOptions?.context &&\n agGrid?.gridOptions?.context['enableTopScroll']\n \"\n [ngClass]=\"wrapperClasses$ | async\"\n tabindex=\"0\"\n [id]=\"gridId\"\n [skyViewkeeper]=\"viewkeeperClasses\"\n (keydown)=\"onGridKeydown($event)\"\n (keyup.escape)=\"onKeyUpEscape($event)\"\n>\n <ng-content></ng-content>\n</div>\n<span\n tabindex=\"0\"\n class=\"nav-anchor\"\n [id]=\"afterAnchorId\"\n (focusin)=\"onAnchorFocus($event)\"\n>\n</span>\n" }]
238
- }], ctorParameters: function () { return []; }, propDecorators: { agGrid: [{
239
- type: ContentChild,
240
- args: [AgGridAngular, {
241
- static: true,
242
- }]
243
- }], isNormalLayout: [{
244
- type: HostBinding,
245
- args: ['class.sky-ag-grid-layout-normal']
246
- }] } });
247
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWctZ3JpZC13cmFwcGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9hZy1ncmlkL3NyYy9saWIvbW9kdWxlcy9hZy1ncmlkL2FnLWdyaWQtd3JhcHBlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvYWctZ3JpZC9zcmMvbGliL21vZHVsZXMvYWctZ3JpZC9hZy1ncmlkLXdyYXBwZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUdMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUdYLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBb0IsTUFBTSxjQUFjLENBQUM7QUFFakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWhELE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVELE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7QUFFckQsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBT2hCLE1BQU0sT0FBTyx5QkFBeUI7SUFnQnBDLElBQVcsaUJBQWlCO1FBQzFCLE9BQU8sdUJBQUEsSUFBSSxxREFBb0IsQ0FBQztJQUNsQyxD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LEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDNUMsZ0JBQWdCLFNBQVMsSUFBSSxPQUFPLEVBQUU7S0FDdkMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztzSEFsUlUseUJBQXlCOzBHQUF6Qix5QkFBeUIsbUxBR3RCLGFBQWEsOERDbkM3Qix3cEJBNkJBOzJGREdhLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDRSxxQkFBcUIsbUJBRWQsdUJBQXVCLENBQUMsTUFBTTswRUFReEMsTUFBTTtzQkFIWixZQUFZO3VCQUFDLGFBQWEsRUFBRTt3QkFDM0IsTUFBTSxFQUFFLElBQUk7cUJBQ2I7Z0JBSU0sY0FBYztzQkFEcEIsV0FBVzt1QkFBQyxpQ0FBaUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFbGVtZW50UmVmLFxuICBIb3N0QmluZGluZyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTa3lNdXRhdGlvbk9ic2VydmVyU2VydmljZSB9IGZyb20gJ0Bza3l1eC9jb3JlJztcbmltcG9ydCB7IFNreVRoZW1lU2VydmljZSwgU2t5VGhlbWVTZXR0aW5ncyB9IGZyb20gJ0Bza3l1eC90aGVtZSc7XG5cbmltcG9ydCB7IEFnR3JpZEFuZ3VsYXIgfSBmcm9tICdhZy1ncmlkLWFuZ3VsYXInO1xuaW1wb3J0IHsgQ2VsbEVkaXRpbmdTdGFydGVkRXZlbnQsIERldGFpbEdyaWRJbmZvIH0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHknO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreUFnR3JpZEFkYXB0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9hZy1ncmlkLWFkYXB0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTa3lBZ0dyaWRTZXJ2aWNlIH0gZnJvbSAnLi9hZy1ncmlkLnNlcnZpY2UnO1xuXG5sZXQgaWRJbmRleCA9IDA7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS1hZy1ncmlkLXdyYXBwZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vYWctZ3JpZC13cmFwcGVyLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNreUFnR3JpZFdyYXBwZXJDb21wb25lbnRcbiAgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIE9uSW5pdFxue1xuICBAQ29udGVudENoaWxkKEFnR3JpZEFuZ3VsYXIsIHtcbiAgICBzdGF0aWM6IHRydWUsXG4gIH0pXG4gIHB1YmxpYyBhZ0dyaWQ6IEFnR3JpZEFuZ3VsYXIgfCB1bmRlZmluZWQ7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5za3ktYWctZ3JpZC1sYXlvdXQtbm9ybWFsJylcbiAgcHVibGljIGlzTm9ybWFsTGF5b3V0ID0gZmFsc2U7XG5cbiAgcHVibGljIGFmdGVyQW5jaG9ySWQ6IHN0cmluZztcbiAgcHVibGljIGJlZm9yZUFuY2hvcklkOiBzdHJpbmc7XG4gIHB1YmxpYyBncmlkSWQ6IHN0cmluZztcbiAgcHVibGljIHdyYXBwZXJDbGFzc2VzJDogT2JzZXJ2YWJsZTxzdHJpbmdbXT47XG5cbiAgcHVibGljIGdldCB2aWV3a2VlcGVyQ2xhc3NlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuI192aWV3a2VlcGVyQ2xhc3NlcztcbiAgfVxuXG4gIHB1YmxpYyBzZXQgdmlld2tlZXBlckNsYXNzZXModmFsdWU6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy4jX3ZpZXdrZWVwZXJDbGFzc2VzID0gdmFsdWU7XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBnZXQgI2lzSW5FZGl0TW9kZSgpOiBib29sZWFuIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLmFnR3JpZCAmJiB0aGlzLmFnR3JpZC5hcGkpIHtcbiAgICAgIGNvbnN0IHByaW1hcnlHcmlkRWRpdGluZyA9IHRoaXMuYWdHcmlkLmFwaS5nZXRFZGl0aW5nQ2VsbHMoKS5sZW5ndGggPiAwO1xuICAgICAgaWYgKHByaW1hcnlHcmlkRWRpdGluZykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBpbm5lckVkaXRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hZ0dyaWQuYXBpLmZvckVhY2hEZXRhaWxHcmlkSW5mbygoZGV0YWlsR3JpZDogRGV0YWlsR3JpZEluZm8pID0+IHtcbiAgICAgICAgICBpZiAoZGV0YWlsR3JpZD8uYXBpICYmIGRldGFpbEdyaWQuYXBpLmdldEVkaXRpbmdDZWxscygpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlubmVyRWRpdGluZyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gaW5uZXJFZGl0aW5nO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgI192aWV3a2VlcGVyQ2xhc3Nlczogc3RyaW5nW10gPSBbXTtcblxuICAjYWdHcmlkU2VydmljZSA9IGluamVjdChTa3lBZ0dyaWRTZXJ2aWNlKTtcbiAgI25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAjdGhlbWVTdmMgPSBpbmplY3QoU2t5VGhlbWVTZXJ2aWNlLCB7XG4gICAgb3B0aW9uYWw6IHRydWUsXG4gIH0pO1xuICAjd3JhcHBlckNsYXNzZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ1tdPihbXG4gICAgYGFnLXRoZW1lLXNreS1kYXRhLWdyaWQtZGVmYXVsdGAsXG4gIF0pO1xuICAjY3VycmVudFRoZW1lOiBTa3lUaGVtZVNldHRpbmdzIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAjYWRhcHRlclNlcnZpY2UgPSBpbmplY3QoU2t5QWdHcmlkQWRhcHRlclNlcnZpY2UpO1xuICAjY2hhbmdlRGV0ZWN0b3IgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICAjcGFyZW50Q2hhbmdlRGV0ZWN0b3IgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYsIHtcbiAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICBza2lwU2VsZjogdHJ1ZSxcbiAgfSk7XG4gICNlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICAjZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuICAjbXV0YXRpb25PYnNlcnZlclNlcnZpY2UgPSBpbmplY3QoU2t5TXV0YXRpb25PYnNlcnZlclNlcnZpY2UpO1xuICAjaGFzRWRpdGFibGVDbGFzcyA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGlkSW5kZXgrKztcbiAgICB0aGlzLmFmdGVyQW5jaG9ySWQgPSAnc2t5LWFnLWdyaWQtbmF2LWFuY2hvci1hZnRlci0nICsgaWRJbmRleDtcbiAgICB0aGlzLmJlZm9yZUFuY2hvcklkID0gJ3NreS1hZy1ncmlkLW5hdi1hbmNob3ItYmVmb3JlLScgKyBpZEluZGV4O1xuICAgIHRoaXMuZ3JpZElkID0gJ3NreS1hZy1ncmlkLScgKyBpZEluZGV4O1xuICAgIHRoaXMud3JhcHBlckNsYXNzZXMkID0gdGhpcy4jd3JhcHBlckNsYXNzZXMuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFnR3JpZCkge1xuICAgICAgY29uc3QgZG9tTGF5b3V0ID0gdGhpcy5hZ0dyaWQuZ3JpZE9wdGlvbnM/LmRvbUxheW91dDtcbiAgICAgIGlmIChkb21MYXlvdXQgPT09ICdhdXRvSGVpZ2h0Jykge1xuICAgICAgICBpZiAodGhpcy5hZ0dyaWQuZ3JpZE9wdGlvbnMuY29udGV4dD8uZW5hYmxlVG9wU2Nyb2xsKSB7XG4gICAgICAgICAgdGhpcy52aWV3a2VlcGVyQ2xhc3Nlcy5wdXNoKFxuICAgICAgICAgICAgJy5hZy1oZWFkZXInLFxuICAgICAgICAgICAgJy5hZy1ib2R5LWhvcml6b250YWwtc2Nyb2xsJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52aWV3a2VlcGVyQ2xhc3Nlcy5wdXNoKCcuYWctaGVhZGVyJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZG9tTGF5b3V0ID09PSAnbm9ybWFsJykge1xuICAgICAgICB0aGlzLmlzTm9ybWFsTGF5b3V0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy4jcGFyZW50Q2hhbmdlRGV0ZWN0b3I/LmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYWdHcmlkLmdyaWRSZWFkeVxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuI21vdmVIb3Jpem9udGFsU2Nyb2xsKCk7XG4gICAgICAgIH0pO1xuICAgICAgdGhpcy5hZ0dyaWQuZmlyc3REYXRhUmVuZGVyZWRcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLiNtb3ZlSG9yaXpvbnRhbFNjcm9sbCgpO1xuICAgICAgICB9KTtcbiAgICAgIHRoaXMuYWdHcmlkLnJvd0RhdGFVcGRhdGVkXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy4jbW92ZUhvcml6b250YWxTY3JvbGwoKTtcbiAgICAgICAgfSk7XG4gICAgICB0aGlzLmFnR3JpZC5jZWxsRWRpdGluZ1N0YXJ0ZWRcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgICAuc3Vic2NyaWJlKChwYXJhbXM6IENlbGxFZGl0aW5nU3RhcnRlZEV2ZW50KSA9PiB7XG4gICAgICAgICAgaWYgKHBhcmFtcy5jb2xEZWYudHlwZSkge1xuICAgICAgICAgICAgY29uc3QgdHlwZXMgPSBBcnJheS5pc0FycmF5KHBhcmFtcy5jb2xEZWYudHlwZSlcbiAgICAgICAgICAgICAgPyBwYXJhbXMuY29sRGVmLnR5cGVcbiAgICAgICAgICAgICAgOiBbcGFyYW1zLmNvbERlZi50eXBlXTtcbiAgICAgICAgICAgIGNvbnN0IGFkZENsYXNzZXMgPSB0eXBlcy5tYXAoXG4gICAgICAgICAgICAgICh0KSA9PiBgc2t5LWFnLWdyaWQtY2VsbC1lZGl0aW5nLSR7dH1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy4jd3JhcHBlckNsYXNzZXMubmV4dChbXG4gICAgICAgICAgICAgIC4uLnRoaXMuI3dyYXBwZXJDbGFzc2VzLmdldFZhbHVlKCksXG4gICAgICAgICAgICAgIC4uLmFkZENsYXNzZXMsXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgdGhpcy5hZ0dyaWQuY2VsbEVkaXRpbmdTdG9wcGVkXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy4jd3JhcHBlckNsYXNzZXMubmV4dChcbiAgICAgICAgICAgIHRoaXMuI3dyYXBwZXJDbGFzc2VzXG4gICAgICAgICAgICAgIC5nZXRWYWx1ZSgpXG4gICAgICAgICAgICAgIC5maWx0ZXIoKGMpID0+IGMuc3RhcnRzV2l0aCgnYWctdGhlbWUtJykpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLiN0aGVtZVN2Yz8uc2V0dGluZ3NDaGFuZ2VcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKHNldHRpbmdzKSA9PiB7XG4gICAgICAgIHRoaXMuI3VwZGF0ZUdyaWRUaGVtZShzZXR0aW5ncy5jdXJyZW50U2V0dGluZ3MpO1xuICAgICAgICBpZiAoIXRoaXMuI2N1cnJlbnRUaGVtZSkge1xuICAgICAgICAgIC8vIEluaXRpYWwgdGhlbWUgc2V0dGluZ3MuXG4gICAgICAgICAgdGhpcy4jY3VycmVudFRoZW1lID0gc2V0dGluZ3MuY3VycmVudFNldHRpbmdzO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYWdHcmlkPy5hcGkpIHtcbiAgICAgICAgICAvLyBPbiBzdWJzZXF1ZW50IHRoZW1lIGNoYW5nZXMsIHdlIG5lZWQgdG8gY2FsbCB0aGUgYXBpIHRvIHJlLXJlbmRlciB0aGUgZ3JpZC5cbiAgICAgICAgICB0aGlzLiNjdXJyZW50VGhlbWUgPSBzZXR0aW5ncy5jdXJyZW50U2V0dGluZ3M7XG4gICAgICAgICAgdGhpcy5hZ0dyaWQuYXBpLnNldEhlYWRlckhlaWdodChcbiAgICAgICAgICAgIHRoaXMuI2FnR3JpZFNlcnZpY2UuZ2V0SGVhZGVySGVpZ2h0KClcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuYWdHcmlkLmFwaS5yZXNldFJvd0hlaWdodHMoKTtcbiAgICAgICAgICB0aGlzLmFnR3JpZC5hcGkucmVmcmVzaENlbGxzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCBhZ0dyaWRFbGVtZW50OiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCA9XG4gICAgICB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignYWctZ3JpZC1hbmd1bGFyJyk7XG4gICAgY29uc3QgY2FsbGJhY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICB0aGlzLiNoYXNFZGl0YWJsZUNsYXNzID0gISFhZ0dyaWRFbGVtZW50Py5jbGFzc0xpc3QuY29udGFpbnMoXG4gICAgICAgICdza3ktYWctZ3JpZC1lZGl0YWJsZSdcbiAgICAgICk7XG4gICAgICB0aGlzLiN1cGRhdGVHcmlkVGhlbWUodGhpcy4jY3VycmVudFRoZW1lKTtcbiAgICB9O1xuICAgIGlmIChhZ0dyaWRFbGVtZW50KSB7XG4gICAgICBjb25zdCBhZ0dyaWRDbGFzc09ic2VydmVyID1cbiAgICAgICAgdGhpcy4jbXV0YXRpb25PYnNlcnZlclNlcnZpY2UuY3JlYXRlKGNhbGxiYWNrKTtcbiAgICAgIGFnR3JpZENsYXNzT2JzZXJ2ZXIub2JzZXJ2ZShhZ0dyaWRFbGVtZW50LCB7XG4gICAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuI25nVW5zdWJzY3JpYmUucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBhZ0dyaWRDbGFzc09ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmV2ZW50IGNsb3NpbmcgYSBtb2RhbCB3aGVuIGZvY3VzZWQgaW4gQUcgR3JpZC5cbiAgICovXG4gIHB1YmxpYyBvbktleVVwRXNjYXBlKCRldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5hZ0dyaWQ/LmFwaS5zdG9wRWRpdGluZyh0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkdyaWRLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYWdHcmlkICYmICF0aGlzLiNpc0luRWRpdE1vZGUgJiYgZXZlbnQua2V5ID09PSAnVGFiJykge1xuICAgICAgY29uc3QgaWRUb0ZvY3VzID0gZXZlbnQuc2hpZnRLZXlcbiAgICAgICAgPyB0aGlzLmJlZm9yZUFuY2hvcklkXG4gICAgICAgIDogdGhpcy5hZnRlckFuY2hvcklkO1xuICAgICAgdGhpcy4jYWRhcHRlclNlcnZpY2Uuc2V0Rm9jdXNlZEVsZW1lbnRCeUlkKFxuICAgICAgICB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIGlkVG9Gb2N1c1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25BbmNob3JGb2N1cyhldmVudDogRm9jdXNFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHJlbGF0ZWRUYXJnZXQgPSBldmVudC5yZWxhdGVkVGFyZ2V0IGFzIEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHByZXZpb3VzV2FzR3JpZCA9XG4gICAgICByZWxhdGVkVGFyZ2V0ICYmICEhdGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHJlbGF0ZWRUYXJnZXQpO1xuXG4gICAgaWYgKHRoaXMuYWdHcmlkICYmICFwcmV2aW91c1dhc0dyaWQpIHtcbiAgICAgIGNvbnN0IGZpcnN0Q29sdW1uID0gdGhpcy5hZ0dyaWQuY29sdW1uQXBpLmdldEFsbERpc3BsYXllZENvbHVtbnMoKVswXTtcblxuICAgICAgaWYgKGZpcnN0Q29sdW1uKSB7XG4gICAgICAgIHRoaXMuYWdHcmlkLmFwaS5lbnN1cmVDb2x1bW5WaXNpYmxlKGZpcnN0Q29sdW1uKTtcbiAgICAgICAgdGhpcy4jYWRhcHRlclNlcnZpY2UuZm9jdXNPbkNvbHVtbkhlYWRlcihcbiAgICAgICAgICB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgZmlyc3RDb2x1bW4uZ2V0Q29sSWQoKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICNtb3ZlSG9yaXpvbnRhbFNjcm9sbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hZ0dyaWQgJiYgdGhpcy5hZ0dyaWQuYXBpKSB7XG4gICAgICBjb25zdCB0b1RvcCA9ICEhdGhpcy5hZ0dyaWQuZ3JpZE9wdGlvbnMuY29udGV4dD8uZW5hYmxlVG9wU2Nyb2xsO1xuICAgICAgY29uc3Qgcm9vdDogSFRNTEVsZW1lbnQgPVxuICAgICAgICB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmFnLXJvb3QnKTtcbiAgICAgIGNvbnN0IGhlYWRlcjogSFRNTERpdkVsZW1lbnQgfCBudWxsID0gcm9vdC5xdWVyeVNlbGVjdG9yKCcuYWctaGVhZGVyJyk7XG4gICAgICBjb25zdCBmbG9hdGluZ0JvdHRvbTogSFRNTERpdkVsZW1lbnQgfCBudWxsID0gcm9vdC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAnLmFnLWZsb2F0aW5nLWJvdHRvbSdcbiAgICAgICk7XG4gICAgICBjb25zdCBzY3JvbGxiYXI6IEhUTUxEaXZFbGVtZW50IHwgbnVsbCA9IHJvb3QucXVlcnlTZWxlY3RvcihcbiAgICAgICAgJy5hZy1ib2R5LWhvcml6b250YWwtc2Nyb2xsJ1xuICAgICAgKTtcbiAgICAgIGlmIChoZWFkZXIgJiYgZmxvYXRpbmdCb3R0b20gJiYgc2Nyb2xsYmFyKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzY3JvbGxiYXIuc3R5bGUuaGVpZ2h0ICE9PVxuICAgICAgICAgIHNjcm9sbGJhci5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFxuICAgICAgICAgICAgJy0tc2t5LWFnLWJvZHktaG9yaXpvbnRhbC1zY3JvbGwtd2lkdGgnXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICBzY3JvbGxiYXIuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgICAnLS1za3ktYWctYm9keS1ob3Jpem9udGFsLXNjcm9sbC13aWR0aCcsXG4gICAgICAgICAgICBzY3JvbGxiYXIuc3R5bGUuaGVpZ2h0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc1RvcCA9ICEhcm9vdC5jaGlsZHJlblsxXS5tYXRjaGVzKCcuYWctYm9keS1ob3Jpem9udGFsLXNjcm9sbCcpO1xuICAgICAgICBpZiAodG9Ub3AgJiYgIWlzVG9wKSB7XG4gICAgICAgICAgY29uc3QgZnJhZ21lbnQgPSB0aGlzLiNkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoc2Nyb2xsYmFyKTtcbiAgICAgICAgICBoZWFkZXIuYWZ0ZXIoZnJhZ21lbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKCF0b1RvcCAmJiBpc1RvcCkge1xuICAgICAgICAgIGNvbnN0IGZyYWdtZW50ID0gdGhpcy4jZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKHNjcm9sbGJhcik7XG4gICAgICAgICAgZmxvYXRpbmdCb3R0b20uYWZ0ZXIoZnJhZ21lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgI3VwZGF0ZUdyaWRUaGVtZSh0aGVtZVNldHRpbmdzPzogU2t5VGhlbWVTZXR0aW5ncyk6IHZvaWQge1xuICAgIGxldCBhZ1RoZW1lOiAnZGVmYXVsdCcgfCAnbW9kZXJuLWxpZ2h0JyB8ICdtb2Rlcm4tZGFyayc7XG4gICAgaWYgKHRoZW1lU2V0dGluZ3M/LnRoZW1lLm5hbWUgPT09ICdtb2Rlcm4nKSB7XG4gICAgICBhZ1RoZW1lID0gYG1vZGVybi0ke3RoZW1lU2V0dGluZ3MubW9kZS5uYW1lfWAgYXNcbiAgICAgICAgfCAnbW9kZXJuLWxpZ2h0J1xuICAgICAgICB8ICdtb2Rlcm4tZGFyayc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFnVGhlbWUgPSBgZGVmYXVsdGA7XG4gICAgfVxuICAgIGNvbnN0IHZhcmlhdGlvbiA9IHRoaXMuI2hhc0VkaXRhYmxlQ2xhc3MgPyAnZGF0YS1lbnRyeS1ncmlkJyA6ICdkYXRhLWdyaWQnO1xuICAgIHRoaXMuI3dyYXBwZXJDbGFzc2VzLm5leHQoW1xuICAgICAgLi4udGhpcy4jd3JhcHBlckNsYXNzZXNcbiAgICAgICAgLmdldFZhbHVlKClcbiAgICAgICAgLmZpbHRlcigoYykgPT4gIWMuc3RhcnRzV2l0aCgnYWctdGhlbWUtJykpLFxuICAgICAgYGFnLXRoZW1lLXNreS0ke3ZhcmlhdGlvbn0tJHthZ1RoZW1lfWAsXG4gICAgXSk7XG4gIH1cbn1cbiIsIjxzcGFuXG4gIGNsYXNzPVwibmF2LWFuY2hvclwiXG4gIHRhYmluZGV4PVwiMFwiXG4gIFtpZF09XCJiZWZvcmVBbmNob3JJZFwiXG4gIChmb2N1c2luKT1cIm9uQW5jaG9yRm9jdXMoJGV2ZW50KVwiXG4+XG48L3NwYW4+XG48ZGl2XG4gIGNsYXNzPVwic2t5LWFnLWdyaWRcIlxuICBbY2xhc3Muc2t5LWFnLWdyaWQtdG9wLXNjcm9sbGJhcl09XCJcbiAgICBhZ0dyaWQ/LmdyaWRPcHRpb25zPy5jb250ZXh0ICYmXG4gICAgYWdHcmlkPy5ncmlkT3B0aW9ucz8uY29udGV4dFsnZW5hYmxlVG9wU2Nyb2xsJ11cbiAgXCJcbiAgW25nQ2xhc3NdPVwid3JhcHBlckNsYXNzZXMkIHwgYXN5bmNcIlxuICB0YWJpbmRleD1cIjBcIlxuICBbaWRdPVwiZ3JpZElkXCJcbiAgW3NreVZpZXdrZWVwZXJdPVwidmlld2tlZXBlckNsYXNzZXNcIlxuICAoa2V5ZG93bik9XCJvbkdyaWRLZXlkb3duKCRldmVudClcIlxuICAoa2V5dXAuZXNjYXBlKT1cIm9uS2V5VXBFc2NhcGUoJGV2ZW50KVwiXG4+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvZGl2PlxuPHNwYW5cbiAgdGFiaW5kZXg9XCIwXCJcbiAgY2xhc3M9XCJuYXYtYW5jaG9yXCJcbiAgW2lkXT1cImFmdGVyQW5jaG9ySWRcIlxuICAoZm9jdXNpbik9XCJvbkFuY2hvckZvY3VzKCRldmVudClcIlxuPlxuPC9zcGFuPlxuIl19