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