@impartner/design-components 1.1.2 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/esm2020/lib/pagination/pagination.component.mjs +51 -20
  2. package/esm2020/lib/pagination/pagination.module.mjs +8 -4
  3. package/esm2020/lib/table/components/bulk-actions/bulk-actions.component.mjs +11 -0
  4. package/esm2020/lib/table/components/column-heading/column-heading.component.mjs +38 -0
  5. package/esm2020/lib/table/components/index.mjs +3 -0
  6. package/esm2020/lib/table/constants/index.mjs +3 -0
  7. package/esm2020/lib/table/constants/public-table.constants.mjs +2 -0
  8. package/esm2020/lib/table/constants/table.constants.mjs +24 -0
  9. package/esm2020/lib/table/containers/index.mjs +2 -0
  10. package/esm2020/lib/table/containers/table.component.mjs +386 -0
  11. package/esm2020/lib/table/directives/index.mjs +3 -0
  12. package/esm2020/lib/table/directives/table-inject-component.directive.mjs +46 -0
  13. package/esm2020/lib/table/directives/table.directive.mjs +35 -0
  14. package/esm2020/lib/table/enumerations/index.mjs +2 -0
  15. package/esm2020/lib/table/enumerations/table-column-type.mjs +20 -0
  16. package/esm2020/lib/table/helpers/index.mjs +2 -0
  17. package/esm2020/lib/table/helpers/table-theme.helper.mjs +31 -0
  18. package/esm2020/lib/table/index.mjs +8 -3
  19. package/esm2020/lib/table/interfaces/cell-renderer.interface.mjs +2 -0
  20. package/esm2020/lib/table/interfaces/custom-cell-renderer-components.type.mjs +2 -0
  21. package/esm2020/lib/table/interfaces/index.mjs +9 -0
  22. package/esm2020/lib/table/interfaces/sort-by-payload.interface.mjs +2 -0
  23. package/esm2020/lib/table/interfaces/table-cell-option.interface.mjs +2 -0
  24. package/esm2020/lib/table/interfaces/table-column-def.interface.mjs +2 -0
  25. package/esm2020/lib/table/interfaces/table-event-payload.interface.mjs +2 -0
  26. package/esm2020/lib/table/interfaces/table-row-item.interface.mjs +2 -0
  27. package/esm2020/lib/table/table.module.mjs +76 -7
  28. package/fesm2015/impartner-design-components.mjs +3605 -2986
  29. package/fesm2015/impartner-design-components.mjs.map +1 -1
  30. package/fesm2020/impartner-design-components.mjs +3002 -2387
  31. package/fesm2020/impartner-design-components.mjs.map +1 -1
  32. package/lib/pagination/pagination.component.d.ts +18 -3
  33. package/lib/pagination/pagination.module.d.ts +2 -1
  34. package/lib/table/components/bulk-actions/bulk-actions.component.d.ts +5 -0
  35. package/lib/table/components/column-heading/column-heading.component.d.ts +14 -0
  36. package/lib/table/components/index.d.ts +2 -0
  37. package/lib/table/constants/index.d.ts +2 -0
  38. package/lib/table/constants/public-table.constants.d.ts +1 -0
  39. package/lib/table/constants/table.constants.d.ts +10 -0
  40. package/lib/table/containers/index.d.ts +1 -0
  41. package/lib/table/containers/table.component.d.ts +127 -0
  42. package/lib/table/directives/index.d.ts +2 -0
  43. package/lib/table/directives/table-inject-component.directive.d.ts +16 -0
  44. package/lib/table/{table.component.d.ts → directives/table.directive.d.ts} +4 -4
  45. package/lib/table/enumerations/index.d.ts +1 -0
  46. package/lib/table/enumerations/table-column-type.d.ts +18 -0
  47. package/lib/table/helpers/index.d.ts +1 -0
  48. package/lib/table/helpers/table-theme.helper.d.ts +7 -0
  49. package/lib/table/index.d.ts +7 -2
  50. package/lib/table/interfaces/cell-renderer.interface.d.ts +6 -0
  51. package/lib/table/interfaces/custom-cell-renderer-components.type.d.ts +3 -0
  52. package/lib/table/interfaces/index.d.ts +8 -0
  53. package/lib/table/interfaces/sort-by-payload.interface.d.ts +5 -0
  54. package/lib/table/interfaces/table-cell-option.interface.d.ts +4 -0
  55. package/lib/table/interfaces/table-column-def.interface.d.ts +22 -0
  56. package/lib/table/interfaces/table-event-payload.interface.d.ts +6 -0
  57. package/lib/table/interfaces/table-row-item.interface.d.ts +9 -0
  58. package/lib/table/table.module.d.ts +15 -3
  59. package/package.json +3 -2
  60. package/esm2020/lib/table/table.component.mjs +0 -33
