@oneteme/jquery-organizer 0.0.1
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/README.md +441 -0
- package/esm2022/lib/group-by-manager/group-by-manager.mjs +73 -0
- package/esm2022/lib/lazy-field-manager/lazy-field-manager.mjs +91 -0
- package/esm2022/lib/models/index.mjs +3 -0
- package/esm2022/lib/models/organizer-chart-adapter.mjs +164 -0
- package/esm2022/lib/models/organizer-config.interface.mjs +2 -0
- package/esm2022/lib/models/organizer-menu.model.mjs +17 -0
- package/esm2022/lib/models/organizer-utils.mjs +26 -0
- package/esm2022/lib/organizer-button/organizer-button.component.mjs +266 -0
- package/esm2022/lib/organizer-button/organizer-button.module.mjs +17 -0
- package/esm2022/lib/organizer-facade/organizer-facade.mjs +269 -0
- package/esm2022/lib/organizer-facade/organizer-facade.types.mjs +2 -0
- package/esm2022/lib/slice-panel/slice-panel.component.mjs +452 -0
- package/esm2022/lib/slice-panel/slice-panel.model.mjs +2 -0
- package/esm2022/oneteme-jquery-organizer.mjs +5 -0
- package/esm2022/public-api.mjs +12 -0
- package/fesm2022/oneteme-jquery-organizer.mjs +1369 -0
- package/fesm2022/oneteme-jquery-organizer.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/group-by-manager/group-by-manager.d.ts +20 -0
- package/lib/lazy-field-manager/lazy-field-manager.d.ts +25 -0
- package/lib/models/index.d.ts +2 -0
- package/lib/models/organizer-chart-adapter.d.ts +44 -0
- package/lib/models/organizer-config.interface.d.ts +103 -0
- package/lib/models/organizer-menu.model.d.ts +7 -0
- package/lib/models/organizer-utils.d.ts +8 -0
- package/lib/organizer-button/organizer-button.component.d.ts +51 -0
- package/lib/organizer-button/organizer-button.module.d.ts +8 -0
- package/lib/organizer-facade/organizer-facade.d.ts +51 -0
- package/lib/organizer-facade/organizer-facade.types.d.ts +31 -0
- package/lib/slice-panel/slice-panel.component.d.ts +80 -0
- package/lib/slice-panel/slice-panel.model.d.ts +25 -0
- package/package.json +35 -0
- package/public-api.d.ts +12 -0
|
@@ -0,0 +1,452 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
3
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostBinding, Input, Output, ViewChild, inject } from '@angular/core';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/common";
|
|
6
|
+
import * as i2 from "@angular/material/icon";
|
|
7
|
+
const EMPTY_CATEGORY_KEY = '__empty__';
|
|
8
|
+
const EMPTY_CATEGORY_LABEL = 'Vide';
|
|
9
|
+
const I18N = {
|
|
10
|
+
expandFilterTitle: 'Déplier le filtre',
|
|
11
|
+
collapseFilterTitle: 'Replier le filtre',
|
|
12
|
+
filterPanelTitle: (count) => count > 1 ? 'Filtres' : 'Filtre',
|
|
13
|
+
filterBlockDefaultTitle: 'Filtrer',
|
|
14
|
+
filterEmptyState: 'Aucune donnée',
|
|
15
|
+
};
|
|
16
|
+
export class SlicePanelComponent {
|
|
17
|
+
constructor() {
|
|
18
|
+
this.sliceConfigs = [];
|
|
19
|
+
this.columns = [];
|
|
20
|
+
this.data = [];
|
|
21
|
+
this.lazyData = new Map();
|
|
22
|
+
this.lazyStatus = new Map();
|
|
23
|
+
this.showToggle = true;
|
|
24
|
+
this.showCounts = true;
|
|
25
|
+
this.collapsedByDefault = false;
|
|
26
|
+
this.alwaysShow = false;
|
|
27
|
+
this.filterChange = new EventEmitter();
|
|
28
|
+
this.activeKeysChange = new EventEmitter();
|
|
29
|
+
this.dynamicSliceKeysChange = new EventEmitter();
|
|
30
|
+
this.collapsedChange = new EventEmitter();
|
|
31
|
+
this._cdr = inject(ChangeDetectorRef);
|
|
32
|
+
this.i18n = I18N;
|
|
33
|
+
this.isCollapsed = false;
|
|
34
|
+
this.activeKeysBySlice = new Map();
|
|
35
|
+
this._expandedSlices = new Set();
|
|
36
|
+
this._dynamicSlices = [];
|
|
37
|
+
this._cachedSlices = [];
|
|
38
|
+
this._countCache = new Map();
|
|
39
|
+
this.trackBySliceIndex = (index, _) => index;
|
|
40
|
+
this.trackByCategoryKey = (_, cat) => cat.key;
|
|
41
|
+
}
|
|
42
|
+
get hostCollapsed() { return this.isCollapsed; }
|
|
43
|
+
ngOnInit() {
|
|
44
|
+
this.isCollapsed = this.collapsedByDefault;
|
|
45
|
+
}
|
|
46
|
+
ngOnChanges(changes) {
|
|
47
|
+
if (changes['sliceConfigs'] || changes['data'] || changes['columns'] || changes['lazyData'] || changes['lazyStatus']) {
|
|
48
|
+
this._refreshDynamicSlices();
|
|
49
|
+
this._rebuildCache();
|
|
50
|
+
const shouldReemitFilter = !!(changes['data'] || changes['columns'] || changes['lazyData'] || changes['lazyStatus']);
|
|
51
|
+
const hasActiveFilters = [...this.activeKeysBySlice.values()].some(s => s.size > 0);
|
|
52
|
+
if (hasActiveFilters && shouldReemitFilter) {
|
|
53
|
+
this._emitFilter();
|
|
54
|
+
}
|
|
55
|
+
this._cdr.markForCheck();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
get showPanel() {
|
|
59
|
+
const hasCfg = (this.sliceConfigs || []).length > 0 || this._dynamicSlices.length > 0;
|
|
60
|
+
if (this.alwaysShow)
|
|
61
|
+
return hasCfg;
|
|
62
|
+
return hasCfg && (this.data?.length ?? 0) > 0;
|
|
63
|
+
}
|
|
64
|
+
get slices() {
|
|
65
|
+
return this._cachedSlices;
|
|
66
|
+
}
|
|
67
|
+
get staticSliceCount() {
|
|
68
|
+
return (this.sliceConfigs || []).length;
|
|
69
|
+
}
|
|
70
|
+
get staticSlicesForMenu() {
|
|
71
|
+
return (this.sliceConfigs || [])
|
|
72
|
+
.filter((s) => !!s.columnKey)
|
|
73
|
+
.map((s) => ({ key: s.columnKey, title: s.title || s.columnKey }));
|
|
74
|
+
}
|
|
75
|
+
get activeDynamicSliceColumns() {
|
|
76
|
+
return this._dynamicSlices
|
|
77
|
+
.map((d) => (this.columns || []).find((c) => c.key === d.key))
|
|
78
|
+
.filter((c) => !!c);
|
|
79
|
+
}
|
|
80
|
+
get availableColumnsForDynamicSlice() {
|
|
81
|
+
const dynamicKeys = new Set(this._dynamicSlices.map((d) => d.key));
|
|
82
|
+
const staticKeys = new Set((this.sliceConfigs || []).map((s) => s.columnKey).filter((k) => !!k));
|
|
83
|
+
const existingKeys = new Set([...dynamicKeys, ...staticKeys]);
|
|
84
|
+
const seen = new Set();
|
|
85
|
+
return (this.columns || []).filter((c) => {
|
|
86
|
+
if (existingKeys.has(c.key) || seen.has(c.key))
|
|
87
|
+
return false;
|
|
88
|
+
seen.add(c.key);
|
|
89
|
+
return true;
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
isSliceCollapsed(sliceIndex) {
|
|
93
|
+
if (this._cachedSlices.length === 1) {
|
|
94
|
+
return this._expandedSlices.has(-1 - sliceIndex);
|
|
95
|
+
}
|
|
96
|
+
return !this._expandedSlices.has(sliceIndex);
|
|
97
|
+
}
|
|
98
|
+
toggleSliceCollapse(sliceIndex) {
|
|
99
|
+
if (this.slices.length === 1) {
|
|
100
|
+
const closedKey = -1 - sliceIndex;
|
|
101
|
+
if (this._expandedSlices.has(closedKey)) {
|
|
102
|
+
this._expandedSlices.delete(closedKey);
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
this._expandedSlices.add(closedKey);
|
|
106
|
+
this._scrollSliceTitleIntoView(sliceIndex);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
if (this._expandedSlices.has(sliceIndex)) {
|
|
111
|
+
this._expandedSlices.delete(sliceIndex);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
this._expandedSlices.clear();
|
|
115
|
+
this._expandedSlices.add(sliceIndex);
|
|
116
|
+
this._scrollSliceTitleIntoView(sliceIndex);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
this._cdr.markForCheck();
|
|
120
|
+
}
|
|
121
|
+
togglePanel() {
|
|
122
|
+
this.isCollapsed = !this.isCollapsed;
|
|
123
|
+
this.collapsedChange.emit(this.isCollapsed);
|
|
124
|
+
this._cdr.markForCheck();
|
|
125
|
+
}
|
|
126
|
+
isSliceDynamic(sliceIndex) {
|
|
127
|
+
return sliceIndex >= this.staticSliceCount;
|
|
128
|
+
}
|
|
129
|
+
isSliceLoading(sliceIndex) {
|
|
130
|
+
const staticSlice = (this.sliceConfigs || [])[sliceIndex];
|
|
131
|
+
if (staticSlice?.columnKey) {
|
|
132
|
+
const colDef = (this.columns || []).find(c => c.key === staticSlice.columnKey);
|
|
133
|
+
if (colDef?.lazy) {
|
|
134
|
+
const status = this.lazyStatus.get(staticSlice.columnKey) ?? 'idle';
|
|
135
|
+
return status === 'loading' || status === 'idle';
|
|
136
|
+
}
|
|
137
|
+
return false;
|
|
138
|
+
}
|
|
139
|
+
const key = this._getDynamicSliceColumnKey(sliceIndex);
|
|
140
|
+
if (!key)
|
|
141
|
+
return false;
|
|
142
|
+
const colDef = (this.columns || []).find(c => c.key === key);
|
|
143
|
+
if (!colDef?.lazy)
|
|
144
|
+
return false;
|
|
145
|
+
const status = this.lazyStatus.get(key) ?? 'idle';
|
|
146
|
+
return status === 'loading' || status === 'idle';
|
|
147
|
+
}
|
|
148
|
+
isStaticSliceVisible(_columnKey) {
|
|
149
|
+
return true;
|
|
150
|
+
}
|
|
151
|
+
getSliceIcon(slice) {
|
|
152
|
+
if (slice.icon)
|
|
153
|
+
return slice.icon;
|
|
154
|
+
if (slice.columnKey) {
|
|
155
|
+
return (this.columns || []).find(c => c.key === slice.columnKey)?.icon;
|
|
156
|
+
}
|
|
157
|
+
return undefined;
|
|
158
|
+
}
|
|
159
|
+
isSliceCategoryActive(sliceIndex, categoryKey) {
|
|
160
|
+
return this.activeKeysBySlice.get(sliceIndex)?.has(categoryKey) ?? false;
|
|
161
|
+
}
|
|
162
|
+
isSliceAllActive(sliceIndex) {
|
|
163
|
+
return !this.activeKeysBySlice.has(sliceIndex) || this.activeKeysBySlice.get(sliceIndex).size === 0;
|
|
164
|
+
}
|
|
165
|
+
sliceCategoryCount(sliceIndex, categoryKey) {
|
|
166
|
+
const cacheKey = `${sliceIndex}:${categoryKey}`;
|
|
167
|
+
if (this._countCache.has(cacheKey)) {
|
|
168
|
+
return this._countCache.get(cacheKey);
|
|
169
|
+
}
|
|
170
|
+
const slice = this._cachedSlices[sliceIndex];
|
|
171
|
+
if (!slice)
|
|
172
|
+
return 0;
|
|
173
|
+
const category = (slice.categories || []).find((c) => c.key === categoryKey);
|
|
174
|
+
const count = category ? (this.data || []).filter((row) => category.filter ? category.filter(row) : true).length : 0;
|
|
175
|
+
this._countCache.set(cacheKey, count);
|
|
176
|
+
return count;
|
|
177
|
+
}
|
|
178
|
+
isSliceEmpty(sliceIndex) {
|
|
179
|
+
const slice = this._cachedSlices[sliceIndex];
|
|
180
|
+
if (!slice)
|
|
181
|
+
return true;
|
|
182
|
+
return (slice.categories || []).every(c => this.sliceCategoryCount(sliceIndex, c.key) === 0);
|
|
183
|
+
}
|
|
184
|
+
onSliceCategorySelected(sliceIndex, categoryKey) {
|
|
185
|
+
const slice = this.slices[sliceIndex];
|
|
186
|
+
if (!slice)
|
|
187
|
+
return;
|
|
188
|
+
if (!this.activeKeysBySlice.has(sliceIndex)) {
|
|
189
|
+
this.activeKeysBySlice.set(sliceIndex, new Set());
|
|
190
|
+
}
|
|
191
|
+
const activeKeys = this.activeKeysBySlice.get(sliceIndex);
|
|
192
|
+
if (slice.multiSelect === false) {
|
|
193
|
+
if (activeKeys.has(categoryKey)) {
|
|
194
|
+
activeKeys.clear();
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
activeKeys.clear();
|
|
198
|
+
activeKeys.add(categoryKey);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
if (activeKeys.has(categoryKey)) {
|
|
203
|
+
activeKeys.delete(categoryKey);
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
activeKeys.add(categoryKey);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
this._emitFilter();
|
|
210
|
+
this._cdr.markForCheck();
|
|
211
|
+
}
|
|
212
|
+
onSliceAllSelected(sliceIndex) {
|
|
213
|
+
if (this.activeKeysBySlice.has(sliceIndex)) {
|
|
214
|
+
this.activeKeysBySlice.get(sliceIndex).clear();
|
|
215
|
+
}
|
|
216
|
+
this._emitFilter();
|
|
217
|
+
this._cdr.markForCheck();
|
|
218
|
+
}
|
|
219
|
+
getActiveFilters() {
|
|
220
|
+
const result = {};
|
|
221
|
+
this._cachedSlices.forEach((_, idx) => {
|
|
222
|
+
const keys = this.activeKeysBySlice.get(idx);
|
|
223
|
+
result[idx] = keys ? [...keys] : [];
|
|
224
|
+
});
|
|
225
|
+
return result;
|
|
226
|
+
}
|
|
227
|
+
restoreFilters(filters) {
|
|
228
|
+
this.activeKeysBySlice = new Map(Object.entries(filters).map(([idx, keys]) => [Number(idx), new Set(keys)]));
|
|
229
|
+
this._emitFilter();
|
|
230
|
+
this._cdr.markForCheck();
|
|
231
|
+
}
|
|
232
|
+
addDynamicSlice(column) {
|
|
233
|
+
const distinctValues = this._computeDistinctValues(column.key);
|
|
234
|
+
const newSlice = {
|
|
235
|
+
title: column.header,
|
|
236
|
+
columnKey: column.key,
|
|
237
|
+
categories: distinctValues.map((v) => this._buildCategoryFromValue(column.key, v)),
|
|
238
|
+
};
|
|
239
|
+
this._dynamicSlices = [...this._dynamicSlices, { key: column.key, slice: newSlice }];
|
|
240
|
+
this._rebuildCache();
|
|
241
|
+
this.dynamicSliceKeysChange.emit(this._dynamicSlices.map(d => d.key));
|
|
242
|
+
this._emitFilter();
|
|
243
|
+
this._cdr.markForCheck();
|
|
244
|
+
}
|
|
245
|
+
removeDynamicSlice(sliceIndex) {
|
|
246
|
+
const dynamicIndex = sliceIndex - this.staticSliceCount;
|
|
247
|
+
if (dynamicIndex < 0)
|
|
248
|
+
return;
|
|
249
|
+
const newActiveKeys = new Map();
|
|
250
|
+
this.activeKeysBySlice.forEach((keys, idx) => {
|
|
251
|
+
if (idx < sliceIndex)
|
|
252
|
+
newActiveKeys.set(idx, keys);
|
|
253
|
+
else if (idx > sliceIndex)
|
|
254
|
+
newActiveKeys.set(idx - 1, keys);
|
|
255
|
+
});
|
|
256
|
+
this.activeKeysBySlice = newActiveKeys;
|
|
257
|
+
this._dynamicSlices = this._dynamicSlices.filter((_, i) => i !== dynamicIndex);
|
|
258
|
+
this._rebuildCache();
|
|
259
|
+
this.dynamicSliceKeysChange.emit(this._dynamicSlices.map(d => d.key));
|
|
260
|
+
this._emitFilter();
|
|
261
|
+
this._cdr.markForCheck();
|
|
262
|
+
}
|
|
263
|
+
removeDynamicSliceByKey(key) {
|
|
264
|
+
const dynamicIndex = this._dynamicSlices.findIndex((d) => d.key === key);
|
|
265
|
+
if (dynamicIndex < 0)
|
|
266
|
+
return;
|
|
267
|
+
const sliceIndex = this.staticSliceCount + dynamicIndex;
|
|
268
|
+
this.removeDynamicSlice(sliceIndex);
|
|
269
|
+
}
|
|
270
|
+
_emitFilter() {
|
|
271
|
+
const slices = this.slices;
|
|
272
|
+
const activeKeysBySlice = this.activeKeysBySlice;
|
|
273
|
+
this.activeKeysChange.emit(slices.map((_, i) => {
|
|
274
|
+
const keys = activeKeysBySlice.get(i);
|
|
275
|
+
return keys ? [...keys] : [];
|
|
276
|
+
}));
|
|
277
|
+
const pred = (row) => slices.every((slice, sliceIndex) => {
|
|
278
|
+
const activeKeys = activeKeysBySlice.get(sliceIndex);
|
|
279
|
+
if (!activeKeys || activeKeys.size === 0)
|
|
280
|
+
return true;
|
|
281
|
+
if (!slice.categories || slice.categories.length === 0)
|
|
282
|
+
return true;
|
|
283
|
+
return [...activeKeys].some((key) => {
|
|
284
|
+
const category = (slice.categories || []).find((c) => c.key === key);
|
|
285
|
+
if (!category)
|
|
286
|
+
return false;
|
|
287
|
+
if (!category?.filter)
|
|
288
|
+
return true;
|
|
289
|
+
return category.filter(row);
|
|
290
|
+
});
|
|
291
|
+
});
|
|
292
|
+
this.filterChange.emit(pred);
|
|
293
|
+
}
|
|
294
|
+
_getDynamicSliceColumnKey(sliceIndex) {
|
|
295
|
+
const dynamicIndex = sliceIndex - this.staticSliceCount;
|
|
296
|
+
return this._dynamicSlices[dynamicIndex]?.key ?? null;
|
|
297
|
+
}
|
|
298
|
+
_getSliceIdentity(slice, fallbackIndex) {
|
|
299
|
+
if (slice.columnKey)
|
|
300
|
+
return `column:${slice.columnKey}`;
|
|
301
|
+
if (slice.title)
|
|
302
|
+
return `title:${slice.title}`;
|
|
303
|
+
const categoryKeys = (slice.categories || []).map((c) => c.key).join('|');
|
|
304
|
+
return `index:${fallbackIndex}|categories:${categoryKeys}`;
|
|
305
|
+
}
|
|
306
|
+
_materializeSlice(slice) {
|
|
307
|
+
if (!slice.columnKey || (slice.categories && slice.categories.length > 0)) {
|
|
308
|
+
return slice;
|
|
309
|
+
}
|
|
310
|
+
const col = (this.columns || []).find(c => c.key === slice.columnKey);
|
|
311
|
+
const isLazy = !!col?.lazy;
|
|
312
|
+
if (isLazy && this.lazyStatus.get(slice.columnKey) !== 'loaded') {
|
|
313
|
+
return { ...slice, categories: [] };
|
|
314
|
+
}
|
|
315
|
+
if (slice.bucket) {
|
|
316
|
+
const distinctValues = [...new Set((this.data || []).map(slice.bucket))].sort();
|
|
317
|
+
return {
|
|
318
|
+
...slice,
|
|
319
|
+
categories: distinctValues.map((v) => ({
|
|
320
|
+
key: v, label: v,
|
|
321
|
+
filter: (row) => slice.bucket(row) === v,
|
|
322
|
+
})),
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
const distinctValues = this._computeDistinctValues(slice.columnKey);
|
|
326
|
+
return {
|
|
327
|
+
...slice,
|
|
328
|
+
categories: distinctValues.map((v) => this._buildCategoryFromValue(slice.columnKey, v)),
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
_buildCategoryFromValue(columnKey, v) {
|
|
332
|
+
if (v === EMPTY_CATEGORY_KEY) {
|
|
333
|
+
return {
|
|
334
|
+
key: EMPTY_CATEGORY_KEY,
|
|
335
|
+
label: EMPTY_CATEGORY_LABEL,
|
|
336
|
+
filter: (row) => {
|
|
337
|
+
const val = this._getLazyAwareValue(columnKey, row);
|
|
338
|
+
return val == null || val === '';
|
|
339
|
+
},
|
|
340
|
+
};
|
|
341
|
+
}
|
|
342
|
+
return {
|
|
343
|
+
key: v, label: v,
|
|
344
|
+
filter: (row) => String(this._getLazyAwareValue(columnKey, row) ?? '') === v,
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
_computeDistinctValues(columnKey) {
|
|
348
|
+
const rawValues = (this.data || []).map((row) => {
|
|
349
|
+
const val = this._getLazyAwareValue(columnKey, row);
|
|
350
|
+
return val != null && val !== '' ? String(val) : null;
|
|
351
|
+
});
|
|
352
|
+
const distinct = [...new Set(rawValues.filter((v) => v !== null))].sort();
|
|
353
|
+
if (rawValues.some(v => v === null))
|
|
354
|
+
distinct.push(EMPTY_CATEGORY_KEY);
|
|
355
|
+
return distinct;
|
|
356
|
+
}
|
|
357
|
+
_getLazyAwareValue(columnKey, row) {
|
|
358
|
+
const colDef = (this.columns || []).find(c => c.key === columnKey);
|
|
359
|
+
if (colDef?.lazy) {
|
|
360
|
+
return this.lazyData.get(columnKey)?.get(row) ?? null;
|
|
361
|
+
}
|
|
362
|
+
if (colDef?.value) {
|
|
363
|
+
return colDef.value(row, 0);
|
|
364
|
+
}
|
|
365
|
+
return row[columnKey];
|
|
366
|
+
}
|
|
367
|
+
_rebuildCache() {
|
|
368
|
+
const previousSlices = this._cachedSlices;
|
|
369
|
+
const previousActiveKeys = this.activeKeysBySlice;
|
|
370
|
+
const allSlices = [...(this.sliceConfigs || []), ...this._dynamicSlices.map((d) => d.slice)];
|
|
371
|
+
this._cachedSlices = allSlices.map((slice) => this._materializeSlice(slice));
|
|
372
|
+
const previousKeysByIdentity = new Map();
|
|
373
|
+
previousSlices.forEach((slice, index) => {
|
|
374
|
+
const activeKeys = previousActiveKeys.get(index);
|
|
375
|
+
if (!activeKeys || activeKeys.size === 0)
|
|
376
|
+
return;
|
|
377
|
+
previousKeysByIdentity.set(this._getSliceIdentity(slice, index), new Set(activeKeys));
|
|
378
|
+
});
|
|
379
|
+
const nextActiveKeys = new Map();
|
|
380
|
+
this._cachedSlices.forEach((slice, index) => {
|
|
381
|
+
const previousKeys = previousKeysByIdentity.get(this._getSliceIdentity(slice, index));
|
|
382
|
+
if (!previousKeys || previousKeys.size === 0)
|
|
383
|
+
return;
|
|
384
|
+
const availableKeys = new Set((slice.categories || []).map((c) => c.key));
|
|
385
|
+
const matchingKeys = [...previousKeys].filter((key) => availableKeys.has(key));
|
|
386
|
+
if (matchingKeys.length > 0)
|
|
387
|
+
nextActiveKeys.set(index, new Set(matchingKeys));
|
|
388
|
+
});
|
|
389
|
+
this.activeKeysBySlice = nextActiveKeys;
|
|
390
|
+
this._countCache.clear();
|
|
391
|
+
}
|
|
392
|
+
_refreshDynamicSlices() {
|
|
393
|
+
this._dynamicSlices = this._dynamicSlices.map(({ key, slice }) => {
|
|
394
|
+
const distinctValues = this._computeDistinctValues(key);
|
|
395
|
+
return {
|
|
396
|
+
key,
|
|
397
|
+
slice: {
|
|
398
|
+
...slice,
|
|
399
|
+
categories: distinctValues.map((v) => this._buildCategoryFromValue(key, v)),
|
|
400
|
+
},
|
|
401
|
+
};
|
|
402
|
+
});
|
|
403
|
+
}
|
|
404
|
+
_scrollSliceTitleIntoView(sliceIndex) {
|
|
405
|
+
setTimeout(() => {
|
|
406
|
+
const body = this.slicePanelBodyRef?.nativeElement;
|
|
407
|
+
if (!body)
|
|
408
|
+
return;
|
|
409
|
+
const el = body.querySelector(`[data-slice-index="${sliceIndex}"]`);
|
|
410
|
+
el?.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
|
|
411
|
+
}, 50);
|
|
412
|
+
}
|
|
413
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SlicePanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
414
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: SlicePanelComponent, isStandalone: true, selector: "slice-panel", inputs: { sliceConfigs: "sliceConfigs", columns: "columns", data: "data", lazyData: "lazyData", lazyStatus: "lazyStatus", showToggle: "showToggle", showCounts: "showCounts", collapsedByDefault: "collapsedByDefault", alwaysShow: "alwaysShow" }, outputs: { filterChange: "filterChange", activeKeysChange: "activeKeysChange", dynamicSliceKeysChange: "dynamicSliceKeysChange", collapsedChange: "collapsedChange" }, host: { properties: { "class.collapsed": "this.hostCollapsed" } }, viewQueries: [{ propertyName: "slicePanelBodyRef", first: true, predicate: ["slicePanelBody"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"slice-panel-wrapper\" [class.collapsed]=\"isCollapsed\">\n <aside class=\"slice-panel\" [class.collapsed]=\"isCollapsed\">\n <div class=\"slice-panel-header\">\n <span *ngIf=\"!isCollapsed\" class=\"slice-panel-title\">\n {{ i18n.filterPanelTitle(slices.length) }}\n </span>\n <button\n *ngIf=\"showToggle\"\n type=\"button\"\n class=\"slice-toggle\"\n [attr.aria-label]=\"isCollapsed ? i18n.expandFilterTitle : i18n.collapseFilterTitle\"\n (click)=\"togglePanel()\"\n >\n <mat-icon class=\"slice-toggle-mat-icon\">{{ isCollapsed ? 'filter_list' : 'filter_list_off' }}</mat-icon>\n </button>\n </div>\n\n <div class=\"slice-panel-body\" *ngIf=\"!isCollapsed\" #slicePanelBody>\n <ng-container *ngFor=\"let slice of slices; let si = index; trackBy: trackBySliceIndex\">\n <div class=\"slice-title-row\" [attr.data-slice-index]=\"si\" (click)=\"toggleSliceCollapse(si)\">\n <span class=\"slice-title-chevron\" [class.expanded]=\"!isSliceCollapsed(si)\">\u203A</span>\n <mat-icon *ngIf=\"getSliceIcon(slice)\" class=\"slice-title-icon\">{{ getSliceIcon(slice) }}</mat-icon>\n <p class=\"slice-title\">{{ slice.title || i18n.filterBlockDefaultTitle }}</p>\n <button\n *ngIf=\"isSliceDynamic(si)\"\n type=\"button\"\n class=\"slice-remove-btn\"\n (click)=\"$event.stopPropagation(); removeDynamicSlice(si)\"\n >\u00D7</button>\n </div>\n\n <div class=\"slice-section-items\" *ngIf=\"!isSliceCollapsed(si)\">\n <ng-container *ngIf=\"isSliceLoading(si); else sliceContent\">\n <div class=\"slice-lazy-loading\">\n <span class=\"lazy-skeleton\"></span>\n <span class=\"lazy-skeleton\"></span>\n <span class=\"lazy-skeleton\"></span>\n </div>\n </ng-container>\n <ng-template #sliceContent>\n <ng-container *ngFor=\"let category of slice.categories; trackBy: trackByCategoryKey\">\n <button\n *ngIf=\"sliceCategoryCount(si, category.key) > 0\"\n class=\"slice-item\"\n type=\"button\"\n [class.active]=\"isSliceCategoryActive(si, category.key)\"\n [attr.data-category-key]=\"category.key\"\n [title]=\"category.label\"\n (click)=\"onSliceCategorySelected(si, category.key)\"\n >\n <span>{{ category.label }}</span>\n <span *ngIf=\"showCounts\">{{ sliceCategoryCount(si, category.key) }}</span>\n </button>\n </ng-container>\n <div *ngIf=\"isSliceEmpty(si)\" class=\"slice-empty-state\">{{ i18n.filterEmptyState }}</div>\n </ng-template>\n </div>\n\n <hr *ngIf=\"si < slices.length - 1\" class=\"slice-divider\" />\n </ng-container>\n </div>\n </aside>\n</div>\n", styles: [":host{display:block;height:100%;min-height:0;box-sizing:border-box}.slice-panel-wrapper{height:100%;max-height:100%;overflow-y:auto;box-sizing:border-box}.slice-panel{margin-top:0;border:1px solid var(--jqt-border-color);border-radius:10px;background:var(--jqt-surface-color);display:flex;flex-direction:column;min-width:0;height:100%;overflow:hidden;box-sizing:border-box}.slice-panel-header{flex-shrink:0;display:flex;justify-content:flex-end;align-items:center;height:34px;padding:0 8px;margin-bottom:8px}.slice-panel-header:has(.slice-panel-title){justify-content:space-between;padding-left:12px}.slice-panel-body{flex:1 1 0;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:4px;padding:4px 10px 10px;scrollbar-width:thin;scrollbar-color:var(--jqt-border-color) transparent}.slice-panel-body::-webkit-scrollbar{width:2px}.slice-panel-body::-webkit-scrollbar-thumb{background:var(--jqt-primary-color);border-radius:4px}.slice-panel-title{margin:0;padding-top:2px;font-size:11px;font-weight:700;line-height:1;text-transform:uppercase;letter-spacing:.08em;color:var(--jqt-text-color);-webkit-user-select:none;user-select:none;align-self:center;display:inline-flex;align-items:center;gap:5px}.slice-panel-title .slice-panel-title-icon{font-size:16px;width:16px;height:16px;line-height:1;flex-shrink:0}.slice-section-items{display:flex;flex-direction:column;gap:2px;flex:0 0 auto;scrollbar-width:thin;scrollbar-color:var(--jqt-border-color) transparent}.slice-section-items::-webkit-scrollbar{width:2px}.slice-section-items .slice-empty-state{padding:8px 10px;font-size:12px;color:var(--jqt-text-muted, #9ca3af);font-style:italic;text-align:center}.slice-section-items::-webkit-scrollbar-thumb{background:var(--jqt-border-color);border-radius:4px}.slice-toggle{border:0;background:var(--jqt-surface-color);color:var(--jqt-text-color);border-radius:6px;width:22px;height:22px;padding:0;font-size:14px;text-align:center;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;line-height:1}.slice-toggle-mat-icon{font-size:16px;width:16px;height:16px;line-height:1}.slice-panel.collapsed{border-color:transparent;background:transparent;overflow:visible}.slice-panel.collapsed .slice-panel-header{height:34px;padding:0;justify-content:center;align-items:center}.slice-panel.collapsed .slice-toggle{width:34px;height:34px;border:1px solid var(--jqt-border-color);background:var(--jqt-surface-color);border-radius:8px}.slice-panel.collapsed .slice-toggle:hover{border-color:var(--jqt-text-muted)}.slice-panel.collapsed .slice-toggle .slice-toggle-mat-icon{font-size:18px;width:18px;height:18px}.slice-title-row{display:flex;align-items:center;justify-content:space-between;gap:6px;margin:4px 0 6px;cursor:pointer;-webkit-user-select:none;user-select:none}.slice-title-row:hover .slice-title{color:var(--jqt-text-color)}.slice-title-row:hover .slice-title-chevron{color:var(--jqt-text-secondary)}.slice-title-row:first-of-type .slice-title{margin-top:0}.slice-title-chevron{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;font-size:16px;line-height:1;color:var(--jqt-text-muted);transition:transform .15s ease;transform:rotate(0);position:relative;top:-1px}.slice-title-chevron.expanded{transform:rotate(90deg)}.slice-title{flex:1 1 auto;margin:0;font-size:14px;font-weight:600;color:var(--jqt-title-color)}.slice-title-icon{flex-shrink:0;font-size:14px!important;width:14px!important;height:14px!important;color:var(--jqt-title-color)}.slice-remove-btn{background:none;border:none;cursor:pointer;color:var(--jqt-border-color);font-size:12px;padding:0 2px;line-height:1;flex-shrink:0;opacity:.5;transition:opacity .15s,color .15s}.slice-remove-btn:hover{color:var(--jqt-text-secondary);opacity:1}.slice-title-row:hover .slice-remove-btn{opacity:.8}.slice-item{display:flex;justify-content:space-between;align-items:center;text-align:left;width:100%;padding:5px 10px 5px 16px;background:transparent;border:0;cursor:pointer;border-radius:8px;color:var(--jqt-text-color);box-sizing:border-box;min-width:0;gap:8px}.slice-item.active{background:var(--jqt-row-hover-bg);font-weight:600}.slice-item.slice-multi{padding-left:6px}.slice-item span:first-child{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.slice-item span:last-child{flex:0 0 auto;min-width:1.2em;text-align:right}.slice-check-box{flex:0 0 16px;width:16px;height:16px;border:1.5px solid var(--jqt-text-muted);border-radius:4px;background:var(--jqt-surface-color);display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;transition:background .15s,border-color .15s}.slice-check-box.checked{background:var(--jqt-text-secondary);border-color:var(--jqt-text-secondary)}.slice-check-box.checked:after{content:\"\";display:block;width:9px;height:5px;border-left:2px solid #fff;border-bottom:2px solid #fff;transform:rotate(-45deg) translateY(-1px)}.slice-divider{border:none;border-top:1px solid var(--jqt-border-color);margin:6px 0}.lazy-skeleton{display:block;height:12px;width:70%;border-radius:4px;background:linear-gradient(90deg,var(--jqt-border-color) 25%,var(--jqt-surface-alt-color) 50%,var(--jqt-border-color) 75%);background-size:200% 100%;animation:lazy-shimmer 1.4s ease-in-out infinite}.slice-lazy-loading{display:flex;flex-direction:column;gap:8px;padding:8px 10px}.slice-lazy-loading .lazy-skeleton{width:80%}.slice-lazy-loading .lazy-skeleton:nth-child(2){width:60%}.slice-lazy-loading .lazy-skeleton:nth-child(3){width:45%}@keyframes lazy-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
415
|
+
}
|
|
416
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SlicePanelComponent, decorators: [{
|
|
417
|
+
type: Component,
|
|
418
|
+
args: [{ standalone: true, selector: 'slice-panel', imports: [CommonModule, MatIconModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"slice-panel-wrapper\" [class.collapsed]=\"isCollapsed\">\n <aside class=\"slice-panel\" [class.collapsed]=\"isCollapsed\">\n <div class=\"slice-panel-header\">\n <span *ngIf=\"!isCollapsed\" class=\"slice-panel-title\">\n {{ i18n.filterPanelTitle(slices.length) }}\n </span>\n <button\n *ngIf=\"showToggle\"\n type=\"button\"\n class=\"slice-toggle\"\n [attr.aria-label]=\"isCollapsed ? i18n.expandFilterTitle : i18n.collapseFilterTitle\"\n (click)=\"togglePanel()\"\n >\n <mat-icon class=\"slice-toggle-mat-icon\">{{ isCollapsed ? 'filter_list' : 'filter_list_off' }}</mat-icon>\n </button>\n </div>\n\n <div class=\"slice-panel-body\" *ngIf=\"!isCollapsed\" #slicePanelBody>\n <ng-container *ngFor=\"let slice of slices; let si = index; trackBy: trackBySliceIndex\">\n <div class=\"slice-title-row\" [attr.data-slice-index]=\"si\" (click)=\"toggleSliceCollapse(si)\">\n <span class=\"slice-title-chevron\" [class.expanded]=\"!isSliceCollapsed(si)\">\u203A</span>\n <mat-icon *ngIf=\"getSliceIcon(slice)\" class=\"slice-title-icon\">{{ getSliceIcon(slice) }}</mat-icon>\n <p class=\"slice-title\">{{ slice.title || i18n.filterBlockDefaultTitle }}</p>\n <button\n *ngIf=\"isSliceDynamic(si)\"\n type=\"button\"\n class=\"slice-remove-btn\"\n (click)=\"$event.stopPropagation(); removeDynamicSlice(si)\"\n >\u00D7</button>\n </div>\n\n <div class=\"slice-section-items\" *ngIf=\"!isSliceCollapsed(si)\">\n <ng-container *ngIf=\"isSliceLoading(si); else sliceContent\">\n <div class=\"slice-lazy-loading\">\n <span class=\"lazy-skeleton\"></span>\n <span class=\"lazy-skeleton\"></span>\n <span class=\"lazy-skeleton\"></span>\n </div>\n </ng-container>\n <ng-template #sliceContent>\n <ng-container *ngFor=\"let category of slice.categories; trackBy: trackByCategoryKey\">\n <button\n *ngIf=\"sliceCategoryCount(si, category.key) > 0\"\n class=\"slice-item\"\n type=\"button\"\n [class.active]=\"isSliceCategoryActive(si, category.key)\"\n [attr.data-category-key]=\"category.key\"\n [title]=\"category.label\"\n (click)=\"onSliceCategorySelected(si, category.key)\"\n >\n <span>{{ category.label }}</span>\n <span *ngIf=\"showCounts\">{{ sliceCategoryCount(si, category.key) }}</span>\n </button>\n </ng-container>\n <div *ngIf=\"isSliceEmpty(si)\" class=\"slice-empty-state\">{{ i18n.filterEmptyState }}</div>\n </ng-template>\n </div>\n\n <hr *ngIf=\"si < slices.length - 1\" class=\"slice-divider\" />\n </ng-container>\n </div>\n </aside>\n</div>\n", styles: [":host{display:block;height:100%;min-height:0;box-sizing:border-box}.slice-panel-wrapper{height:100%;max-height:100%;overflow-y:auto;box-sizing:border-box}.slice-panel{margin-top:0;border:1px solid var(--jqt-border-color);border-radius:10px;background:var(--jqt-surface-color);display:flex;flex-direction:column;min-width:0;height:100%;overflow:hidden;box-sizing:border-box}.slice-panel-header{flex-shrink:0;display:flex;justify-content:flex-end;align-items:center;height:34px;padding:0 8px;margin-bottom:8px}.slice-panel-header:has(.slice-panel-title){justify-content:space-between;padding-left:12px}.slice-panel-body{flex:1 1 0;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:4px;padding:4px 10px 10px;scrollbar-width:thin;scrollbar-color:var(--jqt-border-color) transparent}.slice-panel-body::-webkit-scrollbar{width:2px}.slice-panel-body::-webkit-scrollbar-thumb{background:var(--jqt-primary-color);border-radius:4px}.slice-panel-title{margin:0;padding-top:2px;font-size:11px;font-weight:700;line-height:1;text-transform:uppercase;letter-spacing:.08em;color:var(--jqt-text-color);-webkit-user-select:none;user-select:none;align-self:center;display:inline-flex;align-items:center;gap:5px}.slice-panel-title .slice-panel-title-icon{font-size:16px;width:16px;height:16px;line-height:1;flex-shrink:0}.slice-section-items{display:flex;flex-direction:column;gap:2px;flex:0 0 auto;scrollbar-width:thin;scrollbar-color:var(--jqt-border-color) transparent}.slice-section-items::-webkit-scrollbar{width:2px}.slice-section-items .slice-empty-state{padding:8px 10px;font-size:12px;color:var(--jqt-text-muted, #9ca3af);font-style:italic;text-align:center}.slice-section-items::-webkit-scrollbar-thumb{background:var(--jqt-border-color);border-radius:4px}.slice-toggle{border:0;background:var(--jqt-surface-color);color:var(--jqt-text-color);border-radius:6px;width:22px;height:22px;padding:0;font-size:14px;text-align:center;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;line-height:1}.slice-toggle-mat-icon{font-size:16px;width:16px;height:16px;line-height:1}.slice-panel.collapsed{border-color:transparent;background:transparent;overflow:visible}.slice-panel.collapsed .slice-panel-header{height:34px;padding:0;justify-content:center;align-items:center}.slice-panel.collapsed .slice-toggle{width:34px;height:34px;border:1px solid var(--jqt-border-color);background:var(--jqt-surface-color);border-radius:8px}.slice-panel.collapsed .slice-toggle:hover{border-color:var(--jqt-text-muted)}.slice-panel.collapsed .slice-toggle .slice-toggle-mat-icon{font-size:18px;width:18px;height:18px}.slice-title-row{display:flex;align-items:center;justify-content:space-between;gap:6px;margin:4px 0 6px;cursor:pointer;-webkit-user-select:none;user-select:none}.slice-title-row:hover .slice-title{color:var(--jqt-text-color)}.slice-title-row:hover .slice-title-chevron{color:var(--jqt-text-secondary)}.slice-title-row:first-of-type .slice-title{margin-top:0}.slice-title-chevron{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;font-size:16px;line-height:1;color:var(--jqt-text-muted);transition:transform .15s ease;transform:rotate(0);position:relative;top:-1px}.slice-title-chevron.expanded{transform:rotate(90deg)}.slice-title{flex:1 1 auto;margin:0;font-size:14px;font-weight:600;color:var(--jqt-title-color)}.slice-title-icon{flex-shrink:0;font-size:14px!important;width:14px!important;height:14px!important;color:var(--jqt-title-color)}.slice-remove-btn{background:none;border:none;cursor:pointer;color:var(--jqt-border-color);font-size:12px;padding:0 2px;line-height:1;flex-shrink:0;opacity:.5;transition:opacity .15s,color .15s}.slice-remove-btn:hover{color:var(--jqt-text-secondary);opacity:1}.slice-title-row:hover .slice-remove-btn{opacity:.8}.slice-item{display:flex;justify-content:space-between;align-items:center;text-align:left;width:100%;padding:5px 10px 5px 16px;background:transparent;border:0;cursor:pointer;border-radius:8px;color:var(--jqt-text-color);box-sizing:border-box;min-width:0;gap:8px}.slice-item.active{background:var(--jqt-row-hover-bg);font-weight:600}.slice-item.slice-multi{padding-left:6px}.slice-item span:first-child{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.slice-item span:last-child{flex:0 0 auto;min-width:1.2em;text-align:right}.slice-check-box{flex:0 0 16px;width:16px;height:16px;border:1.5px solid var(--jqt-text-muted);border-radius:4px;background:var(--jqt-surface-color);display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;transition:background .15s,border-color .15s}.slice-check-box.checked{background:var(--jqt-text-secondary);border-color:var(--jqt-text-secondary)}.slice-check-box.checked:after{content:\"\";display:block;width:9px;height:5px;border-left:2px solid #fff;border-bottom:2px solid #fff;transform:rotate(-45deg) translateY(-1px)}.slice-divider{border:none;border-top:1px solid var(--jqt-border-color);margin:6px 0}.lazy-skeleton{display:block;height:12px;width:70%;border-radius:4px;background:linear-gradient(90deg,var(--jqt-border-color) 25%,var(--jqt-surface-alt-color) 50%,var(--jqt-border-color) 75%);background-size:200% 100%;animation:lazy-shimmer 1.4s ease-in-out infinite}.slice-lazy-loading{display:flex;flex-direction:column;gap:8px;padding:8px 10px}.slice-lazy-loading .lazy-skeleton{width:80%}.slice-lazy-loading .lazy-skeleton:nth-child(2){width:60%}.slice-lazy-loading .lazy-skeleton:nth-child(3){width:45%}@keyframes lazy-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}\n"] }]
|
|
419
|
+
}], propDecorators: { sliceConfigs: [{
|
|
420
|
+
type: Input
|
|
421
|
+
}], columns: [{
|
|
422
|
+
type: Input
|
|
423
|
+
}], data: [{
|
|
424
|
+
type: Input
|
|
425
|
+
}], lazyData: [{
|
|
426
|
+
type: Input
|
|
427
|
+
}], lazyStatus: [{
|
|
428
|
+
type: Input
|
|
429
|
+
}], showToggle: [{
|
|
430
|
+
type: Input
|
|
431
|
+
}], showCounts: [{
|
|
432
|
+
type: Input
|
|
433
|
+
}], collapsedByDefault: [{
|
|
434
|
+
type: Input
|
|
435
|
+
}], alwaysShow: [{
|
|
436
|
+
type: Input
|
|
437
|
+
}], filterChange: [{
|
|
438
|
+
type: Output
|
|
439
|
+
}], activeKeysChange: [{
|
|
440
|
+
type: Output
|
|
441
|
+
}], dynamicSliceKeysChange: [{
|
|
442
|
+
type: Output
|
|
443
|
+
}], collapsedChange: [{
|
|
444
|
+
type: Output
|
|
445
|
+
}], slicePanelBodyRef: [{
|
|
446
|
+
type: ViewChild,
|
|
447
|
+
args: ['slicePanelBody']
|
|
448
|
+
}], hostCollapsed: [{
|
|
449
|
+
type: HostBinding,
|
|
450
|
+
args: ['class.collapsed']
|
|
451
|
+
}] } });
|
|
452
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2UtcGFuZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb25ldGVtZS9qcXVlcnktb3JnYW5pemVyL3NyYy9saWIvc2xpY2UtcGFuZWwvc2xpY2UtcGFuZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb25ldGVtZS9qcXVlcnktb3JnYW5pemVyL3NyYy9saWIvc2xpY2UtcGFuZWwvc2xpY2UtcGFuZWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFpQixTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBR2pNLE1BQU0sa0JBQWtCLEdBQUcsV0FBVyxDQUFDO0FBQ3ZDLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxDQUFDO0FBRXBDLE1BQU0sSUFBSSxHQUFHO0lBQ1gsaUJBQWlCLEVBQUUsbUJBQW1CO0lBQ3RDLG1CQUFtQixFQUFFLG1CQUFtQjtJQUN4QyxnQkFBZ0IsRUFBRSxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRO0lBQ3JFLHVCQUF1QixFQUFFLFNBQVM7SUFDbEMsZ0JBQWdCLEVBQUUsZUFBZTtDQUNsQyxDQUFDO0FBVUYsTUFBTSxPQUFPLG1CQUFtQjtJQVJoQztRQVVXLGlCQUFZLEdBQXFCLEVBQUUsQ0FBQztRQUNwQyxZQUFPLEdBQXdCLEVBQUUsQ0FBQztRQUNs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QUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUksWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csc0JBQXNCO3NCQUEvQixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBRXNCLGlCQUFpQjtzQkFBN0MsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBUVMsYUFBYTtzQkFBaEQsV0FBVzt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2xpY2VDb2x1bW5EZWYsIFNsaWNlQ29uZmlnIH0gZnJvbSAnLi9zbGljZS1wYW5lbC5tb2RlbCc7XG5cbmNvbnN0IEVNUFRZX0NBVEVHT1JZX0tFWSA9ICdfX2VtcHR5X18nO1xuY29uc3QgRU1QVFlfQ0FURUdPUllfTEFCRUwgPSAnVmlkZSc7XG5cbmNvbnN0IEkxOE4gPSB7XG4gIGV4cGFuZEZpbHRlclRpdGxlOiAnRMOpcGxpZXIgbGUgZmlsdHJlJyxcbiAgY29sbGFwc2VGaWx0ZXJUaXRsZTogJ1JlcGxpZXIgbGUgZmlsdHJlJyxcbiAgZmlsdGVyUGFuZWxUaXRsZTogKGNvdW50OiBudW1iZXIpID0+IGNvdW50ID4gMSA/ICdGaWx0cmVzJyA6ICdGaWx0cmUnLFxuICBmaWx0ZXJCbG9ja0RlZmF1bHRUaXRsZTogJ0ZpbHRyZXInLFxuICBmaWx0ZXJFbXB0eVN0YXRlOiAnQXVjdW5lIGRvbm7DqWUnLFxufTtcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnc2xpY2UtcGFuZWwnLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBNYXRJY29uTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3NsaWNlLXBhbmVsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2xpY2UtcGFuZWwuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNsaWNlUGFuZWxDb21wb25lbnQ8VCA9IGFueT4gaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCB7XG5cbiAgQElucHV0KCkgc2xpY2VDb25maWdzOiBTbGljZUNvbmZpZzxUPltdID0gW107XG4gIEBJbnB1dCgpIGNvbHVtbnM6IFNsaWNlQ29sdW1uRGVmPFQ+W10gPSBbXTtcbiAgQElucHV0KCkgZGF0YTogVFtdID0gW107XG4gIEBJbnB1dCgpIGxhenlEYXRhOiBNYXA8c3RyaW5nLCBNYXA8YW55LCBhbnk+PiA9IG5ldyBNYXAoKTtcbiAgQElucHV0KCkgbGF6eVN0YXR1czogTWFwPHN0cmluZywgJ2lkbGUnIHwgJ2xvYWRpbmcnIHwgJ2xvYWRlZCcgfCAnZXJyb3InPiA9IG5ldyBNYXAoKTtcbiAgQElucHV0KCkgc2hvd1RvZ2dsZSA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dDb3VudHMgPSB0cnVlO1xuICBASW5wdXQoKSBjb2xsYXBzZWRCeURlZmF1bHQgPSBmYWxzZTtcbiAgQElucHV0KCkgYWx3YXlzU2hvdyA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSBmaWx0ZXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPChyb3c6IFQpID0+IGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBhY3RpdmVLZXlzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmdbXVtdPigpO1xuICBAT3V0cHV0KCkgZHluYW1pY1NsaWNlS2V5c0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KCk7XG4gIEBPdXRwdXQoKSBjb2xsYXBzZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgQFZpZXdDaGlsZCgnc2xpY2VQYW5lbEJvZHknKSBzbGljZVBhbmVsQm9keVJlZj86IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gIHByaXZhdGUgX2NkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgcmVhZG9ubHkgaTE4biA9IEkxOE47XG5cbiAgaXNDb2xsYXBzZWQgPSBmYWxzZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmNvbGxhcHNlZCcpIGdldCBob3N0Q29sbGFwc2VkKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5pc0NvbGxhcHNlZDsgfVxuICBhY3RpdmVLZXlzQnlTbGljZTogTWFwPG51bWJlciwgU2V0PHN0cmluZz4+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIF9leHBhbmRlZFNsaWNlcyA9IG5ldyBTZXQ8bnVtYmVyPigpO1xuICBfZHluYW1pY1NsaWNlczogQXJyYXk8eyBrZXk6IHN0cmluZzsgc2xpY2U6IFNsaWNlQ29uZmlnPFQ+IH0+ID0gW107XG5cbiAgX2NhY2hlZFNsaWNlczogU2xpY2VDb25maWc8VD5bXSA9IFtdO1xuICBwcml2YXRlIF9jb3VudENhY2hlID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcblxuICByZWFkb25seSB0cmFja0J5U2xpY2VJbmRleCA9IChpbmRleDogbnVtYmVyLCBfOiBhbnkpOiBudW1iZXIgPT4gaW5kZXg7XG4gIHJlYWRvbmx5IHRyYWNrQnlDYXRlZ29yeUtleSA9IChfOiBudW1iZXIsIGNhdDogYW55KTogc3RyaW5nID0+IGNhdC5rZXk7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pc0NvbGxhcHNlZCA9IHRoaXMuY29sbGFwc2VkQnlEZWZhdWx0O1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydzbGljZUNvbmZpZ3MnXSB8fCBjaGFuZ2VzWydkYXRhJ10gfHwgY2hhbmdlc1snY29sdW1ucyddIHx8IGNoYW5nZXNbJ2xhenlEYXRhJ10gfHwgY2hhbmdlc1snbGF6eVN0YXR1cyddKSB7XG4gICAgICB0aGlzLl9yZWZyZXNoRHluYW1pY1NsaWNlcygpO1xuICAgICAgdGhpcy5fcmVidWlsZENhY2hlKCk7XG4gICAgICBjb25zdCBzaG91bGRSZWVtaXRGaWx0ZXIgPSAhIShjaGFuZ2VzWydkYXRhJ10gfHwgY2hhbmdlc1snY29sdW1ucyddIHx8IGNoYW5nZXNbJ2xhenlEYXRhJ10gfHwgY2hhbmdlc1snbGF6eVN0YXR1cyddKTtcbiAgICAgIGNvbnN0IGhhc0FjdGl2ZUZpbHRlcnMgPSBbLi4udGhpcy5hY3RpdmVLZXlzQnlTbGljZS52YWx1ZXMoKV0uc29tZShzID0+IHMuc2l6ZSA+IDApO1xuICAgICAgaWYgKGhhc0FjdGl2ZUZpbHRlcnMgJiYgc2hvdWxkUmVlbWl0RmlsdGVyKSB7XG4gICAgICAgIHRoaXMuX2VtaXRGaWx0ZXIoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBnZXQgc2hvd1BhbmVsKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGhhc0NmZyA9ICh0aGlzLnNsaWNlQ29uZmlncyB8fCBbXSkubGVuZ3RoID4gMCB8fCB0aGlzLl9keW5hbWljU2xpY2VzLmxlbmd0aCA+IDA7XG4gICAgaWYgKHRoaXMuYWx3YXlzU2hvdykgcmV0dXJuIGhhc0NmZztcbiAgICByZXR1cm4gaGFzQ2ZnICYmICh0aGlzLmRhdGE/Lmxlbmd0aCA/PyAwKSA+IDA7XG4gIH1cblxuICBnZXQgc2xpY2VzKCk6IFNsaWNlQ29uZmlnPFQ+W10ge1xuICAgIHJldHVybiB0aGlzLl9jYWNoZWRTbGljZXM7XG4gIH1cblxuICBnZXQgc3RhdGljU2xpY2VDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiAodGhpcy5zbGljZUNvbmZpZ3MgfHwgW10pLmxlbmd0aDtcbiAgfVxuXG4gIGdldCBzdGF0aWNTbGljZXNGb3JNZW51KCk6IEFycmF5PHsga2V5OiBzdHJpbmc7IHRpdGxlOiBzdHJpbmcgfT4ge1xuICAgIHJldHVybiAodGhpcy5zbGljZUNvbmZpZ3MgfHwgW10pXG4gICAgICAuZmlsdGVyKChzKSA9PiAhIXMuY29sdW1uS2V5KVxuICAgICAgLm1hcCgocykgPT4gKHsga2V5OiBzLmNvbHVtbktleSEsIHRpdGxlOiBzLnRpdGxlIHx8IHMuY29sdW1uS2V5ISB9KSk7XG4gIH1cblxuICBnZXQgYWN0aXZlRHluYW1pY1NsaWNlQ29sdW1ucygpOiBTbGljZUNvbHVtbkRlZjxUPltdIHtcbiAgICByZXR1cm4gdGhpcy5fZHluYW1pY1NsaWNlc1xuICAgICAgLm1hcCgoZCkgPT4gKHRoaXMuY29sdW1ucyB8fCBbXSkuZmluZCgoYykgPT4gYy5rZXkgPT09IGQua2V5KSlcbiAgICAgIC5maWx0ZXIoKGMpOiBjIGlzIFNsaWNlQ29sdW1uRGVmPFQ+ID0+ICEhYyk7XG4gIH1cblxuICBnZXQgYXZhaWxhYmxlQ29sdW1uc0ZvckR5bmFtaWNTbGljZSgpOiBTbGljZUNvbHVtbkRlZjxUPltdIHtcbiAgICBjb25zdCBkeW5hbWljS2V5cyA9IG5ldyBTZXQodGhpcy5fZHluYW1pY1NsaWNlcy5tYXAoKGQpID0+IGQua2V5KSk7XG4gICAgY29uc3Qgc3RhdGljS2V5cyA9IG5ldyBTZXQoXG4gICAgICAodGhpcy5zbGljZUNvbmZpZ3MgfHwgW10pLm1hcCgocykgPT4gcy5jb2x1bW5LZXkpLmZpbHRlcigoayk6IGsgaXMgc3RyaW5nID0+ICEhaylcbiAgICApO1xuICAgIGNvbnN0IGV4aXN0aW5nS2V5cyA9IG5ldyBTZXQoWy4uLmR5bmFtaWNLZXlzLCAuLi5zdGF0aWNLZXlzXSk7XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIHJldHVybiAodGhpcy5jb2x1bW5zIHx8IFtdKS5maWx0ZXIoKGMpID0+IHtcbiAgICAgIGlmIChleGlzdGluZ0tleXMuaGFzKGMua2V5KSB8fCBzZWVuLmhhcyhjLmtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgIHNlZW4uYWRkKGMua2V5KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgaXNTbGljZUNvbGxhcHNlZChzbGljZUluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5fY2FjaGVkU2xpY2VzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2V4cGFuZGVkU2xpY2VzLmhhcygtMSAtIHNsaWNlSW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gIXRoaXMuX2V4cGFuZGVkU2xpY2VzLmhhcyhzbGljZUluZGV4KTtcbiAgfVxuXG4gIHRvZ2dsZVNsaWNlQ29sbGFwc2Uoc2xpY2VJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2xpY2VzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgY2xvc2VkS2V5ID0gLTEgLSBzbGljZUluZGV4O1xuICAgICAgaWYgKHRoaXMuX2V4cGFuZGVkU2xpY2VzLmhhcyhjbG9zZWRLZXkpKSB7XG4gICAgICAgIHRoaXMuX2V4cGFuZGVkU2xpY2VzLmRlbGV0ZShjbG9zZWRLZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fZXhwYW5kZWRTbGljZXMuYWRkKGNsb3NlZEtleSk7XG4gICAgICAgIHRoaXMuX3Njcm9sbFNsaWNlVGl0bGVJbnRvVmlldyhzbGljZUluZGV4KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuX2V4cGFuZGVkU2xpY2VzLmhhcyhzbGljZUluZGV4KSkge1xuICAgICAgICB0aGlzLl9leHBhbmRlZFNsaWNlcy5kZWxldGUoc2xpY2VJbmRleCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9leHBhbmRlZFNsaWNlcy5jbGVhcigpO1xuICAgICAgICB0aGlzLl9leHBhbmRlZFNsaWNlcy5hZGQoc2xpY2VJbmRleCk7XG4gICAgICAgIHRoaXMuX3Njcm9sbFNsaWNlVGl0bGVJbnRvVmlldyhzbGljZUluZGV4KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgdG9nZ2xlUGFuZWwoKTogdm9pZCB7XG4gICAgdGhpcy5pc0NvbGxhcHNlZCA9ICF0aGlzLmlzQ29sbGFwc2VkO1xuICAgIHRoaXMuY29sbGFwc2VkQ2hhbmdlLmVtaXQodGhpcy5pc0NvbGxhcHNlZCk7XG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgaXNTbGljZUR5bmFtaWMoc2xpY2VJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHNsaWNlSW5kZXggPj0gdGhpcy5zdGF0aWNTbGljZUNvdW50O1xuICB9XG5cbiAgaXNTbGljZUxvYWRpbmcoc2xpY2VJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc3RhdGljU2xpY2UgPSAodGhpcy5zbGljZUNvbmZpZ3MgfHwgW10pW3NsaWNlSW5kZXhdO1xuICAgIGlmIChzdGF0aWNTbGljZT8uY29sdW1uS2V5KSB7XG4gICAgICBjb25zdCBjb2xEZWYgPSAodGhpcy5jb2x1bW5zIHx8IFtdKS5maW5kKGMgPT4gYy5rZXkgPT09IHN0YXRpY1NsaWNlLmNvbHVtbktleSk7XG4gICAgICBpZiAoY29sRGVmPy5sYXp5KSB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMubGF6eVN0YXR1cy5nZXQoc3RhdGljU2xpY2UuY29sdW1uS2V5ISkgPz8gJ2lkbGUnO1xuICAgICAgICByZXR1cm4gc3RhdHVzID09PSAnbG9hZGluZycgfHwgc3RhdHVzID09PSAnaWRsZSc7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGtleSA9IHRoaXMuX2dldER5bmFtaWNTbGljZUNvbHVtbktleShzbGljZUluZGV4KTtcbiAgICBpZiAoIWtleSkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGNvbERlZiA9ICh0aGlzLmNvbHVtbnMgfHwgW10pLmZpbmQoYyA9PiBjLmtleSA9PT0ga2V5KTtcbiAgICBpZiAoIWNvbERlZj8ubGF6eSkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMubGF6eVN0YXR1cy5nZXQoa2V5KSA/PyAnaWRsZSc7XG4gICAgcmV0dXJuIHN0YXR1cyA9PT0gJ2xvYWRpbmcnIHx8IHN0YXR1cyA9PT0gJ2lkbGUnO1xuICB9XG5cbiAgaXNTdGF0aWNTbGljZVZpc2libGUoX2NvbHVtbktleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBnZXRTbGljZUljb24oc2xpY2U6IFNsaWNlQ29uZmlnPFQ+KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoc2xpY2UuaWNvbikgcmV0dXJuIHNsaWNlLmljb247XG4gICAgaWYgKHNsaWNlLmNvbHVtbktleSkge1xuICAgICAgcmV0dXJuICh0aGlzLmNvbHVtbnMgfHwgW10pLmZpbmQoYyA9PiBjLmtleSA9PT0gc2xpY2UuY29sdW1uS2V5KT8uaWNvbjtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlzU2xpY2VDYXRlZ29yeUFjdGl2ZShzbGljZUluZGV4OiBudW1iZXIsIGNhdGVnb3J5S2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVLZXlzQnlTbGljZS5nZXQoc2xpY2VJbmRleCk/LmhhcyhjYXRlZ29yeUtleSkgPz8gZmFsc2U7XG4gIH1cblxuICBpc1NsaWNlQWxsQWN0aXZlKHNsaWNlSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5hY3RpdmVLZXlzQnlTbGljZS5oYXMoc2xpY2VJbmRleCkgfHwgdGhpcy5hY3RpdmVLZXlzQnlTbGljZS5nZXQoc2xpY2VJbmRleCkhLnNpemUgPT09IDA7XG4gIH1cblxuICBzbGljZUNhdGVnb3J5Q291bnQoc2xpY2VJbmRleDogbnVtYmVyLCBjYXRlZ29yeUtleTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCBjYWNoZUtleSA9IGAke3NsaWNlSW5kZXh9OiR7Y2F0ZWdvcnlLZXl9YDtcbiAgICBpZiAodGhpcy5fY291bnRDYWNoZS5oYXMoY2FjaGVLZXkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY291bnRDYWNoZS5nZXQoY2FjaGVLZXkpITtcbiAgICB9XG4gICAgY29uc3Qgc2xpY2UgPSB0aGlzLl9jYWNoZWRTbGljZXNbc2xpY2VJbmRleF07XG4gICAgaWYgKCFzbGljZSkgcmV0dXJuIDA7XG4gICAgY29uc3QgY2F0ZWdvcnkgPSAoc2xpY2UuY2F0ZWdvcmllcyB8fCBbXSkuZmluZCgoYykgPT4gYy5rZXkgPT09IGNhdGVnb3J5S2V5KTtcbiAgICBjb25zdCBjb3VudCA9IGNhdGVnb3J5ID8gKHRoaXMuZGF0YSB8fCBbXSkuZmlsdGVyKChyb3cpID0+IGNhdGVnb3J5LmZpbHRlciA/IGNhdGVnb3J5LmZpbHRlcihyb3cpIDogdHJ1ZSkubGVuZ3RoIDogMDtcbiAgICB0aGlzLl9jb3VudENhY2hlLnNldChjYWNoZUtleSwgY291bnQpO1xuICAgIHJldHVybiBjb3VudDtcbiAgfVxuXG4gIGlzU2xpY2VFbXB0eShzbGljZUluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBzbGljZSA9IHRoaXMuX2NhY2hlZFNsaWNlc1tzbGljZUluZGV4XTtcbiAgICBpZiAoIXNsaWNlKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gKHNsaWNlLmNhdGVnb3JpZXMgfHwgW10pLmV2ZXJ5KGMgPT4gdGhpcy5zbGljZUNhdGVnb3J5Q291bnQoc2xpY2VJbmRleCwgYy5rZXkpID09PSAwKTtcbiAgfVxuXG4gIG9uU2xpY2VDYXRlZ29yeVNlbGVjdGVkKHNsaWNlSW5kZXg6IG51bWJlciwgY2F0ZWdvcnlLZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHNsaWNlID0gdGhpcy5zbGljZXNbc2xpY2VJbmRleF07XG4gICAgaWYgKCFzbGljZSkgcmV0dXJuO1xuICAgIGlmICghdGhpcy5hY3RpdmVLZXlzQnlTbGljZS5oYXMoc2xpY2VJbmRleCkpIHtcbiAgICAgIHRoaXMuYWN0aXZlS2V5c0J5U2xpY2Uuc2V0KHNsaWNlSW5kZXgsIG5ldyBTZXQoKSk7XG4gICAgfVxuICAgIGNvbnN0IGFjdGl2ZUtleXMgPSB0aGlzLmFjdGl2ZUtleXNCeVNsaWNlLmdldChzbGljZUluZGV4KSE7XG4gICAgaWYgKHNsaWNlLm11bHRpU2VsZWN0ID09PSBmYWxzZSkge1xuICAgICAgaWYgKGFjdGl2ZUtleXMuaGFzKGNhdGVnb3J5S2V5KSkge1xuICAgICAgICBhY3RpdmVLZXlzLmNsZWFyKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY3RpdmVLZXlzLmNsZWFyKCk7XG4gICAgICAgIGFjdGl2ZUtleXMuYWRkKGNhdGVnb3J5S2V5KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGFjdGl2ZUtleXMuaGFzKGNhdGVnb3J5S2V5KSkge1xuICAgICAgICBhY3RpdmVLZXlzLmRlbGV0ZShjYXRlZ29yeUtleSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY3RpdmVLZXlzLmFkZChjYXRlZ29yeUtleSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2VtaXRGaWx0ZXIoKTtcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvblNsaWNlQWxsU2VsZWN0ZWQoc2xpY2VJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYWN0aXZlS2V5c0J5U2xpY2UuaGFzKHNsaWNlSW5kZXgpKSB7XG4gICAgICB0aGlzLmFjdGl2ZUtleXNCeVNsaWNlLmdldChzbGljZUluZGV4KSEuY2xlYXIoKTtcbiAgICB9XG4gICAgdGhpcy5fZW1pdEZpbHRlcigpO1xuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGdldEFjdGl2ZUZpbHRlcnMoKTogUmVjb3JkPG51bWJlciwgc3RyaW5nW10+IHtcbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxudW1iZXIsIHN0cmluZ1tdPiA9IHt9O1xuICAgIHRoaXMuX2NhY2hlZFNsaWNlcy5mb3JFYWNoKChfLCBpZHgpID0+IHtcbiAgICAgIGNvbnN0IGtleXMgPSB0aGlzLmFjdGl2ZUtleXNCeVNsaWNlLmdldChpZHgpO1xuICAgICAgcmVzdWx0W2lkeF0gPSBrZXlzID8gWy4uLmtleXNdIDogW107XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHJlc3RvcmVGaWx0ZXJzKGZpbHRlcnM6IFJlY29yZDxudW1iZXIsIHN0cmluZ1tdPik6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlS2V5c0J5U2xpY2UgPSBuZXcgTWFwKFxuICAgICAgT2JqZWN0LmVudHJpZXMoZmlsdGVycykubWFwKChbaWR4LCBrZXlzXSkgPT4gW051bWJlcihpZHgpLCBuZXcgU2V0KGtleXMpXSlcbiAgICApO1xuICAgIHRoaXMuX2VtaXRGaWx0ZXIoKTtcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBhZGREeW5hbWljU2xpY2UoY29sdW1uOiBTbGljZUNvbHVtbkRlZjxUPik6IHZvaWQge1xuICAgIGNvbnN0IGRpc3RpbmN0VmFsdWVzID0gdGhpcy5fY29tcHV0ZURpc3RpbmN0VmFsdWVzKGNvbHVtbi5rZXkpO1xuICAgIGNvbnN0IG5ld1NsaWNlOiBTbGljZUNvbmZpZzxUPiA9IHtcbiAgICAgIHRpdGxlOiBjb2x1bW4uaGVhZGVyLFxuICAgICAgY29sdW1uS2V5OiBjb2x1bW4ua2V5LFxuICAgICAgY2F0ZWdvcmllczogZGlzdGluY3RWYWx1ZXMubWFwKCh2KSA9PiB0aGlzLl9idWlsZENhdGVnb3J5RnJvbVZhbHVlKGNvbHVtbi5rZXksIHYpKSxcbiAgICB9O1xuICAgIHRoaXMuX2R5bmFtaWNTbGljZXMgPSBbLi4udGhpcy5fZHluYW1pY1NsaWNlcywgeyBrZXk6IGNvbHVtbi5rZXksIHNsaWNlOiBuZXdTbGljZSB9XTtcbiAgICB0aGlzLl9yZWJ1aWxkQ2FjaGUoKTtcbiAgICB0aGlzLmR5bmFtaWNTbGljZUtleXNDaGFuZ2UuZW1pdCh0aGlzLl9keW5hbWljU2xpY2VzLm1hcChkID0+IGQua2V5KSk7XG4gICAgdGhpcy5fZW1pdEZpbHRlcigpO1xuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHJlbW92ZUR5bmFtaWNTbGljZShzbGljZUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBkeW5hbWljSW5kZXggPSBzbGljZUluZGV4IC0gdGhpcy5zdGF0aWNTbGljZUNvdW50O1xuICAgIGlmIChkeW5hbWljSW5kZXggPCAwKSByZXR1cm47XG4gICAgY29uc3QgbmV3QWN0aXZlS2V5cyA9IG5ldyBNYXA8bnVtYmVyLCBTZXQ8c3RyaW5nPj4oKTtcbiAgICB0aGlzLmFjdGl2ZUtleXNCeVNsaWNlLmZvckVhY2goKGtleXMsIGlkeCkgPT4ge1xuICAgICAgaWYgKGlkeCA8IHNsaWNlSW5kZXgpIG5ld0FjdGl2ZUtleXMuc2V0KGlkeCwga2V5cyk7XG4gICAgICBlbHNlIGlmIChpZHggPiBzbGljZUluZGV4KSBuZXdBY3RpdmVLZXlzLnNldChpZHggLSAxLCBrZXlzKTtcbiAgICB9KTtcbiAgICB0aGlzLmFjdGl2ZUtleXNCeVNsaWNlID0gbmV3QWN0aXZlS2V5cztcbiAgICB0aGlzLl9keW5hbWljU2xpY2VzID0gdGhpcy5fZHluYW1pY1NsaWNlcy5maWx0ZXIoKF8sIGkpID0+IGkgIT09IGR5bmFtaWNJbmRleCk7XG4gICAgdGhpcy5fcmVidWlsZENhY2hlKCk7XG4gICAgdGhpcy5keW5hbWljU2xpY2VLZXlzQ2hhbmdlLmVtaXQodGhpcy5fZHluYW1pY1NsaWNlcy5tYXAoZCA9PiBkLmtleSkpO1xuICAgIHRoaXMuX2VtaXRGaWx0ZXIoKTtcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICByZW1vdmVEeW5hbWljU2xpY2VCeUtleShrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGR5bmFtaWNJbmRleCA9IHRoaXMuX2R5bmFtaWNTbGljZXMuZmluZEluZGV4KChkKSA9PiBkLmtleSA9PT0ga2V5KTtcbiAgICBpZiAoZHluYW1pY0luZGV4IDwgMCkgcmV0dXJuO1xuICAgIGNvbnN0IHNsaWNlSW5kZXggPSB0aGlzLnN0YXRpY1NsaWNlQ291bnQgKyBkeW5hbWljSW5kZXg7XG4gICAgdGhpcy5yZW1vdmVEeW5hbWljU2xpY2Uoc2xpY2VJbmRleCk7XG4gIH1cblxuICBwcml2YXRlIF9lbWl0RmlsdGVyKCk6IHZvaWQge1xuICAgIGNvbnN0IHNsaWNlcyA9IHRoaXMuc2xpY2VzO1xuICAgIGNvbnN0IGFjdGl2ZUtleXNCeVNsaWNlID0gdGhpcy5hY3RpdmVLZXlzQnlTbGljZTtcblxuICAgIHRoaXMuYWN0aXZlS2V5c0NoYW5nZS5lbWl0KFxuICAgICAgc2xpY2VzLm1hcCgoXywgaSkgPT4ge1xuICAgICAgICBjb25zdCBrZXlzID0gYWN0aXZlS2V5c0J5U2xpY2UuZ2V0KGkpO1xuICAgICAgICByZXR1cm4ga2V5cyA/IFsuLi5rZXlzXSA6IFtdO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3QgcHJlZCA9IChyb3c6IFQpOiBib29sZWFuID0+XG4gICAgICBzbGljZXMuZXZlcnkoKHNsaWNlLCBzbGljZUluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGFjdGl2ZUtleXMgPSBhY3RpdmVLZXlzQnlTbGljZS5nZXQoc2xpY2VJbmRleCk7XG4gICAgICAgIGlmICghYWN0aXZlS2V5cyB8fCBhY3RpdmVLZXlzLnNpemUgPT09IDApIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoIXNsaWNlLmNhdGVnb3JpZXMgfHwgc2xpY2UuY2F0ZWdvcmllcy5sZW5ndGggPT09IDApIHJldHVybiB0cnVlO1xuICAgICAgICByZXR1cm4gWy4uLmFjdGl2ZUtleXNdLnNvbWUoKGtleSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNhdGVnb3J5ID0gKHNsaWNlLmNhdGVnb3JpZXMgfHwgW10pLmZpbmQoKGMpID0+IGMua2V5ID09PSBrZXkpO1xuICAgICAgICAgIGlmICghY2F0ZWdvcnkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICBpZiAoIWNhdGVnb3J5Py5maWx0ZXIpIHJldHVybiB0cnVlO1xuICAgICAgICAgIHJldHVybiBjYXRlZ29yeS5maWx0ZXIocm93KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB0aGlzLmZpbHRlckNoYW5nZS5lbWl0KHByZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0RHluYW1pY1NsaWNlQ29sdW1uS2V5KHNsaWNlSW5kZXg6IG51bWJlcik6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IGR5bmFtaWNJbmRleCA9IHNsaWNlSW5kZXggLSB0aGlzLnN0YXRpY1NsaWNlQ291bnQ7XG4gICAgcmV0dXJuIHRoaXMuX2R5bmFtaWNTbGljZXNbZHluYW1pY0luZGV4XT8ua2V5ID8/IG51bGw7XG4gIH1cblxuICBwcml2YXRlIF9nZXRTbGljZUlkZW50aXR5KHNsaWNlOiBTbGljZUNvbmZpZzxUPiwgZmFsbGJhY2tJbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoc2xpY2UuY29sdW1uS2V5KSByZXR1cm4gYGNvbHVtbjoke3NsaWNlLmNvbHVtbktleX1gO1xuICAgIGlmIChzbGljZS50aXRsZSkgcmV0dXJuIGB0aXRsZToke3NsaWNlLnRpdGxlfWA7XG4gICAgY29uc3QgY2F0ZWdvcnlLZXlzID0gKHNsaWNlLmNhdGVnb3JpZXMgfHwgW10pLm1hcCgoYykgPT4gYy5rZXkpLmpvaW4oJ3wnKTtcbiAgICByZXR1cm4gYGluZGV4OiR7ZmFsbGJhY2tJbmRleH18Y2F0ZWdvcmllczoke2NhdGVnb3J5S2V5c31gO1xuICB9XG5cbiAgcHJpdmF0ZSBfbWF0ZXJpYWxpemVTbGljZShzbGljZTogU2xpY2VDb25maWc8VD4pOiBTbGljZUNvbmZpZzxUPiB7XG4gICAgaWYgKCFzbGljZS5jb2x1bW5LZXkgfHwgKHNsaWNlLmNhdGVnb3JpZXMgJiYgc2xpY2UuY2F0ZWdvcmllcy5sZW5ndGggPiAwKSkge1xuICAgICAgcmV0dXJuIHNsaWNlO1xuICAgIH1cbiAgICBjb25zdCBjb2wgPSAodGhpcy5jb2x1bW5zIHx8IFtdKS5maW5kKGMgPT4gYy5rZXkgPT09IHNsaWNlLmNvbHVtbktleSk7XG4gICAgY29uc3QgaXNMYXp5ID0gISFjb2w/Lmxhenk7XG4gICAgaWYgKGlzTGF6eSAmJiB0aGlzLmxhenlTdGF0dXMuZ2V0KHNsaWNlLmNvbHVtbktleSEpICE9PSAnbG9hZGVkJykge1xuICAgICAgcmV0dXJuIHsgLi4uc2xpY2UsIGNhdGVnb3JpZXM6IFtdIH07XG4gICAgfVxuICAgIGlmIChzbGljZS5idWNrZXQpIHtcbiAgICAgIGNvbnN0IGRpc3RpbmN0VmFsdWVzID0gWy4uLm5ldyBTZXQoKHRoaXMuZGF0YSB8fCBbXSkubWFwKHNsaWNlLmJ1Y2tldCkpXS5zb3J0KCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zbGljZSxcbiAgICAgICAgY2F0ZWdvcmllczogZGlzdGluY3RWYWx1ZXMubWFwKCh2KSA9PiAoe1xuICAgICAgICAgIGtleTogdiwgbGFiZWw6IHYsXG4gICAgICAgICAgZmlsdGVyOiAocm93OiBUKSA9PiBzbGljZS5idWNrZXQhKHJvdykgPT09IHYsXG4gICAgICAgIH0pKSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGRpc3RpbmN0VmFsdWVzID0gdGhpcy5fY29tcHV0ZURpc3RpbmN0VmFsdWVzKHNsaWNlLmNvbHVtbktleSEpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zbGljZSxcbiAgICAgIGNhdGVnb3JpZXM6IGRpc3RpbmN0VmFsdWVzLm1hcCgodikgPT4gdGhpcy5fYnVpbGRDYXRlZ29yeUZyb21WYWx1ZShzbGljZS5jb2x1bW5LZXkhLCB2KSksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX2J1aWxkQ2F0ZWdvcnlGcm9tVmFsdWUoY29sdW1uS2V5OiBzdHJpbmcsIHY6IHN0cmluZyk6IHsga2V5OiBzdHJpbmc7IGxhYmVsOiBzdHJpbmc7IGZpbHRlcjogKHJvdzogVCkgPT4gYm9vbGVhbiB9IHtcbiAgICBpZiAodiA9PT0gRU1QVFlfQ0FURUdPUllfS0VZKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IEVNUFRZX0NBVEVHT1JZX0tFWSxcbiAgICAgICAgbGFiZWw6IEVNUFRZX0NBVEVHT1JZX0xBQkVMLFxuICAgICAgICBmaWx0ZXI6IChyb3c6IFQpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWwgPSB0aGlzLl9nZXRMYXp5QXdhcmVWYWx1ZShjb2x1bW5LZXksIHJvdyk7XG4gICAgICAgICAgcmV0dXJuIHZhbCA9PSBudWxsIHx8IHZhbCA9PT0gJyc7XG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAga2V5OiB2LCBsYWJlbDogdixcbiAgICAgIGZpbHRlcjogKHJvdzogVCkgPT4gU3RyaW5nKHRoaXMuX2dldExhenlBd2FyZVZhbHVlKGNvbHVtbktleSwgcm93KSA/PyAnJykgPT09IHYsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX2NvbXB1dGVEaXN0aW5jdFZhbHVlcyhjb2x1bW5LZXk6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCByYXdWYWx1ZXMgPSAodGhpcy5kYXRhIHx8IFtdKS5tYXAoKHJvdykgPT4ge1xuICAgICAgY29uc3QgdmFsID0gdGhpcy5fZ2V0TGF6eUF3YXJlVmFsdWUoY29sdW1uS2V5LCByb3cpO1xuICAgICAgcmV0dXJuIHZhbCAhPSBudWxsICYmIHZhbCAhPT0gJycgPyBTdHJpbmcodmFsKSA6IG51bGw7XG4gICAgfSk7XG4gICAgY29uc3QgZGlzdGluY3QgPSBbLi4ubmV3IFNldChyYXdWYWx1ZXMuZmlsdGVyKCh2KTogdiBpcyBzdHJpbmcgPT4gdiAhPT0gbnVsbCkpXS5zb3J0KCk7XG4gICAgaWYgKHJhd1ZhbHVlcy5zb21lKHYgPT4gdiA9PT0gbnVsbCkpIGRpc3RpbmN0LnB1c2goRU1QVFlfQ0FURUdPUllfS0VZKTtcbiAgICByZXR1cm4gZGlzdGluY3Q7XG4gIH1cblxuICBwcml2YXRlIF9nZXRMYXp5QXdhcmVWYWx1ZShjb2x1bW5LZXk6IHN0cmluZywgcm93OiBUKTogYW55IHtcbiAgICBjb25zdCBjb2xEZWYgPSAodGhpcy5jb2x1bW5zIHx8IFtdKS5maW5kKGMgPT4gYy5rZXkgPT09IGNvbHVtbktleSk7XG4gICAgaWYgKGNvbERlZj8ubGF6eSkge1xuICAgICAgcmV0dXJuIHRoaXMubGF6eURhdGEuZ2V0KGNvbHVtbktleSk/LmdldChyb3cpID8/IG51bGw7XG4gICAgfVxuICAgIGlmIChjb2xEZWY/LnZhbHVlKSB7XG4gICAgICByZXR1cm4gKGNvbERlZi52YWx1ZSBhcyBhbnkpKHJvdywgMCk7XG4gICAgfVxuICAgIHJldHVybiAocm93IGFzIGFueSlbY29sdW1uS2V5XTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlYnVpbGRDYWNoZSgpOiB2b2lkIHtcbiAgICBjb25zdCBwcmV2aW91c1NsaWNlcyA9IHRoaXMuX2NhY2hlZFNsaWNlcztcbiAgICBjb25zdCBwcmV2aW91c0FjdGl2ZUtleXMgPSB0aGlzLmFjdGl2ZUtleXNCeVNsaWNlO1xuICAgIGNvbnN0IGFsbFNsaWNlcyA9IFsuLi4odGhpcy5zbGljZUNvbmZpZ3MgfHwgW10pLCAuLi50aGlzLl9keW5hbWljU2xpY2VzLm1hcCgoZCkgPT4gZC5zbGljZSldO1xuICAgIHRoaXMuX2NhY2hlZFNsaWNlcyA9IGFsbFNsaWNlcy5tYXAoKHNsaWNlKSA9PiB0aGlzLl9tYXRlcmlhbGl6ZVNsaWNlKHNsaWNlKSk7XG5cbiAgICBjb25zdCBwcmV2aW91c0tleXNCeUlkZW50aXR5ID0gbmV3IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+PigpO1xuICAgIHByZXZpb3VzU2xpY2VzLmZvckVhY2goKHNsaWNlLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgYWN0aXZlS2V5cyA9IHByZXZpb3VzQWN0aXZlS2V5cy5nZXQoaW5kZXgpO1xuICAgICAgaWYgKCFhY3RpdmVLZXlzIHx8IGFjdGl2ZUtleXMuc2l6ZSA9PT0gMCkgcmV0dXJuO1xuICAgICAgcHJldmlvdXNLZXlzQnlJZGVudGl0eS5zZXQodGhpcy5fZ2V0U2xpY2VJZGVudGl0eShzbGljZSwgaW5kZXgpLCBuZXcgU2V0KGFjdGl2ZUtleXMpKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IG5leHRBY3RpdmVLZXlzID0gbmV3IE1hcDxudW1iZXIsIFNldDxzdHJpbmc+PigpO1xuICAgIHRoaXMuX2NhY2hlZFNsaWNlcy5mb3JFYWNoKChzbGljZSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHByZXZpb3VzS2V5cyA9IHByZXZpb3VzS2V5c0J5SWRlbnRpdHkuZ2V0KHRoaXMuX2dldFNsaWNlSWRlbnRpdHkoc2xpY2UsIGluZGV4KSk7XG4gICAgICBpZiAoIXByZXZpb3VzS2V5cyB8fCBwcmV2aW91c0tleXMuc2l6ZSA9PT0gMCkgcmV0dXJuO1xuICAgICAgY29uc3QgYXZhaWxhYmxlS2V5cyA9IG5ldyBTZXQoKHNsaWNlLmNhdGVnb3JpZXMgfHwgW10pLm1hcCgoYykgPT4gYy5rZXkpKTtcbiAgICAgIGNvbnN0IG1hdGNoaW5nS2V5cyA9IFsuLi5wcmV2aW91c0tleXNdLmZpbHRlcigoa2V5KSA9PiBhdmFpbGFibGVLZXlzLmhhcyhrZXkpKTtcbiAgICAgIGlmIChtYXRjaGluZ0tleXMubGVuZ3RoID4gMCkgbmV4dEFjdGl2ZUtleXMuc2V0KGluZGV4LCBuZXcgU2V0KG1hdGNoaW5nS2V5cykpO1xuICAgIH0pO1xuICAgIHRoaXMuYWN0aXZlS2V5c0J5U2xpY2UgPSBuZXh0QWN0aXZlS2V5cztcbiAgICB0aGlzLl9jb3VudENhY2hlLmNsZWFyKCk7XG4gIH1cblxuICBwcml2YXRlIF9yZWZyZXNoRHluYW1pY1NsaWNlcygpOiB2b2lkIHtcbiAgICB0aGlzLl9keW5hbWljU2xpY2VzID0gdGhpcy5fZHluYW1pY1NsaWNlcy5tYXAoKHsga2V5LCBzbGljZSB9KSA9PiB7XG4gICAgICBjb25zdCBkaXN0aW5jdFZhbHVlcyA9IHRoaXMuX2NvbXB1dGVEaXN0aW5jdFZhbHVlcyhrZXkpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2V5LFxuICAgICAgICBzbGljZToge1xuICAgICAgICAgIC4uLnNsaWNlLFxuICAgICAgICAgIGNhdGVnb3JpZXM6IGRpc3RpbmN0VmFsdWVzLm1hcCgodikgPT4gdGhpcy5fYnVpbGRDYXRlZ29yeUZyb21WYWx1ZShrZXksIHYpKSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9zY3JvbGxTbGljZVRpdGxlSW50b1ZpZXcoc2xpY2VJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBib2R5ID0gdGhpcy5zbGljZVBhbmVsQm9keVJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICAgIGlmICghYm9keSkgcmV0dXJuO1xuICAgICAgY29uc3QgZWwgPSBib2R5LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLXNsaWNlLWluZGV4PVwiJHtzbGljZUluZGV4fVwiXWApIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICAgIGVsPy5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICduZWFyZXN0JyB9KTtcbiAgICB9LCA1MCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJzbGljZS1wYW5lbC13cmFwcGVyXCIgW2NsYXNzLmNvbGxhcHNlZF09XCJpc0NvbGxhcHNlZFwiPlxuICA8YXNpZGUgY2xhc3M9XCJzbGljZS1wYW5lbFwiIFtjbGFzcy5jb2xsYXBzZWRdPVwiaXNDb2xsYXBzZWRcIj5cbiAgICA8ZGl2IGNsYXNzPVwic2xpY2UtcGFuZWwtaGVhZGVyXCI+XG4gICAgICA8c3BhbiAqbmdJZj1cIiFpc0NvbGxhcHNlZFwiIGNsYXNzPVwic2xpY2UtcGFuZWwtdGl0bGVcIj5cbiAgICAgICAge3sgaTE4bi5maWx0ZXJQYW5lbFRpdGxlKHNsaWNlcy5sZW5ndGgpIH19XG4gICAgICA8L3NwYW4+XG4gICAgICA8YnV0dG9uXG4gICAgICAgICpuZ0lmPVwic2hvd1RvZ2dsZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cInNsaWNlLXRvZ2dsZVwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiaXNDb2xsYXBzZWQgPyBpMThuLmV4cGFuZEZpbHRlclRpdGxlIDogaTE4bi5jb2xsYXBzZUZpbHRlclRpdGxlXCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVBhbmVsKClcIlxuICAgICAgPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJzbGljZS10b2dnbGUtbWF0LWljb25cIj57eyBpc0NvbGxhcHNlZCA/ICdmaWx0ZXJfbGlzdCcgOiAnZmlsdGVyX2xpc3Rfb2ZmJyB9fTwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJzbGljZS1wYW5lbC1ib2R5XCIgKm5nSWY9XCIhaXNDb2xsYXBzZWRcIiAjc2xpY2VQYW5lbEJvZHk+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzbGljZSBvZiBzbGljZXM7IGxldCBzaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5U2xpY2VJbmRleFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2xpY2UtdGl0bGUtcm93XCIgW2F0dHIuZGF0YS1zbGljZS1pbmRleF09XCJzaVwiIChjbGljayk9XCJ0b2dnbGVTbGljZUNvbGxhcHNlKHNpKVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2xpY2UtdGl0bGUtY2hldnJvblwiIFtjbGFzcy5leHBhbmRlZF09XCIhaXNTbGljZUNvbGxhcHNlZChzaSlcIj7igLo8L3NwYW4+XG4gICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiZ2V0U2xpY2VJY29uKHNsaWNlKVwiIGNsYXNzPVwic2xpY2UtdGl0bGUtaWNvblwiPnt7IGdldFNsaWNlSWNvbihzbGljZSkgfX08L21hdC1pY29uPlxuICAgICAgICAgIDxwIGNsYXNzPVwic2xpY2UtdGl0bGVcIj57eyBzbGljZS50aXRsZSB8fCBpMThuLmZpbHRlckJsb2NrRGVmYXVsdFRpdGxlIH19PC9wPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiaXNTbGljZUR5bmFtaWMoc2kpXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJzbGljZS1yZW1vdmUtYnRuXCJcbiAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHJlbW92ZUR5bmFtaWNTbGljZShzaSlcIlxuICAgICAgICAgID7DlzwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwic2xpY2Utc2VjdGlvbi1pdGVtc1wiICpuZ0lmPVwiIWlzU2xpY2VDb2xsYXBzZWQoc2kpXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzU2xpY2VMb2FkaW5nKHNpKTsgZWxzZSBzbGljZUNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbGljZS1sYXp5LWxvYWRpbmdcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYXp5LXNrZWxldG9uXCI+PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhenktc2tlbGV0b25cIj48L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGF6eS1za2VsZXRvblwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2xpY2VDb250ZW50PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2F0ZWdvcnkgb2Ygc2xpY2UuY2F0ZWdvcmllczsgdHJhY2tCeTogdHJhY2tCeUNhdGVnb3J5S2V5XCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAqbmdJZj1cInNsaWNlQ2F0ZWdvcnlDb3VudChzaSwgY2F0ZWdvcnkua2V5KSA+IDBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2xpY2UtaXRlbVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJpc1NsaWNlQ2F0ZWdvcnlBY3RpdmUoc2ksIGNhdGVnb3J5LmtleSlcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtY2F0ZWdvcnkta2V5XT1cImNhdGVnb3J5LmtleVwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cImNhdGVnb3J5LmxhYmVsXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TbGljZUNhdGVnb3J5U2VsZWN0ZWQoc2ksIGNhdGVnb3J5LmtleSlcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgY2F0ZWdvcnkubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzaG93Q291bnRzXCI+e3sgc2xpY2VDYXRlZ29yeUNvdW50KHNpLCBjYXRlZ29yeS5rZXkpIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzU2xpY2VFbXB0eShzaSlcIiBjbGFzcz1cInNsaWNlLWVtcHR5LXN0YXRlXCI+e3sgaTE4bi5maWx0ZXJFbXB0eVN0YXRlIH19PC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGhyICpuZ0lmPVwic2kgPCBzbGljZXMubGVuZ3RoIC0gMVwiIGNsYXNzPVwic2xpY2UtZGl2aWRlclwiIC8+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9hc2lkZT5cbjwvZGl2PlxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2UtcGFuZWwubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbmV0ZW1lL2pxdWVyeS1vcmdhbml6ZXIvc3JjL2xpYi9zbGljZS1wYW5lbC9zbGljZS1wYW5lbC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0YVByb3ZpZGVyIH0gZnJvbSAnQG9uZXRlbWUvanF1ZXJ5LWNvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNsaWNlQ2F0ZWdvcnk8VCA9IGFueT4ge1xuICBrZXk6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgZmlsdGVyPzogKHJvdzogVCkgPT4gYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTbGljZUNvbmZpZzxUID0gYW55PiB7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICBtdWx0aVNlbGVjdD86IGJvb2xlYW47XG4gIGNvbHVtbktleT86IHN0cmluZztcbiAgaGlkZGVuPzogYm9vbGVhbjtcbiAgYnVja2V0PzogKHJvdzogVCkgPT4gc3RyaW5nO1xuICBjYXRlZ29yaWVzPzogU2xpY2VDYXRlZ29yeTxUPltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNsaWNlQ29sdW1uRGVmPFQgPSBhbnk+IHtcbiAga2V5OiBzdHJpbmc7XG4gIGhlYWRlcj86IHN0cmluZztcbiAgaWNvbj86IHN0cmluZztcbiAgdmFsdWU/OiBEYXRhUHJvdmlkZXI8YW55PjtcbiAgbGF6eT86IHtcbiAgICBmZXRjaEZuOiAoKSA9PiBPYnNlcnZhYmxlPGFueVtdPjtcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25ldGVtZS1qcXVlcnktb3JnYW5pemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvb25ldGVtZS9qcXVlcnktb3JnYW5pemVyL3NyYy9vbmV0ZW1lLWpxdWVyeS1vcmdhbml6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export * from './lib/organizer-button/organizer-button.component';
|
|
2
|
+
export * from './lib/organizer-button/organizer-button.module';
|
|
3
|
+
export * from './lib/slice-panel/slice-panel.component';
|
|
4
|
+
export * from './lib/slice-panel/slice-panel.model';
|
|
5
|
+
export * from './lib/models/organizer-config.interface';
|
|
6
|
+
export * from './lib/models/organizer-menu.model';
|
|
7
|
+
export { buildYFields, resolveYKey } from './lib/models/organizer-utils';
|
|
8
|
+
export { chartConfigToOrganizer, chartConfigToState, chartConfigToUnifiedState, applyOrganizerEventToChart, resolveYUnit, } from './lib/models/organizer-chart-adapter';
|
|
9
|
+
export { OrganizerFacade, humanizeKey } from './lib/organizer-facade/organizer-facade';
|
|
10
|
+
export { GroupByManager } from './lib/group-by-manager/group-by-manager';
|
|
11
|
+
export { LazyFieldManager, LAZY_FIELD_LOADING_VALUE, LAZY_FIELD_ERROR_VALUE, } from './lib/lazy-field-manager/lazy-field-manager';
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL29uZXRlbWUvanF1ZXJ5LW9yZ2FuaXplci9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1EQUFtRCxDQUFDO0FBQ2xFLGNBQWMsZ0RBQWdELENBQUM7QUFDL0QsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyxtQ0FBbUMsQ0FBQztBQUVsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBdUIsTUFBTSw4QkFBOEIsQ0FBQztBQUU5RixPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGtCQUFrQixFQUNsQix5QkFBeUIsRUFDekIsMEJBQTBCLEVBQzFCLFlBQVksR0FLYixNQUFNLHNDQUFzQyxDQUFDO0FBRTlDLE9BQU8sRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFTdkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRXpFLE9BQU8sRUFDTCxnQkFBZ0IsRUFHaEIsd0JBQXdCLEVBQ3hCLHNCQUFzQixHQUN2QixNQUFNLDZDQUE2QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvb3JnYW5pemVyLWJ1dHRvbi9vcmdhbml6ZXItYnV0dG9uLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9vcmdhbml6ZXItYnV0dG9uL29yZ2FuaXplci1idXR0b24ubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NsaWNlLXBhbmVsL3NsaWNlLXBhbmVsLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zbGljZS1wYW5lbC9zbGljZS1wYW5lbC5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvb3JnYW5pemVyLWNvbmZpZy5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL29yZ2FuaXplci1tZW51Lm1vZGVsJztcblxuZXhwb3J0IHsgYnVpbGRZRmllbGRzLCByZXNvbHZlWUtleSwgT3JnYW5pemVyWUluZGljYXRvciB9IGZyb20gJy4vbGliL21vZGVscy9vcmdhbml6ZXItdXRpbHMnO1xuXG5leHBvcnQge1xuICBjaGFydENvbmZpZ1RvT3JnYW5pemVyLFxuICBjaGFydENvbmZpZ1RvU3RhdGUsXG4gIGNoYXJ0Q29uZmlnVG9VbmlmaWVkU3RhdGUsXG4gIGFwcGx5T3JnYW5pemVyRXZlbnRUb0NoYXJ0LFxuICByZXNvbHZlWVVuaXQsXG4gIE9yZ2FuaXplckNoYXJ0SXRlbSxcbiAgT3JnYW5pemVyQ2hhcnRTZWN0aW9uLFxuICBPcmdhbml6ZXJDaGFydENvbmZpZyxcbiAgT3JnYW5pemVyQ2hhcnRCcmlkZ2VPcHRpb25zLFxufSBmcm9tICcuL2xpYi9tb2RlbHMvb3JnYW5pemVyLWNoYXJ0LWFkYXB0ZXInO1xuXG5leHBvcnQgeyBPcmdhbml6ZXJGYWNhZGUsIGh1bWFuaXplS2V5IH0gZnJvbSAnLi9saWIvb3JnYW5pemVyLWZhY2FkZS9vcmdhbml6ZXItZmFjYWRlJztcbmV4cG9ydCB7XG4gIE9yZ2FuaXplckZpZWxkRGVmLFxuICBPcmdhbml6ZXJQYW5lbENvbmZpZyxcbiAgT3JnYW5pemVyRmllbGRzU3RhdGUsXG4gIE9yZ2FuaXplckdyb3VwQnlTdGF0ZSxcbiAgT3JnYW5pemVyU2xpY2VCeVN0YXRlLFxufSBmcm9tICcuL2xpYi9vcmdhbml6ZXItZmFjYWRlL29yZ2FuaXplci1mYWNhZGUudHlwZXMnO1xuXG5leHBvcnQgeyBHcm91cEJ5TWFuYWdlciB9IGZyb20gJy4vbGliL2dyb3VwLWJ5LW1hbmFnZXIvZ3JvdXAtYnktbWFuYWdlcic7XG5cbmV4cG9ydCB7XG4gIExhenlGaWVsZE1hbmFnZXIsXG4gIExhenlGaWVsZERlZixcbiAgTGF6eUZpZWxkQ2FsbGJhY2tzLFxuICBMQVpZX0ZJRUxEX0xPQURJTkdfVkFMVUUsXG4gIExBWllfRklFTERfRVJST1JfVkFMVUUsXG59IGZyb20gJy4vbGliL2xhenktZmllbGQtbWFuYWdlci9sYXp5LWZpZWxkLW1hbmFnZXInO1xuIl19
|