@coolon/angular-ui-powerups 16.1.0-aplpha.52 → 16.1.0-aplpha.53
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/esm2022/lib/components/components.module.mjs +8 -4
- package/esm2022/lib/components/tables/abstract-table.component.mjs +18 -3
- package/esm2022/lib/components/tables/renderer/table-body/table-body.component.mjs +139 -30
- package/esm2022/lib/components/tables/table/table.component.mjs +11 -67
- package/esm2022/lib/components/tables/tree-table/tree-table-component.mjs +7 -4
- package/esm2022/lib/interaction/components/activity-actions/activity-actions.component.mjs +3 -3
- package/esm2022/lib/services/markdown/pill-plugin.mjs +2 -2
- package/fesm2022/coolon-angular-ui-powerups.mjs +173 -99
- package/fesm2022/coolon-angular-ui-powerups.mjs.map +1 -1
- package/lib/components/components.module.d.ts +2 -1
- package/lib/components/tables/abstract-table.component.d.ts +3 -2
- package/lib/components/tables/renderer/table-body/table-body.component.d.ts +40 -12
- package/lib/components/tables/table/table.component.d.ts +4 -10
- package/lib/components/tables/tree-table/tree-table-component.d.ts +3 -0
- package/package.json +3 -2
|
@@ -1,13 +1,107 @@
|
|
|
1
1
|
import { __decorate, __metadata } from "tslib";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { DataSource } from "@angular/cdk/collections";
|
|
3
|
+
import { FixedSizeVirtualScrollStrategy } from "@angular/cdk/scrolling";
|
|
4
|
+
import { Component, HostBinding, Input } from "@angular/core";
|
|
5
|
+
import { Dsl, GarbageCollector, ListModel, MutableValueModel, Proxify, proxify, StoreInValueModel, TransactionObserver, ValueModel } from "@coolon/pectin";
|
|
6
|
+
import { TableVirtualScrollDataSource } from "ng-table-virtual-scroll";
|
|
7
|
+
import { BehaviorSubject } from "rxjs";
|
|
4
8
|
import { ResizeAwareComponent } from "../../../resize-aware.component";
|
|
5
9
|
import { AbstractTableModel } from "../../abstract-table-model";
|
|
6
10
|
import * as i0 from "@angular/core";
|
|
7
11
|
import * as i1 from "@angular/common";
|
|
8
12
|
import * as i2 from "@angular/material/table";
|
|
9
|
-
import * as i3 from "
|
|
10
|
-
import * as i4 from "
|
|
13
|
+
import * as i3 from "@angular/cdk/scrolling";
|
|
14
|
+
import * as i4 from "ng-table-virtual-scroll";
|
|
15
|
+
import * as i5 from "../table-cell/table-cell.component";
|
|
16
|
+
import * as i6 from "../table-header-cell/table-header-cell.component";
|
|
17
|
+
/**
|
|
18
|
+
* Virtual Scroll Strategy
|
|
19
|
+
*/
|
|
20
|
+
export class CustomVirtualScrollStrategy extends FixedSizeVirtualScrollStrategy {
|
|
21
|
+
garbage = new GarbageCollector();
|
|
22
|
+
constructor(rowHeight$, minBufferPx, maxBufferPx) {
|
|
23
|
+
super(rowHeight$.value, minBufferPx, maxBufferPx);
|
|
24
|
+
const { chain, when } = Dsl.disposeWith(this.garbage);
|
|
25
|
+
when(rowHeight$).changes(h => {
|
|
26
|
+
this.updateItemAndBufferSize(h, minBufferPx, maxBufferPx);
|
|
27
|
+
}, { initialValue: "triggerChangeUnlessNil" });
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export class VirtualScrollDataSource extends DataSource {
|
|
31
|
+
viewport;
|
|
32
|
+
rowHeight$;
|
|
33
|
+
garbage = new GarbageCollector();
|
|
34
|
+
virtualScrollRowRange$;
|
|
35
|
+
virtualScrollSpacerSize$;
|
|
36
|
+
totalContentSize$;
|
|
37
|
+
showVirtualScrollOffset;
|
|
38
|
+
virtualRowsObservable$ = new BehaviorSubject([]);
|
|
39
|
+
virtualScrollPixelOffset$ = new MutableValueModel(0);
|
|
40
|
+
constructor(viewport, data$, rowHeight$, pageSize$) {
|
|
41
|
+
super();
|
|
42
|
+
this.viewport = viewport;
|
|
43
|
+
this.rowHeight$ = rowHeight$;
|
|
44
|
+
const { chain, when, observe } = Dsl.disposeWith(this);
|
|
45
|
+
observe.valuesFrom(viewport.elementScrolled()).subscribe((ev) => {
|
|
46
|
+
this.virtualScrollPixelOffset$.value = ev.currentTarget.scrollTop;
|
|
47
|
+
});
|
|
48
|
+
this.virtualScrollRowRange$ = chain(this.virtualScrollPixelOffset$).map(rawPixelOffset => {
|
|
49
|
+
const startIndex = Math.floor(rawPixelOffset / this.rowHeight$.value);
|
|
50
|
+
console.log(rawPixelOffset, startIndex);
|
|
51
|
+
// const prevExtraData = startIndex > 5 ? 5 : 0;
|
|
52
|
+
const prevExtraData = 0;
|
|
53
|
+
// return rows.slice(startIndex - prevExtraData, startIndex + (pageSize$.value - prevExtraData));
|
|
54
|
+
return {
|
|
55
|
+
start: startIndex - prevExtraData,
|
|
56
|
+
end: startIndex + (pageSize$.value - prevExtraData)
|
|
57
|
+
};
|
|
58
|
+
}, {
|
|
59
|
+
dependsOn: [this.rowHeight$, pageSize$],
|
|
60
|
+
postponeWhile: chain.numericValue(pageSize$).isLessThan(1),
|
|
61
|
+
changed: (is, was) => {
|
|
62
|
+
return was?.start !== is?.start || was?.end !== is?.end;
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
this.virtualScrollSpacerSize$ = chain(this.virtualScrollRowRange$).map(range => {
|
|
66
|
+
const pixelOffset = this.rowHeight$.value * range.start;
|
|
67
|
+
return pixelOffset;
|
|
68
|
+
}, { dependsOn: this.rowHeight$ });
|
|
69
|
+
this.totalContentSize$ = chain(data$).count().map(rowCount => {
|
|
70
|
+
return this.rowHeight$.value * rowCount;
|
|
71
|
+
}, { dependsOn: rowHeight$ });
|
|
72
|
+
chain(this.virtualScrollRowRange$).mapToList(range => {
|
|
73
|
+
return data$.value.slice(range.start, range.end);
|
|
74
|
+
}, {
|
|
75
|
+
dependsOn: data$
|
|
76
|
+
}).subscribe(visibleRows => {
|
|
77
|
+
console.log(visibleRows);
|
|
78
|
+
this.virtualRowsObservable$.next(visibleRows);
|
|
79
|
+
});
|
|
80
|
+
when(this.virtualScrollSpacerSize$).changes(scrollTop => {
|
|
81
|
+
viewport.setRenderedContentOffset(scrollTop, "to-start");
|
|
82
|
+
}, { initialValue: "triggerChangeUnlessNil" });
|
|
83
|
+
when(this.totalContentSize$).changes(totalSize => {
|
|
84
|
+
viewport.setTotalContentSize(totalSize);
|
|
85
|
+
}, { initialValue: "triggerChangeUnlessNil" });
|
|
86
|
+
this.showVirtualScrollOffset = (index, rowData) => {
|
|
87
|
+
const haveScrolled = this.virtualScrollSpacerSize$.value > 0;
|
|
88
|
+
const firstRow = index === 0;
|
|
89
|
+
return index === 0 && haveScrolled;
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
dispose() {
|
|
93
|
+
this.garbage.dispose();
|
|
94
|
+
}
|
|
95
|
+
registerDisposable(disposable) {
|
|
96
|
+
return this.garbage.registerDisposable(disposable);
|
|
97
|
+
}
|
|
98
|
+
connect(collectionViewer) {
|
|
99
|
+
return this.virtualRowsObservable$;
|
|
100
|
+
}
|
|
101
|
+
disconnect(collectionViewer) {
|
|
102
|
+
// noop
|
|
103
|
+
}
|
|
104
|
+
}
|
|
11
105
|
export class TableBodyComponent extends ResizeAwareComponent {
|
|
12
106
|
#data$_accessor_storage = proxify((ListModel));
|
|
13
107
|
get data$() { return this.#data$_accessor_storage; }
|
|
@@ -21,44 +115,51 @@ export class TableBodyComponent extends ResizeAwareComponent {
|
|
|
21
115
|
#showHeader_accessor_storage = true;
|
|
22
116
|
get showHeader() { return this.#showHeader_accessor_storage; }
|
|
23
117
|
set showHeader(value) { this.#showHeader_accessor_storage = value; }
|
|
24
|
-
visibleRowCount = new EventEmitter();
|
|
25
118
|
trackBy;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
119
|
+
#scrollMode$_accessor_storage = proxify((ValueModel));
|
|
120
|
+
get scrollMode$() { return this.#scrollMode$_accessor_storage; }
|
|
121
|
+
set scrollMode$(value) { this.#scrollMode$_accessor_storage = value; }
|
|
122
|
+
#scrollMode_accessor_storage = "none";
|
|
123
|
+
get scrollMode() { return this.#scrollMode_accessor_storage; }
|
|
124
|
+
set scrollMode(value) { this.#scrollMode_accessor_storage = value; }
|
|
32
125
|
columns$;
|
|
33
126
|
columnIds$;
|
|
34
127
|
columnsById$;
|
|
35
|
-
_visibleRowCount$;
|
|
36
128
|
// TODO: support user defined header and row heights via css vars.
|
|
37
129
|
headerHeight$ = new MutableValueModel(29);
|
|
38
130
|
rowHeight$ = new MutableValueModel(40);
|
|
39
131
|
baseCssClass = "aup-table-component";
|
|
132
|
+
virtualScrollDataSource = new TableVirtualScrollDataSource();
|
|
40
133
|
constructor() {
|
|
41
134
|
super();
|
|
42
|
-
const { chain, when } = Dsl.disposeWith(this);
|
|
135
|
+
const { chain, when, observe } = Dsl.disposeWith(this);
|
|
43
136
|
const actualHeaderHeight$ = chain(this.showHeader$).map(show => {
|
|
44
137
|
return show ? this.headerHeight$.value : 0;
|
|
45
138
|
}, { dependsOn: this.headerHeight$ });
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
}, {
|
|
51
|
-
|
|
52
|
-
|
|
139
|
+
// const visibleRowCount$ = chain(this.bounds$).map(bounds => {
|
|
140
|
+
// // TODO: this doesn't take into account any css styling adjustments etc. Will investigate if it's an issue.
|
|
141
|
+
// const rawRowCount = (bounds.height - actualHeaderHeight$.value) / this.rowHeight$.value;
|
|
142
|
+
// return rawRowCount < 1 ? 0 : Math.floor(rawRowCount);
|
|
143
|
+
// }, {
|
|
144
|
+
// dependsOn: [actualHeaderHeight$, this.rowHeight$],
|
|
145
|
+
// postponeWhile: chain(this.bounds$).pluckNumeric("height").isLessThan(1)
|
|
146
|
+
// });
|
|
147
|
+
//
|
|
148
|
+
// // const pageSize$ = chain(visibleRowCount$)
|
|
149
|
+
// // .map(count => 2 * count).otherwise(0)
|
|
150
|
+
// const pageSize$ = ValueModel.constant(12)
|
|
151
|
+
when(this.data$).changes(is => {
|
|
152
|
+
this.virtualScrollDataSource.data = is;
|
|
53
153
|
});
|
|
54
|
-
when(this._visibleRowCount$).changes(visibleRows => {
|
|
55
|
-
this.visibleRowCount.emit(visibleRows);
|
|
56
|
-
}, { initialValue: "triggerChangeUnlessNil" });
|
|
57
154
|
this.onInit(() => {
|
|
58
155
|
this.columns$ = chain(this.tableModel.columns);
|
|
59
156
|
this.columnIds$ = chain(this.columns$).pluck("columnId");
|
|
60
157
|
this.columnsById$ = chain(this.columns$).indexBy('columnId');
|
|
61
158
|
});
|
|
159
|
+
const txo = new TransactionObserver({ verbose: false }).onEvent(e => console.log(e.name, e.payload));
|
|
160
|
+
// txo.observe('this.virtualScrollRowRange$', this.virtualScrollRowRange$);
|
|
161
|
+
// txo.observe('this.virtualScrollSpacerSize$', this.virtualScrollSpacerSize$);
|
|
162
|
+
// txo.observe('this.virtualRows$', this.virtualRows$);
|
|
62
163
|
}
|
|
63
164
|
get hideHeader() {
|
|
64
165
|
return !this.showHeader;
|
|
@@ -88,7 +189,7 @@ export class TableBodyComponent extends ResizeAwareComponent {
|
|
|
88
189
|
return classes;
|
|
89
190
|
}
|
|
90
191
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableBodyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
91
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: TableBodyComponent, selector: "aup-table-body", inputs: { data$: "data$", tableModel: "tableModel", showHeader$: "showHeader$", showHeader: "showHeader", trackBy: "trackBy",
|
|
192
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: TableBodyComponent, selector: "aup-table-body", inputs: { data$: "data$", tableModel: "tableModel", showHeader$: "showHeader$", showHeader: "showHeader", trackBy: "trackBy", scrollMode$: "scrollMode$", scrollMode: "scrollMode" }, host: { properties: { "attr.scrollMode": "this.scrollMode", "class": "this.baseCssClass", "class.hide-header": "this.hideHeader" } }, usesInheritance: true, ngImport: i0, template: "\n<div class=\"classic-scroll-container\" *ngIf=\"scrollMode$.value !== 'virtual'\">\n <table mat-table [dataSource]=\"data$.value\" [trackBy]=\"trackBy\" [multiTemplateDataRows]>\n\n <ng-container *ngFor=\"let column of columns$.value; index as index; first as first; last as last\"\n matColumnDef=\"{{column.columnId}}\">\n <th mat-header-cell *matHeaderCellDef [class.flex]=\"column.isFlex()\" [class.hide]=\"!column.isVisible()\">\n <aup-table-header-cell [column]=\"column\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-header-cell>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"notifyCellClicked(column, row)\"\n [class.enable-cursor]=\"tableModel.isCursorEnabled(column)\"\n [class.flex]=\"column.isFlex()\"\n [class.hide]=\"!column.isVisible()\"\n >\n <aup-table-cell [column]=\"$any(column)\"\n [row]=\"row\"\n [tableModel]=\"$any(tableModel)\"\n [editSession]=\"$any(tableModel.getEditSessionFor(row))\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-cell>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"columnIds$.value; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: columnIds$.value; let i = index\"\n [ngClass]=\"tableModel.getRowClasses(row)\"\n [class.enable-hover]=\"tableModel.isHoverEnabled()\"\n [attr.aup-row-id]=\"trackBy(i, row)\"\n ></tr>\n\n </table>\n</div>\n\n<cdk-virtual-scroll-viewport *ngIf=\"scrollMode$.value === 'virtual'\" class=\"virtual-scroll-container\" [tvsItemSize]=\"rowHeight$.value\" [headerHeight]=\"headerHeight$.value\">\n <table mat-table [dataSource]=\"virtualScrollDataSource\" [trackBy]=\"trackBy\">\n\n <ng-container *ngFor=\"let column of columns$.value; index as index; first as first; last as last\"\n matColumnDef=\"{{column.columnId}}\">\n <th mat-header-cell *matHeaderCellDef [class.flex]=\"column.isFlex()\" [class.hide]=\"!column.isVisible()\">\n <aup-table-header-cell [column]=\"column\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-header-cell>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"notifyCellClicked(column, row)\"\n [class.enable-cursor]=\"tableModel.isCursorEnabled(column)\"\n [class.flex]=\"column.isFlex()\"\n [class.hide]=\"!column.isVisible()\"\n >\n <aup-table-cell [column]=\"$any(column)\"\n [row]=\"row\"\n [tableModel]=\"$any(tableModel)\"\n [editSession]=\"$any(tableModel.getEditSessionFor(row))\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-cell>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"columnIds$.value; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: columnIds$.value; let i = index\"\n [ngClass]=\"tableModel.getRowClasses(row)\"\n [class.enable-hover]=\"tableModel.isHoverEnabled()\"\n [attr.aup-row-id]=\"trackBy(i, row)\"\n ></tr>\n\n </table>\n</cdk-virtual-scroll-viewport>\n\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch}:host table{width:100%}:host[scrollMode=virtual] cdk-virtual-scroll-viewport{flex:1}:host[scrollMode=classic]{min-height:0}:host[scrollMode=classic] .classic-scroll-container{flex:1;flex-basis:0;overflow-y:auto;display:flex;flex-direction:column;align-items:stretch}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i2.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i2.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i2.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i2.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i2.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i2.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i2.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i2.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i2.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i3.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: i4.TableItemSizeDirective, selector: "cdk-virtual-scroll-viewport[tvsItemSize]", inputs: ["tvsItemSize", "headerEnabled", "headerHeight", "footerEnabled", "footerHeight", "bufferMultiplier"] }, { kind: "component", type: i5.TableCellComponent, selector: "aup-table-cell", inputs: ["row", "column", "editSession", "tableModel"] }, { kind: "component", type: i6.TableHeaderCellComponent, selector: "aup-table-header-cell", inputs: ["column"] }] });
|
|
92
193
|
}
|
|
93
194
|
__decorate([
|
|
94
195
|
Proxify(),
|
|
@@ -106,9 +207,17 @@ __decorate([
|
|
|
106
207
|
StoreInValueModel(),
|
|
107
208
|
__metadata("design:type", Object)
|
|
108
209
|
], TableBodyComponent.prototype, "showHeader", null);
|
|
210
|
+
__decorate([
|
|
211
|
+
Proxify(),
|
|
212
|
+
__metadata("design:type", ValueModel)
|
|
213
|
+
], TableBodyComponent.prototype, "scrollMode$", null);
|
|
214
|
+
__decorate([
|
|
215
|
+
StoreInValueModel(),
|
|
216
|
+
__metadata("design:type", String)
|
|
217
|
+
], TableBodyComponent.prototype, "scrollMode", null);
|
|
109
218
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableBodyComponent, decorators: [{
|
|
110
219
|
type: Component,
|
|
111
|
-
args: [{ selector: "aup-table-body", template: "<div class=\"scroll-container\">\n <table mat-table [dataSource]=\"data$.value\" [trackBy]=\"trackBy\">\n\n <ng-container *ngFor=\"let column of columns$.value; index as index; first as first; last as last\"\n matColumnDef=\"{{column.columnId}}\">\n <th mat-header-cell *matHeaderCellDef [class.flex]=\"column.isFlex()\" [class.hide]=\"!column.isVisible()\">\n <aup-table-header-cell [column]=\"column\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-header-cell>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"notifyCellClicked(column, row)\"\n [class.enable-cursor]=\"tableModel.isCursorEnabled(column)\"\n [class.flex]=\"column.isFlex()\"\n [class.hide]=\"!column.isVisible()\"\n >\n <aup-table-cell [column]=\"column\"\n [row]=\"row\"\n [tableModel]=\"tableModel\"\n [editSession]=\"tableModel.getEditSessionFor(row)\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-cell>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"columnIds$.value; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: columnIds$.value; let i = index\"\n [ngClass]=\"tableModel.getRowClasses(row)\"\n [class.enable-hover]=\"tableModel.isHoverEnabled()\"\n [attr.aup-row-id]=\"trackBy(i, row)\"\n ></tr>\n\n </table>\n</div>\n\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch}:host table{width:100%}:host
|
|
220
|
+
args: [{ selector: "aup-table-body", template: "\n<div class=\"classic-scroll-container\" *ngIf=\"scrollMode$.value !== 'virtual'\">\n <table mat-table [dataSource]=\"data$.value\" [trackBy]=\"trackBy\" [multiTemplateDataRows]>\n\n <ng-container *ngFor=\"let column of columns$.value; index as index; first as first; last as last\"\n matColumnDef=\"{{column.columnId}}\">\n <th mat-header-cell *matHeaderCellDef [class.flex]=\"column.isFlex()\" [class.hide]=\"!column.isVisible()\">\n <aup-table-header-cell [column]=\"column\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-header-cell>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"notifyCellClicked(column, row)\"\n [class.enable-cursor]=\"tableModel.isCursorEnabled(column)\"\n [class.flex]=\"column.isFlex()\"\n [class.hide]=\"!column.isVisible()\"\n >\n <aup-table-cell [column]=\"$any(column)\"\n [row]=\"row\"\n [tableModel]=\"$any(tableModel)\"\n [editSession]=\"$any(tableModel.getEditSessionFor(row))\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-cell>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"columnIds$.value; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: columnIds$.value; let i = index\"\n [ngClass]=\"tableModel.getRowClasses(row)\"\n [class.enable-hover]=\"tableModel.isHoverEnabled()\"\n [attr.aup-row-id]=\"trackBy(i, row)\"\n ></tr>\n\n </table>\n</div>\n\n<cdk-virtual-scroll-viewport *ngIf=\"scrollMode$.value === 'virtual'\" class=\"virtual-scroll-container\" [tvsItemSize]=\"rowHeight$.value\" [headerHeight]=\"headerHeight$.value\">\n <table mat-table [dataSource]=\"virtualScrollDataSource\" [trackBy]=\"trackBy\">\n\n <ng-container *ngFor=\"let column of columns$.value; index as index; first as first; last as last\"\n matColumnDef=\"{{column.columnId}}\">\n <th mat-header-cell *matHeaderCellDef [class.flex]=\"column.isFlex()\" [class.hide]=\"!column.isVisible()\">\n <aup-table-header-cell [column]=\"column\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-header-cell>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"notifyCellClicked(column, row)\"\n [class.enable-cursor]=\"tableModel.isCursorEnabled(column)\"\n [class.flex]=\"column.isFlex()\"\n [class.hide]=\"!column.isVisible()\"\n >\n <aup-table-cell [column]=\"$any(column)\"\n [row]=\"row\"\n [tableModel]=\"$any(tableModel)\"\n [editSession]=\"$any(tableModel.getEditSessionFor(row))\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class]=\"getColumnClasses(column.columnId)\"\n ></aup-table-cell>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"columnIds$.value; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: columnIds$.value; let i = index\"\n [ngClass]=\"tableModel.getRowClasses(row)\"\n [class.enable-hover]=\"tableModel.isHoverEnabled()\"\n [attr.aup-row-id]=\"trackBy(i, row)\"\n ></tr>\n\n </table>\n</cdk-virtual-scroll-viewport>\n\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch}:host table{width:100%}:host[scrollMode=virtual] cdk-virtual-scroll-viewport{flex:1}:host[scrollMode=classic]{min-height:0}:host[scrollMode=classic] .classic-scroll-container{flex:1;flex-basis:0;overflow-y:auto;display:flex;flex-direction:column;align-items:stretch}\n"] }]
|
|
112
221
|
}], ctorParameters: function () { return []; }, propDecorators: { data$: [{
|
|
113
222
|
type: Input
|
|
114
223
|
}], tableModel: [{
|
|
@@ -117,15 +226,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
|
|
|
117
226
|
type: Input
|
|
118
227
|
}], showHeader: [{
|
|
119
228
|
type: Input
|
|
120
|
-
}], visibleRowCount: [{
|
|
121
|
-
type: Output
|
|
122
229
|
}], trackBy: [{
|
|
123
230
|
type: Input
|
|
124
|
-
}],
|
|
231
|
+
}], scrollMode$: [{
|
|
232
|
+
type: Input
|
|
233
|
+
}], scrollMode: [{
|
|
125
234
|
type: Input
|
|
126
235
|
}, {
|
|
127
236
|
type: HostBinding,
|
|
128
|
-
args: ["
|
|
237
|
+
args: ["attr.scrollMode"]
|
|
129
238
|
}], baseCssClass: [{
|
|
130
239
|
type: HostBinding,
|
|
131
240
|
args: ["class"]
|
|
@@ -133,4 +242,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
|
|
|
133
242
|
type: HostBinding,
|
|
134
243
|
args: ["class.hide-header"]
|
|
135
244
|
}] } });
|
|
136
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYm9keS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdWktcG93ZXJ1cHMvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlcy9yZW5kZXJlci90YWJsZS1ib2R5L3RhYmxlLWJvZHkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXMvcmVuZGVyZXIvdGFibGUtYm9keS90YWJsZS1ib2R5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFjLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFrQixNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDOUcsT0FBTyxFQUNMLEdBQUcsRUFDSCxTQUFTLEVBR1QsaUJBQWlCLEVBQ2pCLE9BQU8sRUFDUCxPQUFPLEVBQ1AsaUJBQWlCLEVBRWpCLFVBQVUsRUFDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ3JFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7QUFROUQsTUFBTSxPQUFPLGtCQUF3QixTQUFRLG9CQUFvQjtJQUd0RCwwQkFBUSxPQUFPLENBQUMsQ0FBQSxTQUFjLENBQUEsQ0FBQyxDQUFDO0lBQWhDLElBQUEsS0FBSywyQ0FBMkI7SUFBaEMsSUFBQSxLQUFLLGlEQUEyQjtJQUdoQywrQkFBYSxPQUFPLENBQUMsQ0FBQSxrQkFBdUIsQ0FBQSxDQUFDLENBQUM7SUFBOUMsSUFBQSxVQUFVLGdEQUFvQztJQUE5QyxJQUFBLFVBQVUsc0RBQW9DO0lBRzlDLGdDQUFjLE9BQU8sQ0FBQyxDQUFBLFVBQW1CLENBQUEsQ0FBQyxD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O3FEQUNpQztBQUczQztJQURDLGlCQUFpQixFQUFFOztvREFDRjsyRkFaaEIsa0JBQWtCO2tCQUw5QixTQUFTOytCQUNFLGdCQUFnQjswRUFPakIsS0FBSztzQkFEYixLQUFLO2dCQUlHLFVBQVU7c0JBRGxCLEtBQUs7Z0JBSUcsV0FBVztzQkFEbkIsS0FBSztnQkFJRyxVQUFVO3NCQURsQixLQUFLO2dCQUlHLGVBQWU7c0JBRHZCLE1BQU07Z0JBSVAsT0FBTztzQkFETixLQUFLO2dCQVVOLGVBQWU7c0JBRmQsS0FBSzs7c0JBQ0wsV0FBVzt1QkFBQyx3QkFBd0I7Z0JBZXJDLFlBQVk7c0JBRFgsV0FBVzt1QkFBQyxPQUFPO2dCQWdDaEIsVUFBVTtzQkFEYixXQUFXO3VCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLCBJbnB1dCwgTmdab25lLCBPbkluaXQsIE91dHB1dH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7XG4gIERzbCxcbiAgTGlzdE1vZGVsLFxuICBMaXN0TW9kZWxDaGFpbixcbiAgTWFwTW9kZWxDaGFpbixcbiAgTXV0YWJsZVZhbHVlTW9kZWwsXG4gIFByb3hpZnksXG4gIHByb3hpZnksXG4gIFN0b3JlSW5WYWx1ZU1vZGVsLFxuICBUcmFuc2FjdGlvbk9ic2VydmVyLFxuICBWYWx1ZU1vZGVsXG59IGZyb20gXCJAY29vbG9uL3BlY3RpblwiO1xuaW1wb3J0IHtSZXNpemVBd2FyZUNvbXBvbmVudH0gZnJvbSBcIi4uLy4uLy4uL3Jlc2l6ZS1hd2FyZS5jb21wb25lbnRcIjtcbmltcG9ydCB7QWJzdHJhY3RUYWJsZU1vZGVsfSBmcm9tIFwiLi4vLi4vYWJzdHJhY3QtdGFibGUtbW9kZWxcIjtcbmltcG9ydCB7Q29sdW1uTW9kZWx9IGZyb20gXCIuLi8uLi9jb2x1bW4vY29sdW1uLW1vZGVsXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJhdXAtdGFibGUtYm9keVwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL3RhYmxlLWJvZHkuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL3RhYmxlLWJvZHkuY29tcG9uZW50LnNjc3NcIl0sXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQm9keUNvbXBvbmVudDxSb3c+IGV4dGVuZHMgUmVzaXplQXdhcmVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBJbnB1dCgpIEBQcm94aWZ5KClcbiAgYWNjZXNzb3IgZGF0YSQgPSBwcm94aWZ5KExpc3RNb2RlbDxSb3c+KTtcblxuICBASW5wdXQoKSBAUHJveGlmeSgpXG4gIGFjY2Vzc29yIHRhYmxlTW9kZWwgPSBwcm94aWZ5KEFic3RyYWN0VGFibGVNb2RlbDxSb3c+KTtcblxuICBASW5wdXQoKSBAUHJveGlmeSgpXG4gIGFjY2Vzc29yIHNob3dIZWFkZXIkID0gcHJveGlmeShWYWx1ZU1vZGVsPGJvb2xlYW4+KTtcblxuICBASW5wdXQoKSBAU3RvcmVJblZhbHVlTW9kZWwoKVxuICBhY2Nlc3NvciBzaG93SGVhZGVyID0gdHJ1ZTtcblxuICBAT3V0cHV0KClcbiAgcmVhZG9ubHkgdmlzaWJsZVJvd0NvdW50ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgQElucHV0KClcbiAgdHJhY2tCeTogKGluZGV4OiBudW1iZXIsIGl0ZW06IFJvdykgPT4gYW55XG5cbiAgLyoqXG4gICAqIFNldCB0byB0cnVlIHRvIGVuYWJsZSBzY3JvbGxpbmcuICBPbmNlIGVuYWJsZWQgdGhlIHRhYmxlIHdpbGwgaGF2ZSAwIGltcGxpY2l0IGhlaWdodC4gIFlvdSB3aWxsIGVpdGhlclxuICAgKiBuZWVkIHRvIHNldCBpdCBleHBsaWNpdGx5IGUuZy4gaGVpZ2h0OiA0MDBweDsgb3IgYnkgdXNpbmcgZmxleCBvciBncmlkIGxheW91dCB0byBtYWtlIGl0IGZpbGwgaXQnc1xuICAgKiBjb250YWlubWVudCBhcmVhLlxuICAgKi9cbiAgQElucHV0KClcbiAgQEhvc3RCaW5kaW5nKFwiY2xhc3MuZW5hYmxlLXNjcm9sbGluZ1wiKVxuICBlbmFibGVTY3JvbGxpbmcgPSBmYWxzZTtcblxuICBjb2x1bW5zJDogTGlzdE1vZGVsQ2hhaW48Q29sdW1uTW9kZWw8Um93Pj47XG4gIGNvbHVtbklkcyQ6IExpc3RNb2RlbENoYWluPHN0cmluZz47XG4gIHByaXZhdGUgY29sdW1uc0J5SWQkOiBNYXBNb2RlbENoYWluPHN0cmluZywgQ29sdW1uTW9kZWw8Um93Pj47XG5cbiAgcmVhZG9ubHkgX3Zpc2libGVSb3dDb3VudCQ6IFZhbHVlTW9kZWw8bnVtYmVyPjtcblxuXG4gIC8vIFRPRE86IHN1cHBvcnQgdXNlciBkZWZpbmVkIGhlYWRlciBhbmQgcm93IGhlaWdodHMgdmlhIGNzcyB2YXJzLlxuICBwcml2YXRlIHJlYWRvbmx5IGhlYWRlckhlaWdodCQgPSBuZXcgTXV0YWJsZVZhbHVlTW9kZWw8bnVtYmVyPigyOSk7XG4gIHByb3RlY3RlZCByb3dIZWlnaHQkID0gbmV3IE11dGFibGVWYWx1ZU1vZGVsPG51bWJlcj4oNDApO1xuXG4gIEBIb3N0QmluZGluZyhcImNsYXNzXCIpXG4gIGJhc2VDc3NDbGFzcyA9IFwiYXVwLXRhYmxlLWNvbXBvbmVudFwiO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgY29uc3Qge2NoYWluLCB3aGVufSA9IERzbC5kaXNwb3NlV2l0aCh0aGlzKTtcblxuICAgIGNvbnN0IGFjdHVhbEhlYWRlckhlaWdodCQgPSBjaGFpbih0aGlzLnNob3dIZWFkZXIkKS5tYXAoc2hvdyA9PiB7XG4gICAgICByZXR1cm4gc2hvdyA/IHRoaXMuaGVhZGVySGVpZ2h0JC52YWx1ZSA6IDA7XG4gICAgfSwge2RlcGVuZHNPbjogdGhpcy5oZWFkZXJIZWlnaHQkfSk7XG5cbiAgICB0aGlzLl92aXNpYmxlUm93Q291bnQkID0gY2hhaW4odGhpcy5ib3VuZHMkKS5tYXAoYm91bmRzID0+IHtcbiAgICAgIC8vIFRPRE86IHRoaXMgZG9lc24ndCB0YWtlIGludG8gYWNjb3VudCBhbnkgY3NzIHN0eWxpbmcgYWRqdXN0bWVudHMgZXRjLiAgV2lsbCBpbnZlc3RpZ2F0ZSBpZiBpdCdzIGFuIGlzc3VlLlxuICAgICAgY29uc3QgcmF3Um93Q291bnQgPSAoYm91bmRzLmhlaWdodCAtIGFjdHVhbEhlYWRlckhlaWdodCQudmFsdWUpIC8gdGhpcy5yb3dIZWlnaHQkLnZhbHVlO1xuICAgICAgcmV0dXJuIHJhd1Jvd0NvdW50IDwgMSA/IDAgOiBNYXRoLmZsb29yKHJhd1Jvd0NvdW50KTtcbiAgICB9LCB7XG4gICAgICBkZXBlbmRzT246IFthY3R1YWxIZWFkZXJIZWlnaHQkLCB0aGlzLnJvd0hlaWdodCRdLFxuICAgICAgcG9zdHBvbmVXaGlsZTogY2hhaW4odGhpcy5ib3VuZHMkKS5wbHVja051bWVyaWMoXCJoZWlnaHRcIikuaXNMZXNzVGhhbigxKVxuICAgIH0pO1xuXG4gICAgd2hlbih0aGlzLl92aXNpYmxlUm93Q291bnQkKS5jaGFuZ2VzKHZpc2libGVSb3dzID0+IHtcbiAgICAgIHRoaXMudmlzaWJsZVJvd0NvdW50LmVtaXQodmlzaWJsZVJvd3MpO1xuICAgIH0sIHtpbml0aWFsVmFsdWU6IFwidHJpZ2dlckNoYW5nZVVubGVzc05pbFwifSk7XG5cbiAgICB0aGlzLm9uSW5pdCgoKSA9PiB7XG4gICAgICB0aGlzLmNvbHVtbnMkID0gY2hhaW4odGhpcy50YWJsZU1vZGVsLmNvbHVtbnMpO1xuICAgICAgdGhpcy5jb2x1bW5JZHMkID0gY2hhaW4odGhpcy5jb2x1bW5zJCkucGx1Y2soXCJjb2x1bW5JZFwiKTtcbiAgICAgIHRoaXMuY29sdW1uc0J5SWQkID0gY2hhaW4odGhpcy5jb2x1bW5zJCkuaW5kZXhCeSgnY29sdW1uSWQnKTtcbiAgICB9KVxuICB9XG5cbiAgQEhvc3RCaW5kaW5nKFwiY2xhc3MuaGlkZS1oZWFkZXJcIilcbiAgZ2V0IGhpZGVIZWFkZXIoKSB7XG4gICAgcmV0dXJuICF0aGlzLnNob3dIZWFkZXI7XG4gIH1cblxuICBpc0VkaXRpbmcocm93OiBSb3cpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnRhYmxlTW9kZWwuZ2V0RWRpdFNlc3Npb25Gb3Iocm93KTtcbiAgfVxuXG4gIG5vdGlmeUNlbGxDbGlja2VkKGNvbHVtbk1vZGVsOiBDb2x1bW5Nb2RlbDxSb3c+LCByb3c6IFJvdykge1xuICAgIHRoaXMudGFibGVNb2RlbC5fbm90aWZ5Q2VsbENsaWNrZWQoY29sdW1uTW9kZWwsIHJvdyk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBpc0ZpcnN0VmlzaWJsZUNvbHVtbihjb2x1bW5JZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVNb2RlbC5maXJzdFZpc2libGVDb2x1bW4kLnF1ZXJ5KCkudmFsdWU/LmNvbHVtbklkID09PSBjb2x1bW5JZDtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIGlzTGFzdFZpc2libGVDb2x1bW4oY29sdW1uSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRhYmxlTW9kZWwubGFzdFZpc2libGVDb2x1bW4kLnF1ZXJ5KCkudmFsdWU/LmNvbHVtbklkID09PSBjb2x1bW5JZDtcbiAgfVxuXG4gIGdldENvbHVtbkNsYXNzZXMoY29sdW1uSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGNsYXNzZXMgPSBbYGF1cC1jb2wtJHt0aGlzLmNvbHVtbnNCeUlkJC5nZXQoY29sdW1uSWQpLmRhc2hlcmlzZWRDb2x1bW5JZH1gXTtcbiAgICBpZiAodGhpcy5pc0ZpcnN0VmlzaWJsZUNvbHVtbihjb2x1bW5JZCkpIHtcbiAgICAgIGNsYXNzZXMucHVzaChcImZpcnN0LXZpc2libGUtY29sdW1uXCIpO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc0xhc3RWaXNpYmxlQ29sdW1uKGNvbHVtbklkKSkge1xuICAgICAgY2xhc3Nlcy5wdXNoKFwibGFzdC12aXNpYmxlLWNvbHVtblwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGNsYXNzZXM7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJzY3JvbGwtY29udGFpbmVyXCI+XG4gIDx0YWJsZSBtYXQtdGFibGUgW2RhdGFTb3VyY2VdPVwiZGF0YSQudmFsdWVcIiBbdHJhY2tCeV09XCJ0cmFja0J5XCI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1ucyQudmFsdWU7IGluZGV4IGFzIGluZGV4OyBmaXJzdCBhcyBmaXJzdDsgbGFzdCBhcyBsYXN0XCJcbiAgICAgICAgICAgICAgICAgIG1hdENvbHVtbkRlZj1cInt7Y29sdW1uLmNvbHVtbklkfX1cIj5cbiAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgW2NsYXNzLmZsZXhdPVwiY29sdW1uLmlzRmxleCgpXCIgW2NsYXNzLmhpZGVdPVwiIWNvbHVtbi5pc1Zpc2libGUoKVwiPlxuICAgICAgICA8YXVwLXRhYmxlLWhlYWRlci1jZWxsIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5jb2x1bW4taW5kZXhdPVwiaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmNvbHVtbi1pZF09XCJjb2x1bW4uY29sdW1uSWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJnZXRDb2x1bW5DbGFzc2VzKGNvbHVtbi5jb2x1bW5JZClcIlxuICAgICAgICA+PC9hdXAtdGFibGUtaGVhZGVyLWNlbGw+XG4gICAgICA8L3RoPlxuICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIChjbGljayk9XCJub3RpZnlDZWxsQ2xpY2tlZChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgIFtjbGFzcy5lbmFibGUtY3Vyc29yXT1cInRhYmxlTW9kZWwuaXNDdXJzb3JFbmFibGVkKGNvbHVtbilcIlxuICAgICAgICAgIFtjbGFzcy5mbGV4XT1cImNvbHVtbi5pc0ZsZXgoKVwiXG4gICAgICAgICAgW2NsYXNzLmhpZGVdPVwiIWNvbHVtbi5pc1Zpc2libGUoKVwiXG4gICAgICA+XG4gICAgICAgIDxhdXAtdGFibGUtY2VsbCBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbcm93XT1cInJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGFibGVNb2RlbF09XCJ0YWJsZU1vZGVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtlZGl0U2Vzc2lvbl09XCJ0YWJsZU1vZGVsLmdldEVkaXRTZXNzaW9uRm9yKHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuY29sdW1uLWluZGV4XT1cImluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmNvbHVtbi1pZF09XCJjb2x1bW4uY29sdW1uSWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImdldENvbHVtbkNsYXNzZXMoY29sdW1uLmNvbHVtbklkKVwiXG4gICAgICAgID48L2F1cC10YWJsZS1jZWxsPlxuICAgICAgPC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiY29sdW1uSWRzJC52YWx1ZTsgc3RpY2t5OiB0cnVlXCI+PC90cj5cbiAgICA8dHIgbWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogY29sdW1uSWRzJC52YWx1ZTsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInRhYmxlTW9kZWwuZ2V0Um93Q2xhc3Nlcyhyb3cpXCJcbiAgICAgICAgW2NsYXNzLmVuYWJsZS1ob3Zlcl09XCJ0YWJsZU1vZGVsLmlzSG92ZXJFbmFibGVkKClcIlxuICAgICAgICBbYXR0ci5hdXAtcm93LWlkXT1cInRyYWNrQnkoaSwgcm93KVwiXG4gICAgPjwvdHI+XG5cbiAgPC90YWJsZT5cbjwvZGl2PlxuXG4iXX0=
|
|
245
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYm9keS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdWktcG93ZXJ1cHMvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlcy9yZW5kZXJlci90YWJsZS1ib2R5L3RhYmxlLWJvZHkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXMvcmVuZGVyZXIvdGFibGUtYm9keS90YWJsZS1ib2R5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQW1CLFVBQVUsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3RFLE9BQU8sRUFFTCw4QkFBOEIsRUFFL0IsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBR0wsU0FBUyxFQUNULFdBQVcsRUFFWCxLQUFLLEVBSU4sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVMLEdBQUcsRUFDSCxnQkFBZ0IsRUFDaEIsU0FBUyxFQUdULGlCQUFpQixFQUNqQixPQUFPLEVBQ1AsT0FBTyxFQUNQLGlCQUFpQixFQUNqQixtQkFBbUIsRUFDbkIsVUFBVSxFQUVYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFDLDRCQUE0QixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDckUsT0FBTyxFQUFDLGVBQWUsRUFBYSxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRSxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7Ozs7QUFHOUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sMkJBQTRCLFNBQVEsOEJBQThCO0lBQzFELE9BQU8sR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUM7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QU1sQjtJQURDLE9BQU8sRUFBRTs4QkFDRyxVQUFVO3FEQUFxRjtBQUk1RztJQUZDLGlCQUFpQixFQUFFOztvREFFK0I7MkZBdEJqRCxrQkFBa0I7a0JBVjlCLFNBQVM7K0JBQ0UsZ0JBQWdCOzBFQVlqQixLQUFLO3NCQURiLEtBQUs7Z0JBSUcsVUFBVTtzQkFEbEIsS0FBSztnQkFJRyxXQUFXO3NCQURuQixLQUFLO2dCQUlHLFVBQVU7c0JBRGxCLEtBQUs7Z0JBSU4sT0FBTztzQkFETixLQUFLO2dCQUlHLFdBQVc7c0JBRG5CLEtBQUs7Z0JBS0csVUFBVTtzQkFGbEIsS0FBSzs7c0JBQ0wsV0FBVzt1QkFBQyxpQkFBaUI7Z0JBYzlCLFlBQVk7c0JBRFgsV0FBVzt1QkFBQyxPQUFPO2dCQTZDaEIsVUFBVTtzQkFEYixXQUFXO3VCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29sbGVjdGlvblZpZXdlciwgRGF0YVNvdXJjZX0gZnJvbSBcIkBhbmd1bGFyL2Nkay9jb2xsZWN0aW9uc1wiO1xuaW1wb3J0IHtcbiAgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LFxuICBGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsU3RyYXRlZ3ksXG4gIFZJUlRVQUxfU0NST0xMX1NUUkFURUdZXG59IGZyb20gXCJAYW5ndWxhci9jZGsvc2Nyb2xsaW5nXCI7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBIb3N0QmluZGluZyxcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBRdWVyeUxpc3QsXG4gIFZpZXdDaGlsZHJlblxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtcbiAgRGlzcG9zYWJsZSxcbiAgRHNsLFxuICBHYXJiYWdlQ29sbGVjdG9yLFxuICBMaXN0TW9kZWwsXG4gIExpc3RNb2RlbENoYWluLFxuICBNYXBNb2RlbENoYWluLFxuICBNdXRhYmxlVmFsdWVNb2RlbCxcbiAgUHJveGlmeSxcbiAgcHJveGlmeSxcbiAgU3RvcmVJblZhbHVlTW9kZWwsIFRyYWNlLFxuICBUcmFuc2FjdGlvbk9ic2VydmVyLFxuICBWYWx1ZU1vZGVsLFxuICBWYWx1ZU1vZGVsQ2hhaW5cbn0gZnJvbSBcIkBjb29sb24vcGVjdGluXCI7XG5pbXBvcnQge1RhYmxlVmlydHVhbFNjcm9sbERhdGFTb3VyY2V9IGZyb20gXCJuZy10YWJsZS12aXJ0dWFsLXNjcm9sbFwiO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGV9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQge1Jlc2l6ZUF3YXJlQ29tcG9uZW50fSBmcm9tIFwiLi4vLi4vLi4vcmVzaXplLWF3YXJlLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtBYnN0cmFjdFRhYmxlTW9kZWx9IGZyb20gXCIuLi8uLi9hYnN0cmFjdC10YWJsZS1tb2RlbFwiO1xuaW1wb3J0IHtDb2x1bW5Nb2RlbH0gZnJvbSBcIi4uLy4uL2NvbHVtbi9jb2x1bW4tbW9kZWxcIjtcblxuLyoqXG4gKiBWaXJ0dWFsIFNjcm9sbCBTdHJhdGVneVxuICovXG5leHBvcnQgY2xhc3MgQ3VzdG9tVmlydHVhbFNjcm9sbFN0cmF0ZWd5IGV4dGVuZHMgRml4ZWRTaXplVmlydHVhbFNjcm9sbFN0cmF0ZWd5IHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGdhcmJhZ2UgPSBuZXcgR2FyYmFnZUNvbGxlY3RvcigpO1xuXG4gIGNvbnN0cnVjdG9yKHJvd0hlaWdodCQ6IFZhbHVlTW9kZWw8bnVtYmVyPiwgbWluQnVmZmVyUHg6IG51bWJlciwgbWF4QnVmZmVyUHg6IG51bWJlcikge1xuICAgIHN1cGVyKHJvd0hlaWdodCQudmFsdWUsIG1pbkJ1ZmZlclB4LCBtYXhCdWZmZXJQeCk7XG4gICAgY29uc3Qge2NoYWluLCB3aGVufSA9IERzbC5kaXNwb3NlV2l0aCh0aGlzLmdhcmJhZ2UpO1xuICAgIHdoZW4ocm93SGVpZ2h0JCkuY2hhbmdlcyhoID0+IHtcbiAgICAgIHRoaXMudXBkYXRlSXRlbUFuZEJ1ZmZlclNpemUoaCwgbWluQnVmZmVyUHgsIG1heEJ1ZmZlclB4KTtcbiAgICB9LCB7aW5pdGlhbFZhbHVlOiBcInRyaWdnZXJDaGFuZ2VVbmxlc3NOaWxcIn0pXG4gIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgVmlydHVhbFNjcm9sbERhdGFTb3VyY2U8Um93PiBleHRlbmRzIERhdGFTb3VyY2U8Um93PiBpbXBsZW1lbnRzIERpc3Bvc2FibGUsIERpc3Bvc2FibGUuQ29sbGVjdG9yIHtcblxuICBwcml2YXRlIGdhcmJhZ2UgPSBuZXcgR2FyYmFnZUNvbGxlY3RvcigpO1xuXG4gIHJlYWRvbmx5IHZpcnR1YWxTY3JvbGxSb3dSYW5nZSQ6IFZhbHVlTW9kZWxDaGFpbjx7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyIH0+O1xuICByZWFkb25seSB2aXJ0dWFsU2Nyb2xsU3BhY2VyU2l6ZSQ6IFZhbHVlTW9kZWxDaGFpbjxudW1iZXI+O1xuICByZWFkb25seSB0b3RhbENvbnRlbnRTaXplJDogVmFsdWVNb2RlbENoYWluPG51bWJlcj47XG4gIHJlYWRvbmx5IHNob3dWaXJ0dWFsU2Nyb2xsT2Zmc2V0OiAoaW5kZXg6IG51bWJlciwgcm93RGF0YTogYW55KSA9PiBib29sZWFuO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSB2aXJ0dWFsUm93c09ic2VydmFibGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxyZWFkb25seSBSb3dbXT4oW10pO1xuICBwcml2YXRlIHJlYWRvbmx5IHZpcnR1YWxTY3JvbGxQaXhlbE9mZnNldCQgPSBuZXcgTXV0YWJsZVZhbHVlTW9kZWw8bnVtYmVyPigwKTtcblxuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IHZpZXdwb3J0OiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQsIGRhdGEkOkxpc3RNb2RlbDxSb3c+LCByZWFkb25seSByb3dIZWlnaHQkOlZhbHVlTW9kZWw8bnVtYmVyPiwgcGFnZVNpemUkOiBWYWx1ZU1vZGVsPG51bWJlcj4pIHtcbiAgICBzdXBlcigpO1xuICAgIGNvbnN0IHtjaGFpbiwgd2hlbiwgb2JzZXJ2ZX0gPSBEc2wuZGlzcG9zZVdpdGgodGhpcyk7XG5cbiAgICBvYnNlcnZlLnZhbHVlc0Zyb20odmlld3BvcnQuZWxlbWVudFNjcm9sbGVkKCkpLnN1YnNjcmliZSgoZXY6IEV2ZW50KSA9PiB7XG4gICAgICB0aGlzLnZpcnR1YWxTY3JvbGxQaXhlbE9mZnNldCQudmFsdWUgPSAoZXYuY3VycmVudFRhcmdldCBhcyBhbnkpLnNjcm9sbFRvcDtcbiAgICB9KTtcblxuICAgIHRoaXMudmlydHVhbFNjcm9sbFJvd1JhbmdlJCA9IGNoYWluKHRoaXMudmlydHVhbFNjcm9sbFBpeGVsT2Zmc2V0JCkubWFwKHJhd1BpeGVsT2Zmc2V0ID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBNYXRoLmZsb29yKHJhd1BpeGVsT2Zmc2V0IC8gdGhpcy5yb3dIZWlnaHQkLnZhbHVlKTtcbiAgICAgIGNvbnNvbGUubG9nKHJhd1BpeGVsT2Zmc2V0LCBzdGFydEluZGV4KVxuICAgICAgLy8gY29uc3QgcHJldkV4dHJhRGF0YSA9IHN0YXJ0SW5kZXggPiA1ID8gNSA6IDA7XG4gICAgICBjb25zdCBwcmV2RXh0cmFEYXRhID0gMDtcbiAgICAgIC8vIHJldHVybiByb3dzLnNsaWNlKHN0YXJ0SW5kZXggLSBwcmV2RXh0cmFEYXRhLCBzdGFydEluZGV4ICsgKHBhZ2VTaXplJC52YWx1ZSAtIHByZXZFeHRyYURhdGEpKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0OiBzdGFydEluZGV4IC0gcHJldkV4dHJhRGF0YSxcbiAgICAgICAgZW5kOiBzdGFydEluZGV4ICsgKHBhZ2VTaXplJC52YWx1ZSAtIHByZXZFeHRyYURhdGEpXG4gICAgICB9XG4gICAgfSwge1xuICAgICAgZGVwZW5kc09uOiBbdGhpcy5yb3dIZWlnaHQkLCBwYWdlU2l6ZSRdLFxuICAgICAgcG9zdHBvbmVXaGlsZTogY2hhaW4ubnVtZXJpY1ZhbHVlKHBhZ2VTaXplJCkuaXNMZXNzVGhhbigxKSxcbiAgICAgIGNoYW5nZWQ6IChpcywgd2FzKSA9PiB7XG4gICAgICAgIHJldHVybiB3YXM/LnN0YXJ0ICE9PSBpcz8uc3RhcnQgfHwgd2FzPy5lbmQgIT09IGlzPy5lbmRcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy52aXJ0dWFsU2Nyb2xsU3BhY2VyU2l6ZSQgPSBjaGFpbih0aGlzLnZpcnR1YWxTY3JvbGxSb3dSYW5nZSQpLm1hcChyYW5nZSA9PiB7XG4gICAgICBjb25zdCBwaXhlbE9mZnNldCA9IHRoaXMucm93SGVpZ2h0JC52YWx1ZSAqIHJhbmdlLnN0YXJ0O1xuICAgICAgcmV0dXJuIHBpeGVsT2Zmc2V0O1xuICAgIH0sIHsgZGVwZW5kc09uOiB0aGlzLnJvd0hlaWdodCR9KVxuXG4gICAgdGhpcy50b3RhbENvbnRlbnRTaXplJCA9IGNoYWluKGRhdGEkKS5jb3VudCgpLm1hcChyb3dDb3VudCA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5yb3dIZWlnaHQkLnZhbHVlICogcm93Q291bnRcbiAgICB9LCB7ZGVwZW5kc09uOiByb3dIZWlnaHQkfSlcblxuICAgIGNoYWluKHRoaXMudmlydHVhbFNjcm9sbFJvd1JhbmdlJCkubWFwVG9MaXN0KHJhbmdlID0+IHtcbiAgICAgIHJldHVybiBkYXRhJC52YWx1ZS5zbGljZShyYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTtcbiAgICB9LCB7XG4gICAgICBkZXBlbmRzT246IGRhdGEkXG4gICAgfSkuc3Vic2NyaWJlKHZpc2libGVSb3dzID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKHZpc2libGVSb3dzKVxuICAgICAgdGhpcy52aXJ0dWFsUm93c09ic2VydmFibGUkLm5leHQodmlzaWJsZVJvd3MpXG4gICAgfSk7XG5cbiAgICB3aGVuKHRoaXMudmlydHVhbFNjcm9sbFNwYWNlclNpemUkKS5jaGFuZ2VzKHNjcm9sbFRvcCA9PiB7XG4gICAgICB2aWV3cG9ydC5zZXRSZW5kZXJlZENvbnRlbnRPZmZzZXQoc2Nyb2xsVG9wLCBcInRvLXN0YXJ0XCIpO1xuICAgIH0sIHtpbml0aWFsVmFsdWU6IFwidHJpZ2dlckNoYW5nZVVubGVzc05pbFwifSk7XG5cbiAgICB3aGVuKHRoaXMudG90YWxDb250ZW50U2l6ZSQpLmNoYW5nZXModG90YWxTaXplID0+IHtcbiAgICAgIHZpZXdwb3J0LnNldFRvdGFsQ29udGVudFNpemUodG90YWxTaXplKTtcbiAgICB9LCB7aW5pdGlhbFZhbHVlOiBcInRyaWdnZXJDaGFuZ2VVbmxlc3NOaWxcIn0pO1xuXG5cbiAgICB0aGlzLnNob3dWaXJ0dWFsU2Nyb2xsT2Zmc2V0ID0gKGluZGV4OiBudW1iZXIsIHJvd0RhdGE6IGFueSk6IGJvb2xlYW4gPT4ge1xuICAgICAgY29uc3QgaGF2ZVNjcm9sbGVkID0gdGhpcy52aXJ0dWFsU2Nyb2xsU3BhY2VyU2l6ZSQudmFsdWUgPiAwO1xuICAgICAgY29uc3QgZmlyc3RSb3cgPSBpbmRleCA9PT0gMDtcbiAgICAgIHJldHVybiBpbmRleCA9PT0gMCAmJiBoYXZlU2Nyb2xsZWRcbiAgICB9O1xuXG5cblxuICB9XG5cblxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5nYXJiYWdlLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHJlZ2lzdGVyRGlzcG9zYWJsZTxUIGV4dGVuZHMgRGlzcG9zYWJsZT4oZGlzcG9zYWJsZTogVCk6IFQge1xuICAgIHJldHVybiB0aGlzLmdhcmJhZ2UucmVnaXN0ZXJEaXNwb3NhYmxlKGRpc3Bvc2FibGUpO1xuICB9XG5cblxuICBjb25uZWN0KGNvbGxlY3Rpb25WaWV3ZXI6IENvbGxlY3Rpb25WaWV3ZXIpOiBPYnNlcnZhYmxlPHJlYWRvbmx5IFJvd1tdPiB7XG4gICAgcmV0dXJuIHRoaXMudmlydHVhbFJvd3NPYnNlcnZhYmxlJDtcbiAgfVxuXG4gIGRpc2Nvbm5lY3QoY29sbGVjdGlvblZpZXdlcjogQ29sbGVjdGlvblZpZXdlcik6IHZvaWQge1xuICAgIC8vIG5vb3BcbiAgfVxuXG5cbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImF1cC10YWJsZS1ib2R5XCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vdGFibGUtYm9keS5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vdGFibGUtYm9keS5jb21wb25lbnQuc2Nzc1wiXSxcbiAgLy8gcHJvdmlkZXJzOiBbe1xuICAvLyAgIHByb3ZpZGU6IFZJUlRVQUxfU0NST0xMX1NUUkFURUdZLCB1c2VGYWN0b3J5OiAoKSA9PiB7XG4gIC8vICAgICByZXR1cm4gaW5qZWN0KFRhYmxlQm9keUNvbXBvbmVudCkudmlydHVhbFNjcm9sbFN0cmF0ZWd5XG4gIC8vICAgfVxuICAvLyB9XSxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVCb2R5Q29tcG9uZW50PFJvdz4gZXh0ZW5kcyBSZXNpemVBd2FyZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgQElucHV0KCkgQFByb3hpZnkoKVxuICBhY2Nlc3NvciBkYXRhJCA9IHByb3hpZnkoTGlzdE1vZGVsPFJvdz4pO1xuXG4gIEBJbnB1dCgpIEBQcm94aWZ5KClcbiAgYWNjZXNzb3IgdGFibGVNb2RlbCA9IHByb3hpZnkoQWJzdHJhY3RUYWJsZU1vZGVsPFJvdz4pO1xuXG4gIEBJbnB1dCgpIEBQcm94aWZ5KClcbiAgYWNjZXNzb3Igc2hvd0hlYWRlciQgPSBwcm94aWZ5KFZhbHVlTW9kZWw8Ym9vbGVhbj4pO1xuXG4gIEBJbnB1dCgpIEBTdG9yZUluVmFsdWVNb2RlbCgpXG4gIGFjY2Vzc29yIHNob3dIZWFkZXIgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHRyYWNrQnk6IChpbmRleDogbnVtYmVyLCBpdGVtOiBSb3cpID0+IGFueVxuXG4gIEBJbnB1dCgpIEBQcm94aWZ5KClcbiAgYWNjZXNzb3Igc2Nyb2xsTW9kZSQ6IFZhbHVlTW9kZWw8VGFibGVCb2R5Q29tcG9uZW50LlNjcm9sbE1vZGU+ID0gcHJveGlmeShWYWx1ZU1vZGVsPFRhYmxlQm9keUNvbXBvbmVudC5TY3JvbGxNb2RlPik7XG5cbiAgQElucHV0KCkgQFN0b3JlSW5WYWx1ZU1vZGVsKClcbiAgQEhvc3RCaW5kaW5nKFwiYXR0ci5zY3JvbGxNb2RlXCIpXG4gIGFjY2Vzc29yIHNjcm9sbE1vZGU6IFRhYmxlQm9keUNvbXBvbmVudC5TY3JvbGxNb2RlID0gXCJub25lXCI7XG5cbiAgY29sdW1ucyQ6IExpc3RNb2RlbENoYWluPENvbHVtbk1vZGVsPFJvdz4+O1xuICBjb2x1bW5JZHMkOiBMaXN0TW9kZWxDaGFpbjxzdHJpbmc+O1xuICBwcml2YXRlIGNvbHVtbnNCeUlkJDogTWFwTW9kZWxDaGFpbjxzdHJpbmcsIENvbHVtbk1vZGVsPFJvdz4+O1xuXG5cbiAgLy8gVE9ETzogc3VwcG9ydCB1c2VyIGRlZmluZWQgaGVhZGVyIGFuZCByb3cgaGVpZ2h0cyB2aWEgY3NzIHZhcnMuXG4gIHByb3RlY3RlZCByZWFkb25seSBoZWFkZXJIZWlnaHQkID0gbmV3IE11dGFibGVWYWx1ZU1vZGVsPG51bWJlcj4oMjkpO1xuICBwcm90ZWN0ZWQgcm93SGVpZ2h0JCA9IG5ldyBNdXRhYmxlVmFsdWVNb2RlbDxudW1iZXI+KDQwKTtcblxuXG4gIEBIb3N0QmluZGluZyhcImNsYXNzXCIpXG4gIGJhc2VDc3NDbGFzcyA9IFwiYXVwLXRhYmxlLWNvbXBvbmVudFwiO1xuXG4gIHByb3RlY3RlZCB2aXJ0dWFsU2Nyb2xsRGF0YVNvdXJjZSA9IG5ldyBUYWJsZVZpcnR1YWxTY3JvbGxEYXRhU291cmNlPFJvdz4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGNvbnN0IHtjaGFpbiwgd2hlbiwgb2JzZXJ2ZX0gPSBEc2wuZGlzcG9zZVdpdGgodGhpcyk7XG5cbiAgICBjb25zdCBhY3R1YWxIZWFkZXJIZWlnaHQkID0gY2hhaW4odGhpcy5zaG93SGVhZGVyJCkubWFwKHNob3cgPT4ge1xuICAgICAgcmV0dXJuIHNob3cgPyB0aGlzLmhlYWRlckhlaWdodCQudmFsdWUgOiAwO1xuICAgIH0sIHtkZXBlbmRzT246IHRoaXMuaGVhZGVySGVpZ2h0JH0pO1xuXG4gICAgLy8gY29uc3QgdmlzaWJsZVJvd0NvdW50JCA9IGNoYWluKHRoaXMuYm91bmRzJCkubWFwKGJvdW5kcyA9PiB7XG4gICAgLy8gICAvLyBUT0RPOiB0aGlzIGRvZXNuJ3QgdGFrZSBpbnRvIGFjY291bnQgYW55IGNzcyBzdHlsaW5nIGFkanVzdG1lbnRzIGV0Yy4gIFdpbGwgaW52ZXN0aWdhdGUgaWYgaXQncyBhbiBpc3N1ZS5cbiAgICAvLyAgIGNvbnN0IHJhd1Jvd0NvdW50ID0gKGJvdW5kcy5oZWlnaHQgLSBhY3R1YWxIZWFkZXJIZWlnaHQkLnZhbHVlKSAvIHRoaXMucm93SGVpZ2h0JC52YWx1ZTtcbiAgICAvLyAgIHJldHVybiByYXdSb3dDb3VudCA8IDEgPyAwIDogTWF0aC5mbG9vcihyYXdSb3dDb3VudCk7XG4gICAgLy8gfSwge1xuICAgIC8vICAgZGVwZW5kc09uOiBbYWN0dWFsSGVhZGVySGVpZ2h0JCwgdGhpcy5yb3dIZWlnaHQkXSxcbiAgICAvLyAgIHBvc3Rwb25lV2hpbGU6IGNoYWluKHRoaXMuYm91bmRzJCkucGx1Y2tOdW1lcmljKFwiaGVpZ2h0XCIpLmlzTGVzc1RoYW4oMSlcbiAgICAvLyB9KTtcbiAgICAvL1xuICAgIC8vIC8vIGNvbnN0IHBhZ2VTaXplJCA9IGNoYWluKHZpc2libGVSb3dDb3VudCQpXG4gICAgLy8gLy8gICAubWFwKGNvdW50ID0+IDIgKiBjb3VudCkub3RoZXJ3aXNlKDApXG4gICAgLy8gY29uc3QgcGFnZVNpemUkID0gVmFsdWVNb2RlbC5jb25zdGFudCgxMilcblxuICAgIHdoZW4odGhpcy5kYXRhJCkuY2hhbmdlcyhpcyA9PiB7XG4gICAgICB0aGlzLnZpcnR1YWxTY3JvbGxEYXRhU291cmNlLmRhdGEgPSBpcztcbiAgICB9KVxuXG5cbiAgICB0aGlzLm9uSW5pdCgoKSA9PiB7XG4gICAgICB0aGlzLmNvbHVtbnMkID0gY2hhaW4odGhpcy50YWJsZU1vZGVsLmNvbHVtbnMpO1xuICAgICAgdGhpcy5jb2x1bW5JZHMkID0gY2hhaW4odGhpcy5jb2x1bW5zJCkucGx1Y2soXCJjb2x1bW5JZFwiKTtcbiAgICAgIHRoaXMuY29sdW1uc0J5SWQkID0gY2hhaW4odGhpcy5jb2x1bW5zJCkuaW5kZXhCeSgnY29sdW1uSWQnKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHR4byA9IG5ldyBUcmFuc2FjdGlvbk9ic2VydmVyKHt2ZXJib3NlOiBmYWxzZX0pLm9uRXZlbnQoZSA9PiBjb25zb2xlLmxvZyhlLm5hbWUsIGUucGF5bG9hZCkpO1xuICAgIC8vIHR4by5vYnNlcnZlKCd0aGlzLnZpcnR1YWxTY3JvbGxSb3dSYW5nZSQnLCB0aGlzLnZpcnR1YWxTY3JvbGxSb3dSYW5nZSQpO1xuICAgIC8vIHR4by5vYnNlcnZlKCd0aGlzLnZpcnR1YWxTY3JvbGxTcGFjZXJTaXplJCcsIHRoaXMudmlydHVhbFNjcm9sbFNwYWNlclNpemUkKTtcbiAgICAvLyB0eG8ub2JzZXJ2ZSgndGhpcy52aXJ0dWFsUm93cyQnLCB0aGlzLnZpcnR1YWxSb3dzJCk7XG5cbiAgfVxuXG4gIEBIb3N0QmluZGluZyhcImNsYXNzLmhpZGUtaGVhZGVyXCIpXG4gIGdldCBoaWRlSGVhZGVyKCkge1xuICAgIHJldHVybiAhdGhpcy5zaG93SGVhZGVyO1xuICB9XG5cbiAgaXNFZGl0aW5nKHJvdzogUm93KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy50YWJsZU1vZGVsLmdldEVkaXRTZXNzaW9uRm9yKHJvdyk7XG4gIH1cblxuICBub3RpZnlDZWxsQ2xpY2tlZChjb2x1bW5Nb2RlbDogQ29sdW1uTW9kZWw8Um93Piwgcm93OiBSb3cpIHtcbiAgICB0aGlzLnRhYmxlTW9kZWwuX25vdGlmeUNlbGxDbGlja2VkKGNvbHVtbk1vZGVsLCByb3cpO1xuICB9XG5cbiAgLy8gQFRyYWNlKClcblxuICBpc0ZpcnN0VmlzaWJsZUNvbHVtbihjb2x1bW5JZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVNb2RlbC5maXJzdFZpc2libGVDb2x1bW4kLnF1ZXJ5KCkudmFsdWU/LmNvbHVtbklkID09PSBjb2x1bW5JZDtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG5cbiAgaXNMYXN0VmlzaWJsZUNvbHVtbihjb2x1bW5JZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVNb2RlbC5sYXN0VmlzaWJsZUNvbHVtbiQucXVlcnkoKS52YWx1ZT8uY29sdW1uSWQgPT09IGNvbHVtbklkO1xuICB9XG5cbiAgZ2V0Q29sdW1uQ2xhc3Nlcyhjb2x1bW5JZDogc3RyaW5nKSB7XG4gICAgY29uc3QgY2xhc3NlcyA9IFtgYXVwLWNvbC0ke3RoaXMuY29sdW1uc0J5SWQkLmdldChjb2x1bW5JZCkuZGFzaGVyaXNlZENvbHVtbklkfWBdO1xuICAgIGlmICh0aGlzLmlzRmlyc3RWaXNpYmxlQ29sdW1uKGNvbHVtbklkKSkge1xuICAgICAgY2xhc3Nlcy5wdXNoKFwiZmlyc3QtdmlzaWJsZS1jb2x1bW5cIik7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzTGFzdFZpc2libGVDb2x1bW4oY29sdW1uSWQpKSB7XG4gICAgICBjbGFzc2VzLnB1c2goXCJsYXN0LXZpc2libGUtY29sdW1uXCIpO1xuICAgIH1cbiAgICByZXR1cm4gY2xhc3NlcztcbiAgfVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIFRhYmxlQm9keUNvbXBvbmVudCB7XG4gIGV4cG9ydCB0eXBlIFNjcm9sbE1vZGUgPSBcIm5vbmVcIiB8IFwiY2xhc3NpY1wiIHwgXCJ2aXJ0dWFsXCI7XG5cbn1cbiIsIlxuPGRpdiBjbGFzcz1cImNsYXNzaWMtc2Nyb2xsLWNvbnRhaW5lclwiICpuZ0lmPVwic2Nyb2xsTW9kZSQudmFsdWUgIT09ICd2aXJ0dWFsJ1wiPlxuICA8dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT1cImRhdGEkLnZhbHVlXCIgW3RyYWNrQnldPVwidHJhY2tCeVwiIFttdWx0aVRlbXBsYXRlRGF0YVJvd3NdPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnMkLnZhbHVlOyBpbmRleCBhcyBpbmRleDsgZmlyc3QgYXMgZmlyc3Q7IGxhc3QgYXMgbGFzdFwiXG4gICAgICAgICAgICAgICAgICBtYXRDb2x1bW5EZWY9XCJ7e2NvbHVtbi5jb2x1bW5JZH19XCI+XG4gICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIFtjbGFzcy5mbGV4XT1cImNvbHVtbi5pc0ZsZXgoKVwiIFtjbGFzcy5oaWRlXT1cIiFjb2x1bW4uaXNWaXNpYmxlKClcIj5cbiAgICAgICAgPGF1cC10YWJsZS1oZWFkZXItY2VsbCBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuY29sdW1uLWluZGV4XT1cImluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5jb2x1bW4taWRdPVwiY29sdW1uLmNvbHVtbklkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiZ2V0Q29sdW1uQ2xhc3Nlcyhjb2x1bW4uY29sdW1uSWQpXCJcbiAgICAgICAgPjwvYXVwLXRhYmxlLWhlYWRlci1jZWxsPlxuICAgICAgPC90aD5cbiAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiAoY2xpY2spPVwibm90aWZ5Q2VsbENsaWNrZWQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICBbY2xhc3MuZW5hYmxlLWN1cnNvcl09XCJ0YWJsZU1vZGVsLmlzQ3Vyc29yRW5hYmxlZChjb2x1bW4pXCJcbiAgICAgICAgICBbY2xhc3MuZmxleF09XCJjb2x1bW4uaXNGbGV4KClcIlxuICAgICAgICAgIFtjbGFzcy5oaWRlXT1cIiFjb2x1bW4uaXNWaXNpYmxlKClcIlxuICAgICAgPlxuICAgICAgICA8YXVwLXRhYmxlLWNlbGwgW2NvbHVtbl09XCIkYW55KGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RhYmxlTW9kZWxdPVwiJGFueSh0YWJsZU1vZGVsKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZWRpdFNlc3Npb25dPVwiJGFueSh0YWJsZU1vZGVsLmdldEVkaXRTZXNzaW9uRm9yKHJvdykpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmNvbHVtbi1pbmRleF09XCJpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5jb2x1bW4taWRdPVwiY29sdW1uLmNvbHVtbklkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJnZXRDb2x1bW5DbGFzc2VzKGNvbHVtbi5jb2x1bW5JZClcIlxuICAgICAgICA+PC9hdXAtdGFibGUtY2VsbD5cbiAgICAgIDwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImNvbHVtbklkcyQudmFsdWU7IHN0aWNreTogdHJ1ZVwiPjwvdHI+XG4gICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGNvbHVtbklkcyQudmFsdWU7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICBbbmdDbGFzc109XCJ0YWJsZU1vZGVsLmdldFJvd0NsYXNzZXMocm93KVwiXG4gICAgICAgIFtjbGFzcy5lbmFibGUtaG92ZXJdPVwidGFibGVNb2RlbC5pc0hvdmVyRW5hYmxlZCgpXCJcbiAgICAgICAgW2F0dHIuYXVwLXJvdy1pZF09XCJ0cmFja0J5KGksIHJvdylcIlxuICAgID48L3RyPlxuXG4gIDwvdGFibGU+XG48L2Rpdj5cblxuPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCAgKm5nSWY9XCJzY3JvbGxNb2RlJC52YWx1ZSA9PT0gJ3ZpcnR1YWwnXCIgY2xhc3M9XCJ2aXJ0dWFsLXNjcm9sbC1jb250YWluZXJcIiBbdHZzSXRlbVNpemVdPVwicm93SGVpZ2h0JC52YWx1ZVwiIFtoZWFkZXJIZWlnaHRdPVwiaGVhZGVySGVpZ2h0JC52YWx1ZVwiPlxuICA8dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT1cInZpcnR1YWxTY3JvbGxEYXRhU291cmNlXCIgW3RyYWNrQnldPVwidHJhY2tCeVwiPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnMkLnZhbHVlOyBpbmRleCBhcyBpbmRleDsgZmlyc3QgYXMgZmlyc3Q7IGxhc3QgYXMgbGFzdFwiXG4gICAgICAgICAgICAgICAgICBtYXRDb2x1bW5EZWY9XCJ7e2NvbHVtbi5jb2x1bW5JZH19XCI+XG4gICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIFtjbGFzcy5mbGV4XT1cImNvbHVtbi5pc0ZsZXgoKVwiIFtjbGFzcy5oaWRlXT1cIiFjb2x1bW4uaXNWaXNpYmxlKClcIj5cbiAgICAgICAgPGF1cC10YWJsZS1oZWFkZXItY2VsbCBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuY29sdW1uLWluZGV4XT1cImluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5jb2x1bW4taWRdPVwiY29sdW1uLmNvbHVtbklkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiZ2V0Q29sdW1uQ2xhc3Nlcyhjb2x1bW4uY29sdW1uSWQpXCJcbiAgICAgICAgPjwvYXVwLXRhYmxlLWhlYWRlci1jZWxsPlxuICAgICAgPC90aD5cbiAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiAoY2xpY2spPVwibm90aWZ5Q2VsbENsaWNrZWQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICBbY2xhc3MuZW5hYmxlLWN1cnNvcl09XCJ0YWJsZU1vZGVsLmlzQ3Vyc29yRW5hYmxlZChjb2x1bW4pXCJcbiAgICAgICAgICBbY2xhc3MuZmxleF09XCJjb2x1bW4uaXNGbGV4KClcIlxuICAgICAgICAgIFtjbGFzcy5oaWRlXT1cIiFjb2x1bW4uaXNWaXNpYmxlKClcIlxuICAgICAgPlxuICAgICAgICA8YXVwLXRhYmxlLWNlbGwgW2NvbHVtbl09XCIkYW55KGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RhYmxlTW9kZWxdPVwiJGFueSh0YWJsZU1vZGVsKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZWRpdFNlc3Npb25dPVwiJGFueSh0YWJsZU1vZGVsLmdldEVkaXRTZXNzaW9uRm9yKHJvdykpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmNvbHVtbi1pbmRleF09XCJpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5jb2x1bW4taWRdPVwiY29sdW1uLmNvbHVtbklkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJnZXRDb2x1bW5DbGFzc2VzKGNvbHVtbi5jb2x1bW5JZClcIlxuICAgICAgICA+PC9hdXAtdGFibGUtY2VsbD5cbiAgICAgIDwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImNvbHVtbklkcyQudmFsdWU7IHN0aWNreTogdHJ1ZVwiPjwvdHI+XG4gICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGNvbHVtbklkcyQudmFsdWU7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICBbbmdDbGFzc109XCJ0YWJsZU1vZGVsLmdldFJvd0NsYXNzZXMocm93KVwiXG4gICAgICAgIFtjbGFzcy5lbmFibGUtaG92ZXJdPVwidGFibGVNb2RlbC5pc0hvdmVyRW5hYmxlZCgpXCJcbiAgICAgICAgW2F0dHIuYXVwLXJvdy1pZF09XCJ0cmFja0J5KGksIHJvdylcIlxuICAgID48L3RyPlxuXG4gIDwvdGFibGU+XG48L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cblxuIl19
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
import { __decorate, __metadata } from "tslib";
|
|
2
2
|
import { Component, Injector, Input } from "@angular/core";
|
|
3
|
-
import { CanProxy, DelegatingListModel, Dsl,
|
|
3
|
+
import { CanProxy, DelegatingListModel, Dsl, Proxify, proxify } from "@coolon/pectin";
|
|
4
4
|
import { AbstractTableComponent } from '../abstract-table.component';
|
|
5
5
|
import { TableFilterModel } from "../filter/table-filter-model";
|
|
6
6
|
import { TableModel } from "./table-model";
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "
|
|
9
|
-
import * as i2 from "
|
|
10
|
-
import * as i3 from "../paginator/paginator.component";
|
|
11
|
-
import * as i4 from "../renderer/table-body/table-body.component";
|
|
8
|
+
import * as i1 from "../../../directives/highlight-text-model.directive";
|
|
9
|
+
import * as i2 from "../renderer/table-body/table-body.component";
|
|
12
10
|
/**
|
|
13
11
|
* Create your model:
|
|
14
12
|
* @example
|
|
@@ -76,28 +74,13 @@ export class TableComponent extends AbstractTableComponent {
|
|
|
76
74
|
#filterModel_accessor_storage = proxify((TableFilterModel));
|
|
77
75
|
get filterModel() { return this.#filterModel_accessor_storage; }
|
|
78
76
|
set filterModel(value) { this.#filterModel_accessor_storage = value; }
|
|
79
|
-
#enablePaging$_accessor_storage = proxify((ValueModel));
|
|
80
|
-
get enablePaging$() { return this.#enablePaging$_accessor_storage; }
|
|
81
|
-
set enablePaging$(value) { this.#enablePaging$_accessor_storage = value; }
|
|
82
|
-
#enablePaging_accessor_storage = false;
|
|
83
|
-
get enablePaging() { return this.#enablePaging_accessor_storage; }
|
|
84
|
-
set enablePaging(value) { this.#enablePaging_accessor_storage = value; }
|
|
85
|
-
// enablePaging() {
|
|
86
|
-
// if (isNil(this.pageController)) {
|
|
87
|
-
// const pagedListModel = this.registerDisposable(PagedListModel.create(this._visibleRows$.getDelegate(), this._pageSize));
|
|
88
|
-
// this._visibleRows$.setDelegate(pagedListModel);
|
|
89
|
-
// this._pageController = pagedListModel.pageController;
|
|
90
|
-
// }
|
|
91
|
-
// }
|
|
92
77
|
_footerContentAdded = false;
|
|
93
78
|
_filteredRows$ = this.registerDisposable(new DelegatingListModel());
|
|
94
|
-
|
|
95
|
-
pagedListModel;
|
|
79
|
+
scrollMode$;
|
|
96
80
|
constructor(injector) {
|
|
97
81
|
super(injector);
|
|
98
|
-
const { when } = Dsl.disposeWith(this);
|
|
99
|
-
this.
|
|
100
|
-
when(this.enablePaging$).changes(enabled => this.configurePaging(enabled));
|
|
82
|
+
const { chain, when } = Dsl.disposeWith(this);
|
|
83
|
+
this.scrollMode$ = chain(this.enableScrolling$).map(enabled => enabled ? "virtual" : "none");
|
|
101
84
|
}
|
|
102
85
|
ngOnInit() {
|
|
103
86
|
super.ngOnInit();
|
|
@@ -109,75 +92,36 @@ export class TableComponent extends AbstractTableComponent {
|
|
|
109
92
|
else {
|
|
110
93
|
this._filteredRows$.setDelegate(this._dataSource$);
|
|
111
94
|
}
|
|
112
|
-
this.configurePaging(this.enablePaging$.value);
|
|
113
95
|
this.tableModel.bindToTable(this._filteredRows$, this._visibleRows$);
|
|
114
96
|
}
|
|
115
97
|
getModel() {
|
|
116
98
|
return this.tableModel;
|
|
117
99
|
}
|
|
118
|
-
get pageController() {
|
|
119
|
-
// TODO: need to support external page controllers if the paging occurs to our primary data source.
|
|
120
|
-
return this.pagedListModel.pageController;
|
|
121
|
-
}
|
|
122
|
-
configurePaging(enable) {
|
|
123
|
-
if (enable) {
|
|
124
|
-
if (!this.pagedListModel) {
|
|
125
|
-
this.pagedListModel = PagedListModel.create(this._filteredRows$, this._pageSize);
|
|
126
|
-
}
|
|
127
|
-
this._visibleRows$.setDelegate(this.pagedListModel);
|
|
128
|
-
}
|
|
129
|
-
else {
|
|
130
|
-
this.disposeOfPagedListModel();
|
|
131
|
-
this._visibleRows$.setDelegate(this._filteredRows$);
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
disposeOfPagedListModel() {
|
|
135
|
-
if (this.pagedListModel) {
|
|
136
|
-
this.pagedListModel.dispose();
|
|
137
|
-
this.pagedListModel = null;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
100
|
footerContentChanged($event) {
|
|
141
101
|
// console.log($event);
|
|
142
102
|
this._footerContentAdded = true;
|
|
143
103
|
}
|
|
144
|
-
//@Trace()
|
|
145
|
-
updatePageSize(count) {
|
|
146
|
-
this._pageSize.value = count;
|
|
147
|
-
}
|
|
148
104
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
|
|
149
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: TableComponent, selector: "aup-table", inputs: { tableModel: "tableModel", filterModel: "filterModel"
|
|
105
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: TableComponent, selector: "aup-table", inputs: { tableModel: "tableModel", filterModel: "filterModel" }, providers: [
|
|
150
106
|
{ provide: AbstractTableComponent, useExisting: TableComponent }
|
|
151
|
-
], usesInheritance: true, ngImport: i0, template: "<aup-table-body [data$]=\"visibleRows$\"\n [tableModel]=\"tableModel\"\n [showHeader$]=\"showHeader$\"\n [
|
|
107
|
+
], usesInheritance: true, ngImport: i0, template: "<aup-table-body [data$]=\"visibleRows$\"\n [tableModel]=\"tableModel\"\n [showHeader$]=\"showHeader$\"\n [scrollMode$]=\"scrollMode$\"\n [trackBy]=\"trackBy\"\n [aupHighlightTextModel]=\"highlightText$\"\n></aup-table-body>\n<section class=\"table-footer\">\n <div class=\"footer-content\"><ng-content select=\"[footer]\"></ng-content></div>\n</section>\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch}aup-table-body{flex:1}.table-footer{display:flex;flex-direction:row;align-items:center}.table-footer .footer-content{flex:1}\n"], dependencies: [{ kind: "directive", type: i1.HighlightTextModelDirective, selector: "[aupHighlightTextModel]", inputs: ["aupHighlightTextModel"] }, { kind: "component", type: i2.TableBodyComponent, selector: "aup-table-body", inputs: ["data$", "tableModel", "showHeader$", "showHeader", "trackBy", "scrollMode$", "scrollMode"] }] });
|
|
152
108
|
}
|
|
153
109
|
__decorate([
|
|
154
110
|
Proxify(),
|
|
155
|
-
__metadata("design:type",
|
|
111
|
+
__metadata("design:type", TableModel)
|
|
156
112
|
], TableComponent.prototype, "tableModel", null);
|
|
157
113
|
__decorate([
|
|
158
114
|
Proxify(),
|
|
159
115
|
__metadata("design:type", Object)
|
|
160
116
|
], TableComponent.prototype, "filterModel", null);
|
|
161
|
-
__decorate([
|
|
162
|
-
Proxify(),
|
|
163
|
-
__metadata("design:type", Object)
|
|
164
|
-
], TableComponent.prototype, "enablePaging$", null);
|
|
165
|
-
__decorate([
|
|
166
|
-
StoreInValueModel(),
|
|
167
|
-
__metadata("design:type", Object)
|
|
168
|
-
], TableComponent.prototype, "enablePaging", null);
|
|
169
117
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: TableComponent, decorators: [{
|
|
170
118
|
type: Component,
|
|
171
119
|
args: [{ selector: 'aup-table', providers: [
|
|
172
120
|
{ provide: AbstractTableComponent, useExisting: TableComponent }
|
|
173
|
-
], template: "<aup-table-body [data$]=\"visibleRows$\"\n [tableModel]=\"tableModel\"\n [showHeader$]=\"showHeader$\"\n [
|
|
121
|
+
], template: "<aup-table-body [data$]=\"visibleRows$\"\n [tableModel]=\"tableModel\"\n [showHeader$]=\"showHeader$\"\n [scrollMode$]=\"scrollMode$\"\n [trackBy]=\"trackBy\"\n [aupHighlightTextModel]=\"highlightText$\"\n></aup-table-body>\n<section class=\"table-footer\">\n <div class=\"footer-content\"><ng-content select=\"[footer]\"></ng-content></div>\n</section>\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch}aup-table-body{flex:1}.table-footer{display:flex;flex-direction:row;align-items:center}.table-footer .footer-content{flex:1}\n"] }]
|
|
174
122
|
}], ctorParameters: function () { return [{ type: i0.Injector }]; }, propDecorators: { tableModel: [{
|
|
175
123
|
type: Input
|
|
176
124
|
}], filterModel: [{
|
|
177
125
|
type: Input
|
|
178
|
-
}], enablePaging$: [{
|
|
179
|
-
type: Input
|
|
180
|
-
}], enablePaging: [{
|
|
181
|
-
type: Input
|
|
182
126
|
}] } });
|
|
183
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXMvdGFibGUvdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXMvdGFibGUvdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBUyxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQ0wsUUFBUSxFQUNSLG1CQUFtQixFQUNuQixHQUFHLEVBQ0gsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxPQUFPLEVBQ1AsT0FBTyxFQUNQLGlCQUFpQixFQUNqQixVQUFVLEVBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUNuRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7QUFFekM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkRHO0FBU0gsTUFBTSxPQUFPLGNBQW9CLFNBQVEsc0JBQTJCO0lBR3pELCtCQUFhLE9BQU8sQ0FBQyxDQUFBLFVBQWUsQ0FBQSxDQUFDLENBQUM7SUFBdEMsSUFBQSxVQUFVLGdEQUE0QjtJQUF0QyxJQUFBLFVBQVUsc0RBQTRCO0lBR3RDLGdDQUFjLE9BQU8sQ0FBQyxDQUFBLGdCQUFxQixDQUFBLENBQUMsQ0FBQTtJQUE1QyxJQUFBLFdBQVcsaURBQWlDO0lBQTVD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SUFFTyx1QkFBdUI7UUFDN0IsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7U0FDNUI7SUFDSCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsTUFBVztRQUM5Qix1QkFBdUI7UUFDdkIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztJQUNsQyxDQUFDO0lBQ0QsVUFBVTtJQUVWLGNBQWMsQ0FBQyxLQUFhO1FBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUMvQixDQUFDO3VHQXRGVSxjQUFjOzJGQUFkLGNBQWMsb0tBSmQ7WUFDVCxFQUFDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFDO1NBQy9ELGlEQ25GSCw0bEJBWUE7O0FENEVXO0lBREMsT0FBTyxFQUFFOztnREFDNEI7QUFHdEM7SUFEQyxPQUFPLEVBQUU7O2lEQUNrQztBQUk1QztJQURDLE9BQU8sRUFBRTs7bURBQ29DO0FBRzlDO0lBREMsaUJBQWlCLEVBQUU7O2tEQUNDOzJGQWJuQixjQUFjO2tCQVIxQixTQUFTOytCQUNFLFdBQVcsYUFHVjt3QkFDVCxFQUFDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxXQUFXLGdCQUFnQixFQUFDO3FCQUMvRDsrRkFLUSxVQUFVO3NCQURsQixLQUFLO2dCQUlHLFdBQVc7c0JBRG5CLEtBQUs7Z0JBS0csYUFBYTtzQkFEckIsS0FBSztnQkFJRyxZQUFZO3NCQURwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEluamVjdG9yLCBJbnB1dCwgT25Jbml0fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtcbiAgQ2FuUHJveHksXG4gIERlbGVnYXRpbmdMaXN0TW9kZWwsXG4gIERzbCxcbiAgTXV0YWJsZVZhbHVlTW9kZWwsXG4gIFBhZ2VkTGlzdE1vZGVsLFxuICBQcm94aWZ5LFxuICBwcm94aWZ5LFxuICBTdG9yZUluVmFsdWVNb2RlbCxcbiAgVmFsdWVNb2RlbFxufSBmcm9tIFwiQGNvb2xvbi9wZWN0aW5cIjtcbmltcG9ydCB7QWJzdHJhY3RUYWJsZU1vZGVsfSBmcm9tICcuLi9hYnN0cmFjdC10YWJsZS1tb2RlbCc7XG5pbXBvcnQge0Fic3RyYWN0VGFibGVDb21wb25lbnR9IGZyb20gJy4uL2Fic3RyYWN0LXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQge1RhYmxlRmlsdGVyTW9kZWx9IGZyb20gXCIuLi9maWx0ZXIvdGFibGUtZmlsdGVyLW1vZGVsXCI7XG5pbXBvcnQge1RhYmxlTW9kZWx9IGZyb20gXCIuL3RhYmxlLW1vZGVsXCI7XG5cbi8qKlxuICogQ3JlYXRlIHlvdXIgbW9kZWw6XG4gKiBAZXhhbXBsZVxuICogdGhpcy5oZXJvVGFibGVNb2RlbCA9IG5ldyBUYWJsZU1vZGVsKGhlcm9MaXN0LCB0YWJsZSA9PiB7XG4gKiAgIHRhYmxlLnBsdWNrKFwiZmlyc3ROYW1lXCIpO1xuICogICB0YWJsZS5wbHVjayhcImxhc3ROYW1lXCIpO1xuICogICB0YWJsZS5hZGRDdXN0b21Db2x1bW4oXCJmdWxsTmFtZVwiLCBoZXJvID0+IGAke2hlcm8uZmlyc3ROYW1lfSAke2hlcm8ubGFzdE5hbWV9YCk7XG4gKiB9KTtcbiAqXG4gKiBDcmVhdGUgeW91ciB0YWJsZVxuICogQGV4YW1wbGVcbiAqIDxhdXAtdGFibGUgW3RhYmxlTW9kZWxdPVwiaGVyb1RhYmxlTW9kZWxcIj48L2F1cC10YWJsZT5cbiAqXG4gKiBDb2x1bW4gdGVtcGxhdGVzXG4gKiBAZXhhbXBsZVxuICogdGhpcy5oZXJvVGFibGVNb2RlbCA9IG5ldyBUYWJsZU1vZGVsKGhlcm9MaXN0LCB0YWJsZSA9PiB7XG4gKiAgIHRhYmxlLnBsdWNrKFwiZmlyc3ROYW1lXCIpO1xuICogICB0YWJsZS5wbHVjayhcImxhc3ROYW1lXCIpO1xuICogICB0YWJsZS5hZGRUZW1wbGF0ZUNvbHVtbihcInNwZWNpYWxDb2x1bW5cIik7XG4gKiB9KTtcbiAqIDxhdXAtdGFibGUgW3RhYmxlTW9kZWxdPVwiaGVyb1RhYmxlTW9kZWxcIj5cbiAqICAgPGRpdiAqYXVwQ29sdW1uVGVtcGxhdGU9XCJsZXQgaGVybzsgY29sdW1uSWQ6ICdzcGVjaWFsQ29sdW1uJzsgZmlsbENlbGw6IHRydWU7IHBhZENoaWxkOmZhbHNlXCI+XG4gKiAgICAge3toZXJvLm5hbWV9fVxuICogICA8L2Rpdj5cbiAqIDwvYXVwLXRhYmxlPlxuICpcbiAqIFN0eWxpbmdcbiAqIEBleGFtcGxlXG4gKiAgLy8gZ2xvYmFsIHNldHRpbmdzXG4gKiA6cm9vdCB7XG4gKiAgIC0tYXVwLXRhYmxlLWNvbHVtbi1nYXA6IDEwcHg7IC8vIGRlZmF1bHRzIHRvIDI0cHhcbiAqICAgLS1hdXAtdGFibGUtcm93LWhvdmVyLWJhY2tncm91bmQtY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4wNSlcbiAqICAgLS1hdXAtdGFibGUtcm93LXNlbGVjdGVkLWJhY2tncm91bmQtY29sb3I6IHJlYmVjY2FwdXJwbGU7IC8vIGRlZmF1bHRzIHRvIHRyYW5zcGFyZW50XG4gKiAgIC0tYXVwLXRhYmxlLWZpcnN0LWNvbHVtbi1wYWRkaW5nLWxlZnQ6IDE4cHggLy8gZGVmYXVsdHMgdG8gLS1jb2x1bW4tZ2FwXG4gKiAgIC0tYXVwLXRhYmxlLWxhc3QtY29sdW1uLXBhZGRpbmctcmlnaHQ6IDE4cHggLy8gZGVmYXVsdHMgdG8gLS1jb2x1bW4tZ2FwXG4gKiB9XG4gKlxuICogLy8gcGVyIHRhYmxlIHNldHRpbmdzLlxuICogYXVwLXRhYmxlIHtcbiAqICAgLS1jb2x1bW4tZ2FwOiAxMHB4OyAvLyBkZWZhdWx0cyB0byAyNHB4XG4gKiAgIC0tcm93LWhvdmVyLWJhY2tncm91bmQtY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4wNSlcbiAqICAgLS1yb3ctc2VsZWN0ZWQtYmFja2dyb3VuZC1jb2xvcjogcmViZWNjYXB1cnBsZTsgLy8gZGVmYXVsdHMgdG8gdHJhbnNwYXJlbnRcbiAqICAgLS1maXJzdC1jb2x1bW4tcGFkZGluZy1sZWZ0OiAxOHB4IC8vIGRlZmF1bHRzIHRvIC0tY29sdW1uLWdhcFxuICogICAtLWxhc3QtY29sdW1uLXBhZGRpbmctcmlnaHQ6IDE4cHggLy8gZGVmYXVsdHMgdG8gLS1jb2x1bW4tZ2FwXG4gKiAgIDo6bmctZGVlcCB7XG4gKiAgICAgIGF1cC10YWJsZS1oZWFkZXItY2VsbC1yZW5kZXJlcixcbiAqICAgICAgYXVwLXRhYmxlLWNlbGwtcmVuZGVyZXIge1xuICogICAgICAgICYuYXVwLWNvbC1teS1kYXNoZXJpc2VkLWNvbHVtbi1pZCB7XG4gKiAgICAgICAgICAvLyBkbyBzdHVmZlxuICogICAgICAgIH1cbiAqICAgICAgICAmLmZpcnN0LXZpc2libGUtY29sdW1uIHtcbiAqICAgICAgICAgIC8vIGRvIHN0dWZmXG4gKiAgICAgICAgfVxuICogICAgICAgICYubGFzdC12aXNpYmxlLWNvbHVtbiB7XG4gKiAgICAgICAgICAvLyBkbyBzdHVmZlxuICogICAgICAgIH1cbiAqICAgICAgfVxuICogICB9XG4gKiB9XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F1cC10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtwcm92aWRlOiBBYnN0cmFjdFRhYmxlQ29tcG9uZW50LCB1c2VFeGlzdGluZzogVGFibGVDb21wb25lbnR9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQ8Um93PiBleHRlbmRzIEFic3RyYWN0VGFibGVDb21wb25lbnQ8Um93PiBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgQElucHV0KCkgQFByb3hpZnkoKVxuICBhY2Nlc3NvciB0YWJsZU1vZGVsID0gcHJveGlmeShUYWJsZU1vZGVsPFJvdz4pO1xuXG4gIEBJbnB1dCgpIEBQcm94aWZ5KClcbiAgYWNjZXNzb3IgZmlsdGVyTW9kZWwgPSBwcm94aWZ5KFRhYmxlRmlsdGVyTW9kZWw8Um93PilcblxuXG4gIEBJbnB1dCgpIEBQcm94aWZ5KClcbiAgYWNjZXNzb3IgZW5hYmxlUGFnaW5nJCA9IHByb3hpZnkoVmFsdWVNb2RlbDxib29sZWFuPikgO1xuXG4gIEBJbnB1dCgpIEBTdG9yZUluVmFsdWVNb2RlbCgpXG4gIGFjY2Vzc29yIGVuYWJsZVBhZ2luZyA9IGZhbHNlO1xuXG4gIC8vIGVuYWJsZVBhZ2luZygpIHtcbiAgLy8gICBpZiAoaXNOaWwodGhpcy5wYWdlQ29udHJvbGxlcikpIHtcbiAgLy8gICAgIGNvbnN0IHBhZ2VkTGlzdE1vZGVsID0gdGhpcy5yZWdpc3RlckRpc3Bvc2FibGUoUGFnZWRMaXN0TW9kZWwuY3JlYXRlKHRoaXMuX3Zpc2libGVSb3dzJC5nZXREZWxlZ2F0ZSgpLCB0aGlzLl9wYWdlU2l6ZSkpO1xuICAvLyAgICAgdGhpcy5fdmlzaWJsZVJvd3MkLnNldERlbGVnYXRlKHBhZ2VkTGlzdE1vZGVsKTtcbiAgLy8gICAgIHRoaXMuX3BhZ2VDb250cm9sbGVyID0gcGFnZWRMaXN0TW9kZWwucGFnZUNvbnRyb2xsZXI7XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgcHJpdmF0ZSBfZm9vdGVyQ29udGVudEFkZGVkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZmlsdGVyZWRSb3dzJCA9IHRoaXMucmVnaXN0ZXJEaXNwb3NhYmxlKG5ldyBEZWxlZ2F0aW5nTGlzdE1vZGVsPFJvdz4oKSlcbiAgcHJpdmF0ZSBfcGFnZVNpemUgPSBuZXcgTXV0YWJsZVZhbHVlTW9kZWw8bnVtYmVyPigpO1xuICBwcml2YXRlIHBhZ2VkTGlzdE1vZGVsOiBQYWdlZExpc3RNb2RlbC5XcmFwcGVyPFJvdz47XG5cblxuICBjb25zdHJ1Y3RvcihpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgY29uc3Qge3doZW59ID0gRHNsLmRpc3Bvc2VXaXRoKHRoaXMpO1xuICAgIHRoaXMub25EaXNwb3NlKCgpID0+IHRoaXMuZGlzcG9zZU9mUGFnZWRMaXN0TW9kZWwoKSk7XG4gICAgd2hlbih0aGlzLmVuYWJsZVBhZ2luZyQpLmNoYW5nZXMoZW5hYmxlZCA9PiB0aGlzLmNvbmZpZ3VyZVBhZ2luZyhlbmFibGVkKSk7XG4gIH1cblxuICBvdmVycmlkZSBuZ09uSW5pdCgpIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIGlmIChDYW5Qcm94eS5oYXNUYXJnZXQodGhpcy5maWx0ZXJNb2RlbCkpIHtcbiAgICAgIHRoaXMucmVnaXN0ZXJEaXNwb3NhYmxlKHRoaXMuZmlsdGVyTW9kZWwuYmluZFRvVGFibGUodGhpcy5fZGF0YVNvdXJjZSQsIHRoaXMuZ2V0TW9kZWwoKS50ZXh0U2VhcmNoUHJlZGljYXRlJCkpO1xuICAgICAgdGhpcy5oaWdobGlnaHRUZXh0JC5zZXREZWxlZ2F0ZSh0aGlzLmZpbHRlck1vZGVsLmhpZ2hsaWdodFRleHQkKTtcbiAgICAgIHRoaXMuX2ZpbHRlcmVkUm93cyQuc2V0RGVsZWdhdGUodGhpcy5maWx0ZXJNb2RlbC5maWx0ZXJlZFJvd3MkKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9maWx0ZXJlZFJvd3MkLnNldERlbGVnYXRlKHRoaXMuX2RhdGFTb3VyY2UkKTtcbiAgICB9XG4gICAgdGhpcy5jb25maWd1cmVQYWdpbmcodGhpcy5lbmFibGVQYWdpbmckLnZhbHVlKVxuICAgIHRoaXMudGFibGVNb2RlbC5iaW5kVG9UYWJsZSh0aGlzLl9maWx0ZXJlZFJvd3MkLCB0aGlzLl92aXNpYmxlUm93cyQpXG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZ2V0TW9kZWwoKTogQWJzdHJhY3RUYWJsZU1vZGVsPFJvdz4ge1xuICAgIHJldHVybiB0aGlzLnRhYmxlTW9kZWw7XG4gIH1cblxuICBnZXQgcGFnZUNvbnRyb2xsZXIoKSB7XG4gICAgLy8gVE9ETzogbmVlZCB0byBzdXBwb3J0IGV4dGVybmFsIHBhZ2UgY29udHJvbGxlcnMgaWYgdGhlIHBhZ2luZyBvY2N1cnMgdG8gb3VyIHByaW1hcnkgZGF0YSBzb3VyY2UuXG4gICAgcmV0dXJuIHRoaXMucGFnZWRMaXN0TW9kZWwucGFnZUNvbnRyb2xsZXI7XG4gIH1cblxuICBwcml2YXRlIGNvbmZpZ3VyZVBhZ2luZyhlbmFibGU6IGJvb2xlYW4pIHtcbiAgICBpZiAoZW5hYmxlKSB7XG4gICAgICBpZiAoIXRoaXMucGFnZWRMaXN0TW9kZWwpIHtcbiAgICAgICAgdGhpcy5wYWdlZExpc3RNb2RlbCA9IFBhZ2VkTGlzdE1vZGVsLmNyZWF0ZSh0aGlzLl9maWx0ZXJlZFJvd3MkLCB0aGlzLl9wYWdlU2l6ZSk7XG4gICAgICB9XG4gICAgICB0aGlzLl92aXNpYmxlUm93cyQuc2V0RGVsZWdhdGUodGhpcy5wYWdlZExpc3RNb2RlbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlzcG9zZU9mUGFnZWRMaXN0TW9kZWwoKTtcbiAgICAgIHRoaXMuX3Zpc2libGVSb3dzJC5zZXREZWxlZ2F0ZSh0aGlzLl9maWx0ZXJlZFJvd3MkKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRpc3Bvc2VPZlBhZ2VkTGlzdE1vZGVsKCkge1xuICAgIGlmICh0aGlzLnBhZ2VkTGlzdE1vZGVsKSB7XG4gICAgICB0aGlzLnBhZ2VkTGlzdE1vZGVsLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMucGFnZWRMaXN0TW9kZWwgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGZvb3RlckNvbnRlbnRDaGFuZ2VkKCRldmVudDogYW55KSB7XG4gICAgLy8gY29uc29sZS5sb2coJGV2ZW50KTtcbiAgICB0aGlzLl9mb290ZXJDb250ZW50QWRkZWQgPSB0cnVlO1xuICB9XG4gIC8vQFRyYWNlKClcblxuICB1cGRhdGVQYWdlU2l6ZShjb3VudDogbnVtYmVyKSB7XG4gICAgdGhpcy5fcGFnZVNpemUudmFsdWUgPSBjb3VudDtcbiAgfVxufVxuIiwiPGF1cC10YWJsZS1ib2R5IFtkYXRhJF09XCJ2aXNpYmxlUm93cyRcIlxuICAgICAgICAgICAgICAgIFt0YWJsZU1vZGVsXT1cInRhYmxlTW9kZWxcIlxuICAgICAgICAgICAgICAgIFtzaG93SGVhZGVyJF09XCJzaG93SGVhZGVyJFwiXG4gICAgICAgICAgICAgICAgW2VuYWJsZVNjcm9sbGluZ109XCJlbmFibGVTY3JvbGxpbmdcIlxuICAgICAgICAgICAgICAgIFt0cmFja0J5XT1cInRyYWNrQnlcIlxuICAgICAgICAgICAgICAgICh2aXNpYmxlUm93Q291bnQpPVwidXBkYXRlUGFnZVNpemUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW2F1cEhpZ2hsaWdodFRleHRNb2RlbF09XCJoaWdobGlnaHRUZXh0JFwiXG4+PC9hdXAtdGFibGUtYm9keT5cbjxzZWN0aW9uIGNsYXNzPVwidGFibGUtZm9vdGVyXCI+XG4gIDxkaXYgY2xhc3M9XCJmb290ZXItY29udGVudFwiPjxuZy1jb250ZW50IHNlbGVjdD1cIltmb290ZXJdXCI+PC9uZy1jb250ZW50PjwvZGl2PlxuICA8YXVwLXBhZ2luYXRvciAqbmdJZj1cImVuYWJsZVBhZ2luZyQudmFsdWVcIiBbcGFnZUNvbnRyb2xsZXJdPVwicGFnZUNvbnRyb2xsZXJcIj48L2F1cC1wYWdpbmF0b3I+XG48L3NlY3Rpb24+XG4iXX0=
|
|
127
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXMvdGFibGUvdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXMvdGFibGUvdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBUyxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUMsUUFBUSxFQUFFLG1CQUFtQixFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFrQixNQUFNLGdCQUFnQixDQUFDO0FBRXJHLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ25FLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBRTlELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7Ozs7QUFFekM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkRHO0FBU0gsTUFBTSxPQUFPLGNBQW9CLFNBQVEsc0JBQTJCO0lBR3pELCtCQUE4QixPQUFPLENBQUMsQ0FBQSxVQUFlLENBQUEsQ0FBQyxDQUFDO0lBQXZELElBQUEsVUFBVSxnREFBNkM7SUFBdkQsSUFBQSxVQUFVLHNEQUE2QztJQUd2RCxnQ0FBYyxPQUFPLENBQUMsQ0FBQSxnQkFBcUIsQ0FBQSxDQUFDLENBQUE7SUFBNUMsSUFBQSxXQUFXLGlEQUFpQztJQUE1QyxJQUFBLFdBQVcsdURBQWlDO0lBRTdDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztJQUVuQixjQUFjLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksbUJBQW1CLEVBQU8sQ0FBQyxDQUFBO0lBQ3RFLFdBQVcsQ0FBaUQ7SUFFL0UsWUFBWSxRQUFrQjtRQUM1QixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEIsTUFBTSxFQUFDLEtBQUssRUFBRSxJQUFJLEVBQUMsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBMEMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDL0gsQ0FBQztJQUVRLFFBQVE7UUFDZixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakIsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUN4QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO1lBQy9HLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDakUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQTtTQUNoRTthQUFNO1lBQ0wsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ3BEO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUE7SUFDdEUsQ0FBQztJQUVrQixRQUFRO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRUQsb0JBQW9CLENBQUMsTUFBVztRQUM5Qix1QkFBdUI7UUFDdkIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztJQUNsQyxDQUFDO3VHQXRDVSxjQUFjOzJGQUFkLGNBQWMsc0dBSmQ7WUFDVCxFQUFDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFDO1NBQy9ELGlEQzFFSCxpYkFVQTs7QURxRVc7SUFEQyxPQUFPLEVBQUU7OEJBQ0UsVUFBVTtnREFBaUM7QUFHdkQ7SUFEQyxPQUFPLEVBQUU7O2lEQUNrQzsyRkFOMUMsY0FBYztrQkFSMUIsU0FBUzsrQkFDRSxXQUFXLGFBR1Y7d0JBQ1QsRUFBQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsV0FBVyxnQkFBZ0IsRUFBQztxQkFDL0Q7K0ZBS1EsVUFBVTtzQkFEbEIsS0FBSztnQkFJRyxXQUFXO3NCQURuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEluamVjdG9yLCBJbnB1dCwgT25Jbml0fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtDYW5Qcm94eSwgRGVsZWdhdGluZ0xpc3RNb2RlbCwgRHNsLCBQcm94aWZ5LCBwcm94aWZ5LCBWYWx1ZU1vZGVsQ2hhaW59IGZyb20gXCJAY29vbG9uL3BlY3RpblwiO1xuaW1wb3J0IHtBYnN0cmFjdFRhYmxlTW9kZWx9IGZyb20gJy4uL2Fic3RyYWN0LXRhYmxlLW1vZGVsJztcbmltcG9ydCB7QWJzdHJhY3RUYWJsZUNvbXBvbmVudH0gZnJvbSAnLi4vYWJzdHJhY3QtdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7VGFibGVGaWx0ZXJNb2RlbH0gZnJvbSBcIi4uL2ZpbHRlci90YWJsZS1maWx0ZXItbW9kZWxcIjtcbmltcG9ydCB7VGFibGVCb2R5Q29tcG9uZW50fSBmcm9tIFwiLi4vcmVuZGVyZXIvdGFibGUtYm9keS90YWJsZS1ib2R5LmNvbXBvbmVudFwiO1xuaW1wb3J0IHtUYWJsZU1vZGVsfSBmcm9tIFwiLi90YWJsZS1tb2RlbFwiO1xuXG4vKipcbiAqIENyZWF0ZSB5b3VyIG1vZGVsOlxuICogQGV4YW1wbGVcbiAqIHRoaXMuaGVyb1RhYmxlTW9kZWwgPSBuZXcgVGFibGVNb2RlbChoZXJvTGlzdCwgdGFibGUgPT4ge1xuICogICB0YWJsZS5wbHVjayhcImZpcnN0TmFtZVwiKTtcbiAqICAgdGFibGUucGx1Y2soXCJsYXN0TmFtZVwiKTtcbiAqICAgdGFibGUuYWRkQ3VzdG9tQ29sdW1uKFwiZnVsbE5hbWVcIiwgaGVybyA9PiBgJHtoZXJvLmZpcnN0TmFtZX0gJHtoZXJvLmxhc3ROYW1lfWApO1xuICogfSk7XG4gKlxuICogQ3JlYXRlIHlvdXIgdGFibGVcbiAqIEBleGFtcGxlXG4gKiA8YXVwLXRhYmxlIFt0YWJsZU1vZGVsXT1cImhlcm9UYWJsZU1vZGVsXCI+PC9hdXAtdGFibGU+XG4gKlxuICogQ29sdW1uIHRlbXBsYXRlc1xuICogQGV4YW1wbGVcbiAqIHRoaXMuaGVyb1RhYmxlTW9kZWwgPSBuZXcgVGFibGVNb2RlbChoZXJvTGlzdCwgdGFibGUgPT4ge1xuICogICB0YWJsZS5wbHVjayhcImZpcnN0TmFtZVwiKTtcbiAqICAgdGFibGUucGx1Y2soXCJsYXN0TmFtZVwiKTtcbiAqICAgdGFibGUuYWRkVGVtcGxhdGVDb2x1bW4oXCJzcGVjaWFsQ29sdW1uXCIpO1xuICogfSk7XG4gKiA8YXVwLXRhYmxlIFt0YWJsZU1vZGVsXT1cImhlcm9UYWJsZU1vZGVsXCI+XG4gKiAgIDxkaXYgKmF1cENvbHVtblRlbXBsYXRlPVwibGV0IGhlcm87IGNvbHVtbklkOiAnc3BlY2lhbENvbHVtbic7IGZpbGxDZWxsOiB0cnVlOyBwYWRDaGlsZDpmYWxzZVwiPlxuICogICAgIHt7aGVyby5uYW1lfX1cbiAqICAgPC9kaXY+XG4gKiA8L2F1cC10YWJsZT5cbiAqXG4gKiBTdHlsaW5nXG4gKiBAZXhhbXBsZVxuICogIC8vIGdsb2JhbCBzZXR0aW5nc1xuICogOnJvb3Qge1xuICogICAtLWF1cC10YWJsZS1jb2x1bW4tZ2FwOiAxMHB4OyAvLyBkZWZhdWx0cyB0byAyNHB4XG4gKiAgIC0tYXVwLXRhYmxlLXJvdy1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMDUpXG4gKiAgIC0tYXVwLXRhYmxlLXJvdy1zZWxlY3RlZC1iYWNrZ3JvdW5kLWNvbG9yOiByZWJlY2NhcHVycGxlOyAvLyBkZWZhdWx0cyB0byB0cmFuc3BhcmVudFxuICogICAtLWF1cC10YWJsZS1maXJzdC1jb2x1bW4tcGFkZGluZy1sZWZ0OiAxOHB4IC8vIGRlZmF1bHRzIHRvIC0tY29sdW1uLWdhcFxuICogICAtLWF1cC10YWJsZS1sYXN0LWNvbHVtbi1wYWRkaW5nLXJpZ2h0OiAxOHB4IC8vIGRlZmF1bHRzIHRvIC0tY29sdW1uLWdhcFxuICogfVxuICpcbiAqIC8vIHBlciB0YWJsZSBzZXR0aW5ncy5cbiAqIGF1cC10YWJsZSB7XG4gKiAgIC0tY29sdW1uLWdhcDogMTBweDsgLy8gZGVmYXVsdHMgdG8gMjRweFxuICogICAtLXJvdy1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMDUpXG4gKiAgIC0tcm93LXNlbGVjdGVkLWJhY2tncm91bmQtY29sb3I6IHJlYmVjY2FwdXJwbGU7IC8vIGRlZmF1bHRzIHRvIHRyYW5zcGFyZW50XG4gKiAgIC0tZmlyc3QtY29sdW1uLXBhZGRpbmctbGVmdDogMThweCAvLyBkZWZhdWx0cyB0byAtLWNvbHVtbi1nYXBcbiAqICAgLS1sYXN0LWNvbHVtbi1wYWRkaW5nLXJpZ2h0OiAxOHB4IC8vIGRlZmF1bHRzIHRvIC0tY29sdW1uLWdhcFxuICogICA6Om5nLWRlZXAge1xuICogICAgICBhdXAtdGFibGUtaGVhZGVyLWNlbGwtcmVuZGVyZXIsXG4gKiAgICAgIGF1cC10YWJsZS1jZWxsLXJlbmRlcmVyIHtcbiAqICAgICAgICAmLmF1cC1jb2wtbXktZGFzaGVyaXNlZC1jb2x1bW4taWQge1xuICogICAgICAgICAgLy8gZG8gc3R1ZmZcbiAqICAgICAgICB9XG4gKiAgICAgICAgJi5maXJzdC12aXNpYmxlLWNvbHVtbiB7XG4gKiAgICAgICAgICAvLyBkbyBzdHVmZlxuICogICAgICAgIH1cbiAqICAgICAgICAmLmxhc3QtdmlzaWJsZS1jb2x1bW4ge1xuICogICAgICAgICAgLy8gZG8gc3R1ZmZcbiAqICAgICAgICB9XG4gKiAgICAgIH1cbiAqICAgfVxuICogfVxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhdXAtdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7cHJvdmlkZTogQWJzdHJhY3RUYWJsZUNvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IFRhYmxlQ29tcG9uZW50fVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29tcG9uZW50PFJvdz4gZXh0ZW5kcyBBYnN0cmFjdFRhYmxlQ29tcG9uZW50PFJvdz4gaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBJbnB1dCgpIEBQcm94aWZ5KClcbiAgYWNjZXNzb3IgdGFibGVNb2RlbDogVGFibGVNb2RlbDxSb3c+ID0gcHJveGlmeShUYWJsZU1vZGVsPFJvdz4pO1xuXG4gIEBJbnB1dCgpIEBQcm94aWZ5KClcbiAgYWNjZXNzb3IgZmlsdGVyTW9kZWwgPSBwcm94aWZ5KFRhYmxlRmlsdGVyTW9kZWw8Um93PilcblxuICBwcml2YXRlIF9mb290ZXJDb250ZW50QWRkZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9maWx0ZXJlZFJvd3MkID0gdGhpcy5yZWdpc3RlckRpc3Bvc2FibGUobmV3IERlbGVnYXRpbmdMaXN0TW9kZWw8Um93PigpKVxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2Nyb2xsTW9kZSQ6IFZhbHVlTW9kZWxDaGFpbjxUYWJsZUJvZHlDb21wb25lbnQuU2Nyb2xsTW9kZT47XG5cbiAgY29uc3RydWN0b3IoaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgIGNvbnN0IHtjaGFpbiwgd2hlbn0gPSBEc2wuZGlzcG9zZVdpdGgodGhpcyk7XG4gICAgdGhpcy5zY3JvbGxNb2RlJCA9IGNoYWluKHRoaXMuZW5hYmxlU2Nyb2xsaW5nJCkubWFwKGVuYWJsZWQgPT4gZW5hYmxlZCA/IFwidmlydHVhbFwiIGFzIFRhYmxlQm9keUNvbXBvbmVudC5TY3JvbGxNb2RlIDogXCJub25lXCIpXG4gIH1cblxuICBvdmVycmlkZSBuZ09uSW5pdCgpIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIGlmIChDYW5Qcm94eS5oYXNUYXJnZXQodGhpcy5maWx0ZXJNb2RlbCkpIHtcbiAgICAgIHRoaXMucmVnaXN0ZXJEaXNwb3NhYmxlKHRoaXMuZmlsdGVyTW9kZWwuYmluZFRvVGFibGUodGhpcy5fZGF0YVNvdXJjZSQsIHRoaXMuZ2V0TW9kZWwoKS50ZXh0U2VhcmNoUHJlZGljYXRlJCkpO1xuICAgICAgdGhpcy5oaWdobGlnaHRUZXh0JC5zZXREZWxlZ2F0ZSh0aGlzLmZpbHRlck1vZGVsLmhpZ2hsaWdodFRleHQkKTtcbiAgICAgIHRoaXMuX2ZpbHRlcmVkUm93cyQuc2V0RGVsZWdhdGUodGhpcy5maWx0ZXJNb2RlbC5maWx0ZXJlZFJvd3MkKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9maWx0ZXJlZFJvd3MkLnNldERlbGVnYXRlKHRoaXMuX2RhdGFTb3VyY2UkKTtcbiAgICB9XG4gICAgdGhpcy50YWJsZU1vZGVsLmJpbmRUb1RhYmxlKHRoaXMuX2ZpbHRlcmVkUm93cyQsIHRoaXMuX3Zpc2libGVSb3dzJClcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBnZXRNb2RlbCgpOiBBYnN0cmFjdFRhYmxlTW9kZWw8Um93PiB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVNb2RlbDtcbiAgfVxuXG4gIGZvb3RlckNvbnRlbnRDaGFuZ2VkKCRldmVudDogYW55KSB7XG4gICAgLy8gY29uc29sZS5sb2coJGV2ZW50KTtcbiAgICB0aGlzLl9mb290ZXJDb250ZW50QWRkZWQgPSB0cnVlO1xuICB9XG59XG4iLCI8YXVwLXRhYmxlLWJvZHkgW2RhdGEkXT1cInZpc2libGVSb3dzJFwiXG4gICAgICAgICAgICAgICAgW3RhYmxlTW9kZWxdPVwidGFibGVNb2RlbFwiXG4gICAgICAgICAgICAgICAgW3Nob3dIZWFkZXIkXT1cInNob3dIZWFkZXIkXCJcbiAgICAgICAgICAgICAgICBbc2Nyb2xsTW9kZSRdPVwic2Nyb2xsTW9kZSRcIlxuICAgICAgICAgICAgICAgIFt0cmFja0J5XT1cInRyYWNrQnlcIlxuICAgICAgICAgICAgICAgIFthdXBIaWdobGlnaHRUZXh0TW9kZWxdPVwiaGlnaGxpZ2h0VGV4dCRcIlxuPjwvYXVwLXRhYmxlLWJvZHk+XG48c2VjdGlvbiBjbGFzcz1cInRhYmxlLWZvb3RlclwiPlxuICA8ZGl2IGNsYXNzPVwiZm9vdGVyLWNvbnRlbnRcIj48bmctY29udGVudCBzZWxlY3Q9XCJbZm9vdGVyXVwiPjwvbmctY29udGVudD48L2Rpdj5cbjwvc2VjdGlvbj5cbiJdfQ==
|