@@ -0,0 +1,386 @@
1
+ import { Component, ContentChild, EventEmitter, Host, Input, Optional, Output } from '@angular/core';
2
+ import { get as getNestedValue, set as setNestedValue } from 'lodash';
3
+ import { debounceTime } from 'rxjs/operators';
4
+ import { DEBOUNCE_TIME, SORT_COLUMN_INDEX } from '../constants/index';
5
+ import { TableColumnType } from '../enumerations/index';
6
+ import { TableThemeHelper } from '../helpers';
7
+ import { ComponentTheme } from '../../../types';
8
+ import { PaginationComponent } from '../../pagination';
9
+ import { TableBulkActionsComponent } from '../components';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "@angular/common";
12
+ import * as i2 from "../../branding";
13
+ import * as i3 from "../../branding/branded.directive";
14
+ import * as i4 from "../../icon/icon.component";
15
+ import * as i5 from "../../form-field/controls/checkbox/checkbox.component";
16
+ import * as i6 from "../../form-field/controls/select/option/select-option.component";
17
+ import * as i7 from "../../form-field/controls/select/select.component";
18
+ import * as i8 from "../../form-field/controls/input/input.directive";
19
+ import * as i9 from "@angular/forms";
20
+ import * as i10 from "../../spinner/spinner.component";
21
+ import * as i11 from "../../badge/badge.component";
22
+ import * as i12 from "../directives/table.directive";
23
+ import * as i13 from "../components/column-heading/column-heading.component";
24
+ import * as i14 from "../directives/table-inject-component.directive";
25
+ /**
26
+ * The `TableComponent` (`<impdc-table`) is a data table component.
27
+ * To use, import `TableModule` from `@impartner/design-components`.
28
+ */
29
+ export class TableComponent {
30
+ constructor(_datePipe, _percentPipe, _decmialPipe, _changeDetectorRef, _branded) {
31
+ this._datePipe = _datePipe;
32
+ this._percentPipe = _percentPipe;
33
+ this._decmialPipe = _decmialPipe;
34
+ this._changeDetectorRef = _changeDetectorRef;
35
+ this._branded = _branded;
36
+ /**
37
+ * Whether the table data is currently being loaded. The `<impdc-spinner>` will show if data is loading.
38
+ */
39
+ this.loading = false;
40
+ /**
41
+ * The visible columns of the table. Each `ITableColumnDef` defines properties regarding the display, formatting and interaction of the column's cells.
42
+ * Column/cell color precedence is:
43
+ * 1) `fieldColor` - allows an `ITableColumnDef` to delegate the responsibility of cell color to an `ITableRowItem` property.
44
+ * 2) `colorGetter`- allows an `ITableColumnDef` to delegate the responsibility of cell color to a function of the `ITableRowItem` determined by the developer.
45
+ * 3) `color` - a property of an `ITableColumnDef`.
46
+ */
47
+ this.columnDefs = [];
48
+ /**
49
+ * Whether the table is striped.
50
+ */
51
+ this.striped = true;
52
+ /**
53
+ * The placeholder text and empty value display text for `<impdc-select>` instances in cells with a `ITableColumnDef` `columnType` = `SingleSelect` or `MultiSelect`.
54
+ */
55
+ this.selectPlaceholder = '';
56
+ /**
57
+ * The `columnDefs` index of the currently sorted column.
58
+ */
59
+ this.sortColumnIndex = SORT_COLUMN_INDEX;
60
+ /**
61
+ * The direction of the currently sorted column.
62
+ */
63
+ this.sortDirection = 'asc';
64
+ /**
65
+ * The table row data as an array of `ITableRowItem`.
66
+ */
67
+ this.tableData = [];
68
+ /**
69
+ * Event emitted when one or multiple rows are selected. Emits `(string | number)[]` payload.
70
+ */
71
+ this.rowSelect = new EventEmitter();
72
+ /**
73
+ * Event emitted when a column is sorted. Emits `ISortByPayload` payload.
74
+ */
75
+ this.sortBy = new EventEmitter();
76
+ /**
77
+ * Event emitted when a row link is clicked. Emits `ITableEventPayload` payload.
78
+ */
79
+ this.linkClick = new EventEmitter();
80
+ /** @ignore */
81
+ this.paginationComponent = undefined;
82
+ /** @ignore */
83
+ this.bulkActions = undefined;
84
+ /**
85
+ * Event emitted when a row input value is changed. Emitted cells of `columnType` `SinglSelect`, `MultiSelect`, `Input`, `Boolean` or `Icon`.
86
+ * Not emitted if column definition property `disabled` = `true`. Emits `ITableEventPayload` payload.
87
+ */
88
+ this.inputChange = new EventEmitter();
89
+ /** @ignore */
90
+ this.cellType = TableColumnType;
91
+ /** @ignore */
92
+ this.allSelected = true;
93
+ /** @ignore */
94
+ this.branded = false;
95
+ this._canSelectRows = false;
96
+ this._canSelectAllRows = false;
97
+ this._selectedRowIds = [];
98
+ this._inputChange = new EventEmitter();
99
+ this.branded = _branded ? true : false;
100
+ this._inputChange
101
+ .pipe(debounceTime(DEBOUNCE_TIME))
102
+ .subscribe(this.inputChange);
103
+ }
104
+ /**
105
+ * Whether individual rows can be selected. Will be `true` if explicitly set to `true` or `canSelectAllRows` is `true`.
106
+ */
107
+ set canSelectRows(value) {
108
+ this._canSelectRows = value;
109
+ }
110
+ get canSelectRows() {
111
+ return this.canSelectAllRows || this._canSelectRows || !!this.bulkActions;
112
+ }
113
+ /**
114
+ * Whether all rows can be selected at once. Will be `true` if explicitly set to `true` or if `TableBulkActionsComponent` is content projected.
115
+ */
116
+ set canSelectAllRows(value) {
117
+ this._canSelectAllRows = value;
118
+ }
119
+ get canSelectAllRows() {
120
+ return this._canSelectAllRows || !!this.bulkActions;
121
+ }
122
+ /**
123
+ * An array of currently selected IDs from the `tableData` input. Array must be of type `(string | number)[]`.
124
+ */
125
+ set selectedRowIds(value) {
126
+ this._selectedRowIds = [...value];
127
+ }
128
+ get selectedRowIds() {
129
+ return [...this._selectedRowIds];
130
+ }
131
+ /** @ignore */
132
+ get someSelected() {
133
+ return (!!this._selectedRowIds &&
134
+ this._selectedRowIds.length > 0 &&
135
+ !!this.tableData &&
136
+ this.tableData.length > 0 &&
137
+ this._selectedRowIds.length < this.tableData.length);
138
+ }
139
+ /** @ignore */
140
+ get tableSpan() {
141
+ return this.canSelectRows
142
+ ? this.columnDefs.length + 1
143
+ : this.columnDefs.length;
144
+ }
145
+ ngOnChanges(changes) {
146
+ if (changes['selectedRowIds'] || changes['tableData']) {
147
+ if (!this.tableData ||
148
+ !this.tableData.length ||
149
+ !this.selectedRowIds ||
150
+ !this.selectedRowIds.length) {
151
+ this.allSelected = false;
152
+ }
153
+ else {
154
+ this.allSelected = this.selectedRowIds.length >= this.tableData.length;
155
+ }
156
+ }
157
+ }
158
+ getMailToValue(columnIndex, currentRow) {
159
+ const { columnType, truncated: truncated } = this._getColumnDefByIndex(columnIndex);
160
+ let value = this._getValue(columnIndex, currentRow);
161
+ if (columnType !== TableColumnType.Email) {
162
+ return String(value);
163
+ }
164
+ value = value ? `mailto:${value}` : value;
165
+ return String(value);
166
+ }
167
+ getStringValue(columnIndex, currentRow) {
168
+ const value = this.getValue(columnIndex, currentRow);
169
+ if (Array.isArray(value)) {
170
+ return value.join(';');
171
+ }
172
+ return String(value);
173
+ }
174
+ getValue(columnIndex, currentRow) {
175
+ const { columnType, truncated: truncated } = this._getColumnDefByIndex(columnIndex);
176
+ let value = this._getValue(columnIndex, currentRow);
177
+ switch (columnType) {
178
+ case TableColumnType.Decimal: {
179
+ value = this._decmialPipe.transform(Number(value) || 0) || '';
180
+ break;
181
+ }
182
+ case TableColumnType.Date: {
183
+ const date = new Date(String(value));
184
+ const validDate = date instanceof Date && !isNaN(date.getTime());
185
+ value = validDate
186
+ ? this._datePipe.transform(date, 'MM/dd/yyyy') || ''
187
+ : String(value);
188
+ break;
189
+ }
190
+ case TableColumnType.DateTime: {
191
+ const dateTime = new Date(String(value));
192
+ const validDateTime = dateTime instanceof Date && !isNaN(dateTime.getTime());
193
+ value = validDateTime
194
+ ? this._datePipe.transform(dateTime, 'MM/dd/yyyy h:mm:ss a') || ''
195
+ : String(value);
196
+ break;
197
+ }
198
+ case TableColumnType.Link: {
199
+ value = String(value).replace(/(^\w+:|^)\/\//, '');
200
+ break;
201
+ }
202
+ case TableColumnType.Percentage: {
203
+ value = this._percentPipe.transform(Number(value) || 0) || '';
204
+ break;
205
+ }
206
+ case TableColumnType.Url: {
207
+ if (!/(http(s?)):\/\//i.test(String(value))) {
208
+ value = `https://${value}`;
209
+ }
210
+ break;
211
+ }
212
+ case TableColumnType.Text: {
213
+ if (Array.isArray(value)) {
214
+ value = value.join('; ');
215
+ }
216
+ if (!truncated) {
217
+ return value;
218
+ }
219
+ const truncateString = (string = '', maxLength = truncated) => string.length > maxLength
220
+ ? `${string.substring(0, maxLength)}…`
221
+ : string;
222
+ !!truncated
223
+ ? (value = truncateString(String(value), truncated))
224
+ : value;
225
+ break;
226
+ }
227
+ case TableColumnType.MultiSelect:
228
+ if (typeof value === 'string') {
229
+ value = value.split(';')?.map(v => v.trim()) || [];
230
+ }
231
+ return value;
232
+ }
233
+ return String(value);
234
+ }
235
+ getRawValue(columnIndex, currentRow) {
236
+ const { field } = this._getColumnDefByIndex(columnIndex);
237
+ if (!field) {
238
+ return '';
239
+ }
240
+ return currentRow[field] || '';
241
+ }
242
+ getCellColor(columnDefinition, item) {
243
+ return TableThemeHelper.getCellColor(columnDefinition, item);
244
+ }
245
+ getTheme(columnDefinition, item) {
246
+ return (TableThemeHelper.getTheme(columnDefinition, item) ||
247
+ ComponentTheme.Primary);
248
+ }
249
+ isSortedColumn(columnIndex) {
250
+ return columnIndex === this.sortColumnIndex;
251
+ }
252
+ isRowSelected(id) {
253
+ return this.selectedRowIds.includes(id);
254
+ }
255
+ handleSelectAll(event) {
256
+ if (!this.canSelectAllRows || !this.tableData) {
257
+ return;
258
+ }
259
+ if (event.checked) {
260
+ this._selectedRowIds = this.tableData?.map(row => row.id) || [];
261
+ }
262
+ else {
263
+ this._selectedRowIds = [];
264
+ }
265
+ this._selectedRowIds.sort();
266
+ this.allSelected = this.selectedRowIds.length >= this.tableData.length;
267
+ this.rowSelect.emit(this.selectedRowIds);
268
+ }
269
+ handleSort(columnIndex) {
270
+ if (columnIndex === this.sortColumnIndex) {
271
+ this.sortDirection = this.sortDirection === 'asc' ? 'desc' : 'asc';
272
+ }
273
+ else {
274
+ this.sortColumnIndex = columnIndex;
275
+ this.sortDirection = 'asc';
276
+ }
277
+ const field = this._getColumnDefByIndex(columnIndex).field || '';
278
+ this.sortBy.emit({
279
+ columnIndex,
280
+ field,
281
+ direction: this.sortDirection
282
+ });
283
+ }
284
+ handleRowSelect(event, rowId) {
285
+ if (!this.canSelectRows) {
286
+ return;
287
+ }
288
+ if (event.checked && !this._selectedRowIds.includes(rowId)) {
289
+ this._selectedRowIds.push(rowId);
290
+ }
291
+ else if (!event.checked && this._selectedRowIds.includes(rowId)) {
292
+ const idx = this._selectedRowIds.indexOf(rowId);
293
+ if (idx > -1) {
294
+ this._selectedRowIds.splice(idx, 1);
295
+ }
296
+ }
297
+ if (this._selectedRowIds.length) {
298
+ this._selectedRowIds.sort();
299
+ }
300
+ this.allSelected = this.selectedRowIds.length >= this.tableData.length;
301
+ this.rowSelect.emit(this.selectedRowIds);
302
+ }
303
+ handleCellValueChange(columnIndex, rowIndex, value) {
304
+ const { field, columnType } = this._getColumnDefByIndex(columnIndex);
305
+ let currentValue = value;
306
+ if (columnType !== TableColumnType.Boolean && !Array.isArray(value)) {
307
+ currentValue = isNaN(Number(value)) ? value : Number(value);
308
+ }
309
+ const item = this.tableData[rowIndex];
310
+ setNestedValue(item, String(field), currentValue);
311
+ this._inputChange.emit({
312
+ columnIndex,
313
+ item,
314
+ value: currentValue
315
+ });
316
+ this._changeDetectorRef.detectChanges();
317
+ }
318
+ handleLinkClick(columnIndex, item) {
319
+ this.linkClick.emit({
320
+ item,
321
+ columnIndex
322
+ });
323
+ }
324
+ _getColumnDefByIndex(columnIndex) {
325
+ return this.columnDefs[columnIndex];
326
+ }
327
+ _getValue(columnIndex, currentRow) {
328
+ try {
329
+ const { field, valueGetter } = this._getColumnDefByIndex(columnIndex);
330
+ const value = valueGetter
331
+ ? valueGetter(currentRow)
332
+ : getNestedValue(currentRow, String(field), '');
333
+ return value || '';
334
+ }
335
+ catch (e) {
336
+ return '';
337
+ }
338
+ }
339
+ }
340
+ TableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TableComponent, deps: [{ token: i1.DatePipe }, { token: i1.PercentPipe }, { token: i1.DecimalPipe }, { token: i0.ChangeDetectorRef }, { token: i2.BrandedDirective, host: true, optional: true }], target: i0.ɵɵFactoryTarget.Component });
341
+ TableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: TableComponent, selector: "impdc-table", inputs: { loading: "loading", columnDefs: "columnDefs", striped: "striped", canSelectRows: "canSelectRows", canSelectAllRows: "canSelectAllRows", selectPlaceholder: "selectPlaceholder", sortColumnIndex: "sortColumnIndex", sortDirection: "sortDirection", tableData: "tableData", selectedRowIds: "selectedRowIds", customCellComponents: "customCellComponents" }, outputs: { rowSelect: "rowSelect", sortBy: "sortBy", linkClick: "linkClick", inputChange: "inputChange" }, queries: [{ propertyName: "paginationComponent", first: true, predicate: PaginationComponent, descendants: true }, { propertyName: "bulkActions", first: true, predicate: TableBulkActionsComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<table impdcTable *ngIf=\"tableData\" [striped]=\"striped\">\n <thead>\n <tr *ngIf=\"!!bulkActions\">\n <th [attr.colspan]=\"tableSpan\" scope=\"col\" class=\"bulk-action-column\">\n <ng-content select=\"impdc-table-bulk-actions\"></ng-content>\n <ng-content select=\"[impdcTableBulkActions]\"></ng-content>\n </th>\n </tr>\n <tr>\n <th\n *ngIf=\"canSelectRows\"\n scope=\"col\"\n [ngClass]=\"{\n 'heading-below-bulk-actions': !!bulkActions\n }\">\n <div *ngIf=\"canSelectAllRows\">\n <impdc-checkbox\n ngModel\n [checked]=\"allSelected\"\n [indeterminate]=\"someSelected\"\n (change)=\"handleSelectAll($event)\"></impdc-checkbox>\n </div>\n </th>\n <th\n scope=\"col\"\n *ngFor=\"let columnDef of columnDefs; index as columnIndex\"\n [ngClass]=\"{\n 'sorted-column': isSortedColumn(columnIndex),\n 'sortable-column': columnDef.sorted,\n 'heading-below-bulk-actions': !!bulkActions\n }\"\n (click)=\"handleSort(columnIndex)\">\n <impdc-column-heading\n [isSortable]=\"columnDef.sorted || false\"\n [columnIndex]=\"columnIndex\"\n [sortColumnIndex]=\"sortColumnIndex\"\n [direction]=\"sortDirection\"\n [text]=\"columnDef.title\"\n (sort)=\"handleSort($event)\">\n </impdc-column-heading>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngIf=\"loading; else data\">\n <td [attr.colspan]=\"tableSpan\" class=\"data-loading\">\n <impdc-spinner></impdc-spinner>\n </td>\n </tr>\n <ng-template #data>\n <tr *ngIf=\"tableData.length === 0\">\n <td [attr.colspan]=\"tableSpan\" class=\"no-data\">\n <ng-content select=\"[noData]\"></ng-content>\n </td>\n </tr>\n <tr *ngFor=\"let row of tableData; index as rowIndex\">\n <td *ngIf=\"canSelectRows\">\n <div class=\"select-column\">\n <impdc-checkbox\n [ngModel]=\"isRowSelected(row.id)\"\n (change)=\"handleRowSelect($event, row.id)\"></impdc-checkbox>\n </div>\n </td>\n <td\n *ngFor=\"let columnDef of columnDefs; index as colIndex\"\n [ngClass]=\"{\n 'col-no-padding': !!columnDef.noPadding\n }\">\n <div [ngSwitch]=\"columnDef.columnType\">\n <span *ngSwitchCase=\"cellType.Badge\">\n <impdc-badge\n [text]=\"getStringValue(colIndex, row)\"\n [theme]=\"getTheme(columnDef, row)\">\n </impdc-badge>\n </span>\n <span\n *ngSwitchCase=\"cellType.Link\"\n class=\"cell-type-link\"\n (click)=\"handleLinkClick(colIndex, row)\">\n <a *ngIf=\"!branded\">\n {{ getValue(colIndex, row) }}\n </a>\n <a *ngIf=\"branded\" impdcBranded>\n {{ getValue(colIndex, row) }}\n </a>\n </span>\n <span *ngSwitchCase=\"cellType.Url\" class=\"cell-type-link\">\n <a\n *ngIf=\"!branded\"\n target=\"_blank\"\n [attr.href]=\"getValue(colIndex, row)\">\n {{ getValue(colIndex, row) }}\n </a>\n <a\n *ngIf=\"branded\"\n impdcBranded\n target=\"_blank\"\n [attr.href]=\"getValue(colIndex, row)\">\n {{ getValue(colIndex, row) }}\n </a>\n </span>\n <span *ngSwitchCase=\"cellType.Email\" class=\"cell-type-link\">\n <a\n *ngIf=\"!branded\"\n target=\"_blank\"\n [attr.href]=\"'mailto:' + getValue(colIndex, row)\">\n {{ getValue(colIndex, row) }}\n </a>\n <a\n *ngIf=\"branded\"\n impdcBranded\n [attr.href]=\"getMailToValue(colIndex, row)\">\n {{ getValue(colIndex, row) }}\n </a>\n </span>\n <span *ngSwitchCase=\"cellType.Input\">\n <input\n impdcInput\n type=\"text\"\n class=\"{{ getCellColor(columnDef, row) }}\"\n [ngModel]=\"getValue(colIndex, row)\"\n (ngModelChange)=\"\n handleCellValueChange(colIndex, rowIndex, $event)\n \" />\n </span>\n <span *ngSwitchCase=\"cellType.Boolean\">\n <span\n *ngIf=\"columnDef.disabled && getValue(colIndex, row) === 'true'\"\n impdc-icon\n name=\"check\"\n class=\"{{ getCellColor(columnDef, row) }}\"></span>\n <impdc-checkbox\n *ngIf=\"!columnDef.disabled\"\n [checked]=\"getValue(colIndex, row) === 'true'\"\n [isSwitch]=\"true\"\n (change)=\"\n handleCellValueChange(colIndex, rowIndex, $event.checked)\n \"></impdc-checkbox>\n </span>\n <span *ngSwitchCase=\"cellType.SingleSelect\">\n <impdc-select\n [ngModel]=\"getValue(colIndex, row)\"\n [disabled]=\"columnDef.disabled || false\"\n [placeholder]=\"selectPlaceholder\"\n (selectionChange)=\"\n handleCellValueChange(colIndex, rowIndex, $event.value)\n \">\n <impdc-select-option\n *ngIf=\"selectPlaceholder\"\n value\n [label]=\"selectPlaceholder\">\n </impdc-select-option>\n <impdc-select-option\n *ngFor=\"let value of columnDef.values || []\"\n [value]=\"value.value\"\n [label]=\"value.label\"></impdc-select-option>\n </impdc-select>\n </span>\n <span *ngSwitchCase=\"cellType.MultiSelect\">\n <impdc-select\n [ngModel]=\"getValue(colIndex, row)\"\n [disabled]=\"columnDef.disabled || false\"\n [placeholder]=\"selectPlaceholder\"\n multiple=\"true\"\n (selectionChange)=\"\n handleCellValueChange(colIndex, rowIndex, $event.value)\n \">\n <impdc-select-option\n *ngFor=\"let value of columnDef.values || []\"\n [value]=\"value.value\"\n [label]=\"value.label\"></impdc-select-option>\n </impdc-select>\n </span>\n <span\n *ngSwitchCase=\"cellType.CellRender\"\n class=\"{{ getCellColor(columnDef, row) }}\">\n <ng-template\n impdcTableInjectComponent\n [columnDef]=\"columnDef\"\n [rowItem]=\"row\"\n [customCellComponents]=\"customCellComponents || {}\"\n [value]=\"getRawValue(colIndex, row)\"></ng-template>\n </span>\n <span *ngSwitchCase=\"cellType.Icon\">\n <span\n impdc-icon\n [name]=\"columnDef.iconName\"\n class=\"{{ getCellColor(columnDef, row) }}\"></span>\n </span>\n <span *ngSwitchDefault class=\"{{ getCellColor(columnDef, row) }}\">\n {{ getValue(colIndex, row) }}\n </span>\n </div>\n </td>\n </tr>\n </ng-template>\n </tbody>\n <tfoot>\n <tr *ngIf=\"paginationComponent\">\n <td [attr.colspan]=\"tableSpan\">\n <ng-content\n select=\"impdc-pagination, div[impdc-pagination]\"></ng-content>\n </td>\n </tr>\n </tfoot>\n</table>\n", styles: [".bulk-action-container{display:flex;flex-direction:row;border:1px solid var(--impd-color-gray-200);border-top-left-radius:.6rem;border-top-right-radius:.6rem;border-bottom:0px}.bulk-action-container .bulk-action-checkbox{padding:1.6rem 2rem}.bulk-action-container .bulk-actions{display:flex;flex-direction:row;gap:.4rem}.col-no-padding{padding:0!important}.data-loading{height:var(--impd-size-80);vertical-align:middle;text-align:center}.no-data{vertical-align:middle;text-align:center}.select-row{display:flex;height:var(--impd-size-4);align-items:center;justify-items:end;border-radius:var(--impd-border-radius-default)}.heading-with-checkbox{padding-left:5px;padding-right:10px}\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: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i3.BrandedDirective, selector: "[impdcBranded]" }, { kind: "component", type: i4.IconComponent, selector: "impdc-icon, [impdc-icon]", inputs: ["name", "theme", "size"] }, { kind: "component", type: i5.CheckboxComponent, selector: "impdc-checkbox", inputs: ["tabIndex", "id", "label", "description", "isSwitch", "switchIcons", "inline", "checked", "indeterminate", "disabled", "errorStateMatcher", "required"], outputs: ["change", "indeterminateChange"], exportAs: ["impdcCheckControl"] }, { kind: "component", type: i6.SelectOptionComponent, selector: "impdc-select-option", inputs: ["value", "label", "id", "disabled"], outputs: ["onSelectionChange"] }, { kind: "component", type: i7.SelectComponent, selector: "impdc-select", inputs: ["disabled", "tabIndex", "placeholder", "required", "multiple", "compareWith", "errorStateMatcher", "value", "id"], outputs: ["selectionChange", "valueChange"], exportAs: ["impdcSelect"] }, { kind: "directive", type: i8.InputDirective, selector: "input[impdcInput], textarea[impdcInput], select[impdcNativeSelect]", inputs: ["disabled", "id", "type", "required", "readonly", "errorStateMatcher", "value"], exportAs: ["impdcInput"] }, { kind: "directive", type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i10.SpinnerComponent, selector: "impdc-spinner, div[impdc-spinner]", inputs: ["accessibilityText"] }, { kind: "component", type: i11.BadgeComponent, selector: "impdc-badge, [impdc-badge]", inputs: ["text", "icon", "theme", "size", "hideBg", "rounded", "dismissable"], outputs: ["dismiss"] }, { kind: "directive", type: i12.TableDirective, selector: "table[impdcTable]", inputs: ["striped"] }, { kind: "component", type: i13.ColumnHeadingComponent, selector: "impdc-column-heading", inputs: ["isSortable", "columnIndex", "sortColumnIndex", "direction", "text"], outputs: ["sort"] }, { kind: "directive", type: i14.TableInjectComponentDirective, selector: "[impdcTableInjectComponent]", inputs: ["columnDef", "value", "rowItem", "customCellComponents"] }] });
342
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TableComponent, decorators: [{
343
+ type: Component,
344
+ args: [{ selector: 'impdc-table', template: "<table impdcTable *ngIf=\"tableData\" [striped]=\"striped\">\n <thead>\n <tr *ngIf=\"!!bulkActions\">\n <th [attr.colspan]=\"tableSpan\" scope=\"col\" class=\"bulk-action-column\">\n <ng-content select=\"impdc-table-bulk-actions\"></ng-content>\n <ng-content select=\"[impdcTableBulkActions]\"></ng-content>\n </th>\n </tr>\n <tr>\n <th\n *ngIf=\"canSelectRows\"\n scope=\"col\"\n [ngClass]=\"{\n 'heading-below-bulk-actions': !!bulkActions\n }\">\n <div *ngIf=\"canSelectAllRows\">\n <impdc-checkbox\n ngModel\n [checked]=\"allSelected\"\n [indeterminate]=\"someSelected\"\n (change)=\"handleSelectAll($event)\"></impdc-checkbox>\n </div>\n </th>\n <th\n scope=\"col\"\n *ngFor=\"let columnDef of columnDefs; index as columnIndex\"\n [ngClass]=\"{\n 'sorted-column': isSortedColumn(columnIndex),\n 'sortable-column': columnDef.sorted,\n 'heading-below-bulk-actions': !!bulkActions\n }\"\n (click)=\"handleSort(columnIndex)\">\n <impdc-column-heading\n [isSortable]=\"columnDef.sorted || false\"\n [columnIndex]=\"columnIndex\"\n [sortColumnIndex]=\"sortColumnIndex\"\n [direction]=\"sortDirection\"\n [text]=\"columnDef.title\"\n (sort)=\"handleSort($event)\">\n </impdc-column-heading>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngIf=\"loading; else data\">\n <td [attr.colspan]=\"tableSpan\" class=\"data-loading\">\n <impdc-spinner></impdc-spinner>\n </td>\n </tr>\n <ng-template #data>\n <tr *ngIf=\"tableData.length === 0\">\n <td [attr.colspan]=\"tableSpan\" class=\"no-data\">\n <ng-content select=\"[noData]\"></ng-content>\n </td>\n </tr>\n <tr *ngFor=\"let row of tableData; index as rowIndex\">\n <td *ngIf=\"canSelectRows\">\n <div class=\"select-column\">\n <impdc-checkbox\n [ngModel]=\"isRowSelected(row.id)\"\n (change)=\"handleRowSelect($event, row.id)\"></impdc-checkbox>\n </div>\n </td>\n <td\n *ngFor=\"let columnDef of columnDefs; index as colIndex\"\n [ngClass]=\"{\n 'col-no-padding': !!columnDef.noPadding\n }\">\n <div [ngSwitch]=\"columnDef.columnType\">\n <span *ngSwitchCase=\"cellType.Badge\">\n <impdc-badge\n [text]=\"getStringValue(colIndex, row)\"\n [theme]=\"getTheme(columnDef, row)\">\n </impdc-badge>\n </span>\n <span\n *ngSwitchCase=\"cellType.Link\"\n class=\"cell-type-link\"\n (click)=\"handleLinkClick(colIndex, row)\">\n <a *ngIf=\"!branded\">\n {{ getValue(colIndex, row) }}\n </a>\n <a *ngIf=\"branded\" impdcBranded>\n {{ getValue(colIndex, row) }}\n </a>\n </span>\n <span *ngSwitchCase=\"cellType.Url\" class=\"cell-type-link\">\n <a\n *ngIf=\"!branded\"\n target=\"_blank\"\n [attr.href]=\"getValue(colIndex, row)\">\n {{ getValue(colIndex, row) }}\n </a>\n <a\n *ngIf=\"branded\"\n impdcBranded\n target=\"_blank\"\n [attr.href]=\"getValue(colIndex, row)\">\n {{ getValue(colIndex, row) }}\n </a>\n </span>\n <span *ngSwitchCase=\"cellType.Email\" class=\"cell-type-link\">\n <a\n *ngIf=\"!branded\"\n target=\"_blank\"\n [attr.href]=\"'mailto:' + getValue(colIndex, row)\">\n {{ getValue(colIndex, row) }}\n </a>\n <a\n *ngIf=\"branded\"\n impdcBranded\n [attr.href]=\"getMailToValue(colIndex, row)\">\n {{ getValue(colIndex, row) }}\n </a>\n </span>\n <span *ngSwitchCase=\"cellType.Input\">\n <input\n impdcInput\n type=\"text\"\n class=\"{{ getCellColor(columnDef, row) }}\"\n [ngModel]=\"getValue(colIndex, row)\"\n (ngModelChange)=\"\n handleCellValueChange(colIndex, rowIndex, $event)\n \" />\n </span>\n <span *ngSwitchCase=\"cellType.Boolean\">\n <span\n *ngIf=\"columnDef.disabled && getValue(colIndex, row) === 'true'\"\n impdc-icon\n name=\"check\"\n class=\"{{ getCellColor(columnDef, row) }}\"></span>\n <impdc-checkbox\n *ngIf=\"!columnDef.disabled\"\n [checked]=\"getValue(colIndex, row) === 'true'\"\n [isSwitch]=\"true\"\n (change)=\"\n handleCellValueChange(colIndex, rowIndex, $event.checked)\n \"></impdc-checkbox>\n </span>\n <span *ngSwitchCase=\"cellType.SingleSelect\">\n <impdc-select\n [ngModel]=\"getValue(colIndex, row)\"\n [disabled]=\"columnDef.disabled || false\"\n [placeholder]=\"selectPlaceholder\"\n (selectionChange)=\"\n handleCellValueChange(colIndex, rowIndex, $event.value)\n \">\n <impdc-select-option\n *ngIf=\"selectPlaceholder\"\n value\n [label]=\"selectPlaceholder\">\n </impdc-select-option>\n <impdc-select-option\n *ngFor=\"let value of columnDef.values || []\"\n [value]=\"value.value\"\n [label]=\"value.label\"></impdc-select-option>\n </impdc-select>\n </span>\n <span *ngSwitchCase=\"cellType.MultiSelect\">\n <impdc-select\n [ngModel]=\"getValue(colIndex, row)\"\n [disabled]=\"columnDef.disabled || false\"\n [placeholder]=\"selectPlaceholder\"\n multiple=\"true\"\n (selectionChange)=\"\n handleCellValueChange(colIndex, rowIndex, $event.value)\n \">\n <impdc-select-option\n *ngFor=\"let value of columnDef.values || []\"\n [value]=\"value.value\"\n [label]=\"value.label\"></impdc-select-option>\n </impdc-select>\n </span>\n <span\n *ngSwitchCase=\"cellType.CellRender\"\n class=\"{{ getCellColor(columnDef, row) }}\">\n <ng-template\n impdcTableInjectComponent\n [columnDef]=\"columnDef\"\n [rowItem]=\"row\"\n [customCellComponents]=\"customCellComponents || {}\"\n [value]=\"getRawValue(colIndex, row)\"></ng-template>\n </span>\n <span *ngSwitchCase=\"cellType.Icon\">\n <span\n impdc-icon\n [name]=\"columnDef.iconName\"\n class=\"{{ getCellColor(columnDef, row) }}\"></span>\n </span>\n <span *ngSwitchDefault class=\"{{ getCellColor(columnDef, row) }}\">\n {{ getValue(colIndex, row) }}\n </span>\n </div>\n </td>\n </tr>\n </ng-template>\n </tbody>\n <tfoot>\n <tr *ngIf=\"paginationComponent\">\n <td [attr.colspan]=\"tableSpan\">\n <ng-content\n select=\"impdc-pagination, div[impdc-pagination]\"></ng-content>\n </td>\n </tr>\n </tfoot>\n</table>\n", styles: [".bulk-action-container{display:flex;flex-direction:row;border:1px solid var(--impd-color-gray-200);border-top-left-radius:.6rem;border-top-right-radius:.6rem;border-bottom:0px}.bulk-action-container .bulk-action-checkbox{padding:1.6rem 2rem}.bulk-action-container .bulk-actions{display:flex;flex-direction:row;gap:.4rem}.col-no-padding{padding:0!important}.data-loading{height:var(--impd-size-80);vertical-align:middle;text-align:center}.no-data{vertical-align:middle;text-align:center}.select-row{display:flex;height:var(--impd-size-4);align-items:center;justify-items:end;border-radius:var(--impd-border-radius-default)}.heading-with-checkbox{padding-left:5px;padding-right:10px}\n"] }]
345
+ }], ctorParameters: function () { return [{ type: i1.DatePipe }, { type: i1.PercentPipe }, { type: i1.DecimalPipe }, { type: i0.ChangeDetectorRef }, { type: i2.BrandedDirective, decorators: [{
346
+ type: Optional
347
+ }, {
348
+ type: Host
349
+ }] }]; }, propDecorators: { loading: [{
350
+ type: Input
351
+ }], columnDefs: [{
352
+ type: Input
353
+ }], striped: [{
354
+ type: Input
355
+ }], canSelectRows: [{
356
+ type: Input
357
+ }], canSelectAllRows: [{
358
+ type: Input
359
+ }], selectPlaceholder: [{
360
+ type: Input
361
+ }], sortColumnIndex: [{
362
+ type: Input
363
+ }], sortDirection: [{
364
+ type: Input
365
+ }], tableData: [{
366
+ type: Input
367
+ }], selectedRowIds: [{
368
+ type: Input
369
+ }], customCellComponents: [{
370
+ type: Input
371
+ }], rowSelect: [{
372
+ type: Output
373
+ }], sortBy: [{
374
+ type: Output
375
+ }], linkClick: [{
376
+ type: Output
377
+ }], paginationComponent: [{
378
+ type: ContentChild,
379
+ args: [PaginationComponent]
380
+ }], bulkActions: [{
381
+ type: ContentChild,
382
+ args: [TableBulkActionsComponent]
383
+ }], inputChange: [{
384
+ type: Output
385
+ }] } });
386
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduLWNvbXBvbmVudHMvc3JjL2xpYi90YWJsZS9jb250YWluZXJzL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1jb21wb25lbnRzL3NyYy9saWIvdGFibGUvY29udGFpbmVycy90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osSUFBSSxFQUNKLEtBQUssRUFFTCxRQUFRLEVBQ1IsTUFBTSxFQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxHQUFHLElBQUksY0FBYyxFQUFFLEdBQUcsSUFBSSxjQUFjLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDdEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFXeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFMUQ7OztHQUdHO0FBTUgsTUFBTSxPQUFPLGNBQWM7SUEwSXpCLFlBQ21CLFNBQW1CLEVBQ25CLFlBQXlCLEVBQ3pCLFlBQXlCLEVBQ3pCLGtCQUFxQyxFQUMxQixRQUEwQjtRQUpyQyxjQUFTLEdBQVQs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Z0JBS2MsYUFBYTtzQkFBaEMsS0FBSztnQkFXSyxnQkFBZ0I7c0JBRDFCLEtBQUs7Z0JBWVUsaUJBQWlCO3NCQUFoQyxLQUFLO2dCQUtVLGVBQWU7c0JBQTlCLEtBQUs7Z0JBS1UsYUFBYTtzQkFBNUIsS0FBSztnQkFLVSxTQUFTO3NCQUF4QixLQUFLO2dCQU1LLGNBQWM7c0JBRHhCLEtBQUs7Z0JBWVUsb0JBQW9CO3NCQUFuQyxLQUFLO2dCQUtvQixTQUFTO3NCQUFsQyxNQUFNO2dCQUttQixNQUFNO3NCQUEvQixNQUFNO2dCQUttQixTQUFTO3NCQUFsQyxNQUFNO2dCQUlBLG1CQUFtQjtzQkFEekIsWUFBWTt1QkFBQyxtQkFBbUI7Z0JBSzFCLFdBQVc7c0JBRGpCLFlBQVk7dUJBQUMseUJBQXlCO2dCQU9iLFdBQVc7c0JBQXBDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSwgRGVjaW1hbFBpcGUsIFBlcmNlbnRQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZ2V0IGFzIGdldE5lc3RlZFZhbHVlLCBzZXQgYXMgc2V0TmVzdGVkVmFsdWUgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBERUJPVU5DRV9USU1FLCBTT1JUX0NPTFVNTl9JTkRFWCB9IGZyb20gJy4uL2NvbnN0YW50cy9pbmRleCc7XG5pbXBvcnQgeyBUYWJsZUNvbHVtblR5cGUgfSBmcm9tICcuLi9lbnVtZXJhdGlvbnMvaW5kZXgnO1xuaW1wb3J0IHtcbiAgSUN1c3RvbUNlbGxSZW5kZXJlckNvbXBvbmVudHMsXG4gIElTb3J0QnlQYXlsb2FkLFxuICBJVGFibGVDb2x1bW5EZWYsXG4gIElUYWJsZUV2ZW50UGF5bG9hZCxcbiAgSVRhYmxlUm93SXRlbSxcbiAgSVRhYmxlUm93SXRlbVZhbHVlLFxuICBJVGFibGVSb3dJdGVtVmFsdWVUeXBlc1xufSBmcm9tICcuLi9pbnRlcmZhY2VzL2luZGV4JztcbmltcG9ydCB7IENoZWNrYm94Q2hhbmdlRXZlbnQgfSBmcm9tICcuLi8uLi9mb3JtLWZpZWxkJztcbmltcG9ydCB7IFRhYmxlVGhlbWVIZWxwZXIgfSBmcm9tICcuLi9oZWxwZXJzJztcbmltcG9ydCB7IENvbXBvbmVudFRoZW1lIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgQnJhbmRlZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2JyYW5kaW5nJztcbmltcG9ydCB7IFBhZ2luYXRpb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9wYWdpbmF0aW9uJztcbmltcG9ydCB7IFRhYmxlQnVsa0FjdGlvbnNDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzJztcblxuLyoqXG4gKiBUaGUgYFRhYmxlQ29tcG9uZW50YCAoYDxpbXBkYy10YWJsZWApIGlzIGEgZGF0YSB0YWJsZSBjb21wb25lbnQuXG4gKiBUbyB1c2UsIGltcG9ydCBgVGFibGVNb2R1bGVgIGZyb20gYEBpbXBhcnRuZXIvZGVzaWduLWNvbXBvbmVudHNgLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpbXBkYy10YWJsZScsXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICAvKipcbiAgICogV2hldGhlciB0aGUgdGFibGUgZGF0YSBpcyBjdXJyZW50bHkgYmVpbmcgbG9hZGVkLiBUaGUgYDxpbXBkYy1zcGlubmVyPmAgd2lsbCBzaG93IGlmIGRhdGEgaXMgbG9hZGluZy5cbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBsb2FkaW5nID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSB2aXNpYmxlIGNvbHVtbnMgb2YgdGhlIHRhYmxlLiAgRWFjaCBgSVRhYmxlQ29sdW1uRGVmYCBkZWZpbmVzIHByb3BlcnRpZXMgcmVnYXJkaW5nIHRoZSBkaXNwbGF5LCBmb3JtYXR0aW5nIGFuZCBpbnRlcmFjdGlvbiBvZiB0aGUgY29sdW1uJ3MgY2VsbHMuXG4gICAqIENvbHVtbi9jZWxsIGNvbG9yIHByZWNlZGVuY2UgaXM6XG4gICAqIDEpIGBmaWVsZENvbG9yYCAtIGFsbG93cyBhbiBgSVRhYmxlQ29sdW1uRGVmYCB0byBkZWxlZ2F0ZSB0aGUgcmVzcG9uc2liaWxpdHkgb2YgY2VsbCBjb2xvciB0byBhbiBgSVRhYmxlUm93SXRlbWAgcHJvcGVydHkuXG4gICAqIDIpIGBjb2xvckdldHRlcmAtIGFsbG93cyBhbiBgSVRhYmxlQ29sdW1uRGVmYCB0byBkZWxlZ2F0ZSB0aGUgcmVzcG9uc2liaWxpdHkgb2YgY2VsbCBjb2xvciB0byBhIGZ1bmN0aW9uIG9mIHRoZSBgSVRhYmxlUm93SXRlbWAgZGV0ZXJtaW5lZCBieSB0aGUgZGV2ZWxvcGVyLlxuICAgKiAzKSBgY29sb3JgIC0gYSBwcm9wZXJ0eSBvZiBhbiBgSVRhYmxlQ29sdW1uRGVmYC5cbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBjb2x1bW5EZWZzOiBJVGFibGVDb2x1bW5EZWZbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSB0YWJsZSBpcyBzdHJpcGVkLlxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIHN0cmlwZWQgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGluZGl2aWR1YWwgcm93cyBjYW4gYmUgc2VsZWN0ZWQuIFdpbGwgYmUgYHRydWVgIGlmIGV4cGxpY2l0bHkgc2V0IHRvIGB0cnVlYCBvciBgY2FuU2VsZWN0QWxsUm93c2AgaXMgYHRydWVgLlxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIHNldCBjYW5TZWxlY3RSb3dzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fY2FuU2VsZWN0Um93cyA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXQgY2FuU2VsZWN0Um93cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jYW5TZWxlY3RBbGxSb3dzIHx8IHRoaXMuX2NhblNlbGVjdFJvd3MgfHwgISF0aGlzLmJ1bGtBY3Rpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYWxsIHJvd3MgY2FuIGJlIHNlbGVjdGVkIGF0IG9uY2UuIFdpbGwgYmUgYHRydWVgIGlmIGV4cGxpY2l0bHkgc2V0IHRvIGB0cnVlYCBvciBpZiBgVGFibGVCdWxrQWN0aW9uc0NvbXBvbmVudGAgaXMgY29udGVudCBwcm9qZWN0ZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGNhblNlbGVjdEFsbFJvd3ModmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9jYW5TZWxlY3RBbGxSb3dzID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNhblNlbGVjdEFsbFJvd3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2NhblNlbGVjdEFsbFJvd3MgfHwgISF0aGlzLmJ1bGtBY3Rpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBwbGFjZWhvbGRlciB0ZXh0IGFuZCBlbXB0eSB2YWx1ZSBkaXNwbGF5IHRleHQgZm9yIGA8aW1wZGMtc2VsZWN0PmAgaW5zdGFuY2VzIGluIGNlbGxzIHdpdGggYSBgSVRhYmxlQ29sdW1uRGVmYCBgY29sdW1uVHlwZWAgPSBgU2luZ2xlU2VsZWN0YCBvciBgTXVsdGlTZWxlY3RgLlxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIHNlbGVjdFBsYWNlaG9sZGVyID0gJyc7XG5cbiAgLyoqXG4gICAqIFRoZSBgY29sdW1uRGVmc2AgaW5kZXggb2YgdGhlIGN1cnJlbnRseSBzb3J0ZWQgY29sdW1uLlxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIHNvcnRDb2x1bW5JbmRleCA9IFNPUlRfQ09MVU1OX0lOREVYO1xuXG4gIC8qKlxuICAgKiBUaGUgZGlyZWN0aW9uIG9mIHRoZSBjdXJyZW50bHkgc29ydGVkIGNvbHVtbi5cbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBzb3J0RGlyZWN0aW9uOiAnYXNjJyB8ICdkZXNjJyA9ICdhc2MnO1xuXG4gIC8qKlxuICAgKiBUaGUgdGFibGUgcm93IGRhdGEgYXMgYW4gYXJyYXkgb2YgYElUYWJsZVJvd0l0ZW1gLlxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIHRhYmxlRGF0YTogSVRhYmxlUm93SXRlbVtdID0gW107XG5cbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIGN1cnJlbnRseSBzZWxlY3RlZCBJRHMgZnJvbSB0aGUgYHRhYmxlRGF0YWAgaW5wdXQuICBBcnJheSBtdXN0IGJlIG9mIHR5cGUgYChzdHJpbmcgfCBudW1iZXIpW11gLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzZWxlY3RlZFJvd0lkcyh2YWx1ZTogKHN0cmluZyB8IG51bWJlcilbXSkge1xuICAgIHRoaXMuX3NlbGVjdGVkUm93SWRzID0gWy4uLnZhbHVlXTtcbiAgfVxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkUm93SWRzKCk6IChzdHJpbmcgfCBudW1iZXIpW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5fc2VsZWN0ZWRSb3dJZHNdO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZWdpc3RlcmVkIGN1c3RvbSBjZWxsIHJlbmRlcmVyIGNvbXBvbmVudHMgYXZhaWxhYmxlIHRvIGJlIHVzZWQgaW4gdGhlIHRhYmxlIGluc3RhbmNlLlxuICAgKiBGb3IgYSBnaXZlbiBgSVRhYmxlQ29sdW1uRGVmYCBpbiB0aGUgYGNvbHVtbkRlZnNgIGlucHV0LCB0aGUgYGNlbGxSZW5kZXJlckNvbXBvbmVudGAgcHJvcGVydHkgc2hvdWxkIGJlIHNldCB0byB0aGUga2V5IG9mIHRoZSByZWdpc3RlcmVkIGNvbXBvbmVudCBpbiB0aGlzIGlucHV0LlxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGN1c3RvbUNlbGxDb21wb25lbnRzPzogSUN1c3RvbUNlbGxSZW5kZXJlckNvbXBvbmVudHM7XG5cbiAgLyoqXG4gICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBvbmUgb3IgbXVsdGlwbGUgcm93cyBhcmUgc2VsZWN0ZWQuIEVtaXRzIGAoc3RyaW5nIHwgbnVtYmVyKVtdYCBwYXlsb2FkLlxuICAgKi9cbiAgQE91dHB1dCgpIHB1YmxpYyByZWFkb25seSByb3dTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPChzdHJpbmcgfCBudW1iZXIpW10+KCk7XG5cbiAgLyoqXG4gICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBhIGNvbHVtbiBpcyBzb3J0ZWQuIEVtaXRzIGBJU29ydEJ5UGF5bG9hZGAgcGF5bG9hZC5cbiAgICovXG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgc29ydEJ5ID0gbmV3IEV2ZW50RW1pdHRlcjxJU29ydEJ5UGF5bG9hZD4oKTtcblxuICAvKipcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIGEgcm93IGxpbmsgaXMgY2xpY2tlZC4gRW1pdHMgYElUYWJsZUV2ZW50UGF5bG9hZGAgcGF5bG9hZC5cbiAgICovXG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgbGlua0NsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxJVGFibGVFdmVudFBheWxvYWQ+KCk7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgQENvbnRlbnRDaGlsZChQYWdpbmF0aW9uQ29tcG9uZW50KVxuICBwdWJsaWMgcGFnaW5hdGlvbkNvbXBvbmVudD86IFBhZ2luYXRpb25Db21wb25lbnQgPSB1bmRlZmluZWQ7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgQENvbnRlbnRDaGlsZChUYWJsZUJ1bGtBY3Rpb25zQ29tcG9uZW50KVxuICBwdWJsaWMgYnVsa0FjdGlvbnM/OiBUYWJsZUJ1bGtBY3Rpb25zQ29tcG9uZW50ID0gdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gYSByb3cgaW5wdXQgdmFsdWUgaXMgY2hhbmdlZC4gRW1pdHRlZCBjZWxscyBvZiBgY29sdW1uVHlwZWAgYFNpbmdsU2VsZWN0YCwgYE11bHRpU2VsZWN0YCwgYElucHV0YCwgYEJvb2xlYW5gIG9yIGBJY29uYC5cbiAgICogTm90IGVtaXR0ZWQgaWYgY29sdW1uIGRlZmluaXRpb24gcHJvcGVydHkgYGRpc2FibGVkYCA9IGB0cnVlYC4gRW1pdHMgYElUYWJsZUV2ZW50UGF5bG9hZGAgcGF5bG9hZC5cbiAgICovXG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgaW5wdXRDaGFuZ2UgPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8SVRhYmxlRXZlbnRQYXlsb2FkPigpO1xuXG4gIC8qKiBAaWdub3JlICovXG4gIHB1YmxpYyBjZWxsVHlwZSA9IFRhYmxlQ29sdW1uVHlwZTtcbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHVibGljIGFsbFNlbGVjdGVkID0gdHJ1ZTtcbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHVibGljIGdldCBzb21lU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICEhdGhpcy5fc2VsZWN0ZWRSb3dJZHMgJiZcbiAgICAgIHRoaXMuX3NlbGVjdGVkUm93SWRzLmxlbmd0aCA+IDAgJiZcbiAgICAgICEhdGhpcy50YWJsZURhdGEgJiZcbiAgICAgIHRoaXMudGFibGVEYXRhLmxlbmd0aCA+IDAgJiZcbiAgICAgIHRoaXMuX3NlbGVjdGVkUm93SWRzLmxlbmd0aCA8IHRoaXMudGFibGVEYXRhLmxlbmd0aFxuICAgICk7XG4gIH1cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHVibGljIHJlYWRvbmx5IGJyYW5kZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogQGlnbm9yZSAqL1xuICBwdWJsaWMgZ2V0IHRhYmxlU3BhbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmNhblNlbGVjdFJvd3NcbiAgICAgID8gdGhpcy5jb2x1bW5EZWZzLmxlbmd0aCArIDFcbiAgICAgIDogdGhpcy5jb2x1bW5EZWZzLmxlbmd0aDtcbiAgfVxuXG4gIHByaXZhdGUgX2NhblNlbGVjdFJvd3MgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfY2FuU2VsZWN0QWxsUm93cyA9IGZhbHNlO1xuICBwcml2YXRlIF9zZWxlY3RlZFJvd0lkczogKHN0cmluZyB8IG51bWJlcilbXSA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pbnB1dENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8SVRhYmxlRXZlbnRQYXlsb2FkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2RhdGVQaXBlOiBEYXRlUGlwZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9wZXJjZW50UGlwZTogUGVyY2VudFBpcGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGVjbWlhbFBpcGU6IERlY2ltYWxQaXBlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBAT3B0aW9uYWwoKSBASG9zdCgpIHByaXZhdGUgX2JyYW5kZWQ6IEJyYW5kZWREaXJlY3RpdmVcbiAgKSB7XG4gICAgdGhpcy5icmFuZGVkID0gX2JyYW5kZWQgPyB0cnVlIDogZmFsc2U7XG4gICAgdGhpcy5faW5wdXRDaGFuZ2VcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZShERUJPVU5DRV9USU1FKSlcbiAgICAgIC5zdWJzY3JpYmUodGhpcy5pbnB1dENoYW5nZSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ3NlbGVjdGVkUm93SWRzJ10gfHwgY2hhbmdlc1sndGFibGVEYXRhJ10pIHtcbiAgICAgIGlmIChcbiAgICAgICAgIXRoaXMudGFibGVEYXRhIHx8XG4gICAgICAgICF0aGlzLnRhYmxlRGF0YS5sZW5ndGggfHxcbiAgICAgICAgIXRoaXMuc2VsZWN0ZWRSb3dJZHMgfHxcbiAgICAgICAgIXRoaXMuc2VsZWN0ZWRSb3dJZHMubGVuZ3RoXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5hbGxTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hbGxTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRSb3dJZHMubGVuZ3RoID49IHRoaXMudGFibGVEYXRhLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0TWFpbFRvVmFsdWUoXG4gICAgY29sdW1uSW5kZXg6IG51bWJlcixcbiAgICBjdXJyZW50Um93OiBJVGFibGVSb3dJdGVtXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgeyBjb2x1bW5UeXBlLCB0cnVuY2F0ZWQ6IHRydW5jYXRlZCB9ID1cbiAgICAgIHRoaXMuX2dldENvbHVtbkRlZkJ5SW5kZXgoY29sdW1uSW5kZXgpO1xuICAgIGxldCB2YWx1ZSA9IHRoaXMuX2dldFZhbHVlKGNvbHVtbkluZGV4LCBjdXJyZW50Um93KTtcblxuICAgIGlmIChjb2x1bW5UeXBlICE9PSBUYWJsZUNvbHVtblR5cGUuRW1haWwpIHtcbiAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgICB2YWx1ZSA9IHZhbHVlID8gYG1haWx0bzoke3ZhbHVlfWAgOiB2YWx1ZTtcblxuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIGdldFN0cmluZ1ZhbHVlKFxuICAgIGNvbHVtbkluZGV4OiBudW1iZXIsXG4gICAgY3VycmVudFJvdzogSVRhYmxlUm93SXRlbVxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZShjb2x1bW5JbmRleCwgY3VycmVudFJvdyk7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5qb2luKCc7Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VmFsdWUoXG4gICAgY29sdW1uSW5kZXg6IG51bWJlcixcbiAgICBjdXJyZW50Um93OiBJVGFibGVSb3dJdGVtXG4gICk6IHN0cmluZyB8IHN0cmluZ1tdIHtcbiAgICBjb25zdCB7IGNvbHVtblR5cGUsIHRydW5jYXRlZDogdHJ1bmNhdGVkIH0gPVxuICAgICAgdGhpcy5fZ2V0Q29sdW1uRGVmQnlJbmRleChjb2x1bW5JbmRleCk7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5fZ2V0VmFsdWUoY29sdW1uSW5kZXgsIGN1cnJlbnRSb3cpO1xuXG4gICAgc3dpdGNoIChjb2x1bW5UeXBlKSB7XG4gICAgICBjYXNlIFRhYmxlQ29sdW1uVHlwZS5EZWNpbWFsOiB7XG4gICAgICAgIHZhbHVlID0gdGhpcy5fZGVjbWlhbFBpcGUudHJhbnNmb3JtKE51bWJlcih2YWx1ZSkgfHwgMCkgfHwgJyc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBUYWJsZUNvbHVtblR5cGUuRGF0ZToge1xuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoU3RyaW5nKHZhbHVlKSk7XG4gICAgICAgIGNvbnN0IHZhbGlkRGF0ZSA9IGRhdGUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTihkYXRlLmdldFRpbWUoKSk7XG4gICAgICAgIHZhbHVlID0gdmFsaWREYXRlXG4gICAgICAgICAgPyB0aGlzLl9kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZSwgJ01NL2RkL3l5eXknKSB8fCAnJ1xuICAgICAgICAgIDogU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIFRhYmxlQ29sdW1uVHlwZS5EYXRlVGltZToge1xuICAgICAgICBjb25zdCBkYXRlVGltZSA9IG5ldyBEYXRlKFN0cmluZyh2YWx1ZSkpO1xuICAgICAgICBjb25zdCB2YWxpZERhdGVUaW1lID1cbiAgICAgICAgICBkYXRlVGltZSBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKGRhdGVUaW1lLmdldFRpbWUoKSk7XG4gICAgICAgIHZhbHVlID0gdmFsaWREYXRlVGltZVxuICAgICAgICAgID8gdGhpcy5fZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGVUaW1lLCAnTU0vZGQveXl5eSBoOm1tOnNzIGEnKSB8fCAnJ1xuICAgICAgICAgIDogU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIFRhYmxlQ29sdW1uVHlwZS5MaW5rOiB7XG4gICAgICAgIHZhbHVlID0gU3RyaW5nKHZhbHVlKS5yZXBsYWNlKC8oXlxcdys6fF4pXFwvXFwvLywgJycpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgVGFibGVDb2x1bW5UeXBlLlBlcmNlbnRhZ2U6IHtcbiAgICAgICAgdmFsdWUgPSB0aGlzLl9wZXJjZW50UGlwZS50cmFuc2Zvcm0oTnVtYmVyKHZhbHVlKSB8fCAwKSB8fCAnJztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIFRhYmxlQ29sdW1uVHlwZS5Vcmw6IHtcbiAgICAgICAgaWYgKCEvKGh0dHAocz8pKTpcXC9cXC8vaS50ZXN0KFN0cmluZyh2YWx1ZSkpKSB7XG4gICAgICAgICAgdmFsdWUgPSBgaHR0cHM6Ly8ke3ZhbHVlfWA7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIFRhYmxlQ29sdW1uVHlwZS5UZXh0OiB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWUuam9pbignOyAnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdHJ1bmNhdGVkKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdHJ1bmNhdGVTdHJpbmcgPSAoc3RyaW5nID0gJycsIG1heExlbmd0aCA9IHRydW5jYXRlZCkgPT5cbiAgICAgICAgICBzdHJpbmcubGVuZ3RoID4gbWF4TGVuZ3RoXG4gICAgICAgICAgICA/IGAke3N0cmluZy5zdWJzdHJpbmcoMCwgbWF4TGVuZ3RoKX3igKZgXG4gICAgICAgICAgICA6IHN0cmluZztcblxuICAgICAgICAhIXRydW5jYXRlZFxuICAgICAgICAgID8gKHZhbHVlID0gdHJ1bmNhdGVTdHJpbmcoU3RyaW5nKHZhbHVlKSwgdHJ1bmNhdGVkKSlcbiAgICAgICAgICA6IHZhbHVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgVGFibGVDb2x1bW5UeXBlLk11bHRpU2VsZWN0OlxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJzsnKT8ubWFwKHYgPT4gdi50cmltKCkpIHx8IFtdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSYXdWYWx1ZShcbiAgICBjb2x1bW5JbmRleDogbnVtYmVyLFxuICAgIGN1cnJlbnRSb3c6IElUYWJsZVJvd0l0ZW1cbiAgKTogSVRhYmxlUm93SXRlbVZhbHVlVHlwZXM8SVRhYmxlUm93SXRlbVZhbHVlPiB7XG4gICAgY29uc3QgeyBmaWVsZCB9ID0gdGhpcy5fZ2V0Q29sdW1uRGVmQnlJbmRleChjb2x1bW5JbmRleCk7XG5cbiAgICBpZiAoIWZpZWxkKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGN1cnJlbnRSb3dbZmllbGRdIHx8ICcnO1xuICB9XG5cbiAgcHVibGljIGdldENlbGxDb2xvcihcbiAgICBjb2x1bW5EZWZpbml0aW9uOiBJVGFibGVDb2x1bW5EZWYsXG4gICAgaXRlbTogSVRhYmxlUm93SXRlbVxuICApOiBzdHJpbmcge1xuICAgIHJldHVybiBUYWJsZVRoZW1lSGVscGVyLmdldENlbGxDb2xvcihjb2x1bW5EZWZpbml0aW9uLCBpdGVtKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRUaGVtZShcbiAgICBjb2x1bW5EZWZpbml0aW9uOiBJVGFibGVDb2x1bW5EZWYsXG4gICAgaXRlbTogSVRhYmxlUm93SXRlbVxuICApOiBDb21wb25lbnRUaGVtZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIFRhYmxlVGhlbWVIZWxwZXIuZ2V0VGhlbWUoY29sdW1uRGVmaW5pdGlvbiwgaXRlbSkgfHxcbiAgICAgIENvbXBvbmVudFRoZW1lLlByaW1hcnlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGlzU29ydGVkQ29sdW1uKGNvbHVtbkluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gY29sdW1uSW5kZXggPT09IHRoaXMuc29ydENvbHVtbkluZGV4O1xuICB9XG5cbiAgcHVibGljIGlzUm93U2VsZWN0ZWQoaWQ6IHN0cmluZyB8IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkUm93SWRzLmluY2x1ZGVzKGlkKTtcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVTZWxlY3RBbGwoZXZlbnQ6IENoZWNrYm94Q2hhbmdlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2FuU2VsZWN0QWxsUm93cyB8fCAhdGhpcy50YWJsZURhdGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQuY2hlY2tlZCkge1xuICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dJZHMgPSB0aGlzLnRhYmxlRGF0YT8ubWFwKHJvdyA9PiByb3cuaWQpIHx8IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZWxlY3RlZFJvd0lkcyA9IFtdO1xuICAgIH1cblxuICAgIHRoaXMuX3NlbGVjdGVkUm93SWRzLnNvcnQoKTtcbiAgICB0aGlzLmFsbFNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZFJvd0lkcy5sZW5ndGggPj0gdGhpcy50YWJsZURhdGEubGVuZ3RoO1xuXG4gICAgdGhpcy5yb3dTZWxlY3QuZW1pdCh0aGlzLnNlbGVjdGVkUm93SWRzKTtcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVTb3J0KGNvbHVtbkluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoY29sdW1uSW5kZXggPT09IHRoaXMuc29ydENvbHVtbkluZGV4KSB7XG4gICAgICB0aGlzLnNvcnREaXJlY3Rpb24gPSB0aGlzLnNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gJ2Rlc2MnIDogJ2FzYyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc29ydENvbHVtbkluZGV4ID0gY29sdW1uSW5kZXg7XG4gICAgICB0aGlzLnNvcnREaXJlY3Rpb24gPSAnYXNjJztcbiAgICB9XG5cbiAgICBjb25zdCBmaWVsZCA9IHRoaXMuX2dldENvbHVtbkRlZkJ5SW5kZXgoY29sdW1uSW5kZXgpLmZpZWxkIHx8ICcnO1xuXG4gICAgdGhpcy5zb3J0QnkuZW1pdCh7XG4gICAgICBjb2x1bW5JbmRleCxcbiAgICAgIGZpZWxkLFxuICAgICAgZGlyZWN0aW9uOiB0aGlzLnNvcnREaXJlY3Rpb25cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVSb3dTZWxlY3QoXG4gICAgZXZlbnQ6IENoZWNrYm94Q2hhbmdlRXZlbnQsXG4gICAgcm93SWQ6IG51bWJlciB8IHN0cmluZ1xuICApOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2FuU2VsZWN0Um93cykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC5jaGVja2VkICYmICF0aGlzLl9zZWxlY3RlZFJvd0lkcy5pbmNsdWRlcyhyb3dJZCkpIHtcbiAgICAgIHRoaXMuX3NlbGVjdGVkUm93SWRzLnB1c2gocm93SWQpO1xuICAgIH0gZWxzZSBpZiAoIWV2ZW50LmNoZWNrZWQgJiYgdGhpcy5fc2VsZWN0ZWRSb3dJZHMuaW5jbHVkZXMocm93SWQpKSB7XG4gICAgICBjb25zdCBpZHggPSB0aGlzLl9zZWxlY3RlZFJvd0lkcy5pbmRleE9mKHJvd0lkKTtcbiAgICAgIGlmIChpZHggPiAtMSkge1xuICAgICAgICB0aGlzLl9zZWxlY3RlZFJvd0lkcy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc2VsZWN0ZWRSb3dJZHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl9zZWxlY3RlZFJvd0lkcy5zb3J0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5hbGxTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRSb3dJZHMubGVuZ3RoID49IHRoaXMudGFibGVEYXRhLmxlbmd0aDtcbiAgICB0aGlzLnJvd1NlbGVjdC5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dJZHMpO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZUNlbGxWYWx1ZUNoYW5nZShcbiAgICBjb2x1bW5JbmRleDogbnVtYmVyLFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgdmFsdWU6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBzdHJpbmdbXVxuICApOiB2b2lkIHtcbiAgICBjb25zdCB7IGZpZWxkLCBjb2x1bW5UeXBlIH0gPSB0aGlzLl9nZXRDb2x1bW5EZWZCeUluZGV4KGNvbHVtbkluZGV4KTtcbiAgICBsZXQgY3VycmVudFZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgc3RyaW5nW10gPSB2YWx1ZTtcblxuICAgIGlmIChjb2x1bW5UeXBlICE9PSBUYWJsZUNvbHVtblR5cGUuQm9vbGVhbiAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGN1cnJlbnRWYWx1ZSA9IGlzTmFOKE51bWJlcih2YWx1ZSkpID8gdmFsdWUgOiBOdW1iZXIodmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCBpdGVtID0gdGhpcy50YWJsZURhdGFbcm93SW5kZXhdO1xuXG4gICAgc2V0TmVzdGVkVmFsdWUoaXRlbSwgU3RyaW5nKGZpZWxkKSwgY3VycmVudFZhbHVlKTtcblxuICAgIHRoaXMuX2lucHV0Q2hhbmdlLmVtaXQoe1xuICAgICAgY29sdW1uSW5kZXgsXG4gICAgICBpdGVtLFxuICAgICAgdmFsdWU6IGN1cnJlbnRWYWx1ZVxuICAgIH0pO1xuXG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZUxpbmtDbGljayhjb2x1bW5JbmRleDogbnVtYmVyLCBpdGVtOiBJVGFibGVSb3dJdGVtKTogdm9pZCB7XG4gICAgdGhpcy5saW5rQ2xpY2suZW1pdCh7XG4gICAgICBpdGVtLFxuICAgICAgY29sdW1uSW5kZXhcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldENvbHVtbkRlZkJ5SW5kZXgoY29sdW1uSW5kZXg6IG51bWJlcik6IElUYWJsZUNvbHVtbkRlZiB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uRGVmc1tjb2x1bW5JbmRleF07XG4gIH1cblxuICBwcml2YXRlIF9nZXRWYWx1ZShcbiAgICBjb2x1bW5JbmRleDogbnVtYmVyLFxuICAgIGN1cnJlbnRSb3c6IElUYWJsZVJvd0l0ZW1cbiAgKTogc3RyaW5nIHwgc3RyaW5nW10ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGZpZWxkLCB2YWx1ZUdldHRlciB9ID0gdGhpcy5fZ2V0Q29sdW1uRGVmQnlJbmRleChjb2x1bW5JbmRleCk7XG5cbiAgICAgIGNvbnN0IHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSA9IHZhbHVlR2V0dGVyXG4gICAgICAgID8gdmFsdWVHZXR0ZXIoY3VycmVudFJvdylcbiAgICAgICAgOiAoZ2V0TmVzdGVkVmFsdWUoY3VycmVudFJvdywgU3RyaW5nKGZpZWxkKSwgJycpIGFzIHN0cmluZyB8IHN0cmluZ1tdKTtcblxuICAgICAgcmV0dXJuIHZhbHVlIHx8ICcnO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn1cbiIsIjx0YWJsZSBpbXBkY1RhYmxlICpuZ0lmPVwidGFibGVEYXRhXCIgW3N0cmlwZWRdPVwic3RyaXBlZFwiPlxuICA8dGhlYWQ+XG4gICAgPHRyICpuZ0lmPVwiISFidWxrQWN0aW9uc1wiPlxuICAgICAgPHRoIFthdHRyLmNvbHNwYW5dPVwidGFibGVTcGFuXCIgc2NvcGU9XCJjb2xcIiBjbGFzcz1cImJ1bGstYWN0aW9uLWNvbHVtblwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpbXBkYy10YWJsZS1idWxrLWFjdGlvbnNcIj48L25nLWNvbnRlbnQ+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltpbXBkY1RhYmxlQnVsa0FjdGlvbnNdXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC90aD5cbiAgICA8L3RyPlxuICAgIDx0cj5cbiAgICAgIDx0aFxuICAgICAgICAqbmdJZj1cImNhblNlbGVjdFJvd3NcIlxuICAgICAgICBzY29wZT1cImNvbFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAnaGVhZGluZy1iZWxvdy1idWxrLWFjdGlvbnMnOiAhIWJ1bGtBY3Rpb25zXG4gICAgICAgIH1cIj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImNhblNlbGVjdEFsbFJvd3NcIj5cbiAgICAgICAgICA8aW1wZGMtY2hlY2tib3hcbiAgICAgICAgICAgIG5nTW9kZWxcbiAgICAgICAgICAgIFtjaGVja2VkXT1cImFsbFNlbGVjdGVkXCJcbiAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cInNvbWVTZWxlY3RlZFwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cImhhbmRsZVNlbGVjdEFsbCgkZXZlbnQpXCI+PC9pbXBkYy1jaGVja2JveD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3RoPlxuICAgICAgPHRoXG4gICAgICAgIHNjb3BlPVwiY29sXCJcbiAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbkRlZiBvZiBjb2x1bW5EZWZzOyBpbmRleCBhcyBjb2x1bW5JbmRleFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAnc29ydGVkLWNvbHVtbic6IGlzU29ydGVkQ29sdW1uKGNvbHVtbkluZGV4KSxcbiAgICAgICAgICAnc29ydGFibGUtY29sdW1uJzogY29sdW1uRGVmLnNvcnRlZCxcbiAgICAgICAgICAnaGVhZGluZy1iZWxvdy1idWxrLWFjdGlvbnMnOiAhIWJ1bGtBY3Rpb25zXG4gICAgICAgIH1cIlxuICAgICAgICAoY2xpY2spPVwiaGFuZGxlU29ydChjb2x1bW5JbmRleClcIj5cbiAgICAgICAgPGltcGRjLWNvbHVtbi1oZWFkaW5nXG4gICAgICAgICAgW2lzU29ydGFibGVdPVwiY29sdW1uRGVmLnNvcnRlZCB8fCBmYWxzZVwiXG4gICAgICAgICAgW2NvbHVtbkluZGV4XT1cImNvbHVtbkluZGV4XCJcbiAgICAgICAgICBbc29ydENvbHVtbkluZGV4XT1cInNvcnRDb2x1bW5JbmRleFwiXG4gICAgICAgICAgW2RpcmVjdGlvbl09XCJzb3J0RGlyZWN0aW9uXCJcbiAgICAgICAgICBbdGV4dF09XCJjb2x1bW5EZWYudGl0bGVcIlxuICAgICAgICAgIChzb3J0KT1cImhhbmRsZVNvcnQoJGV2ZW50KVwiPlxuICAgICAgICA8L2ltcGRjLWNvbHVtbi1oZWFkaW5nPlxuICAgICAgPC90aD5cbiAgICA8L3RyPlxuICA8L3RoZWFkPlxuICA8dGJvZHk+XG4gICAgPHRyICpuZ0lmPVwibG9hZGluZzsgZWxzZSBkYXRhXCI+XG4gICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJ0YWJsZVNwYW5cIiBjbGFzcz1cImRhdGEtbG9hZGluZ1wiPlxuICAgICAgICA8aW1wZGMtc3Bpbm5lcj48L2ltcGRjLXNwaW5uZXI+XG4gICAgICA8L3RkPlxuICAgIDwvdHI+XG4gICAgPG5nLXRlbXBsYXRlICNkYXRhPlxuICAgICAgPHRyICpuZ0lmPVwidGFibGVEYXRhLmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJ0YWJsZVNwYW5cIiBjbGFzcz1cIm5vLWRhdGFcIj5cbiAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbm9EYXRhXVwiPjwvbmctY29udGVudD5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgICA8dHIgKm5nRm9yPVwibGV0IHJvdyBvZiB0YWJsZURhdGE7IGluZGV4IGFzIHJvd0luZGV4XCI+XG4gICAgICAgIDx0ZCAqbmdJZj1cImNhblNlbGVjdFJvd3NcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0LWNvbHVtblwiPlxuICAgICAgICAgICAgPGltcGRjLWNoZWNrYm94XG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cImlzUm93U2VsZWN0ZWQocm93LmlkKVwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlUm93U2VsZWN0KCRldmVudCwgcm93LmlkKVwiPjwvaW1wZGMtY2hlY2tib3g+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZFxuICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW5EZWYgb2YgY29sdW1uRGVmczsgaW5kZXggYXMgY29sSW5kZXhcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdjb2wtbm8tcGFkZGluZyc6ICEhY29sdW1uRGVmLm5vUGFkZGluZ1xuICAgICAgICAgIH1cIj5cbiAgICAgICAgICA8ZGl2IFtuZ1N3aXRjaF09XCJjb2x1bW5EZWYuY29sdW1uVHlwZVwiPlxuICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cImNlbGxUeXBlLkJhZGdlXCI+XG4gICAgICAgICAgICAgIDxpbXBkYy1iYWRnZVxuICAgICAgICAgICAgICAgIFt0ZXh0XT1cImdldFN0cmluZ1ZhbHVlKGNvbEluZGV4LCByb3cpXCJcbiAgICAgICAgICAgICAgICBbdGhlbWVdPVwiZ2V0VGhlbWUoY29sdW1uRGVmLCByb3cpXCI+XG4gICAgICAgICAgICAgIDwvaW1wZGMtYmFkZ2U+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiY2VsbFR5cGUuTGlua1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY2VsbC10eXBlLWxpbmtcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlTGlua0NsaWNrKGNvbEluZGV4LCByb3cpXCI+XG4gICAgICAgICAgICAgIDxhICpuZ0lmPVwiIWJyYW5kZWRcIj5cbiAgICAgICAgICAgICAgICB7eyBnZXRWYWx1ZShjb2xJbmRleCwgcm93KSB9fVxuICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgIDxhICpuZ0lmPVwiYnJhbmRlZFwiIGltcGRjQnJhbmRlZD5cbiAgICAgICAgICAgICAgICB7eyBnZXRWYWx1ZShjb2xJbmRleCwgcm93KSB9fVxuICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiY2VsbFR5cGUuVXJsXCIgY2xhc3M9XCJjZWxsLXR5cGUtbGlua1wiPlxuICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWJyYW5kZWRcIlxuICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgW2F0dHIuaHJlZl09XCJnZXRWYWx1ZShjb2xJbmRleCwgcm93KVwiPlxuICAgICAgICAgICAgICAgIHt7IGdldFZhbHVlKGNvbEluZGV4LCByb3cpIH19XG4gICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAqbmdJZj1cImJyYW5kZWRcIlxuICAgICAgICAgICAgICAgIGltcGRjQnJhbmRlZFxuICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgW2F0dHIuaHJlZl09XCJnZXRWYWx1ZShjb2xJbmRleCwgcm93KVwiPlxuICAgICAgICAgICAgICAgIHt7IGdldFZhbHVlKGNvbEluZGV4LCByb3cpIH19XG4gICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCJjZWxsVHlwZS5FbWFpbFwiIGNsYXNzPVwiY2VsbC10eXBlLWxpbmtcIj5cbiAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFicmFuZGVkXCJcbiAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgIFthdHRyLmhyZWZdPVwiJ21haWx0bzonICsgZ2V0VmFsdWUoY29sSW5kZXgsIHJvdylcIj5cbiAgICAgICAgICAgICAgICB7eyBnZXRWYWx1ZShjb2xJbmRleCwgcm93KSB9fVxuICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJicmFuZGVkXCJcbiAgICAgICAgICAgICAgICBpbXBkY0JyYW5kZWRcbiAgICAgICAgICAgICAgICBbYXR0ci5ocmVmXT1cImdldE1haWxUb1ZhbHVlKGNvbEluZGV4LCByb3cpXCI+XG4gICAgICAgICAgICAgICAge3sgZ2V0VmFsdWUoY29sSW5kZXgsIHJvdykgfX1cbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cImNlbGxUeXBlLklucHV0XCI+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGltcGRjSW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBnZXRDZWxsQ29sb3IoY29sdW1uRGVmLCByb3cpIH19XCJcbiAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJnZXRWYWx1ZShjb2xJbmRleCwgcm93KVwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiXG4gICAgICAgICAgICAgICAgICBoYW5kbGVDZWxsVmFsdWVDaGFuZ2UoY29sSW5kZXgsIHJvd0luZGV4LCAkZXZlbnQpXG4gICAgICAgICAgICAgICAgXCIgLz5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCJjZWxsVHlwZS5Cb29sZWFuXCI+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW5EZWYuZGlzYWJsZWQgJiYgZ2V0VmFsdWUoY29sSW5kZXgsIHJvdykgPT09ICd0cnVlJ1wiXG4gICAgICAgICAgICAgICAgaW1wZGMtaWNvblxuICAgICAgICAgICAgICAgIG5hbWU9XCJjaGVja1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBnZXRDZWxsQ29sb3IoY29sdW1uRGVmLCByb3cpIH19XCI+PC9zcGFuPlxuICAgICAgICAgICAgICA8aW1wZGMtY2hlY2tib3hcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFjb2x1bW5EZWYuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImdldFZhbHVlKGNvbEluZGV4LCByb3cpID09PSAndHJ1ZSdcIlxuICAgICAgICAgICAgICAgIFtpc1N3aXRjaF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIlxuICAgICAgICAgICAgICAgICAgaGFuZGxlQ2VsbFZhbHVlQ2hhbmdlKGNvbEluZGV4LCByb3dJbmRleCwgJGV2ZW50LmNoZWNrZWQpXG4gICAgICAgICAgICAgICAgXCI+PC9pbXBkYy1jaGVja2JveD5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCJjZWxsVHlwZS5TaW5nbGVTZWxlY3RcIj5cbiAgICAgICAgICAgICAgPGltcGRjLXNlbGVjdFxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImdldFZhbHVlKGNvbEluZGV4LCByb3cpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29sdW1uRGVmLmRpc2FibGVkIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2VsZWN0UGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiXG4gICAgICAgICAgICAgICAgICBoYW5kbGVDZWxsVmFsdWVDaGFuZ2UoY29sSW5kZXgsIHJvd0luZGV4LCAkZXZlbnQudmFsdWUpXG4gICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgPGltcGRjLXNlbGVjdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0UGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJzZWxlY3RQbGFjZWhvbGRlclwiPlxuICAgICAgICAgICAgICAgIDwvaW1wZGMtc2VsZWN0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8aW1wZGMtc2VsZWN0LW9wdGlvblxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHZhbHVlIG9mIGNvbHVtbkRlZi52YWx1ZXMgfHwgW11cIlxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJ2YWx1ZS5sYWJlbFwiPjwvaW1wZGMtc2VsZWN0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPC9pbXBkYy1zZWxlY3Q+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiY2VsbFR5cGUuTXVsdGlTZWxlY3RcIj5cbiAgICAgICAgICAgICAgPGltcGRjLXNlbGVjdFxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImdldFZhbHVlKGNvbEluZGV4LCByb3cpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29sdW1uRGVmLmRpc2FibGVkIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2VsZWN0UGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgIG11bHRpcGxlPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJcbiAgICAgICAgICAgICAgICAgIGhhbmRsZUNlbGxWYWx1ZUNoYW5nZShjb2xJbmRleCwgcm93SW5kZXgsICRldmVudC52YWx1ZSlcbiAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICA8aW1wZGMtc2VsZWN0LW9wdGlvblxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHZhbHVlIG9mIGNvbHVtbkRlZi52YWx1ZXMgfHwgW11cIlxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJ2YWx1ZS5sYWJlbFwiPjwvaW1wZGMtc2VsZWN0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPC9pbXBkYy1zZWxlY3Q+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiY2VsbFR5cGUuQ2VsbFJlbmRlclwiXG4gICAgICAgICAgICAgIGNsYXNzPVwie3sgZ2V0Q2VsbENvbG9yKGNvbHVtbkRlZiwgcm93KSB9fVwiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICBpbXBkY1RhYmxlSW5qZWN0Q29tcG9uZW50XG4gICAgICAgICAgICAgICAgW2NvbHVtbkRlZl09XCJjb2x1bW5EZWZcIlxuICAgICAgICAgICAgICAgIFtyb3dJdGVtXT1cInJvd1wiXG4gICAgICAgICAgICAgICAgW2N1c3RvbUNlbGxDb21wb25lbnRzXT1cImN1c3RvbUNlbGxDb21wb25lbnRzIHx8IHt9XCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZ2V0UmF3VmFsdWUoY29sSW5kZXgsIHJvdylcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cImNlbGxUeXBlLkljb25cIj5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBpbXBkYy1pY29uXG4gICAgICAgICAgICAgICAgW25hbWVdPVwiY29sdW1uRGVmLmljb25OYW1lXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInt7IGdldENlbGxDb2xvcihjb2x1bW5EZWYsIHJvdykgfX1cIj48L3NwYW4+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hEZWZhdWx0IGNsYXNzPVwie3sgZ2V0Q2VsbENvbG9yKGNvbHVtbkRlZiwgcm93KSB9fVwiPlxuICAgICAgICAgICAgICB7eyBnZXRWYWx1ZShjb2xJbmRleCwgcm93KSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L3Rib2R5PlxuICA8dGZvb3Q+XG4gICAgPHRyICpuZ0lmPVwicGFnaW5hdGlvbkNvbXBvbmVudFwiPlxuICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwidGFibGVTcGFuXCI+XG4gICAgICAgIDxuZy1jb250ZW50XG4gICAgICAgICAgc2VsZWN0PVwiaW1wZGMtcGFnaW5hdGlvbiwgZGl2W2ltcGRjLXBhZ2luYXRpb25dXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC90ZD5cbiAgICA8L3RyPlxuICA8L3Rmb290PlxuPC90YWJsZT5cbiJdfQ==
@@ -0,0 +1,3 @@
1
+ export * from './table-inject-component.directive';
2
+ export * from './table.directive';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ24tY29tcG9uZW50cy9zcmMvbGliL3RhYmxlL2RpcmVjdGl2ZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi90YWJsZS1pbmplY3QtY29tcG9uZW50LmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLmRpcmVjdGl2ZSc7XG4iXX0=
@@ -0,0 +1,46 @@
1
+ import { Directive, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class TableInjectComponentDirective {
4
+ constructor(_viewContainerRef, _componentFactoryResolver) {
5
+ this._viewContainerRef = _viewContainerRef;
6
+ this._componentFactoryResolver = _componentFactoryResolver;
7
+ this.columnDef = { title: '' };
8
+ this.value = '';
9
+ this.rowItem = { id: 0 };
10
+ this.customCellComponents = {};
11
+ }
12
+ ngOnInit() {
13
+ this._renderCustomCell();
14
+ }
15
+ _renderCustomCell() {
16
+ const { cellRendererComponent, cellRendererParams } = this.columnDef;
17
+ if (!cellRendererComponent) {
18
+ return;
19
+ }
20
+ const item = this.rowItem;
21
+ const customCellComponent = this.customCellComponents[cellRendererComponent];
22
+ this._viewContainerRef.clear();
23
+ const componentFactory = this._componentFactoryResolver.resolveComponentFactory(customCellComponent);
24
+ const componentRef = this._viewContainerRef.createComponent(componentFactory);
25
+ componentRef.instance.value = this.value;
26
+ componentRef.instance.rowItem = item;
27
+ componentRef.instance.params = cellRendererParams;
28
+ }
29
+ }
30
+ TableInjectComponentDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TableInjectComponentDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.ComponentFactoryResolver }], target: i0.ɵɵFactoryTarget.Directive });
31
+ TableInjectComponentDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: TableInjectComponentDirective, selector: "[impdcTableInjectComponent]", inputs: { columnDef: "columnDef", value: "value", rowItem: "rowItem", customCellComponents: "customCellComponents" }, ngImport: i0 });
32
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TableInjectComponentDirective, decorators: [{
33
+ type: Directive,
34
+ args: [{
35
+ selector: '[impdcTableInjectComponent]'
36
+ }]
37
+ }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.ComponentFactoryResolver }]; }, propDecorators: { columnDef: [{
38
+ type: Input
39
+ }], value: [{
40
+ type: Input
41
+ }], rowItem: [{
42
+ type: Input
43
+ }], customCellComponents: [{
44
+ type: Input
45
+ }] } });
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtaW5qZWN0LWNvbXBvbmVudC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ24tY29tcG9uZW50cy9zcmMvbGliL3RhYmxlL2RpcmVjdGl2ZXMvdGFibGUtaW5qZWN0LWNvbXBvbmVudC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxLQUFLLEVBR04sTUFBTSxlQUFlLENBQUM7O0FBY3ZCLE1BQU0sT0FBTyw2QkFBNkI7SUFNeEMsWUFDbUIsaUJBQW1DLEVBQ25DLHlCQUFtRDtRQURuRCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO1FBQ25DLDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBMEI7UUFQdEQsY0FBUyxHQUFvQixFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUMzQyxVQUFLLEdBQWdELEVBQUUsQ0FBQztRQUN4RCxZQUFPLEdBQWtCLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ25DLHlCQUFvQixHQUFrQyxFQUFFLENBQUM7SUFLdEUsQ0FBQztJQUVHLFFBQVE7UUFDYixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDckUsSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQzFCLE9BQU87U0FDUjtRQUVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDMUIsTUFBTSxtQkFBbUIsR0FDdkIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFFbkQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBRS9CLE1BQU0sZ0JBQWdCLEdBQ3BCLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyx1QkFBdUIsQ0FDcEQsbUJBQW1CLENBQ3BCLENBQUM7UUFDSixNQUFNLFlBQVksR0FDaEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBZ0IsZ0JBQWdCLENBQUMsQ0FBQztRQUUxRSxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3pDLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNyQyxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQztJQUNwRCxDQUFDOzsySEFyQ1UsNkJBQTZCOytHQUE3Qiw2QkFBNkI7NEZBQTdCLDZCQUE2QjtrQkFIekMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsNkJBQTZCO2lCQUN4Qzs4SUFFaUIsU0FBUztzQkFBeEIsS0FBSztnQkFDVSxLQUFLO3NCQUFwQixLQUFLO2dCQUNVLE9BQU87c0JBQXRCLEtBQUs7Z0JBQ1Usb0JBQW9CO3NCQUFuQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICBEaXJlY3RpdmUsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gIElDZWxsUmVuZGVyZXIsXG4gIElDdXN0b21DZWxsUmVuZGVyZXJDb21wb25lbnRzLFxuICBJVGFibGVDb2x1bW5EZWYsXG4gIElUYWJsZVJvd0l0ZW0sXG4gIElUYWJsZVJvd0l0ZW1WYWx1ZSxcbiAgSVRhYmxlUm93SXRlbVZhbHVlVHlwZXNcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9pbmRleCc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tpbXBkY1RhYmxlSW5qZWN0Q29tcG9uZW50XSdcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVJbmplY3RDb21wb25lbnREaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBwdWJsaWMgY29sdW1uRGVmOiBJVGFibGVDb2x1bW5EZWYgPSB7IHRpdGxlOiAnJyB9O1xuICBASW5wdXQoKSBwdWJsaWMgdmFsdWU6IElUYWJsZVJvd0l0ZW1WYWx1ZVR5cGVzPElUYWJsZVJvd0l0ZW1WYWx1ZT4gPSAnJztcbiAgQElucHV0KCkgcHVibGljIHJvd0l0ZW06IElUYWJsZVJvd0l0ZW0gPSB7IGlkOiAwIH07XG4gIEBJbnB1dCgpIHB1YmxpYyBjdXN0b21DZWxsQ29tcG9uZW50czogSUN1c3RvbUNlbGxSZW5kZXJlckNvbXBvbmVudHMgPSB7fTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IF92aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyXG4gICkge31cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fcmVuZGVyQ3VzdG9tQ2VsbCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVuZGVyQ3VzdG9tQ2VsbCgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGNlbGxSZW5kZXJlckNvbXBvbmVudCwgY2VsbFJlbmRlcmVyUGFyYW1zIH0gPSB0aGlzLmNvbHVtbkRlZjtcbiAgICBpZiAoIWNlbGxSZW5kZXJlckNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnJvd0l0ZW07XG4gICAgY29uc3QgY3VzdG9tQ2VsbENvbXBvbmVudCA9XG4gICAgICB0aGlzLmN1c3RvbUNlbGxDb21wb25lbnRzW2NlbGxSZW5kZXJlckNvbXBvbmVudF07XG5cbiAgICB0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG5cbiAgICBjb25zdCBjb21wb25lbnRGYWN0b3J5ID1cbiAgICAgIHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeTxJQ2VsbFJlbmRlcmVyPihcbiAgICAgICAgY3VzdG9tQ2VsbENvbXBvbmVudFxuICAgICAgKTtcbiAgICBjb25zdCBjb21wb25lbnRSZWYgPVxuICAgICAgdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQ8SUNlbGxSZW5kZXJlcj4oY29tcG9uZW50RmFjdG9yeSk7XG5cbiAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UudmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5yb3dJdGVtID0gaXRlbTtcbiAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UucGFyYW1zID0gY2VsbFJlbmRlcmVyUGFyYW1zO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,35 @@
1
+ import { Directive, HostBinding, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * The `TableDirective` (`<table impdcTable`) that adds Hex styling to a `table` element.
5
+ * To use, import `TableModule` or another module that imports and exports that module from `@impartner/design-components`.
6
+ */
7
+ export class TableDirective {
8
+ constructor() {
9
+ /**
10
+ * Stripes every other row in a slightly darker background color.
11
+ */
12
+ this.striped = false;
13
+ this.classTable = true;
14
+ }
15
+ get classTableStriped() {
16
+ return this.striped;
17
+ }
18
+ }
19
+ TableDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TableDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
20
+ TableDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: TableDirective, selector: "table[impdcTable]", inputs: { striped: "striped" }, host: { properties: { "class.table": "this.classTable", "class.table-striped": "this.classTableStriped" } }, ngImport: i0 });
21
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TableDirective, decorators: [{
22
+ type: Directive,
23
+ args: [{
24
+ selector: 'table[impdcTable]'
25
+ }]
26
+ }], propDecorators: { striped: [{
27
+ type: Input
28
+ }], classTable: [{
29
+ type: HostBinding,
30
+ args: ['class.table']
31
+ }], classTableStriped: [{
32
+ type: HostBinding,
33
+ args: ['class.table-striped']
34
+ }] } });
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduLWNvbXBvbmVudHMvc3JjL2xpYi90YWJsZS9kaXJlY3RpdmVzL3RhYmxlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRTlEOzs7R0FHRztBQUlILE1BQU0sT0FBTyxjQUFjO0lBSDNCO1FBSUU7O1dBRUc7UUFFSCxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRW9CLGVBQVUsR0FBRyxJQUFJLENBQUM7S0FLdkQ7SUFIQyxJQUFnRCxpQkFBaUI7UUFDL0QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7OzRHQVhVLGNBQWM7Z0dBQWQsY0FBYzs0RkFBZCxjQUFjO2tCQUgxQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxtQkFBbUI7aUJBQzlCOzhCQU1DLE9BQU87c0JBRE4sS0FBSztnQkFHOEIsVUFBVTtzQkFBN0MsV0FBVzt1QkFBQyxhQUFhO2dCQUVzQixpQkFBaUI7c0JBQWhFLFdBQVc7dUJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBIb3N0QmluZGluZywgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBUaGUgYFRhYmxlRGlyZWN0aXZlYCAoYDx0YWJsZSBpbXBkY1RhYmxlYCkgdGhhdCBhZGRzIEhleCBzdHlsaW5nIHRvIGEgYHRhYmxlYCBlbGVtZW50LlxuICogVG8gdXNlLCBpbXBvcnQgYFRhYmxlTW9kdWxlYCBvciBhbm90aGVyIG1vZHVsZSB0aGF0IGltcG9ydHMgYW5kIGV4cG9ydHMgdGhhdCBtb2R1bGUgZnJvbSBgQGltcGFydG5lci9kZXNpZ24tY29tcG9uZW50c2AuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ3RhYmxlW2ltcGRjVGFibGVdJ1xufSlcbmV4cG9ydCBjbGFzcyBUYWJsZURpcmVjdGl2ZSB7XG4gIC8qKlxuICAgKiBTdHJpcGVzIGV2ZXJ5IG90aGVyIHJvdyBpbiBhIHNsaWdodGx5IGRhcmtlciBiYWNrZ3JvdW5kIGNvbG9yLlxuICAgKi9cbiAgQElucHV0KClcbiAgc3RyaXBlZCA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MudGFibGUnKSBwcml2YXRlIGNsYXNzVGFibGUgPSB0cnVlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MudGFibGUtc3RyaXBlZCcpIHByaXZhdGUgZ2V0IGNsYXNzVGFibGVTdHJpcGVkKCkge1xuICAgIHJldHVybiB0aGlzLnN0cmlwZWQ7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export * from './table-column-type';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ24tY29tcG9uZW50cy9zcmMvbGliL3RhYmxlL2VudW1lcmF0aW9ucy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHFCQUFxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi90YWJsZS1jb2x1bW4tdHlwZSc7XG4iXX0=