@nova-design-system/nova-angular 3.16.0 → 3.18.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/nova-components/esm2022/lib/components/index.mjs +2 -1
- package/dist/nova-components/esm2022/lib/components/nv-datatable-cell.directive.mjs +37 -0
- package/dist/nova-components/esm2022/lib/components/nv-datatable.component.mjs +267 -40
- package/dist/nova-components/esm2022/lib/nova-components.module.mjs +3 -3
- package/dist/nova-components/esm2022/lib/stencil-generated/component-value-accessors.mjs +37 -1
- package/dist/nova-components/esm2022/lib/stencil-generated/components.mjs +29 -1
- package/dist/nova-components/esm2022/lib/stencil-generated/index.mjs +2 -1
- package/dist/nova-components/fesm2022/nova-components.mjs +366 -42
- package/dist/nova-components/fesm2022/nova-components.mjs.map +1 -1
- package/dist/nova-components/lib/components/index.d.ts +1 -0
- package/dist/nova-components/lib/components/nv-datatable-cell.directive.d.ts +37 -0
- package/dist/nova-components/lib/components/nv-datatable.component.d.ts +95 -3
- package/dist/nova-components/lib/nova-components.module.d.ts +2 -2
- package/dist/nova-components/lib/stencil-generated/component-value-accessors.d.ts +8 -1
- package/dist/nova-components/lib/stencil-generated/components.d.ts +13 -0
- package/dist/nova-components/lib/stencil-generated/index.d.ts +1 -1
- package/package.json +1 -1
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
export * from './nv-datatable.component';
|
|
2
|
-
|
|
2
|
+
export { NvDatatableCellDirective, } from './nv-datatable-cell.directive';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ub3ZhLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsT0FBTyxFQUNMLHdCQUF3QixHQUV6QixNQUFNLCtCQUErQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9udi1kYXRhdGFibGUuY29tcG9uZW50JztcbmV4cG9ydCB7XG4gIE52RGF0YXRhYmxlQ2VsbERpcmVjdGl2ZSxcbiAgdHlwZSBOdkRhdGF0YWJsZUNlbGxDb250ZXh0LFxufSBmcm9tICcuL252LWRhdGF0YWJsZS1jZWxsLmRpcmVjdGl2ZSc7XG4iXX0=
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Directive, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* Directive to mark ng-templates as cell templates for specific fields.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```html
|
|
8
|
+
* <nv-datatable [columns]="columns" [rows]="data">
|
|
9
|
+
* <ng-template nvDatatableCell="name" let-context>
|
|
10
|
+
* <div class="font-semibold">{{ context.value }}</div>
|
|
11
|
+
* </ng-template>
|
|
12
|
+
*
|
|
13
|
+
* <ng-template nvDatatableCell="price" let-context>
|
|
14
|
+
* <span class="font-mono">${{ context.value }}</span>
|
|
15
|
+
* </ng-template>
|
|
16
|
+
* </nv-datatable>
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
20
|
+
export class NvDatatableCellDirective {
|
|
21
|
+
constructor(template) {
|
|
22
|
+
this.template = template;
|
|
23
|
+
}
|
|
24
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NvDatatableCellDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
25
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.9", type: NvDatatableCellDirective, isStandalone: true, selector: "ng-template[nvDatatableCell]", inputs: { nvDatatableCell: "nvDatatableCell" }, ngImport: i0 }); }
|
|
26
|
+
}
|
|
27
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NvDatatableCellDirective, decorators: [{
|
|
28
|
+
type: Directive,
|
|
29
|
+
args: [{
|
|
30
|
+
selector: 'ng-template[nvDatatableCell]',
|
|
31
|
+
standalone: true,
|
|
32
|
+
}]
|
|
33
|
+
}], ctorParameters: () => [{ type: i0.TemplateRef }], propDecorators: { nvDatatableCell: [{
|
|
34
|
+
type: Input,
|
|
35
|
+
args: [{ required: true }]
|
|
36
|
+
}] } });
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnYtZGF0YXRhYmxlLWNlbGwuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbm92YS1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9udi1kYXRhdGFibGUtY2VsbC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQWUsTUFBTSxlQUFlLENBQUM7O0FBVzlEOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUtILDhEQUE4RDtBQUM5RCxNQUFNLE9BQU8sd0JBQXdCO0lBT25DLFlBQW1CLFFBQWdEO1FBQWhELGFBQVEsR0FBUixRQUFRLENBQXdDO0lBQUcsQ0FBQzs4R0FQNUQsd0JBQXdCO2tHQUF4Qix3QkFBd0I7OzJGQUF4Qix3QkFBd0I7a0JBTHBDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDhCQUE4QjtvQkFDeEMsVUFBVSxFQUFFLElBQUk7aUJBQ2pCO2dGQU80QixlQUFlO3NCQUF6QyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7IENlbGxDb250ZXh0IH0gZnJvbSAnLi9kYXRhdGFibGUudXRpbHMnO1xuXG4vKipcbiAqIENvbnRleHQgdHlwZSBmb3IgY2VsbCB0ZW1wbGF0ZXMgLSB1c2VzIFRhblN0YWNrIFRhYmxlJ3MgQ2VsbENvbnRleHQgZGlyZWN0bHlcbiAqL1xuZXhwb3J0IHR5cGUgTnZEYXRhdGFibGVDZWxsQ29udGV4dDxUPiA9IHtcbiAgLyoqIFRoZSBjZWxsJ3MgYWN0dWFsIHZhbHVlICovXG4gICRpbXBsaWNpdDogQ2VsbENvbnRleHQ8VCwgdW5rbm93bj47XG59O1xuXG4vKipcbiAqIERpcmVjdGl2ZSB0byBtYXJrIG5nLXRlbXBsYXRlcyBhcyBjZWxsIHRlbXBsYXRlcyBmb3Igc3BlY2lmaWMgZmllbGRzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8bnYtZGF0YXRhYmxlIFtjb2x1bW5zXT1cImNvbHVtbnNcIiBbcm93c109XCJkYXRhXCI+XG4gKiAgIDxuZy10ZW1wbGF0ZSBudkRhdGF0YWJsZUNlbGw9XCJuYW1lXCIgbGV0LWNvbnRleHQ+XG4gKiAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGRcIj57eyBjb250ZXh0LnZhbHVlIH19PC9kaXY+XG4gKiAgIDwvbmctdGVtcGxhdGU+XG4gKlxuICogICA8bmctdGVtcGxhdGUgbnZEYXRhdGFibGVDZWxsPVwicHJpY2VcIiBsZXQtY29udGV4dD5cbiAqICAgICA8c3BhbiBjbGFzcz1cImZvbnQtbW9ub1wiPiR7eyBjb250ZXh0LnZhbHVlIH19PC9zcGFuPlxuICogICA8L25nLXRlbXBsYXRlPlxuICogPC9udi1kYXRhdGFibGU+XG4gKiBgYGBcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnbmctdGVtcGxhdGVbbnZEYXRhdGFibGVDZWxsXScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBjbGFzcyBOdkRhdGF0YWJsZUNlbGxEaXJlY3RpdmU8VCA9IGFueT4ge1xuICAvKipcbiAgICogVGhlIGZpZWxkIG5hbWUgdGhpcyB0ZW1wbGF0ZSBzaG91bGQgcmVuZGVyLlxuICAgKiBTaG91bGQgbWF0Y2ggYSBmaWVsZCBpbiB5b3VyIGNvbHVtbiBkZWZpbml0aW9ucy5cbiAgICovXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIG52RGF0YXRhYmxlQ2VsbCE6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPE52RGF0YXRhYmxlQ2VsbENvbnRleHQ8VD4+KSB7fVxufVxuIl19
|
|
@@ -1,46 +1,237 @@
|
|
|
1
1
|
/* eslint-disable jsdoc/require-jsdoc */
|
|
2
2
|
/* eslint-disable jsdoc/require-returns */
|
|
3
|
-
import { Component, computed, input, CUSTOM_ELEMENTS_SCHEMA, } from '@angular/core';
|
|
3
|
+
import { Component, computed, input, TemplateRef, CUSTOM_ELEMENTS_SCHEMA, ContentChild, ContentChildren, effect, signal, viewChild, } from '@angular/core';
|
|
4
4
|
import { CommonModule } from '@angular/common';
|
|
5
|
-
import {
|
|
5
|
+
import { NvDatatableCellDirective, } from './nv-datatable-cell.directive';
|
|
6
|
+
import { createAngularTable, getCoreRowModel, getPaginationRowModel, FlexRenderDirective, } from './datatable.utils'; // local copy of @tanstack/angular-table (required for storybook, the built version is not working)
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@angular/common";
|
|
7
9
|
export { flexRenderComponent as nvDatatableRenderComponent } from './datatable.utils';
|
|
8
10
|
/**
|
|
9
11
|
* Nova Datatable built on TanStack Table (Angular).
|
|
10
12
|
*/
|
|
11
13
|
export class NvDatatable {
|
|
14
|
+
/** Public getter for table instance. */
|
|
15
|
+
table() {
|
|
16
|
+
return this.tableInstance();
|
|
17
|
+
}
|
|
12
18
|
constructor() {
|
|
13
19
|
/** Column definitions */
|
|
14
20
|
this.columns = input([]);
|
|
15
21
|
/** Row data */
|
|
16
22
|
this.rows = input([]);
|
|
23
|
+
/** Optional pagination configuration */
|
|
24
|
+
this.pagination = input(undefined);
|
|
25
|
+
/** Should the header stick to the top of the table when scrolling? */
|
|
26
|
+
this.stickyHeader = input(false);
|
|
27
|
+
/** Signal to track cell templates array */
|
|
28
|
+
this.cellTemplatesSignal = signal([]);
|
|
29
|
+
/** Map of field names to cell templates */
|
|
30
|
+
this.cellTemplateMap = computed(() => {
|
|
31
|
+
const map = new Map();
|
|
32
|
+
this.cellTemplatesSignal().forEach((directive) => {
|
|
33
|
+
map.set(directive.nvDatatableCell, directive.template);
|
|
34
|
+
});
|
|
35
|
+
return map;
|
|
36
|
+
});
|
|
37
|
+
/** Pagination state for server mode */
|
|
38
|
+
this.paginationState = signal({
|
|
39
|
+
pageIndex: 0,
|
|
40
|
+
pageSize: this.pagination()?.initialPageSize || 10,
|
|
41
|
+
});
|
|
42
|
+
/** Reference to table rows for infinite scroll observer */
|
|
43
|
+
this.tableRows = viewChild('tableRow');
|
|
44
|
+
/** Intersection observer for infinite scroll */
|
|
45
|
+
this.observer = null;
|
|
46
|
+
/** Helper to check if using infinite scroll */
|
|
47
|
+
this.isInfiniteScroll = computed(() => this.pagination()?.mode === 'infinite');
|
|
17
48
|
/** Computed table columns with proper typing and filtering. */
|
|
18
|
-
this.tableColumns = computed(() =>
|
|
19
|
-
|
|
20
|
-
.
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
49
|
+
this.tableColumns = computed(() => {
|
|
50
|
+
const templateMap = this.cellTemplateMap();
|
|
51
|
+
return this.columns()
|
|
52
|
+
.filter((col) => !col.hidden)
|
|
53
|
+
.map((col) => ({
|
|
54
|
+
accessorKey: col.field,
|
|
55
|
+
header: col.headerName || String(col.field),
|
|
56
|
+
size: col.width,
|
|
57
|
+
enableResizing: col.resizable ?? true,
|
|
58
|
+
cell: (context) => {
|
|
59
|
+
const fieldName = String(col.field);
|
|
60
|
+
const cellTemplate = templateMap.get(fieldName);
|
|
61
|
+
// Priority: template > renderCell > default
|
|
62
|
+
if (cellTemplate) {
|
|
63
|
+
// Return TemplateRef directly - FlexRender will handle it
|
|
64
|
+
return cellTemplate;
|
|
65
|
+
}
|
|
66
|
+
// Fall back to renderCell if provided
|
|
67
|
+
if (col.renderCell) {
|
|
68
|
+
return col.renderCell(context);
|
|
69
|
+
}
|
|
70
|
+
// Default: just return the value
|
|
71
|
+
return context.getValue();
|
|
72
|
+
},
|
|
73
|
+
}));
|
|
74
|
+
});
|
|
28
75
|
/** TanStack table instance with Signals */
|
|
29
|
-
this.tableInstance = createAngularTable(() =>
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
76
|
+
this.tableInstance = createAngularTable(() => {
|
|
77
|
+
const paginationConfig = this.pagination();
|
|
78
|
+
if (!paginationConfig || paginationConfig.mode === 'infinite') {
|
|
79
|
+
// No pagination or infinite scroll - simple config
|
|
80
|
+
return {
|
|
81
|
+
data: this.rows(),
|
|
82
|
+
columns: this.tableColumns(),
|
|
83
|
+
getCoreRowModel: getCoreRowModel(),
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
else if (paginationConfig.mode === 'client') {
|
|
87
|
+
// Client-side pagination
|
|
88
|
+
return {
|
|
89
|
+
data: this.rows(),
|
|
90
|
+
columns: this.tableColumns(),
|
|
91
|
+
getCoreRowModel: getCoreRowModel(),
|
|
92
|
+
getPaginationRowModel: getPaginationRowModel(),
|
|
93
|
+
initialState: {
|
|
94
|
+
pagination: {
|
|
95
|
+
pageIndex: 0,
|
|
96
|
+
pageSize: paginationConfig.initialPageSize || 10,
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
// Server-side pagination
|
|
103
|
+
const pageSize = this.paginationState().pageSize;
|
|
104
|
+
return {
|
|
105
|
+
data: this.rows(),
|
|
106
|
+
columns: this.tableColumns(),
|
|
107
|
+
getCoreRowModel: getCoreRowModel(),
|
|
108
|
+
manualPagination: true,
|
|
109
|
+
pageCount: paginationConfig.totalPageCount !== undefined
|
|
110
|
+
? paginationConfig.totalPageCount
|
|
111
|
+
: paginationConfig.totalRowCount !== undefined
|
|
112
|
+
? Math.ceil(paginationConfig.totalRowCount / pageSize)
|
|
113
|
+
: -1,
|
|
114
|
+
state: {
|
|
115
|
+
pagination: this.paginationState(),
|
|
116
|
+
},
|
|
117
|
+
onPaginationChange: (updaterOrValue) => {
|
|
118
|
+
if (typeof updaterOrValue === 'function') {
|
|
119
|
+
this.paginationState.set(updaterOrValue(this.paginationState()));
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
this.paginationState.set(updaterOrValue);
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
/** Build pagination API for template */
|
|
129
|
+
this.paginationAPI = computed(() => {
|
|
130
|
+
const paginationConfig = this.pagination();
|
|
131
|
+
if (!paginationConfig) {
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
const table = this.table();
|
|
135
|
+
const tablePaginationState = table.getState().pagination;
|
|
136
|
+
const pageCount = table.getPageCount();
|
|
137
|
+
const rowCount = paginationConfig.mode === 'server'
|
|
138
|
+
? paginationConfig.totalRowCount || this.rows().length
|
|
139
|
+
: this.rows().length;
|
|
140
|
+
return {
|
|
141
|
+
pageIndex: tablePaginationState.pageIndex,
|
|
142
|
+
pageSize: tablePaginationState.pageSize,
|
|
143
|
+
pageCount,
|
|
144
|
+
rowCount,
|
|
145
|
+
firstPage: () => table.setPageIndex(0),
|
|
146
|
+
previousPage: () => table.previousPage(),
|
|
147
|
+
nextPage: () => table.nextPage(),
|
|
148
|
+
lastPage: () => table.setPageIndex(pageCount - 1),
|
|
149
|
+
setPageIndex: (index) => table.setPageIndex(index),
|
|
150
|
+
setPageSize: (size) => table.setPageSize(size),
|
|
151
|
+
canPreviousPage: table.getCanPreviousPage(),
|
|
152
|
+
canNextPage: table.getCanNextPage(),
|
|
153
|
+
isLoading: paginationConfig.mode === 'infinite'
|
|
154
|
+
? paginationConfig.isLoading
|
|
155
|
+
: undefined,
|
|
156
|
+
hasMore: paginationConfig.mode === 'infinite'
|
|
157
|
+
? paginationConfig.hasMore
|
|
158
|
+
: undefined,
|
|
159
|
+
};
|
|
160
|
+
});
|
|
161
|
+
// Watch pagination state changes for server mode
|
|
162
|
+
effect(() => {
|
|
163
|
+
const paginationConfig = this.pagination();
|
|
164
|
+
const state = this.paginationState();
|
|
165
|
+
if (paginationConfig?.mode === 'server' &&
|
|
166
|
+
paginationConfig.onPaginationChange) {
|
|
167
|
+
paginationConfig.onPaginationChange({
|
|
168
|
+
pageIndex: state.pageIndex,
|
|
169
|
+
pageSize: state.pageSize,
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
}, { allowSignalWrites: true });
|
|
173
|
+
// Set up intersection observer for infinite scroll
|
|
174
|
+
effect(() => {
|
|
175
|
+
const paginationConfig = this.pagination();
|
|
176
|
+
const rows = this.rows(); // Track rows changes
|
|
177
|
+
// Clean up existing observer
|
|
178
|
+
if (this.observer) {
|
|
179
|
+
this.observer.disconnect();
|
|
180
|
+
this.observer = null;
|
|
181
|
+
}
|
|
182
|
+
// Only set up observer for infinite scroll mode
|
|
183
|
+
if (paginationConfig?.mode !== 'infinite' || rows.length === 0) {
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
// Use setTimeout to ensure DOM is updated
|
|
187
|
+
setTimeout(() => {
|
|
188
|
+
const threshold = paginationConfig.loadMoreThreshold || 500;
|
|
189
|
+
// Find the last row element
|
|
190
|
+
const tableRowElements = document.querySelectorAll('[data-is-last="true"]');
|
|
191
|
+
const lastRowElement = tableRowElements[tableRowElements.length - 1];
|
|
192
|
+
if (!lastRowElement) {
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
this.observer = new IntersectionObserver((entries) => {
|
|
196
|
+
const entry = entries[0];
|
|
197
|
+
if (entry.isIntersecting &&
|
|
198
|
+
paginationConfig.mode === 'infinite' &&
|
|
199
|
+
paginationConfig.hasMore &&
|
|
200
|
+
!paginationConfig.isLoading &&
|
|
201
|
+
paginationConfig.onLoadMore) {
|
|
202
|
+
paginationConfig.onLoadMore();
|
|
203
|
+
}
|
|
204
|
+
}, {
|
|
205
|
+
rootMargin: `${threshold}px`,
|
|
206
|
+
root: null,
|
|
207
|
+
});
|
|
208
|
+
this.observer.observe(lastRowElement);
|
|
209
|
+
}, 0);
|
|
210
|
+
}, { allowSignalWrites: true });
|
|
34
211
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
212
|
+
ngAfterViewInit() {
|
|
213
|
+
// Sync cell templates QueryList to signal
|
|
214
|
+
if (this.cellTemplates) {
|
|
215
|
+
this.cellTemplatesSignal.set(this.cellTemplates.toArray());
|
|
216
|
+
// Subscribe to changes in the QueryList
|
|
217
|
+
this.cellTemplates.changes.subscribe(() => {
|
|
218
|
+
if (this.cellTemplates) {
|
|
219
|
+
this.cellTemplatesSignal.set(this.cellTemplates.toArray());
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
ngOnDestroy() {
|
|
225
|
+
if (this.observer) {
|
|
226
|
+
this.observer.disconnect();
|
|
227
|
+
this.observer = null;
|
|
228
|
+
}
|
|
38
229
|
}
|
|
39
230
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NvDatatable, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
40
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.9", type: NvDatatable, isStandalone: true, selector: "nv-datatable", inputs: { columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
231
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.9", type: NvDatatable, isStandalone: true, selector: "nv-datatable", inputs: { columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, pagination: { classPropertyName: "pagination", publicName: "pagination", isSignal: true, isRequired: false, transformFunction: null }, stickyHeader: { classPropertyName: "stickyHeader", publicName: "stickyHeader", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "paginationTemplate", first: true, predicate: ["paginationTemplate"], descendants: true, read: TemplateRef }, { propertyName: "cellTemplates", predicate: NvDatatableCellDirective }], viewQueries: [{ propertyName: "tableRows", first: true, predicate: ["tableRow"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
41
232
|
<nv-table>
|
|
42
233
|
<table>
|
|
43
|
-
<thead>
|
|
234
|
+
<thead [attr.data-sticky-top]="stickyHeader() ? 'true' : null">
|
|
44
235
|
@for (headerGroup of table().getHeaderGroups(); track headerGroup.id)
|
|
45
236
|
{
|
|
46
237
|
<tr>
|
|
@@ -66,14 +257,19 @@ export class NvDatatable {
|
|
|
66
257
|
</thead>
|
|
67
258
|
|
|
68
259
|
<tbody>
|
|
69
|
-
@for (row of table().getRowModel().rows; track row.id)
|
|
70
|
-
|
|
260
|
+
@for (row of table().getRowModel().rows; track row.id; let i = $index)
|
|
261
|
+
{
|
|
262
|
+
<tr
|
|
263
|
+
[attr.data-testid]="'datatable-row-' + row.id"
|
|
264
|
+
#tableRow
|
|
265
|
+
[attr.data-is-last]="
|
|
266
|
+
isInfiniteScroll() && i === table().getRowModel().rows.length - 1
|
|
267
|
+
? 'true'
|
|
268
|
+
: null
|
|
269
|
+
"
|
|
270
|
+
>
|
|
71
271
|
@for (cell of row.getVisibleCells(); track cell.id) {
|
|
72
|
-
<td
|
|
73
|
-
[attr.data-testid]="'datatable-cell-' + cell.id"
|
|
74
|
-
style="padding: 8px; border-bottom: 1px solid #eee;"
|
|
75
|
-
>
|
|
76
|
-
<!-- Let FlexRender handle strings vs TemplateRef -->
|
|
272
|
+
<td [attr.data-testid]="'datatable-cell-' + cell.id">
|
|
77
273
|
<ng-container
|
|
78
274
|
*flexRender="
|
|
79
275
|
cell.column.columnDef.cell;
|
|
@@ -90,7 +286,17 @@ export class NvDatatable {
|
|
|
90
286
|
</tbody>
|
|
91
287
|
</table>
|
|
92
288
|
</nv-table>
|
|
93
|
-
|
|
289
|
+
|
|
290
|
+
<!-- Render pagination if configured -->
|
|
291
|
+
@if (paginationAPI()) {
|
|
292
|
+
<ng-container
|
|
293
|
+
*ngTemplateOutlet="
|
|
294
|
+
paginationTemplate || null;
|
|
295
|
+
context: { $implicit: paginationAPI() }
|
|
296
|
+
"
|
|
297
|
+
></ng-container>
|
|
298
|
+
}
|
|
299
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: FlexRenderDirective, selector: "[flexRender]", inputs: ["flexRender", "flexRenderProps", "flexRenderInjector"] }] }); }
|
|
94
300
|
}
|
|
95
301
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NvDatatable, decorators: [{
|
|
96
302
|
type: Component,
|
|
@@ -102,7 +308,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
|
|
|
102
308
|
template: `
|
|
103
309
|
<nv-table>
|
|
104
310
|
<table>
|
|
105
|
-
<thead>
|
|
311
|
+
<thead [attr.data-sticky-top]="stickyHeader() ? 'true' : null">
|
|
106
312
|
@for (headerGroup of table().getHeaderGroups(); track headerGroup.id)
|
|
107
313
|
{
|
|
108
314
|
<tr>
|
|
@@ -128,14 +334,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
|
|
|
128
334
|
</thead>
|
|
129
335
|
|
|
130
336
|
<tbody>
|
|
131
|
-
@for (row of table().getRowModel().rows; track row.id)
|
|
132
|
-
|
|
337
|
+
@for (row of table().getRowModel().rows; track row.id; let i = $index)
|
|
338
|
+
{
|
|
339
|
+
<tr
|
|
340
|
+
[attr.data-testid]="'datatable-row-' + row.id"
|
|
341
|
+
#tableRow
|
|
342
|
+
[attr.data-is-last]="
|
|
343
|
+
isInfiniteScroll() && i === table().getRowModel().rows.length - 1
|
|
344
|
+
? 'true'
|
|
345
|
+
: null
|
|
346
|
+
"
|
|
347
|
+
>
|
|
133
348
|
@for (cell of row.getVisibleCells(); track cell.id) {
|
|
134
|
-
<td
|
|
135
|
-
[attr.data-testid]="'datatable-cell-' + cell.id"
|
|
136
|
-
style="padding: 8px; border-bottom: 1px solid #eee;"
|
|
137
|
-
>
|
|
138
|
-
<!-- Let FlexRender handle strings vs TemplateRef -->
|
|
349
|
+
<td [attr.data-testid]="'datatable-cell-' + cell.id">
|
|
139
350
|
<ng-container
|
|
140
351
|
*flexRender="
|
|
141
352
|
cell.column.columnDef.cell;
|
|
@@ -152,7 +363,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
|
|
|
152
363
|
</tbody>
|
|
153
364
|
</table>
|
|
154
365
|
</nv-table>
|
|
366
|
+
|
|
367
|
+
<!-- Render pagination if configured -->
|
|
368
|
+
@if (paginationAPI()) {
|
|
369
|
+
<ng-container
|
|
370
|
+
*ngTemplateOutlet="
|
|
371
|
+
paginationTemplate || null;
|
|
372
|
+
context: { $implicit: paginationAPI() }
|
|
373
|
+
"
|
|
374
|
+
></ng-container>
|
|
375
|
+
}
|
|
155
376
|
`,
|
|
156
377
|
}]
|
|
157
|
-
}]
|
|
158
|
-
|
|
378
|
+
}], ctorParameters: () => [], propDecorators: { paginationTemplate: [{
|
|
379
|
+
type: ContentChild,
|
|
380
|
+
args: ['paginationTemplate', { read: TemplateRef }]
|
|
381
|
+
}], cellTemplates: [{
|
|
382
|
+
type: ContentChildren,
|
|
383
|
+
args: [NvDatatableCellDirective]
|
|
384
|
+
}] } });
|
|
385
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnYtZGF0YXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25vdmEtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvbnYtZGF0YXRhYmxlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3Q0FBd0M7QUFDeEMsMENBQTBDO0FBRTFDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsUUFBUSxFQUNSLEtBQUssRUFDTCxXQUFXLEVBQ1gsc0JBQXNCLEVBQ3RCLFlBQVksRUFDWixlQUFlLEVBRWYsTUFBTSxFQUNOLE1BQU0sRUFFTixTQUFTLEdBR1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCx3QkFBd0IsR0FFekIsTUFBTSwrQkFBK0IsQ0FBQztBQUN2QyxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLGVBQWUsRUFDZixxQkFBcUIsRUFDckIsbUJBQW1CLEdBS3BCLE1BQU0sbUJBQW1CLENBQUMsQ0FBQyxtR0FBbUc7OztBQUkvSCxPQUFPLEVBQUUsbUJBQW1CLElBQUksMEJBQTBCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQXlHdEY7O0dBRUc7QUE0RUgsTUFBTSxPQUFPLFdBQVc7SUEwSXRCLHdDQUF3QztJQUN4QyxLQUFLO1FBQ0gsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQXlDRDtRQW5MQSx5QkFBeUI7UUFDekIsWUFBTyxHQUFHLEtBQUssQ0FBeUIsRUFBRSxDQUFDLENBQUM7UUFDNUMsZUFBZTtRQUNmLFNBQUksR0FBRyxLQUFLLENBQU0sRUFBRSxDQUFDLENBQUM7UUFDdEIsd0NBQXdDO1FBQ3hDLGVBQVUsR0FBRyxLQUFLLENBQTBDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZFLHNFQUFzRTtRQUN0RSxpQkFBWSxHQUFHLEtBQUssQ0FBVSxL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SSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQzs4R0F0UlUsV0FBVztrR0FBWCxXQUFXLDRyQkFhc0IsV0FBVyxnREFNdEMsd0JBQXdCLG9KQXpGL0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0VULDJEQXRFUyxZQUFZLHNNQUFFLG1CQUFtQjs7MkZBd0VoQyxXQUFXO2tCQTNFdkIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsY0FBYztvQkFDeEIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxtQkFBbUIsQ0FBQztvQkFDNUMsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ2pDLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvRVQ7aUJBQ0Y7d0RBZUMsa0JBQWtCO3NCQURqQixZQUFZO3VCQUFDLG9CQUFvQixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFPekQsYUFBYTtzQkFEWixlQUFlO3VCQUFDLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGpzZG9jL3JlcXVpcmUtanNkb2MgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzZG9jL3JlcXVpcmUtcmV0dXJucyAqL1xuXG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBpbnB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG4gIENvbnRlbnRDaGlsZCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBRdWVyeUxpc3QsXG4gIGVmZmVjdCxcbiAgc2lnbmFsLFxuICBFbGVtZW50UmVmLFxuICB2aWV3Q2hpbGQsXG4gIEFmdGVyVmlld0luaXQsXG4gIE9uRGVzdHJveSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgTnZEYXRhdGFibGVDZWxsRGlyZWN0aXZlLFxuICB0eXBlIE52RGF0YXRhYmxlQ2VsbENvbnRleHQsXG59IGZyb20gJy4vbnYtZGF0YXRhYmxlLWNlbGwuZGlyZWN0aXZlJztcbmltcG9ydCB7XG4gIGNyZWF0ZUFuZ3VsYXJUYWJsZSxcbiAgZ2V0Q29yZVJvd01vZGVsLFxuICBnZXRQYWdpbmF0aW9uUm93TW9kZWwsXG4gIEZsZXhSZW5kZXJEaXJlY3RpdmUsXG4gIHR5cGUgRmxleFJlbmRlckNvbXBvbmVudCxcbiAgdHlwZSBDb2x1bW5EZWYsXG4gIHR5cGUgQ2VsbENvbnRleHQsXG4gIHR5cGUgUGFnaW5hdGlvblN0YXRlLFxufSBmcm9tICcuL2RhdGF0YWJsZS51dGlscyc7IC8vIGxvY2FsIGNvcHkgb2YgQHRhbnN0YWNrL2FuZ3VsYXItdGFibGUgKHJlcXVpcmVkIGZvciBzdG9yeWJvb2ssIHRoZSBidWlsdCB2ZXJzaW9uIGlzIG5vdCB3b3JraW5nKVxuXG5leHBvcnQgdHlwZSB7IENlbGxDb250ZXh0IGFzIE52RGF0YXRhYmxlQ2VsbENvbnRleHQgfTtcblxuZXhwb3J0IHsgZmxleFJlbmRlckNvbXBvbmVudCBhcyBudkRhdGF0YWJsZVJlbmRlckNvbXBvbmVudCB9IGZyb20gJy4vZGF0YXRhYmxlLnV0aWxzJztcblxuLyoqIFR5cGUgZGVmaW5pdGlvbiBmb3IgYSBkYXRhdGFibGUgcm93LiAqL1xuZXhwb3J0IHR5cGUgTnZEYXRhdGFibGVSb3cgPSBSZWNvcmQ8XG4gIHN0cmluZyxcbiAgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQgfCB0eXBlb2YgRGF0ZVxuPjtcblxuLyoqIFBhcmFtZXRlcnMgZm9yIGN1c3RvbSBjZWxsIHJlbmRlcmluZyBmdW5jdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTnZUYWJsZVJlbmRlckNlbGxQYXJhbXM8VCBleHRlbmRzIE52RGF0YXRhYmxlUm93LCBWPiB7XG4gIHZhbHVlOiBWO1xuICByb3c6IFQ7XG4gIGZpZWxkOiBrZXlvZiBUO1xuICByb3dJbmRleDogbnVtYmVyO1xufVxuXG4vKiogQ29sdW1uIGRlZmluaXRpb24gZm9yIE52RGF0YXRhYmxlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBOdkRhdGF0YWJsZUNvbHVtbjxUIGV4dGVuZHMgTnZEYXRhdGFibGVSb3c+IHtcbiAgZmllbGQ6IGtleW9mIFQ7XG4gIGhlYWRlck5hbWU/OiBzdHJpbmc7XG4gIHdpZHRoPzogbnVtYmVyO1xuICByZXNpemFibGU/OiBib29sZWFuO1xuICBoaWRkZW4/OiBib29sZWFuO1xuICAvKipcbiAgICogQ3VzdG9tIGNlbGwgcmVuZGVyZXIgZnVuY3Rpb24gdGhhdCBjYW4gcmV0dXJuIGVpdGhlciBhIHN0cmluZyBvciBBbmd1bGFyIFRlbXBsYXRlUmVmLlxuICAgKiBVc2UgYCRpbXBsaWNpdGAgaW4geW91ciB0ZW1wbGF0ZSB0byByZWNlaXZlIHRoZSBDZWxsQ29udGV4dC5cbiAgICovXG4gIHJlbmRlckNlbGw/OiAoY29udGV4dDogQ2VsbENvbnRleHQ8VCwgdW5rbm93bj4pID0+XG4gICAgfCBzdHJpbmdcbiAgICB8IEZsZXhSZW5kZXJDb21wb25lbnRcbiAgICB8IFRlbXBsYXRlUmVmPHtcbiAgICAgICAgJGltcGxpY2l0OiBDZWxsQ29udGV4dDxULCB1bmtub3duPjtcbiAgICAgIH0+O1xufVxuXG4vKipcbiAqIFBhZ2luYXRpb24gY29uZmlndXJhdGlvbiBmb3IgTnZEYXRhdGFibGUuXG4gKiBTdXBwb3J0cyB0aHJlZSBtb2RlczogY2xpZW50LXNpZGUsIHNlcnZlci1zaWRlIHdpdGggYnV0dG9ucywgYW5kIGluZmluaXRlIHNjcm9sbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOdkRhdGF0YWJsZVBhZ2luYXRpb25Db25maWcge1xuICAvKiogUGFnaW5hdGlvbiBtb2RlICovXG4gIG1vZGU6ICdjbGllbnQnIHwgJ3NlcnZlcicgfCAnaW5maW5pdGUnO1xuICAvKiogSW5pdGlhbCBwYWdlIHNpemUgKGRlZmF1bHQ6IDEwKSAqL1xuICBpbml0aWFsUGFnZVNpemU/OiBudW1iZXI7XG4gIC8qKiBBdmFpbGFibGUgcGFnZSBzaXplIG9wdGlvbnMgKGRlZmF1bHQ6IFsxMCwgMjAsIDUwLCAxMDBdKSAqL1xuICBwYWdlU2l6ZU9wdGlvbnM/OiBudW1iZXJbXTtcblxuICAvLyBTZXJ2ZXItc2lkZSAoYnV0dG9ucykgc3BlY2lmaWMgcHJvcGVydGllc1xuICAvKiogVG90YWwgbnVtYmVyIG9mIHJvd3MgKGZvciBzZXJ2ZXItc2lkZSBwYWdpbmF0aW9uKSAqL1xuICB0b3RhbFJvd0NvdW50PzogbnVtYmVyO1xuICAvKiogVG90YWwgbnVtYmVyIG9mIHBhZ2VzIChmb3Igc2VydmVyLXNpZGUgcGFnaW5hdGlvbikgKi9cbiAgdG90YWxQYWdlQ291bnQ/OiBudW1iZXI7XG4gIC8qKiBDYWxsYmFjayB3aGVuIHBhZ2luYXRpb24gc3RhdGUgY2hhbmdlcyAoZm9yIHNlcnZlci1zaWRlIHBhZ2luYXRpb24pICovXG4gIG9uUGFnaW5hdGlvbkNoYW5nZT86IChzdGF0ZToge1xuICAgIC8qKiBDdXJyZW50IHBhZ2UgaW5kZXggKi9cbiAgICBwYWdlSW5kZXg6IG51bWJlcjtcbiAgICAvKiogQ3VycmVudCBwYWdlIHNpemUgKi9cbiAgICBwYWdlU2l6ZTogbnVtYmVyO1xuICB9KSA9PiB2b2lkO1xuXG4gIC8vIEluZmluaXRlIHNjcm9sbCBzcGVjaWZpYyBwcm9wZXJ0aWVzXG4gIC8qKiBXaGV0aGVyIHRoZXJlIGFyZSBtb3JlIGl0ZW1zIHRvIGxvYWQgKGZvciBpbmZpbml0ZSBzY3JvbGwpICovXG4gIGhhc01vcmU/OiBib29sZWFuO1xuICAvKiogV2hldGhlciBkYXRhIGlzIGN1cnJlbnRseSBsb2FkaW5nIChmb3IgaW5maW5pdGUgc2Nyb2xsKSAqL1xuICBpc0xvYWRpbmc/OiBib29sZWFuO1xuICAvKiogRGlzdGFuY2UgZnJvbSBib3R0b20gaW4gcGl4ZWxzIHRvIHRyaWdnZXIgbG9hZCAoZGVmYXVsdDogNTAwKSAqL1xuICBsb2FkTW9yZVRocmVzaG9sZD86IG51bWJlcjtcbiAgLyoqIENhbGxiYWNrIHRvIGxvYWQgbW9yZSBkYXRhIChmb3IgaW5maW5pdGUgc2Nyb2xsKSAqL1xuICBvbkxvYWRNb3JlPzogKCkgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBBUEkgZXhwb3NlZCB0byBwYWdpbmF0aW9uIHRlbXBsYXRlIGZvciBidWlsZGluZyBjdXN0b20gcGFnaW5hdGlvbiBVSS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOdkRhdGF0YWJsZVJlbmRlclBhZ2luYXRpb25BUEkge1xuICAvKiogQ3VycmVudCBwYWdlIGluZGV4ICh6ZXJvLWJhc2VkKSAqL1xuICBwYWdlSW5kZXg6IG51bWJlcjtcbiAgLyoqIEN1cnJlbnQgcGFnZSBzaXplICovXG4gIHBhZ2VTaXplOiBudW1iZXI7XG4gIC8qKiBUb3RhbCBudW1iZXIgb2YgcGFnZXMgKi9cbiAgcGFnZUNvdW50OiBudW1iZXI7XG4gIC8qKiBUb3RhbCBudW1iZXIgb2Ygcm93cyAqL1xuICByb3dDb3VudDogbnVtYmVyO1xuICAvKiogTmF2aWdhdGUgdG8gZmlyc3QgcGFnZSAqL1xuICBmaXJzdFBhZ2U6ICgpID0+IHZvaWQ7XG4gIC8qKiBOYXZpZ2F0ZSB0byBwcmV2aW91cyBwYWdlICovXG4gIHByZXZpb3VzUGFnZTogKCkgPT4gdm9pZDtcbiAgLyoqIE5hdmlnYXRlIHRvIG5leHQgcGFnZSAqL1xuICBuZXh0UGFnZTogKCkgPT4gdm9pZDtcbiAgLyoqIE5hdmlnYXRlIHRvIGxhc3QgcGFnZSAqL1xuICBsYXN0UGFnZTogKCkgPT4gdm9pZDtcbiAgLyoqIE5hdmlnYXRlIHRvIHNwZWNpZmljIHBhZ2UgYnkgaW5kZXggKi9cbiAgc2V0UGFnZUluZGV4OiAoaW5kZXg6IG51bWJlcikgPT4gdm9pZDtcbiAgLyoqIENoYW5nZSBwYWdlIHNpemUgKi9cbiAgc2V0UGFnZVNpemU6IChzaXplOiBudW1iZXIpID0+IHZvaWQ7XG4gIC8qKiBXaGV0aGVyIHByZXZpb3VzIHBhZ2UgaXMgYXZhaWxhYmxlICovXG4gIGNhblByZXZpb3VzUGFnZTogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgbmV4dCBwYWdlIGlzIGF2YWlsYWJsZSAqL1xuICBjYW5OZXh0UGFnZTogYm9vbGVhbjtcbiAgLyoqIExvYWRpbmcgc3RhdGUgKG9ubHkgZm9yIGluZmluaXRlIHNjcm9sbCkgKi9cbiAgaXNMb2FkaW5nPzogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgbW9yZSBpdGVtcyBhcmUgYXZhaWxhYmxlIChvbmx5IGZvciBpbmZpbml0ZSBzY3JvbGwpICovXG4gIGhhc01vcmU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE5vdmEgRGF0YXRhYmxlIGJ1aWx0IG9uIFRhblN0YWNrIFRhYmxlIChBbmd1bGFyKS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbnYtZGF0YXRhYmxlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRmxleFJlbmRlckRpcmVjdGl2ZV0sXG4gIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bnYtdGFibGU+XG4gICAgICA8dGFibGU+XG4gICAgICAgIDx0aGVhZCBbYXR0ci5kYXRhLXN0aWNreS10b3BdPVwic3RpY2t5SGVhZGVyKCkgPyAndHJ1ZScgOiBudWxsXCI+XG4gICAgICAgICAgQGZvciAoaGVhZGVyR3JvdXAgb2YgdGFibGUoKS5nZXRIZWFkZXJHcm91cHMoKTsgdHJhY2sgaGVhZGVyR3JvdXAuaWQpXG4gICAgICAgICAge1xuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIEBmb3IgKGhlYWRlciBvZiBoZWFkZXJHcm91cC5oZWFkZXJzOyB0cmFjayBoZWFkZXIuaWQpIHtcbiAgICAgICAgICAgIDx0aFxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCInZGF0YXRhYmxlLWhlYWRlci0nICsgaGVhZGVyLmlkXCJcbiAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cIlxuICAgICAgICAgICAgICAgIGhlYWRlci5jb2x1bW4uY29sdW1uRGVmLnNpemVcbiAgICAgICAgICAgICAgICAgID8gaGVhZGVyLmNvbHVtbi5jb2x1bW5EZWYuc2l6ZSArICdweCdcbiAgICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLW5vLXJlc2l6ZV09XCJcbiAgICAgICAgICAgICAgICAhaGVhZGVyLmNvbHVtbi5jb2x1bW5EZWYuZW5hYmxlUmVzaXppbmcgPyAndHJ1ZScgOiBudWxsXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIEBpZiAoIWhlYWRlci5pc1BsYWNlaG9sZGVyKSB7XG4gICAgICAgICAgICAgIHt7IGhlYWRlci5jb2x1bW4uY29sdW1uRGVmLmhlYWRlciB9fVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgfVxuICAgICAgICA8L3RoZWFkPlxuXG4gICAgICAgIDx0Ym9keT5cbiAgICAgICAgICBAZm9yIChyb3cgb2YgdGFibGUoKS5nZXRSb3dNb2RlbCgpLnJvd3M7IHRyYWNrIHJvdy5pZDsgbGV0IGkgPSAkaW5kZXgpXG4gICAgICAgICAge1xuICAgICAgICAgIDx0clxuICAgICAgICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiJ2RhdGF0YWJsZS1yb3ctJyArIHJvdy5pZFwiXG4gICAgICAgICAgICAjdGFibGVSb3dcbiAgICAgICAgICAgIFthdHRyLmRhdGEtaXMtbGFzdF09XCJcbiAgICAgICAgICAgICAgaXNJbmZpbml0ZVNjcm9sbCgpICYmIGkgPT09IHRhYmxlKCkuZ2V0Um93TW9kZWwoKS5yb3dzLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICA/ICd0cnVlJ1xuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBAZm9yIChjZWxsIG9mIHJvdy5nZXRWaXNpYmxlQ2VsbHMoKTsgdHJhY2sgY2VsbC5pZCkge1xuICAgICAgICAgICAgPHRkIFthdHRyLmRhdGEtdGVzdGlkXT1cIidkYXRhdGFibGUtY2VsbC0nICsgY2VsbC5pZFwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKmZsZXhSZW5kZXI9XCJcbiAgICAgICAgICAgICAgICAgIGNlbGwuY29sdW1uLmNvbHVtbkRlZi5jZWxsO1xuICAgICAgICAgICAgICAgICAgcHJvcHM6IGNlbGwuZ2V0Q29udGV4dCgpO1xuICAgICAgICAgICAgICAgICAgbGV0IGNlbGxDb250ZW50XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IGNlbGxDb250ZW50IH19XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIH1cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgPC9udi10YWJsZT5cblxuICAgIDwhLS0gUmVuZGVyIHBhZ2luYXRpb24gaWYgY29uZmlndXJlZCAtLT5cbiAgICBAaWYgKHBhZ2luYXRpb25BUEkoKSkge1xuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIHBhZ2luYXRpb25UZW1wbGF0ZSB8fCBudWxsO1xuICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogcGFnaW5hdGlvbkFQSSgpIH1cbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIH1cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgTnZEYXRhdGFibGU8VCBleHRlbmRzIE52RGF0YXRhYmxlUm93ID0gTnZEYXRhdGFibGVSb3c+XG4gIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95XG57XG4gIC8qKiBDb2x1bW4gZGVmaW5pdGlvbnMgKi9cbiAgY29sdW1ucyA9IGlucHV0PE52RGF0YXRhYmxlQ29sdW1uPFQ+W10+KFtdKTtcbiAgLyoqIFJvdyBkYXRhICovXG4gIHJvd3MgPSBpbnB1dDxUW10+KFtdKTtcbiAgLyoqIE9wdGlvbmFsIHBhZ2luYXRpb24gY29uZmlndXJhdGlvbiAqL1xuICBwYWdpbmF0aW9uID0gaW5wdXQ8TnZEYXRhdGFibGVQYWdpbmF0aW9uQ29uZmlnIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAvKiogU2hvdWxkIHRoZSBoZWFkZXIgc3RpY2sgdG8gdGhlIHRvcCBvZiB0aGUgdGFibGUgd2hlbiBzY3JvbGxpbmc/ICovXG4gIHN0aWNreUhlYWRlciA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblxuICAvKiogVGVtcGxhdGUgZm9yIGN1c3RvbSBwYWdpbmF0aW9uIFVJICovXG4gIEBDb250ZW50Q2hpbGQoJ3BhZ2luYXRpb25UZW1wbGF0ZScsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgcGFnaW5hdGlvblRlbXBsYXRlPzogVGVtcGxhdGVSZWY8e1xuICAgICRpbXBsaWNpdDogTnZEYXRhdGFibGVSZW5kZXJQYWdpbmF0aW9uQVBJO1xuICB9PjtcblxuICAvKiogQ2VsbCB0ZW1wbGF0ZXMgcHJvdmlkZWQgdmlhIG52RGF0YXRhYmxlQ2VsbCBkaXJlY3RpdmUgKi9cbiAgQENvbnRlbnRDaGlsZHJlbihOdkRhdGF0YWJsZUNlbGxEaXJlY3RpdmUpXG4gIGNlbGxUZW1wbGF0ZXM/OiBRdWVyeUxpc3Q8TnZEYXRhdGFibGVDZWxsRGlyZWN0aXZlPFQ+PjtcblxuICAvKiogU2lnbmFsIHRvIHRyYWNrIGNlbGwgdGVtcGxhdGVzIGFycmF5ICovXG4gIHByaXZhdGUgY2VsbFRlbXBsYXRlc1NpZ25hbCA9IHNpZ25hbDxOdkRhdGF0YWJsZUNlbGxEaXJlY3RpdmU8VD5bXT4oW10pO1xuXG4gIC8qKiBNYXAgb2YgZmllbGQgbmFtZXMgdG8gY2VsbCB0ZW1wbGF0ZXMgKi9cbiAgcHJpdmF0ZSBjZWxsVGVtcGxhdGVNYXAgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgbWFwID0gbmV3IE1hcDxzdHJpbmcsIFRlbXBsYXRlUmVmPE52RGF0YXRhYmxlQ2VsbENvbnRleHQ8VD4+PigpO1xuICAgIHRoaXMuY2VsbFRlbXBsYXRlc1NpZ25hbCgpLmZvckVhY2goKGRpcmVjdGl2ZSkgPT4ge1xuICAgICAgbWFwLnNldChkaXJlY3RpdmUubnZEYXRhdGFibGVDZWxsLCBkaXJlY3RpdmUudGVtcGxhdGUpO1xuICAgIH0pO1xuICAgIHJldHVybiBtYXA7XG4gIH0pO1xuXG4gIC8qKiBQYWdpbmF0aW9uIHN0YXRlIGZvciBzZXJ2ZXIgbW9kZSAqL1xuICBwcml2YXRlIHBhZ2luYXRpb25TdGF0ZSA9IHNpZ25hbDxQYWdpbmF0aW9uU3RhdGU+KHtcbiAgICBwYWdlSW5kZXg6IDAsXG4gICAgcGFnZVNpemU6IHRoaXMucGFnaW5hdGlvbigpPy5pbml0aWFsUGFnZVNpemUgfHwgMTAsXG4gIH0pO1xuXG4gIC8qKiBSZWZlcmVuY2UgdG8gdGFibGUgcm93cyBmb3IgaW5maW5pdGUgc2Nyb2xsIG9ic2VydmVyICovXG4gIHByaXZhdGUgdGFibGVSb3dzID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCd0YWJsZVJvdycpO1xuXG4gIC8qKiBJbnRlcnNlY3Rpb24gb2JzZXJ2ZXIgZm9yIGluZmluaXRlIHNjcm9sbCAqL1xuICBwcml2YXRlIG9ic2VydmVyOiBJbnRlcnNlY3Rpb25PYnNlcnZlciB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBIZWxwZXIgdG8gY2hlY2sgaWYgdXNpbmcgaW5maW5pdGUgc2Nyb2xsICovXG4gIGlzSW5maW5pdGVTY3JvbGwgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnBhZ2luYXRpb24oKT8ubW9kZSA9PT0gJ2luZmluaXRlJyk7XG5cbiAgLyoqIENvbXB1dGVkIHRhYmxlIGNvbHVtbnMgd2l0aCBwcm9wZXIgdHlwaW5nIGFuZCBmaWx0ZXJpbmcuICovXG4gIHRhYmxlQ29sdW1ucyA9IGNvbXB1dGVkPENvbHVtbkRlZjxUPltdPigoKSA9PiB7XG4gICAgY29uc3QgdGVtcGxhdGVNYXAgPSB0aGlzLmNlbGxUZW1wbGF0ZU1hcCgpO1xuXG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucygpXG4gICAgICAuZmlsdGVyKChjb2wpID0+ICFjb2wuaGlkZGVuKVxuICAgICAgLm1hcCgoY29sKSA9PiAoe1xuICAgICAgICBhY2Nlc3NvcktleTogY29sLmZpZWxkIGFzIHN0cmluZyxcbiAgICAgICAgaGVhZGVyOiBjb2wuaGVhZGVyTmFtZSB8fCBTdHJpbmcoY29sLmZpZWxkKSxcbiAgICAgICAgc2l6ZTogY29sLndpZHRoLFxuICAgICAgICBlbmFibGVSZXNpemluZzogY29sLnJlc2l6YWJsZSA/PyB0cnVlLFxuICAgICAgICBjZWxsOiAoY29udGV4dDogQ2VsbENvbnRleHQ8VCwgdW5rbm93bj4pID0+IHtcbiAgICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSBTdHJpbmcoY29sLmZpZWxkKTtcbiAgICAgICAgICBjb25zdCBjZWxsVGVtcGxhdGUgPSB0ZW1wbGF0ZU1hcC5nZXQoZmllbGROYW1lKTtcblxuICAgICAgICAgIC8vIFByaW9yaXR5OiB0ZW1wbGF0ZSA+IHJlbmRlckNlbGwgPiBkZWZhdWx0XG4gICAgICAgICAgaWYgKGNlbGxUZW1wbGF0ZSkge1xuICAgICAgICAgICAgLy8gUmV0dXJuIFRlbXBsYXRlUmVmIGRpcmVjdGx5IC0gRmxleFJlbmRlciB3aWxsIGhhbmRsZSBpdFxuICAgICAgICAgICAgcmV0dXJuIGNlbGxUZW1wbGF0ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBGYWxsIGJhY2sgdG8gcmVuZGVyQ2VsbCBpZiBwcm92aWRlZFxuICAgICAgICAgIGlmIChjb2wucmVuZGVyQ2VsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbC5yZW5kZXJDZWxsKGNvbnRleHQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIERlZmF1bHQ6IGp1c3QgcmV0dXJuIHRoZSB2YWx1ZVxuICAgICAgICAgIHJldHVybiBjb250ZXh0LmdldFZhbHVlKCk7XG4gICAgICAgIH0sXG4gICAgICB9KSk7XG4gIH0pO1xuXG4gIC8qKiBUYW5TdGFjayB0YWJsZSBpbnN0YW5jZSB3aXRoIFNpZ25hbHMgKi9cbiAgcHJpdmF0ZSB0YWJsZUluc3RhbmNlID0gY3JlYXRlQW5ndWxhclRhYmxlKCgpID0+IHtcbiAgICBjb25zdCBwYWdpbmF0aW9uQ29uZmlnID0gdGhpcy5wYWdpbmF0aW9uKCk7XG5cbiAgICBpZiAoIXBhZ2luYXRpb25Db25maWcgfHwgcGFnaW5hdGlvbkNvbmZpZy5tb2RlID09PSAnaW5maW5pdGUnKSB7XG4gICAgICAvLyBObyBwYWdpbmF0aW9uIG9yIGluZmluaXRlIHNjcm9sbCAtIHNpbXBsZSBjb25maWdcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IHRoaXMucm93cygpLFxuICAgICAgICBjb2x1bW5zOiB0aGlzLnRhYmxlQ29sdW1ucygpLFxuICAgICAgICBnZXRDb3JlUm93TW9kZWw6IGdldENvcmVSb3dNb2RlbCgpLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHBhZ2luYXRpb25Db25maWcubW9kZSA9PT0gJ2NsaWVudCcpIHtcbiAgICAgIC8vIENsaWVudC1zaWRlIHBhZ2luYXRpb25cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IHRoaXMucm93cygpLFxuICAgICAgICBjb2x1bW5zOiB0aGlzLnRhYmxlQ29sdW1ucygpLFxuICAgICAgICBnZXRDb3JlUm93TW9kZWw6IGdldENvcmVSb3dNb2RlbCgpLFxuICAgICAgICBnZXRQYWdpbmF0aW9uUm93TW9kZWw6IGdldFBhZ2luYXRpb25Sb3dNb2RlbCgpLFxuICAgICAgICBpbml0aWFsU3RhdGU6IHtcbiAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICAgICAgICBwYWdlU2l6ZTogcGFnaW5hdGlvbkNvbmZpZy5pbml0aWFsUGFnZVNpemUgfHwgMTAsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNlcnZlci1zaWRlIHBhZ2luYXRpb25cbiAgICAgIGNvbnN0IHBhZ2VTaXplID0gdGhpcy5wYWdpbmF0aW9uU3RhdGUoKS5wYWdlU2l6ZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IHRoaXMucm93cygpLFxuICAgICAgICBjb2x1bW5zOiB0aGlzLnRhYmxlQ29sdW1ucygpLFxuICAgICAgICBnZXRDb3JlUm93TW9kZWw6IGdldENvcmVSb3dNb2RlbCgpLFxuICAgICAgICBtYW51YWxQYWdpbmF0aW9uOiB0cnVlLFxuICAgICAgICBwYWdlQ291bnQ6XG4gICAgICAgICAgcGFnaW5hdGlvbkNvbmZpZy50b3RhbFBhZ2VDb3VudCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHBhZ2luYXRpb25Db25maWcudG90YWxQYWdlQ291bnRcbiAgICAgICAgICAgIDogcGFnaW5hdGlvbkNvbmZpZy50b3RhbFJvd0NvdW50ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gTWF0aC5jZWlsKHBhZ2luYXRpb25Db25maWcudG90YWxSb3dDb3VudCAvIHBhZ2VTaXplKVxuICAgICAgICAgICAgOiAtMSxcbiAgICAgICAgc3RhdGU6IHtcbiAgICAgICAgICBwYWdpbmF0aW9uOiB0aGlzLnBhZ2luYXRpb25TdGF0ZSgpLFxuICAgICAgICB9LFxuICAgICAgICBvblBhZ2luYXRpb25DaGFuZ2U6IChcbiAgICAgICAgICB1cGRhdGVyT3JWYWx1ZTpcbiAgICAgICAgICAgIHwgUGFnaW5hdGlvblN0YXRlXG4gICAgICAgICAgICB8ICgob2xkOiBQYWdpbmF0aW9uU3RhdGUpID0+IFBhZ2luYXRpb25TdGF0ZSksXG4gICAgICAgICkgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgdXBkYXRlck9yVmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvblN0YXRlLnNldCh1cGRhdGVyT3JWYWx1ZSh0aGlzLnBhZ2luYXRpb25TdGF0ZSgpKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvblN0YXRlLnNldCh1cGRhdGVyT3JWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gIH0pO1xuXG4gIC8qKiBQdWJsaWMgZ2V0dGVyIGZvciB0YWJsZSBpbnN0YW5jZS4gKi9cbiAgdGFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVJbnN0YW5jZSgpO1xuICB9XG5cbiAgLyoqIEJ1aWxkIHBhZ2luYXRpb24gQVBJIGZvciB0ZW1wbGF0ZSAqL1xuICBwYWdpbmF0aW9uQVBJID0gY29tcHV0ZWQ8TnZEYXRhdGFibGVSZW5kZXJQYWdpbmF0aW9uQVBJIHwgbnVsbD4oKCkgPT4ge1xuICAgIGNvbnN0IHBhZ2luYXRpb25Db25maWcgPSB0aGlzLnBhZ2luYXRpb24oKTtcbiAgICBpZiAoIXBhZ2luYXRpb25Db25maWcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHRhYmxlID0gdGhpcy50YWJsZSgpO1xuICAgIGNvbnN0IHRhYmxlUGFnaW5hdGlvblN0YXRlID0gdGFibGUuZ2V0U3RhdGUoKS5wYWdpbmF0aW9uO1xuICAgIGNvbnN0IHBhZ2VDb3VudCA9IHRhYmxlLmdldFBhZ2VDb3VudCgpO1xuICAgIGNvbnN0IHJvd0NvdW50ID1cbiAgICAgIHBhZ2luYXRpb25Db25maWcubW9kZSA9PT0gJ3NlcnZlcidcbiAgICAgICAgPyBwYWdpbmF0aW9uQ29uZmlnLnRvdGFsUm93Q291bnQgfHwgdGhpcy5yb3dzKCkubGVuZ3RoXG4gICAgICAgIDogdGhpcy5yb3dzKCkubGVuZ3RoO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZ2VJbmRleDogdGFibGVQYWdpbmF0aW9uU3RhdGUucGFnZUluZGV4LFxuICAgICAgcGFnZVNpemU6IHRhYmxlUGFnaW5hdGlvblN0YXRlLnBhZ2VTaXplLFxuICAgICAgcGFnZUNvdW50LFxuICAgICAgcm93Q291bnQsXG4gICAgICBmaXJzdFBhZ2U6ICgpID0+IHRhYmxlLnNldFBhZ2VJbmRleCgwKSxcbiAgICAgIHByZXZpb3VzUGFnZTogKCkgPT4gdGFibGUucHJldmlvdXNQYWdlKCksXG4gICAgICBuZXh0UGFnZTogKCkgPT4gdGFibGUubmV4dFBhZ2UoKSxcbiAgICAgIGxhc3RQYWdlOiAoKSA9PiB0YWJsZS5zZXRQYWdlSW5kZXgocGFnZUNvdW50IC0gMSksXG4gICAgICBzZXRQYWdlSW5kZXg6IChpbmRleDogbnVtYmVyKSA9PiB0YWJsZS5zZXRQYWdlSW5kZXgoaW5kZXgpLFxuICAgICAgc2V0UGFnZVNpemU6IChzaXplOiBudW1iZXIpID0+IHRhYmxlLnNldFBhZ2VTaXplKHNpemUpLFxuICAgICAgY2FuUHJldmlvdXNQYWdlOiB0YWJsZS5nZXRDYW5QcmV2aW91c1BhZ2UoKSxcbiAgICAgIGNhbk5leHRQYWdlOiB0YWJsZS5nZXRDYW5OZXh0UGFnZSgpLFxuICAgICAgaXNMb2FkaW5nOlxuICAgICAgICBwYWdpbmF0aW9uQ29uZmlnLm1vZGUgPT09ICdpbmZpbml0ZSdcbiAgICAgICAgICA/IHBhZ2luYXRpb25Db25maWcuaXNMb2FkaW5nXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBoYXNNb3JlOlxuICAgICAgICBwYWdpbmF0aW9uQ29uZmlnLm1vZGUgPT09ICdpbmZpbml0ZSdcbiAgICAgICAgICA/IHBhZ2luYXRpb25Db25maWcuaGFzTW9yZVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8vIFdhdGNoIHBhZ2luYXRpb24gc3RhdGUgY2hhbmdlcyBmb3Igc2VydmVyIG1vZGVcbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhZ2luYXRpb25Db25maWcgPSB0aGlzLnBhZ2luYXRpb24oKTtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLnBhZ2luYXRpb25TdGF0ZSgpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBwYWdpbmF0aW9uQ29uZmlnPy5tb2RlID09PSAnc2VydmVyJyAmJlxuICAgICAgICAgIHBhZ2luYXRpb25Db25maWcub25QYWdpbmF0aW9uQ2hhbmdlXG4gICAgICAgICkge1xuICAgICAgICAgIHBhZ2luYXRpb25Db25maWcub25QYWdpbmF0aW9uQ2hhbmdlKHtcbiAgICAgICAgICAgIHBhZ2VJbmRleDogc3RhdGUucGFnZUluZGV4LFxuICAgICAgICAgICAgcGFnZVNpemU6IHN0YXRlLnBhZ2VTaXplLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuICAgICk7XG5cbiAgICAvLyBTZXQgdXAgaW50ZXJzZWN0aW9uIG9ic2VydmVyIGZvciBpbmZpbml0ZSBzY3JvbGxcbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhZ2luYXRpb25Db25maWcgPSB0aGlzLnBhZ2luYXRpb24oKTtcbiAgICAgICAgY29uc3Qgcm93cyA9IHRoaXMucm93cygpOyAvLyBUcmFjayByb3dzIGNoYW5nZXNcblxuICAgICAgICAvLyBDbGVhbiB1cCBleGlzdGluZyBvYnNlcnZlclxuICAgICAgICBpZiAodGhpcy5vYnNlcnZlcikge1xuICAgICAgICAgIHRoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICAgIHRoaXMub2JzZXJ2ZXIgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT25seSBzZXQgdXAgb2JzZXJ2ZXIgZm9yIGluZmluaXRlIHNjcm9sbCBtb2RlXG4gICAgICAgIGlmIChwYWdpbmF0aW9uQ29uZmlnPy5tb2RlICE9PSAnaW5maW5pdGUnIHx8IHJvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXNlIHNldFRpbWVvdXQgdG8gZW5zdXJlIERPTSBpcyB1cGRhdGVkXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRocmVzaG9sZCA9IHBhZ2luYXRpb25Db25maWcubG9hZE1vcmVUaHJlc2hvbGQgfHwgNTAwO1xuXG4gICAgICAgICAgLy8gRmluZCB0aGUgbGFzdCByb3cgZWxlbWVudFxuICAgICAgICAgIGNvbnN0IHRhYmxlUm93RWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICAgICAgJ1tkYXRhLWlzLWxhc3Q9XCJ0cnVlXCJdJyxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGxhc3RSb3dFbGVtZW50ID0gdGFibGVSb3dFbGVtZW50c1t0YWJsZVJvd0VsZW1lbnRzLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgICAgaWYgKCFsYXN0Um93RWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMub2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoXG4gICAgICAgICAgICAoZW50cmllcykgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBlbnRyeSA9IGVudHJpZXNbMF07XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBlbnRyeS5pc0ludGVyc2VjdGluZyAmJlxuICAgICAgICAgICAgICAgIHBhZ2luYXRpb25Db25maWcubW9kZSA9PT0gJ2luZmluaXRlJyAmJlxuICAgICAgICAgICAgICAgIHBhZ2luYXRpb25Db25maWcuaGFzTW9yZSAmJlxuICAgICAgICAgICAgICAgICFwYWdpbmF0aW9uQ29uZmlnLmlzTG9hZGluZyAmJlxuICAgICAgICAgICAgICAgIHBhZ2luYXRpb25Db25maWcub25Mb2FkTW9yZVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uQ29uZmlnLm9uTG9hZE1vcmUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcm9vdE1hcmdpbjogYCR7dGhyZXNob2xkfXB4YCxcbiAgICAgICAgICAgICAgcm9vdDogbnVsbCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZShsYXN0Um93RWxlbWVudCk7XG4gICAgICAgIH0sIDApO1xuICAgICAgfSxcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcbiAgICApO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIC8vIFN5bmMgY2VsbCB0ZW1wbGF0ZXMgUXVlcnlMaXN0IHRvIHNpZ25hbFxuICAgIGlmICh0aGlzLmNlbGxUZW1wbGF0ZXMpIHtcbiAgICAgIHRoaXMuY2VsbFRlbXBsYXRlc1NpZ25hbC5zZXQodGhpcy5jZWxsVGVtcGxhdGVzLnRvQXJyYXkoKSk7XG5cbiAgICAgIC8vIFN1YnNjcmliZSB0byBjaGFuZ2VzIGluIHRoZSBRdWVyeUxpc3RcbiAgICAgIHRoaXMuY2VsbFRlbXBsYXRlcy5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNlbGxUZW1wbGF0ZXMpIHtcbiAgICAgICAgICB0aGlzLmNlbGxUZW1wbGF0ZXNTaWduYWwuc2V0KHRoaXMuY2VsbFRlbXBsYXRlcy50b0FycmF5KCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vYnNlcnZlcikge1xuICAgICAgdGhpcy5vYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB0aGlzLm9ic2VydmVyID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -21,7 +21,7 @@ export function provideNovaComponents() {
|
|
|
21
21
|
}
|
|
22
22
|
export class NovaComponentsModule {
|
|
23
23
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
24
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsModule, declarations: [i1.NvAccordion, i1.NvAccordionItem, i1.NvAlert, i1.NvAvatar, i1.NvBadge, i1.NvBreadcrumb, i1.NvBreadcrumbs, i1.NvButton, i1.NvButtongroup, i1.NvCalendar, i1.NvCol, i1.NvDatagrid, i1.NvDatagridcolumn, i1.NvDialog, i1.NvDialogfooter, i1.NvDialogheader, i1.NvFieldcheckbox, i1.NvFielddate, i1.NvFielddaterange, i1.NvFielddropdown, i1.NvFielddropdownitem, i1.NvFielddropdownitemcheck, i1.NvFieldmultiselect, i1.NvFieldnumber, i1.NvFieldpassword, i1.NvFieldradio, i1.NvFieldselect, i1.NvFieldslider, i1.NvFieldtext, i1.NvFieldtextarea, i1.NvFieldtime, i1.NvIcon, i1.NvIconbutton, i1.NvLoader, i1.NvMenu, i1.NvMenuitem, i1.NvNotification, i1.NvNotificationcontainer, i1.NvPopover, i1.NvRow, i1.NvStack, i1.NvTable, i1.NvToggle, i1.NvTogglebutton, i1.NvTogglebuttongroup, i1.NvTooltip], imports: [NvDatatable], exports: [i1.NvAccordion, i1.NvAccordionItem, i1.NvAlert, i1.NvAvatar, i1.NvBadge, i1.NvBreadcrumb, i1.NvBreadcrumbs, i1.NvButton, i1.NvButtongroup, i1.NvCalendar, i1.NvCol, i1.NvDatagrid, i1.NvDatagridcolumn, i1.NvDialog, i1.NvDialogfooter, i1.NvDialogheader, i1.NvFieldcheckbox, i1.NvFielddate, i1.NvFielddaterange, i1.NvFielddropdown, i1.NvFielddropdownitem, i1.NvFielddropdownitemcheck, i1.NvFieldmultiselect, i1.NvFieldnumber, i1.NvFieldpassword, i1.NvFieldradio, i1.NvFieldselect, i1.NvFieldslider, i1.NvFieldtext, i1.NvFieldtextarea, i1.NvFieldtime, i1.NvIcon, i1.NvIconbutton, i1.NvLoader, i1.NvMenu, i1.NvMenuitem, i1.NvNotification, i1.NvNotificationcontainer, i1.NvPopover, i1.NvRow, i1.NvStack, i1.NvTable, i1.NvToggle, i1.NvTogglebutton, i1.NvTogglebuttongroup, i1.NvTooltip, NvDatatable] }); }
|
|
24
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsModule, declarations: [i1.NvAccordion, i1.NvAccordionItem, i1.NvAlert, i1.NvAvatar, i1.NvBadge, i1.NvBreadcrumb, i1.NvBreadcrumbs, i1.NvButton, i1.NvButtongroup, i1.NvCalendar, i1.NvCol, i1.NvDatagrid, i1.NvDatagridcolumn, i1.NvDialog, i1.NvDialogfooter, i1.NvDialogheader, i1.NvFieldcheckbox, i1.NvFielddate, i1.NvFielddaterange, i1.NvFielddropdown, i1.NvFielddropdownitem, i1.NvFielddropdownitemcheck, i1.NvFieldmultiselect, i1.NvFieldnumber, i1.NvFieldpassword, i1.NvFieldradio, i1.NvFieldselect, i1.NvFieldslider, i1.NvFieldtext, i1.NvFieldtextarea, i1.NvFieldtime, i1.NvIcon, i1.NvIconbutton, i1.NvLoader, i1.NvMenu, i1.NvMenuitem, i1.NvNotification, i1.NvNotificationcontainer, i1.NvPopover, i1.NvRow, i1.NvSplit, i1.NvStack, i1.NvTable, i1.NvToggle, i1.NvTogglebutton, i1.NvTogglebuttongroup, i1.NvTooltip], imports: [NvDatatable], exports: [i1.NvAccordion, i1.NvAccordionItem, i1.NvAlert, i1.NvAvatar, i1.NvBadge, i1.NvBreadcrumb, i1.NvBreadcrumbs, i1.NvButton, i1.NvButtongroup, i1.NvCalendar, i1.NvCol, i1.NvDatagrid, i1.NvDatagridcolumn, i1.NvDialog, i1.NvDialogfooter, i1.NvDialogheader, i1.NvFieldcheckbox, i1.NvFielddate, i1.NvFielddaterange, i1.NvFielddropdown, i1.NvFielddropdownitem, i1.NvFielddropdownitemcheck, i1.NvFieldmultiselect, i1.NvFieldnumber, i1.NvFieldpassword, i1.NvFieldradio, i1.NvFieldselect, i1.NvFieldslider, i1.NvFieldtext, i1.NvFieldtextarea, i1.NvFieldtime, i1.NvIcon, i1.NvIconbutton, i1.NvLoader, i1.NvMenu, i1.NvMenuitem, i1.NvNotification, i1.NvNotificationcontainer, i1.NvPopover, i1.NvRow, i1.NvSplit, i1.NvStack, i1.NvTable, i1.NvToggle, i1.NvTogglebutton, i1.NvTogglebuttongroup, i1.NvTooltip, NvDatatable] }); }
|
|
25
25
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsModule, imports: [NvDatatable] }); }
|
|
26
26
|
}
|
|
27
27
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsModule, decorators: [{
|
|
@@ -34,7 +34,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
|
|
|
34
34
|
}] });
|
|
35
35
|
export class NovaComponentsValueAccessorModule {
|
|
36
36
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsValueAccessorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
37
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsValueAccessorModule, declarations: [i2.NvAccordionValueAccessor, i2.NvAlertValueAccessor, i2.NvCalendarValueAccessor, i2.NvDatagridValueAccessor, i2.NvDialogValueAccessor, i2.NvFieldcheckboxValueAccessor, i2.NvFielddateValueAccessor, i2.NvFielddaterangeValueAccessor, i2.NvFielddropdownValueAccessor, i2.NvFieldmultiselectValueAccessor, i2.NvFieldnumberValueAccessor, i2.NvFieldpasswordValueAccessor, i2.NvFieldradioValueAccessor, i2.NvFieldselectValueAccessor, i2.NvFieldsliderValueAccessor, i2.NvFieldtextValueAccessor, i2.NvFieldtextareaValueAccessor, i2.NvNotificationValueAccessor, i2.NvPopoverValueAccessor, i2.NvToggleValueAccessor, i2.NvTogglebuttongroupValueAccessor], exports: [i2.NvAccordionValueAccessor, i2.NvAlertValueAccessor, i2.NvCalendarValueAccessor, i2.NvDatagridValueAccessor, i2.NvDialogValueAccessor, i2.NvFieldcheckboxValueAccessor, i2.NvFielddateValueAccessor, i2.NvFielddaterangeValueAccessor, i2.NvFielddropdownValueAccessor, i2.NvFieldmultiselectValueAccessor, i2.NvFieldnumberValueAccessor, i2.NvFieldpasswordValueAccessor, i2.NvFieldradioValueAccessor, i2.NvFieldselectValueAccessor, i2.NvFieldsliderValueAccessor, i2.NvFieldtextValueAccessor, i2.NvFieldtextareaValueAccessor, i2.NvNotificationValueAccessor, i2.NvPopoverValueAccessor, i2.NvToggleValueAccessor, i2.NvTogglebuttongroupValueAccessor] }); }
|
|
37
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsValueAccessorModule, declarations: [i2.NvAccordionValueAccessor, i2.NvAlertValueAccessor, i2.NvCalendarValueAccessor, i2.NvDatagridValueAccessor, i2.NvDialogValueAccessor, i2.NvFieldcheckboxValueAccessor, i2.NvFielddateValueAccessor, i2.NvFielddaterangeValueAccessor, i2.NvFielddropdownValueAccessor, i2.NvFieldmultiselectValueAccessor, i2.NvFieldnumberValueAccessor, i2.NvFieldpasswordValueAccessor, i2.NvFieldradioValueAccessor, i2.NvFieldselectValueAccessor, i2.NvFieldsliderValueAccessor, i2.NvFieldtextValueAccessor, i2.NvFieldtextareaValueAccessor, i2.NvNotificationValueAccessor, i2.NvPopoverValueAccessor, i2.NvSplitValueAccessor, i2.NvToggleValueAccessor, i2.NvTogglebuttongroupValueAccessor], exports: [i2.NvAccordionValueAccessor, i2.NvAlertValueAccessor, i2.NvCalendarValueAccessor, i2.NvDatagridValueAccessor, i2.NvDialogValueAccessor, i2.NvFieldcheckboxValueAccessor, i2.NvFielddateValueAccessor, i2.NvFielddaterangeValueAccessor, i2.NvFielddropdownValueAccessor, i2.NvFieldmultiselectValueAccessor, i2.NvFieldnumberValueAccessor, i2.NvFieldpasswordValueAccessor, i2.NvFieldradioValueAccessor, i2.NvFieldselectValueAccessor, i2.NvFieldsliderValueAccessor, i2.NvFieldtextValueAccessor, i2.NvFieldtextareaValueAccessor, i2.NvNotificationValueAccessor, i2.NvPopoverValueAccessor, i2.NvSplitValueAccessor, i2.NvToggleValueAccessor, i2.NvTogglebuttongroupValueAccessor] }); }
|
|
38
38
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsValueAccessorModule }); }
|
|
39
39
|
}
|
|
40
40
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: NovaComponentsValueAccessorModule, decorators: [{
|
|
@@ -56,4 +56,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
|
|
|
56
56
|
exports: [NotificationServiceComponent],
|
|
57
57
|
}]
|
|
58
58
|
}] });
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm92YS1jb21wb25lbnRzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25vdmEtY29tcG9uZW50cy9zcmMvbGliL25vdmEtY29tcG9uZW50cy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRXJGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7OztBQUUzRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQjtJQUNuQyxPQUFPO1FBQ0wsT0FBTyxFQUFFLGVBQWU7UUFDeEIsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLG9CQUFvQjtRQUN0QyxLQUFLLEVBQUUsSUFBSTtLQUNaLENBQUM7QUFDSixDQUFDO0FBT0QsTUFBTSxPQUFPLG9CQUFvQjs4R0FBcEIsb0JBQW9COytHQUFwQixvQkFBb0IsbXpCQUpyQixXQUFXLG95QkFFSSxXQUFXOytHQUV6QixvQkFBb0IsWUFKckIsV0FBVzs7MkZBSVYsb0JBQW9CO2tCQUxoQyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLFdBQVcsQ0FBQztvQkFDdEIsWUFBWSxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUM7b0JBQzdCLE9BQU8sRUFBRSxDQUFDLEdBQUcsVUFBVSxFQUFFLFdBQVcsQ0FBQztpQkFDdEM7O0FBT0QsTUFBTSxPQUFPLGlDQUFpQzs4R0FBakMsaUNBQWlDOytHQUFqQyxpQ0FBaUM7K0dBQWpDLGlDQUFpQzs7MkZBQWpDLGlDQUFpQztrQkFKN0MsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyxHQUFHLGVBQWUsQ0FBQztvQkFDbEMsT0FBTyxFQUFFLENBQUMsR0FBRyxlQUFlLENBQUM7aUJBQzlCOztBQU9ELE1BQU0sT0FBTyw2QkFBNkI7OEdBQTdCLDZCQUE2QjsrR0FBN0IsNkJBQTZCLFlBSDlCLDRCQUE0QixhQUM1Qiw0QkFBNEI7K0dBRTNCLDZCQUE2QixZQUg5Qiw0QkFBNEI7OzJGQUczQiw2QkFBNkI7a0JBSnpDLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsNEJBQTRCLENBQUM7b0JBQ3ZDLE9BQU8sRUFBRSxDQUFDLDRCQUE0QixDQUFDO2lCQUN4QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFQUF9JTklUSUFMSVpFUiwgTmdNb2R1bGUsIHR5cGUgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGRlZmluZUN1c3RvbUVsZW1lbnRzIH0gZnJvbSAnQG5vdmEtZGVzaWduLXN5c3RlbS9ub3ZhLXdlYmNvbXBvbmVudHMvbG9hZGVyJztcblxuaW1wb3J0IHsgRElSRUNUSVZFUyB9IGZyb20gJy4vc3RlbmNpbC1nZW5lcmF0ZWQnO1xuaW1wb3J0IHsgTnZEYXRhdGFibGUgfSBmcm9tICcuL2NvbXBvbmVudHMvaW5kZXgnO1xuaW1wb3J0IHsgVkFMVUVfQUNDRVNTT1JTIH0gZnJvbSAnLi9zdGVuY2lsLWdlbmVyYXRlZC9jb21wb25lbnQtdmFsdWUtYWNjZXNzb3JzJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvblNlcnZpY2VDb21wb25lbnQgfSBmcm9tICcuL3Byb3ZpZGVycyc7XG5cbi8qKlxuICogSW5pdGlhbGl6ZSB0aGUgTm92YSBDb21wb25lbnRzXG4gKlxuICogQHJldHVybnMge1Byb3ZpZGVyfSAtIFRoZSBwcm92aWRlciB0byBiZSB1c2VkIGZvciBub3ZhIGNvbXBvbmVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVOb3ZhQ29tcG9uZW50cygpOiBQcm92aWRlciB7XG4gIHJldHVybiB7XG4gICAgcHJvdmlkZTogQVBQX0lOSVRJQUxJWkVSLFxuICAgIHVzZUZhY3Rvcnk6ICgpID0+IGRlZmluZUN1c3RvbUVsZW1lbnRzLFxuICAgIG11bHRpOiB0cnVlLFxuICB9O1xufVxuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbTnZEYXRhdGFibGVdLFxuICBkZWNsYXJhdGlvbnM6IFsuLi5ESVJFQ1RJVkVTXSxcbiAgZXhwb3J0czogWy4uLkRJUkVDVElWRVMsIE52RGF0YXRhYmxlXSxcbn0pXG5leHBvcnQgY2xhc3MgTm92YUNvbXBvbmVudHNNb2R1bGUge31cblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbLi4uVkFMVUVfQUNDRVNTT1JTXSxcbiAgZXhwb3J0czogWy4uLlZBTFVFX0FDQ0VTU09SU10sXG59KVxuZXhwb3J0IGNsYXNzIE5vdmFDb21wb25lbnRzVmFsdWVBY2Nlc3Nvck1vZHVsZSB7fVxuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbTm90aWZpY2F0aW9uU2VydmljZUNvbXBvbmVudF0sXG4gIGV4cG9ydHM6IFtOb3RpZmljYXRpb25TZXJ2aWNlQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgTm92YUNvbXBvbmVudHNQcm92aWRlcnNNb2R1bGUge31cbiJdfQ==
|