@theseam/ui-common 0.4.28-beta.1 → 0.4.28-beta.3

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 (44) hide show
  1. package/esm2020/datatable/models/columns-data-filters/models.mjs +1 -1
  2. package/esm2020/datatable/models/columns-data-filters/utils.mjs +1 -1
  3. package/esm2020/google-maps/google-maps-places-autocomplete/google-maps-places-autocomplete.component.mjs +3 -3
  4. package/esm2020/graphql/datatable/map-search-date-columns-data-filter-state-to-gql.mjs +1 -1
  5. package/esm2020/graphql/datatable/map-search-numeric-columns-data-filter-state-to-gql.mjs +1 -1
  6. package/esm2020/graphql/datatable/map-search-text-columns-data-filter-state-to-gql.mjs +1 -1
  7. package/esm2020/table/public-api.mjs +4 -1
  8. package/esm2020/table/table/table.component.mjs +93 -5
  9. package/esm2020/table/table-cell-tpl.directive.mjs +17 -0
  10. package/esm2020/table/table-column-header-tpl.directive.mjs +17 -0
  11. package/esm2020/table/table-column.component.mjs +68 -0
  12. package/esm2020/table/table.module.mjs +21 -5
  13. package/esm2020/utils/geo-json/coerce-feature-collection.mjs +1 -1
  14. package/esm2020/utils/geo-json/is-feature-collection.validator.mjs +1 -1
  15. package/esm2020/utils/geo-json/is-only-geometry-types.mjs +1 -1
  16. package/esm2020/utils/geo-json/merge-polygons.mjs +1 -1
  17. package/esm2020/utils/geo-json/no-inner-rings.validator.mjs +1 -1
  18. package/esm2020/utils/geo-json/split-multi-polygons.mjs +1 -1
  19. package/esm2020/widget/widget-content-components/widget-table/widget-table.component.mjs +1 -1
  20. package/fesm2015/theseam-ui-common-datatable.mjs.map +1 -1
  21. package/fesm2015/theseam-ui-common-google-maps.mjs +2 -2
  22. package/fesm2015/theseam-ui-common-google-maps.mjs.map +1 -1
  23. package/fesm2015/theseam-ui-common-graphql.mjs.map +1 -1
  24. package/fesm2015/theseam-ui-common-table.mjs +204 -9
  25. package/fesm2015/theseam-ui-common-table.mjs.map +1 -1
  26. package/fesm2015/theseam-ui-common-utils.mjs.map +1 -1
  27. package/fesm2015/theseam-ui-common-widget.mjs +1 -1
  28. package/fesm2015/theseam-ui-common-widget.mjs.map +1 -1
  29. package/fesm2020/theseam-ui-common-datatable.mjs.map +1 -1
  30. package/fesm2020/theseam-ui-common-google-maps.mjs +2 -2
  31. package/fesm2020/theseam-ui-common-google-maps.mjs.map +1 -1
  32. package/fesm2020/theseam-ui-common-graphql.mjs.map +1 -1
  33. package/fesm2020/theseam-ui-common-table.mjs +202 -9
  34. package/fesm2020/theseam-ui-common-table.mjs.map +1 -1
  35. package/fesm2020/theseam-ui-common-utils.mjs.map +1 -1
  36. package/fesm2020/theseam-ui-common-widget.mjs +1 -1
  37. package/fesm2020/theseam-ui-common-widget.mjs.map +1 -1
  38. package/package.json +2 -2
  39. package/table/public-api.d.ts +3 -0
  40. package/table/table/table.component.d.ts +21 -3
  41. package/table/table-cell-tpl.directive.d.ts +7 -0
  42. package/table/table-column-header-tpl.directive.d.ts +7 -0
  43. package/table/table-column.component.d.ts +24 -0
  44. package/table/table.module.d.ts +4 -1
@@ -1,8 +1,9 @@
1
1
  import { __decorate } from 'tslib';
2
2
  import { coerceArray } from '@angular/cdk/coercion';
3
3
  import * as i0 from '@angular/core';
4
- import { EventEmitter, Component, ChangeDetectionStrategy, Input, Output, NgModule } from '@angular/core';
4
+ import { inject, TemplateRef, Directive, Component, Input, ContentChild, EventEmitter, ChangeDetectionStrategy, Output, ContentChildren, NgModule } from '@angular/core';
5
5
  import { InputBoolean } from '@theseam/ui-common/core';
6
+ import { Subject, merge, Subscription } from 'rxjs';
6
7
  import * as i1 from '@angular/platform-browser';
7
8
  import * as i2 from '@angular/common';
8
9
  import { CommonModule } from '@angular/common';
@@ -11,11 +12,139 @@ import { CdkTableModule } from '@angular/cdk/table';
11
12
  import * as i4 from '@theseam/ui-common/table-cell-type';
12
13
  import { TheSeamTableCellTypeModule } from '@theseam/ui-common/table-cell-type';
13
14
 
15
+ class TheSeamTableCellTplDirective {
16
+ constructor() {
17
+ this.template = inject((TemplateRef));
18
+ }
19
+ }
20
+ TheSeamTableCellTplDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: TheSeamTableCellTplDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
21
+ TheSeamTableCellTplDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.7", type: TheSeamTableCellTplDirective, isStandalone: true, selector: "[seamTableCellTpl]", ngImport: i0 });
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: TheSeamTableCellTplDirective, decorators: [{
23
+ type: Directive,
24
+ args: [{
25
+ selector: '[seamTableCellTpl]',
26
+ standalone: true,
27
+ }]
28
+ }] });
29
+
30
+ class TheSeamTableColumnHeaderTplDirective {
31
+ constructor() {
32
+ this.template = inject((TemplateRef));
33
+ }
34
+ }
35
+ TheSeamTableColumnHeaderTplDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: TheSeamTableColumnHeaderTplDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
36
+ TheSeamTableColumnHeaderTplDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.7", type: TheSeamTableColumnHeaderTplDirective, isStandalone: true, selector: "[seamTableColumnHeaderTpl]", ngImport: i0 });
37
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: TheSeamTableColumnHeaderTplDirective, decorators: [{
38
+ type: Directive,
39
+ args: [{
40
+ selector: '[seamTableColumnHeaderTpl]',
41
+ standalone: true,
42
+ }]
43
+ }] });
44
+
45
+ // TODO: The column component should implement `ITableColumn`, since
46
+ // providing some properties by input and some by template could be confusing.
47
+ class TheSeamTableColumnComponent {
48
+ constructor() {
49
+ this._isFirstChange = true;
50
+ this._columnChange = new Subject();
51
+ this.columnChange$ = this._columnChange.asObservable();
52
+ }
53
+ get cellTemplate() {
54
+ return this._cellTemplateInput || this._cellTemplateQuery;
55
+ }
56
+ get headerTemplate() {
57
+ return this._headerTemplateInput || this._headerTemplateQuery;
58
+ }
59
+ // constructor(
60
+ // private _columnChangesService: DatatableColumnChangesService
61
+ // ) {}
62
+ ngOnChanges(changes) {
63
+ if (this._isFirstChange) {
64
+ this._isFirstChange = false;
65
+ }
66
+ else {
67
+ // this._columnChangesService.onInputChange()
68
+ this._columnChange.next();
69
+ }
70
+ }
71
+ }
72
+ TheSeamTableColumnComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: TheSeamTableColumnComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
73
+ TheSeamTableColumnComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: TheSeamTableColumnComponent, isStandalone: true, selector: "seam-table-column", inputs: { name: "name", prop: "prop", flexGrow: "flexGrow", headerClass: "headerClass", cellClass: "cellClass", _cellTemplateInput: ["cellTemplate", "_cellTemplateInput"], _headerTemplateInput: ["headerTemplate", "_headerTemplateInput"] }, queries: [{ propertyName: "cellTplDirective", first: true, predicate: TheSeamTableCellTplDirective, descendants: true, static: true }, { propertyName: "_cellTemplateQuery", first: true, predicate: TheSeamTableCellTplDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "_headerTemplateQuery", first: true, predicate: TheSeamTableColumnHeaderTplDirective, descendants: true, read: TemplateRef, static: true }], usesOnChanges: true, ngImport: i0, template: ``, isInline: true });
74
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: TheSeamTableColumnComponent, decorators: [{
75
+ type: Component,
76
+ args: [{
77
+ selector: 'seam-table-column',
78
+ standalone: true,
79
+ template: ``,
80
+ }]
81
+ }], propDecorators: { name: [{
82
+ type: Input
83
+ }], prop: [{
84
+ type: Input
85
+ }], flexGrow: [{
86
+ type: Input
87
+ }], headerClass: [{
88
+ type: Input
89
+ }], cellClass: [{
90
+ type: Input
91
+ }], cellTplDirective: [{
92
+ type: ContentChild,
93
+ args: [TheSeamTableCellTplDirective, { static: true }]
94
+ }], _cellTemplateInput: [{
95
+ type: Input,
96
+ args: ['cellTemplate']
97
+ }], _cellTemplateQuery: [{
98
+ type: ContentChild,
99
+ args: [TheSeamTableCellTplDirective, { read: TemplateRef, static: true }]
100
+ }], _headerTemplateInput: [{
101
+ type: Input,
102
+ args: ['headerTemplate']
103
+ }], _headerTemplateQuery: [{
104
+ type: ContentChild,
105
+ args: [TheSeamTableColumnHeaderTplDirective, { read: TemplateRef, static: true }]
106
+ }] } });
107
+
108
+ function mergeColumnsAndTplColumns(columns, tplColumns) {
109
+ const newCols = [];
110
+ for (const col of columns) {
111
+ const newCol = {
112
+ ...((typeof col === 'string') ? {
113
+ prop: col,
114
+ name: col,
115
+ } : col),
116
+ };
117
+ const tplCol = tplColumns.find(c => c.prop === newCol.prop);
118
+ // newCol.cellTypeConfig = tplCol?.cellTypeConfig
119
+ if (tplCol) {
120
+ if (tplCol.name !== undefined && tplCol.name !== null) {
121
+ newCol.name = tplCol.name ?? undefined;
122
+ }
123
+ if (tplCol.cellTemplate !== undefined && tplCol.cellTemplate !== null) {
124
+ newCol.cellTemplate = tplCol.cellTemplate ?? undefined;
125
+ }
126
+ if (tplCol.headerTemplate !== undefined && tplCol.headerTemplate !== null) {
127
+ newCol.headerTemplate = tplCol.headerTemplate ?? undefined;
128
+ }
129
+ if (tplCol.cellClass !== undefined && tplCol.cellClass !== null) {
130
+ newCol.cellClass = tplCol.cellClass ?? undefined;
131
+ }
132
+ if (tplCol.headerClass !== undefined && tplCol.headerClass !== null) {
133
+ newCol.headerClass = tplCol.headerClass ?? undefined;
134
+ }
135
+ }
136
+ newCols.push(newCol);
137
+ }
138
+ return newCols;
139
+ }
14
140
  class TableComponent {
15
141
  get columns() { return this._columns; }
16
142
  set columns(value) {
17
143
  this._columns = value;
18
- this._setColumns(value || []);
144
+ // this._setColumns(value || [])
145
+ const cols = mergeColumnsAndTplColumns(value || [], this._columnComponents?.toArray() ?? []);
146
+ // this._setColumns(cols)
147
+ this._pendingColumns = cols;
19
148
  }
20
149
  get rows() { return this._rows; }
21
150
  set rows(value) {
@@ -30,14 +159,58 @@ class TableComponent {
30
159
  }
31
160
  }
32
161
  get displayedRows() { return this._displayedRows; }
162
+ set columnComponents(value) {
163
+ // this._columnsManager.setTemplateColumns(translateTemplateColumns(value?.toArray() ?? []))
164
+ this._columnComponents = value;
165
+ if (value?.toArray().length === 0)
166
+ return;
167
+ const cols = mergeColumnsAndTplColumns(this._columns || [], value?.toArray() ?? []);
168
+ // this._setColumns(cols)
169
+ this._pendingColumns = cols;
170
+ if (this._columnComponentChange)
171
+ this._columnComponentChange.unsubscribe();
172
+ const obsArr = value?.toArray().map(c => c.columnChange$);
173
+ if (obsArr && obsArr.length > 0) {
174
+ this._columnComponentChange = merge(obsArr).subscribe(() => {
175
+ const _cols = mergeColumnsAndTplColumns(this._columns || [], value?.toArray() ?? []);
176
+ // this._setColumns(_cols)
177
+ this._pendingColumns = _cols;
178
+ });
179
+ }
180
+ }
33
181
  constructor(_sanitizer) {
34
182
  this._sanitizer = _sanitizer;
183
+ this._ngUnsubscribe = new Subject();
35
184
  this._rows = [];
36
185
  this._displayedRows = [];
37
186
  this.hasHeader = true;
187
+ this.columnsChange = new EventEmitter();
38
188
  this.actionRefreshRequest = new EventEmitter();
189
+ this._columnComponentChange = Subscription.EMPTY;
190
+ }
191
+ ngOnInit() {
192
+ console.log('TableComponent.ngOnInit');
193
+ this._updateColumns();
194
+ }
195
+ ngAfterContentChecked() {
196
+ console.log('TableComponent.ngAfterContentChecked');
197
+ this._updateColumns();
39
198
  }
199
+ ngOnChanges(changes) {
200
+ if (changes.columns) {
201
+ this._updateColumns();
202
+ }
203
+ }
204
+ _updateColumns() {
205
+ const pending = this._pendingColumns;
206
+ this._pendingColumns = undefined;
207
+ if (pending) {
208
+ this._setColumns(pending);
209
+ }
210
+ }
211
+ // TODO: Improve column handling, like datatable, to avoid excessive updates.
40
212
  _setColumns(cols) {
213
+ const prev = this.displayedRecords;
41
214
  const newCols = [];
42
215
  for (const col of cols) {
43
216
  if (typeof col === 'string') {
@@ -66,8 +239,10 @@ class TableComponent {
66
239
  _col.cellTypeConfig.styles = this._sanitizer.bypassSecurityTrustStyle(_col.cellTypeConfig.styles);
67
240
  }
68
241
  }
242
+ console.log('newCols', newCols);
69
243
  this.displayedRecords = newCols;
70
244
  this.displayedColumns = newCols.map(c => c.prop);
245
+ this.columnsChange.emit({ previous: prev, current: newCols });
71
246
  }
72
247
  triggerActionRefreshRequest() {
73
248
  this.actionRefreshRequest.emit(undefined);
@@ -77,13 +252,13 @@ class TableComponent {
77
252
  }
78
253
  }
79
254
  TableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: TableComponent, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
80
- TableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: TableComponent, selector: "seam-table", inputs: { columns: "columns", rows: "rows", trackBy: "trackBy", size: "size", hasHeader: "hasHeader" }, outputs: { actionRefreshRequest: "actionRefreshRequest" }, ngImport: i0, template: "<table cdk-table [dataSource]=\"displayedRows\" class=\"table table-header-divider-indented mb-0\"\n [class.table-striped]=\"rows && rows.length > 0\"\n [class.table-sm]=\"size === 'sm'\"\n [class.table-no-header]=\"!hasHeader\">\n <ng-container *ngFor=\"let r of displayedRecords; first as isFirst; trackBy:_trackByRecords\">\n <ng-container [cdkColumnDef]=\"r.prop\">\n <th cdk-header-cell *cdkHeaderCellDef>\n <ng-container *ngIf=\"hasHeader\">\n {{ r.name }}\n </ng-container>\n </th>\n <td cdk-cell *cdkCellDef=\"let element; index as rowIndex\"\n [attr.colspan]=\"element?._emptyDisplay && isFirst ? 2 : undefined\"\n [class.border-top-0]=\"element?._emptyDisplay && isFirst\"\n [class.d-none]=\"element?._emptyDisplay && !isFirst\"\n [style]=\"$any(r)?.cellTypeConfig?.styles\">\n\n <span [style]=\"$any(r)?.cellTypeConfig?.styles\"></span>\n\n <ng-container *ngIf=\"element?._emptyDisplay && isFirst; else hasDataTpl\">\n No records found\n </ng-container>\n\n <ng-template #hasDataTpl>\n <seam-table-cell-type-selector *ngIf=\"$any(r)?.cellType; else noCellType\"\n [type]=\"$any(r)?.cellType\"\n [value]=\"element[r.prop]\"\n [rowIndex]=\"rowIndex\"\n [row]=\"element\"\n [colData]=\"r\">\n </seam-table-cell-type-selector>\n <ng-template #noCellType>\n <div class=\"td-text-truncate\" [title]=\"element[r.prop]\">\n {{ element[r.prop] }}\n </div>\n </ng-template>\n </ng-template>\n\n </td>\n </ng-container>\n </ng-container>\n\n <tr cdk-header-row *cdkHeaderRowDef=\"displayedColumns\"></tr>\n <tr cdk-row *cdkRowDef=\"let row; columns: displayedColumns;\"></tr>\n</table>\n", styles: [":host{display:block}:host .table-no-header ::ng-deep thead{display:none}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.CdkTable, selector: "cdk-table, table[cdk-table]", inputs: ["trackBy", "dataSource", "multiTemplateDataRows", "fixedLayout"], outputs: ["contentChanged"], exportAs: ["cdkTable"] }, { kind: "directive", type: i3.CdkRowDef, selector: "[cdkRowDef]", inputs: ["cdkRowDefColumns", "cdkRowDefWhen"] }, { kind: "directive", type: i3.CdkCellDef, selector: "[cdkCellDef]" }, { kind: "directive", type: i3.CdkHeaderCellDef, selector: "[cdkHeaderCellDef]" }, { kind: "directive", type: i3.CdkColumnDef, selector: "[cdkColumnDef]", inputs: ["sticky", "cdkColumnDef", "stickyEnd"] }, { kind: "directive", type: i3.CdkCell, selector: "cdk-cell, td[cdk-cell]" }, { kind: "component", type: i3.CdkRow, selector: "cdk-row, tr[cdk-row]" }, { kind: "directive", type: i3.CdkHeaderCell, selector: "cdk-header-cell, th[cdk-header-cell]" }, { kind: "component", type: i3.CdkHeaderRow, selector: "cdk-header-row, tr[cdk-header-row]" }, { kind: "directive", type: i3.CdkHeaderRowDef, selector: "[cdkHeaderRowDef]", inputs: ["cdkHeaderRowDef", "cdkHeaderRowDefSticky"] }, { kind: "component", type: i4.TableCellTypeSelectorComponent, selector: "seam-table-cell-type-selector", inputs: ["type", "value", "rowIndex", "row", "colData"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
255
+ TableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: TableComponent, selector: "seam-table", inputs: { columns: "columns", rows: "rows", trackBy: "trackBy", size: "size", hasHeader: "hasHeader" }, outputs: { columnsChange: "columnsChange", actionRefreshRequest: "actionRefreshRequest" }, queries: [{ propertyName: "columnComponents", predicate: TheSeamTableColumnComponent }], usesOnChanges: true, ngImport: i0, template: "<table cdk-table [dataSource]=\"displayedRows\" class=\"table table-header-divider-indented mb-0\"\n [class.table-striped]=\"rows && rows.length > 0\"\n [class.table-sm]=\"size === 'sm'\"\n [class.table-no-header]=\"!hasHeader\">\n <ng-container *ngFor=\"let r of displayedRecords; first as isFirst; trackBy:_trackByRecords\">\n <ng-container [cdkColumnDef]=\"r.prop\">\n <th cdk-header-cell *cdkHeaderCellDef [class]=\"r.headerClass\">\n <ng-container *ngIf=\"hasHeader\">\n <ng-container *ngIf=\"$any(r)?.headerTemplate; else noHeaderTpl\">\n <ng-template\n [ngTemplateOutlet]=\"$any(r)?.headerTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: r.name, prop: r.prop, column: r }\">\n </ng-template>\n </ng-container>\n <ng-template #noHeaderTpl>\n {{ r.name }}\n </ng-template>\n </ng-container>\n </th>\n <td cdk-cell *cdkCellDef=\"let element; index as rowIndex\"\n [attr.colspan]=\"element?._emptyDisplay && isFirst ? 2 : undefined\"\n [class]=\"element?._emptyDisplay ? undefined : r.cellClass\"\n [class.border-top-0]=\"element?._emptyDisplay && isFirst\"\n [class.d-none]=\"element?._emptyDisplay && !isFirst\"\n [style]=\"$any(r)?.cellTypeConfig?.styles\">\n\n <span [style]=\"$any(r)?.cellTypeConfig?.styles\"></span>\n\n <ng-container *ngIf=\"element?._emptyDisplay && isFirst; else hasDataTpl\">\n No records found\n </ng-container>\n\n <ng-template #hasDataTpl>\n <seam-table-cell-type-selector *ngIf=\"$any(r)?.cellType; else noCellType\"\n [type]=\"$any(r)?.cellType\"\n [value]=\"element[r.prop]\"\n [rowIndex]=\"rowIndex\"\n [row]=\"element\"\n [colData]=\"r\">\n </seam-table-cell-type-selector>\n <ng-template #noCellType>\n <ng-container *ngIf=\"$any(r)?.cellTemplate; else noCellTpl\">\n <ng-template\n [ngTemplateOutlet]=\"$any(r)?.cellTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: element[r.prop], row: element, rowIndex: rowIndex, column: r }\">\n </ng-template>\n </ng-container>\n </ng-template>\n <ng-template #noCellTpl>\n <div class=\"td-text-truncate\" [title]=\"element[r.prop]\">\n {{ element[r.prop] }}\n </div>\n </ng-template>\n </ng-template>\n\n </td>\n </ng-container>\n </ng-container>\n\n <tr cdk-header-row *cdkHeaderRowDef=\"displayedColumns\"></tr>\n <tr cdk-row *cdkRowDef=\"let row; columns: displayedColumns;\"></tr>\n</table>\n", styles: [":host{display:block}:host .table-no-header ::ng-deep thead{display:none}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.CdkTable, selector: "cdk-table, table[cdk-table]", inputs: ["trackBy", "dataSource", "multiTemplateDataRows", "fixedLayout"], outputs: ["contentChanged"], exportAs: ["cdkTable"] }, { kind: "directive", type: i3.CdkRowDef, selector: "[cdkRowDef]", inputs: ["cdkRowDefColumns", "cdkRowDefWhen"] }, { kind: "directive", type: i3.CdkCellDef, selector: "[cdkCellDef]" }, { kind: "directive", type: i3.CdkHeaderCellDef, selector: "[cdkHeaderCellDef]" }, { kind: "directive", type: i3.CdkColumnDef, selector: "[cdkColumnDef]", inputs: ["sticky", "cdkColumnDef", "stickyEnd"] }, { kind: "directive", type: i3.CdkCell, selector: "cdk-cell, td[cdk-cell]" }, { kind: "component", type: i3.CdkRow, selector: "cdk-row, tr[cdk-row]" }, { kind: "directive", type: i3.CdkHeaderCell, selector: "cdk-header-cell, th[cdk-header-cell]" }, { kind: "component", type: i3.CdkHeaderRow, selector: "cdk-header-row, tr[cdk-header-row]" }, { kind: "directive", type: i3.CdkHeaderRowDef, selector: "[cdkHeaderRowDef]", inputs: ["cdkHeaderRowDef", "cdkHeaderRowDefSticky"] }, { kind: "component", type: i4.TableCellTypeSelectorComponent, selector: "seam-table-cell-type-selector", inputs: ["type", "value", "rowIndex", "row", "colData"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
81
256
  __decorate([
82
257
  InputBoolean()
83
258
  ], TableComponent.prototype, "hasHeader", void 0);
84
259
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: TableComponent, decorators: [{
85
260
  type: Component,
86
- args: [{ selector: 'seam-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<table cdk-table [dataSource]=\"displayedRows\" class=\"table table-header-divider-indented mb-0\"\n [class.table-striped]=\"rows && rows.length > 0\"\n [class.table-sm]=\"size === 'sm'\"\n [class.table-no-header]=\"!hasHeader\">\n <ng-container *ngFor=\"let r of displayedRecords; first as isFirst; trackBy:_trackByRecords\">\n <ng-container [cdkColumnDef]=\"r.prop\">\n <th cdk-header-cell *cdkHeaderCellDef>\n <ng-container *ngIf=\"hasHeader\">\n {{ r.name }}\n </ng-container>\n </th>\n <td cdk-cell *cdkCellDef=\"let element; index as rowIndex\"\n [attr.colspan]=\"element?._emptyDisplay && isFirst ? 2 : undefined\"\n [class.border-top-0]=\"element?._emptyDisplay && isFirst\"\n [class.d-none]=\"element?._emptyDisplay && !isFirst\"\n [style]=\"$any(r)?.cellTypeConfig?.styles\">\n\n <span [style]=\"$any(r)?.cellTypeConfig?.styles\"></span>\n\n <ng-container *ngIf=\"element?._emptyDisplay && isFirst; else hasDataTpl\">\n No records found\n </ng-container>\n\n <ng-template #hasDataTpl>\n <seam-table-cell-type-selector *ngIf=\"$any(r)?.cellType; else noCellType\"\n [type]=\"$any(r)?.cellType\"\n [value]=\"element[r.prop]\"\n [rowIndex]=\"rowIndex\"\n [row]=\"element\"\n [colData]=\"r\">\n </seam-table-cell-type-selector>\n <ng-template #noCellType>\n <div class=\"td-text-truncate\" [title]=\"element[r.prop]\">\n {{ element[r.prop] }}\n </div>\n </ng-template>\n </ng-template>\n\n </td>\n </ng-container>\n </ng-container>\n\n <tr cdk-header-row *cdkHeaderRowDef=\"displayedColumns\"></tr>\n <tr cdk-row *cdkRowDef=\"let row; columns: displayedColumns;\"></tr>\n</table>\n", styles: [":host{display:block}:host .table-no-header ::ng-deep thead{display:none}\n"] }]
261
+ args: [{ selector: 'seam-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<table cdk-table [dataSource]=\"displayedRows\" class=\"table table-header-divider-indented mb-0\"\n [class.table-striped]=\"rows && rows.length > 0\"\n [class.table-sm]=\"size === 'sm'\"\n [class.table-no-header]=\"!hasHeader\">\n <ng-container *ngFor=\"let r of displayedRecords; first as isFirst; trackBy:_trackByRecords\">\n <ng-container [cdkColumnDef]=\"r.prop\">\n <th cdk-header-cell *cdkHeaderCellDef [class]=\"r.headerClass\">\n <ng-container *ngIf=\"hasHeader\">\n <ng-container *ngIf=\"$any(r)?.headerTemplate; else noHeaderTpl\">\n <ng-template\n [ngTemplateOutlet]=\"$any(r)?.headerTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: r.name, prop: r.prop, column: r }\">\n </ng-template>\n </ng-container>\n <ng-template #noHeaderTpl>\n {{ r.name }}\n </ng-template>\n </ng-container>\n </th>\n <td cdk-cell *cdkCellDef=\"let element; index as rowIndex\"\n [attr.colspan]=\"element?._emptyDisplay && isFirst ? 2 : undefined\"\n [class]=\"element?._emptyDisplay ? undefined : r.cellClass\"\n [class.border-top-0]=\"element?._emptyDisplay && isFirst\"\n [class.d-none]=\"element?._emptyDisplay && !isFirst\"\n [style]=\"$any(r)?.cellTypeConfig?.styles\">\n\n <span [style]=\"$any(r)?.cellTypeConfig?.styles\"></span>\n\n <ng-container *ngIf=\"element?._emptyDisplay && isFirst; else hasDataTpl\">\n No records found\n </ng-container>\n\n <ng-template #hasDataTpl>\n <seam-table-cell-type-selector *ngIf=\"$any(r)?.cellType; else noCellType\"\n [type]=\"$any(r)?.cellType\"\n [value]=\"element[r.prop]\"\n [rowIndex]=\"rowIndex\"\n [row]=\"element\"\n [colData]=\"r\">\n </seam-table-cell-type-selector>\n <ng-template #noCellType>\n <ng-container *ngIf=\"$any(r)?.cellTemplate; else noCellTpl\">\n <ng-template\n [ngTemplateOutlet]=\"$any(r)?.cellTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: element[r.prop], row: element, rowIndex: rowIndex, column: r }\">\n </ng-template>\n </ng-container>\n </ng-template>\n <ng-template #noCellTpl>\n <div class=\"td-text-truncate\" [title]=\"element[r.prop]\">\n {{ element[r.prop] }}\n </div>\n </ng-template>\n </ng-template>\n\n </td>\n </ng-container>\n </ng-container>\n\n <tr cdk-header-row *cdkHeaderRowDef=\"displayedColumns\"></tr>\n <tr cdk-row *cdkRowDef=\"let row; columns: displayedColumns;\"></tr>\n</table>\n", styles: [":host{display:block}:host .table-no-header ::ng-deep thead{display:none}\n"] }]
87
262
  }], ctorParameters: function () { return [{ type: i1.DomSanitizer }]; }, propDecorators: { columns: [{
88
263
  type: Input
89
264
  }], rows: [{
@@ -94,8 +269,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
94
269
  type: Input
95
270
  }], hasHeader: [{
96
271
  type: Input
272
+ }], columnsChange: [{
273
+ type: Output
97
274
  }], actionRefreshRequest: [{
98
275
  type: Output
276
+ }], columnComponents: [{
277
+ type: ContentChildren,
278
+ args: [TheSeamTableColumnComponent]
99
279
  }] } });
100
280
 
101
281
  class TheSeamTableModule {
@@ -103,10 +283,17 @@ class TheSeamTableModule {
103
283
  TheSeamTableModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: TheSeamTableModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
104
284
  TheSeamTableModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.7", ngImport: i0, type: TheSeamTableModule, declarations: [TableComponent], imports: [CommonModule,
105
285
  CdkTableModule,
106
- TheSeamTableCellTypeModule], exports: [TableComponent] });
286
+ TheSeamTableCellTypeModule,
287
+ TheSeamTableColumnComponent,
288
+ TheSeamTableCellTplDirective,
289
+ TheSeamTableColumnHeaderTplDirective], exports: [TableComponent,
290
+ TheSeamTableColumnComponent,
291
+ TheSeamTableCellTplDirective,
292
+ TheSeamTableColumnHeaderTplDirective] });
107
293
  TheSeamTableModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: TheSeamTableModule, imports: [CommonModule,
108
294
  CdkTableModule,
109
- TheSeamTableCellTypeModule] });
295
+ TheSeamTableCellTypeModule,
296
+ TheSeamTableColumnComponent] });
110
297
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: TheSeamTableModule, decorators: [{
111
298
  type: NgModule,
112
299
  args: [{
@@ -116,10 +303,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
116
303
  imports: [
117
304
  CommonModule,
118
305
  CdkTableModule,
119
- TheSeamTableCellTypeModule
306
+ TheSeamTableCellTypeModule,
307
+ TheSeamTableColumnComponent,
308
+ TheSeamTableCellTplDirective,
309
+ TheSeamTableColumnHeaderTplDirective,
120
310
  ],
121
311
  exports: [
122
- TableComponent
312
+ TableComponent,
313
+ TheSeamTableColumnComponent,
314
+ TheSeamTableCellTplDirective,
315
+ TheSeamTableColumnHeaderTplDirective,
123
316
  ]
124
317
  }]
125
318
  }] });
@@ -128,5 +321,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
128
321
  * Generated bundle index. Do not edit.
129
322
  */
130
323
 
131
- export { TableComponent, TheSeamTableModule };
324
+ export { TableComponent, TheSeamTableCellTplDirective, TheSeamTableColumnComponent, TheSeamTableColumnHeaderTplDirective, TheSeamTableModule };
132
325
  //# sourceMappingURL=theseam-ui-common-table.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"theseam-ui-common-table.mjs","sources":["../../../projects/ui-common/table/table/table.component.ts","../../../projects/ui-common/table/table/table.component.html","../../../projects/ui-common/table/table.module.ts","../../../projects/ui-common/table/theseam-ui-common-table.ts"],"sourcesContent":["import { BooleanInput, coerceArray } from '@angular/cdk/coercion'\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core'\nimport { DomSanitizer } from '@angular/platform-browser'\n\nimport { InputBoolean } from '@theseam/ui-common/core'\n\n/**\n * An optional function passed into the `NgForOf` directive that defines how to track\n * changes for items in an iterable.\n * The function takes the iteration index and item ID.\n * When supplied, Angular tracks changes by the return value of the function.\n *\n * NOTE: Can't import the type from'@angular/core', because of a bug in angular-cli's\n * build that can't find exported types that only exist at compile time if there\n * are exports that exist at runtime in the same file.\n */\nexport type TrackByFunction<T> = (index: number, item: T) => any\n\nexport interface ITableColumn {\n prop: string\n name?: string\n}\n\n@Component({\n selector: 'seam-table',\n templateUrl: './table.component.html',\n styleUrls: ['./table.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TableComponent<T = any> {\n static ngAcceptInputType_hasHeader: BooleanInput\n\n @Input()\n get columns() { return this._columns }\n set columns(value: (string | ITableColumn)[] | undefined | null) {\n this._columns = value\n this._setColumns(value || [])\n }\n private _columns: (string | ITableColumn)[] | undefined | null\n\n @Input()\n get rows(): T[] | undefined | null { return this._rows }\n set rows(value: T[] | undefined | null) {\n this._rows = value ? coerceArray(value) : []\n\n if (this._rows.length < 1) {\n this._displayedRows = [\n { _emptyDisplay: true } as any\n ]\n } else {\n this._displayedRows = this._rows\n }\n }\n private _rows: T[] | undefined | null = []\n\n get displayedRows() { return this._displayedRows }\n private _displayedRows: T[] & { _colSpan?: number } = []\n\n @Input() trackBy: TrackByFunction<T> | undefined | null\n\n @Input() size: 'sm' | 'md' | undefined | null\n\n @Input() @InputBoolean() hasHeader = true\n\n public displayedRecords?: ITableColumn[]\n public displayedColumns?: string[]\n\n @Output() readonly actionRefreshRequest = new EventEmitter<void>()\n\n constructor(\n private readonly _sanitizer: DomSanitizer\n ) { }\n\n private _setColumns(cols: (string | ITableColumn)[]) {\n const newCols: ITableColumn[] = []\n\n for (const col of cols) {\n if (typeof col === 'string') {\n const newCol: ITableColumn = {\n prop: col,\n name: col\n }\n newCols.push(newCol)\n } else {\n let name = col.name\n if (name === undefined || name === null) {\n name = col.prop\n }\n const newCol: ITableColumn = {\n ...col,\n prop: col.prop,\n name\n }\n newCols.push(newCol)\n }\n }\n\n for (const col of newCols) {\n const _col = col as any\n if (_col && _col.cellTypeConfig && _col.cellTypeConfig.styles) {\n _col.cellTypeConfig.styles = this._sanitizer.bypassSecurityTrustStyle(_col.cellTypeConfig.styles)\n }\n }\n\n this.displayedRecords = newCols\n this.displayedColumns = newCols.map(c => c.prop)\n }\n\n public triggerActionRefreshRequest() {\n this.actionRefreshRequest.emit(undefined)\n }\n\n _trackByRecords(r: any) {\n return r.prop + r.name\n }\n\n}\n","<table cdk-table [dataSource]=\"displayedRows\" class=\"table table-header-divider-indented mb-0\"\n [class.table-striped]=\"rows && rows.length > 0\"\n [class.table-sm]=\"size === 'sm'\"\n [class.table-no-header]=\"!hasHeader\">\n <ng-container *ngFor=\"let r of displayedRecords; first as isFirst; trackBy:_trackByRecords\">\n <ng-container [cdkColumnDef]=\"r.prop\">\n <th cdk-header-cell *cdkHeaderCellDef>\n <ng-container *ngIf=\"hasHeader\">\n {{ r.name }}\n </ng-container>\n </th>\n <td cdk-cell *cdkCellDef=\"let element; index as rowIndex\"\n [attr.colspan]=\"element?._emptyDisplay && isFirst ? 2 : undefined\"\n [class.border-top-0]=\"element?._emptyDisplay && isFirst\"\n [class.d-none]=\"element?._emptyDisplay && !isFirst\"\n [style]=\"$any(r)?.cellTypeConfig?.styles\">\n\n <span [style]=\"$any(r)?.cellTypeConfig?.styles\"></span>\n\n <ng-container *ngIf=\"element?._emptyDisplay && isFirst; else hasDataTpl\">\n No records found\n </ng-container>\n\n <ng-template #hasDataTpl>\n <seam-table-cell-type-selector *ngIf=\"$any(r)?.cellType; else noCellType\"\n [type]=\"$any(r)?.cellType\"\n [value]=\"element[r.prop]\"\n [rowIndex]=\"rowIndex\"\n [row]=\"element\"\n [colData]=\"r\">\n </seam-table-cell-type-selector>\n <ng-template #noCellType>\n <div class=\"td-text-truncate\" [title]=\"element[r.prop]\">\n {{ element[r.prop] }}\n </div>\n </ng-template>\n </ng-template>\n\n </td>\n </ng-container>\n </ng-container>\n\n <tr cdk-header-row *cdkHeaderRowDef=\"displayedColumns\"></tr>\n <tr cdk-row *cdkRowDef=\"let row; columns: displayedColumns;\"></tr>\n</table>\n","import { CdkTableModule } from '@angular/cdk/table'\nimport { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\n\nimport { TheSeamTableCellTypeModule } from '@theseam/ui-common/table-cell-type'\n\nimport { TableComponent } from './table/table.component'\n\n@NgModule({\n declarations: [\n TableComponent\n ],\n imports: [\n CommonModule,\n CdkTableModule,\n TheSeamTableCellTypeModule\n ],\n exports: [\n TableComponent\n ]\n})\nexport class TheSeamTableModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;;MA6Ba,cAAc,CAAA;IAGzB,IACI,OAAO,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAA,EAAE;IACtC,IAAI,OAAO,CAAC,KAAmD,EAAA;AAC7D,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAA;AACrB,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;KAC9B;IAGD,IACI,IAAI,KAA6B,OAAO,IAAI,CAAC,KAAK,CAAA,EAAE;IACxD,IAAI,IAAI,CAAC,KAA6B,EAAA;AACpC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,CAAA;AAE5C,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACzB,IAAI,CAAC,cAAc,GAAG;gBACpB,EAAE,aAAa,EAAE,IAAI,EAAS;aAC/B,CAAA;AACF,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAA;AACjC,SAAA;KACF;IAGD,IAAI,aAAa,KAAK,OAAO,IAAI,CAAC,cAAc,CAAA,EAAE;AAclD,IAAA,WAAA,CACmB,UAAwB,EAAA;QAAxB,IAAU,CAAA,UAAA,GAAV,UAAU,CAAc;QAjBnC,IAAK,CAAA,KAAA,GAA2B,EAAE,CAAA;QAGlC,IAAc,CAAA,cAAA,GAAgC,EAAE,CAAA;QAM/B,IAAS,CAAA,SAAA,GAAG,IAAI,CAAA;AAKtB,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,YAAY,EAAQ,CAAA;KAI7D;AAEG,IAAA,WAAW,CAAC,IAA+B,EAAA;QACjD,MAAM,OAAO,GAAmB,EAAE,CAAA;AAElC,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AACtB,YAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC3B,gBAAA,MAAM,MAAM,GAAiB;AAC3B,oBAAA,IAAI,EAAE,GAAG;AACT,oBAAA,IAAI,EAAE,GAAG;iBACV,CAAA;AACD,gBAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AACrB,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAA;AACnB,gBAAA,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,EAAE;AACvC,oBAAA,IAAI,GAAG,GAAG,CAAC,IAAI,CAAA;AAChB,iBAAA;AACD,gBAAA,MAAM,MAAM,GAAiB;AAC3B,oBAAA,GAAG,GAAG;oBACN,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,IAAI;iBACL,CAAA;AACD,gBAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AACrB,aAAA;AACF,SAAA;AAED,QAAA,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;YACzB,MAAM,IAAI,GAAG,GAAU,CAAA;YACvB,IAAI,IAAI,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;AAC7D,gBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,wBAAwB,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;AAClG,aAAA;AACF,SAAA;AAED,QAAA,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAA;AAC/B,QAAA,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAA;KACjD;IAEM,2BAA2B,GAAA;AAChC,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;KAC1C;AAED,IAAA,eAAe,CAAC,CAAM,EAAA;AACpB,QAAA,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAA;KACvB;;2GArFU,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,cAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,qNC7B3B,mzDA6CA,EAAA,MAAA,EAAA,CAAA,4EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,cAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,8BAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,KAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;ADiB2B,UAAA,CAAA;AAAf,IAAA,YAAY,EAAE;AAAiB,CAAA,EAAA,cAAA,CAAA,SAAA,EAAA,WAAA,EAAA,KAAA,CAAA,CAAA,CAAA;2FAjC9B,cAAc,EAAA,UAAA,EAAA,CAAA;kBAN1B,SAAS;+BACE,YAAY,EAAA,eAAA,EAGL,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,mzDAAA,EAAA,MAAA,EAAA,CAAA,4EAAA,CAAA,EAAA,CAAA;mGAM3C,OAAO,EAAA,CAAA;sBADV,KAAK;gBASF,IAAI,EAAA,CAAA;sBADP,KAAK;gBAkBG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAEmB,SAAS,EAAA,CAAA;sBAAjC,KAAK;gBAKa,oBAAoB,EAAA,CAAA;sBAAtC,MAAM;;;ME9CI,kBAAkB,CAAA;;+GAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;gHAAlB,kBAAkB,EAAA,YAAA,EAAA,CAX3B,cAAc,CAAA,EAAA,OAAA,EAAA,CAGd,YAAY;QACZ,cAAc;AACd,QAAA,0BAA0B,aAG1B,cAAc,CAAA,EAAA,CAAA,CAAA;AAGL,kBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,YAR3B,YAAY;QACZ,cAAc;QACd,0BAA0B,CAAA,EAAA,CAAA,CAAA;2FAMjB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAb9B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,cAAc;AACf,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,cAAc;wBACd,0BAA0B;AAC3B,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,cAAc;AACf,qBAAA;AACF,iBAAA,CAAA;;;ACpBD;;AAEG;;;;"}
1
+ {"version":3,"file":"theseam-ui-common-table.mjs","sources":["../../../projects/ui-common/table/table-cell-tpl.directive.ts","../../../projects/ui-common/table/table-column-header-tpl.directive.ts","../../../projects/ui-common/table/table-column.component.ts","../../../projects/ui-common/table/table/table.component.ts","../../../projects/ui-common/table/table/table.component.html","../../../projects/ui-common/table/table.module.ts","../../../projects/ui-common/table/theseam-ui-common-table.ts"],"sourcesContent":["import { Directive, inject, TemplateRef } from '@angular/core'\n\n@Directive({\n selector: '[seamTableCellTpl]',\n standalone: true,\n})\nexport class TheSeamTableCellTplDirective {\n template = inject(TemplateRef<any>)\n}\n","import { Directive, inject, TemplateRef } from '@angular/core'\n\n@Directive({\n selector: '[seamTableColumnHeaderTpl]',\n standalone: true,\n})\nexport class TheSeamTableColumnHeaderTplDirective {\n template = inject(TemplateRef<any>)\n}\n","import { Component, ContentChild, Input, OnChanges, SimpleChanges, TemplateRef } from '@angular/core'\nimport { Subject } from 'rxjs'\n\nimport { ColumnChangesService, TableColumnProp } from '@marklb/ngx-datatable'\n\nimport { TheSeamTableCellTplDirective } from './table-cell-tpl.directive'\nimport { TheSeamTableColumnHeaderTplDirective } from './table-column-header-tpl.directive'\n\n// TODO: The column component should implement `ITableColumn`, since\n// providing some properties by input and some by template could be confusing.\n\n@Component({\n selector: 'seam-table-column',\n standalone: true,\n template: ``,\n})\nexport class TheSeamTableColumnComponent implements OnChanges {\n\n @Input() name?: string | null\n @Input() prop?: TableColumnProp | null\n\n @Input() flexGrow?: number | null\n // @Input() minWidth?: number | null\n // @Input() maxWidth?: number | null\n // @Input() width?: number | null\n\n // @Input() headerClass?: string | ((data: any) => string|any) | null\n @Input() headerClass?: string | null\n // @Input() cellClass?: string | ((data: any) => string|any) | null\n @Input() cellClass?: string | null\n\n private _isFirstChange = true\n\n @ContentChild(TheSeamTableCellTplDirective, { static: true }) cellTplDirective?: TheSeamTableCellTplDirective\n\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('cellTemplate')\n _cellTemplateInput?: TemplateRef<any> | null\n\n @ContentChild(TheSeamTableCellTplDirective, { read: TemplateRef, static: true })\n _cellTemplateQuery?: TemplateRef<any>\n\n get cellTemplate(): TemplateRef<any> | undefined | null {\n return this._cellTemplateInput || this._cellTemplateQuery\n }\n\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('headerTemplate')\n _headerTemplateInput?: TemplateRef<any> | null\n\n @ContentChild(TheSeamTableColumnHeaderTplDirective, { read: TemplateRef, static: true })\n _headerTemplateQuery?: TemplateRef<any>\n\n get headerTemplate(): TemplateRef<any> | undefined | null {\n return this._headerTemplateInput || this._headerTemplateQuery\n }\n\n private readonly _columnChange = new Subject<void>()\n public columnChange$ = this._columnChange.asObservable()\n\n // constructor(\n // private _columnChangesService: DatatableColumnChangesService\n // ) {}\n\n ngOnChanges(changes: SimpleChanges) {\n if (this._isFirstChange) {\n this._isFirstChange = false\n } else {\n // this._columnChangesService.onInputChange()\n this._columnChange.next()\n }\n }\n\n}\n","import { BooleanInput, coerceArray } from '@angular/cdk/coercion'\nimport { AfterContentChecked, ChangeDetectionStrategy, Component, ContentChildren, EventEmitter, Input, OnChanges, OnInit, Output, QueryList, SimpleChanges, TemplateRef } from '@angular/core'\nimport { DomSanitizer } from '@angular/platform-browser'\n\nimport { InputBoolean } from '@theseam/ui-common/core'\nimport { merge, Subject, Subscription } from 'rxjs'\nimport { TheSeamTableColumnComponent } from '../table-column.component'\n\n/**\n * An optional function passed into the `NgForOf` directive that defines how to track\n * changes for items in an iterable.\n * The function takes the iteration index and item ID.\n * When supplied, Angular tracks changes by the return value of the function.\n *\n * NOTE: Can't import the type from'@angular/core', because of a bug in angular-cli's\n * build that can't find exported types that only exist at compile time if there\n * are exports that exist at runtime in the same file.\n */\nexport type TrackByFunction<T> = (index: number, item: T) => any\n\nexport interface ITableColumn {\n prop: string\n name?: string\n cellTemplate?: TemplateRef<any>\n headerTemplate?: TemplateRef<any>\n cellClass?: string // | ((data: any) => string | any)\n headerClass?: string // | ((data: any) => string | any)\n}\n\nfunction mergeColumnsAndTplColumns(columns: (string | ITableColumn)[], tplColumns: TheSeamTableColumnComponent[]): ITableColumn[] {\n const newCols: ITableColumn[] = []\n\n for (const col of columns) {\n const newCol: ITableColumn = {\n ...((typeof col === 'string') ? {\n prop: col,\n name: col,\n } : col),\n }\n const tplCol = tplColumns.find(c => c.prop === newCol.prop)\n // newCol.cellTypeConfig = tplCol?.cellTypeConfig\n if (tplCol) {\n if (tplCol.name !== undefined && tplCol.name !== null) {\n newCol.name = tplCol.name ?? undefined\n }\n if (tplCol.cellTemplate !== undefined && tplCol.cellTemplate !== null) {\n newCol.cellTemplate = tplCol.cellTemplate ?? undefined\n }\n if (tplCol.headerTemplate !== undefined && tplCol.headerTemplate !== null) {\n newCol.headerTemplate = tplCol.headerTemplate ?? undefined\n }\n if (tplCol.cellClass !== undefined && tplCol.cellClass !== null) {\n newCol.cellClass = tplCol.cellClass ?? undefined\n }\n if (tplCol.headerClass !== undefined && tplCol.headerClass !== null) {\n newCol.headerClass = tplCol.headerClass ?? undefined\n }\n }\n\n newCols.push(newCol)\n }\n\n return newCols\n}\n\n@Component({\n selector: 'seam-table',\n templateUrl: './table.component.html',\n styleUrls: ['./table.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TableComponent<T = any> implements OnInit, OnChanges, AfterContentChecked {\n static ngAcceptInputType_hasHeader: BooleanInput\n\n private readonly _ngUnsubscribe = new Subject<void>()\n\n @Input()\n get columns() { return this._columns }\n set columns(value: (string | ITableColumn)[] | undefined | null) {\n this._columns = value\n // this._setColumns(value || [])\n const cols = mergeColumnsAndTplColumns(value || [], this._columnComponents?.toArray() ?? [])\n // this._setColumns(cols)\n this._pendingColumns = cols\n }\n private _columns: (string | ITableColumn)[] | undefined | null\n\n @Input()\n get rows(): T[] | undefined | null { return this._rows }\n set rows(value: T[] | undefined | null) {\n this._rows = value ? coerceArray(value) : []\n\n if (this._rows.length < 1) {\n this._displayedRows = [\n { _emptyDisplay: true } as any\n ]\n } else {\n this._displayedRows = this._rows\n }\n }\n private _rows: T[] | undefined | null = []\n\n get displayedRows() { return this._displayedRows }\n private _displayedRows: T[] & { _colSpan?: number } = []\n\n @Input() trackBy: TrackByFunction<T> | undefined | null\n\n @Input() size: 'sm' | 'md' | undefined | null\n\n @Input() @InputBoolean() hasHeader = true\n\n private _pendingColumns?: ITableColumn[]\n\n public displayedRecords?: ITableColumn[]\n public displayedColumns?: string[]\n\n @Output() readonly columnsChange = new EventEmitter<{ previous: ITableColumn[] | undefined, current: ITableColumn[] }>()\n @Output() readonly actionRefreshRequest = new EventEmitter<void>()\n\n @ContentChildren(TheSeamTableColumnComponent)\n set columnComponents(value: QueryList<TheSeamTableColumnComponent> | undefined) {\n // this._columnsManager.setTemplateColumns(translateTemplateColumns(value?.toArray() ?? []))\n this._columnComponents = value\n if (value?.toArray().length === 0) return\n const cols = mergeColumnsAndTplColumns(this._columns || [], value?.toArray() ?? [])\n // this._setColumns(cols)\n this._pendingColumns = cols\n\n if (this._columnComponentChange) this._columnComponentChange.unsubscribe()\n const obsArr = value?.toArray().map(c => c.columnChange$)\n if (obsArr && obsArr.length > 0) {\n this._columnComponentChange = merge(obsArr).subscribe(() => {\n const _cols = mergeColumnsAndTplColumns(this._columns || [], value?.toArray() ?? [])\n // this._setColumns(_cols)\n this._pendingColumns = _cols\n })\n }\n }\n private _columnComponents: QueryList<TheSeamTableColumnComponent> | undefined\n private _columnComponentChange = Subscription.EMPTY\n\n constructor(\n private readonly _sanitizer: DomSanitizer\n ) { }\n\n ngOnInit() {\n console.log('TableComponent.ngOnInit')\n this._updateColumns()\n }\n\n ngAfterContentChecked() {\n console.log('TableComponent.ngAfterContentChecked')\n this._updateColumns()\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.columns) {\n this._updateColumns()\n }\n }\n\n private _updateColumns() {\n const pending = this._pendingColumns\n this._pendingColumns = undefined\n if (pending) {\n this._setColumns(pending)\n }\n }\n\n // TODO: Improve column handling, like datatable, to avoid excessive updates.\n private _setColumns(cols: (string | ITableColumn)[]) {\n const prev = this.displayedRecords\n const newCols: ITableColumn[] = []\n\n for (const col of cols) {\n if (typeof col === 'string') {\n const newCol: ITableColumn = {\n prop: col,\n name: col\n }\n newCols.push(newCol)\n } else {\n let name = col.name\n if (name === undefined || name === null) {\n name = col.prop\n }\n const newCol: ITableColumn = {\n ...col,\n prop: col.prop,\n name\n }\n newCols.push(newCol)\n }\n }\n\n for (const col of newCols) {\n const _col = col as any\n if (_col && _col.cellTypeConfig && _col.cellTypeConfig.styles) {\n _col.cellTypeConfig.styles = this._sanitizer.bypassSecurityTrustStyle(_col.cellTypeConfig.styles)\n }\n }\n\n console.log('newCols', newCols)\n this.displayedRecords = newCols\n this.displayedColumns = newCols.map(c => c.prop)\n this.columnsChange.emit({ previous: prev, current: newCols })\n }\n\n public triggerActionRefreshRequest() {\n this.actionRefreshRequest.emit(undefined)\n }\n\n _trackByRecords(r: any) {\n return r.prop + r.name\n }\n\n}\n","<table cdk-table [dataSource]=\"displayedRows\" class=\"table table-header-divider-indented mb-0\"\n [class.table-striped]=\"rows && rows.length > 0\"\n [class.table-sm]=\"size === 'sm'\"\n [class.table-no-header]=\"!hasHeader\">\n <ng-container *ngFor=\"let r of displayedRecords; first as isFirst; trackBy:_trackByRecords\">\n <ng-container [cdkColumnDef]=\"r.prop\">\n <th cdk-header-cell *cdkHeaderCellDef [class]=\"r.headerClass\">\n <ng-container *ngIf=\"hasHeader\">\n <ng-container *ngIf=\"$any(r)?.headerTemplate; else noHeaderTpl\">\n <ng-template\n [ngTemplateOutlet]=\"$any(r)?.headerTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: r.name, prop: r.prop, column: r }\">\n </ng-template>\n </ng-container>\n <ng-template #noHeaderTpl>\n {{ r.name }}\n </ng-template>\n </ng-container>\n </th>\n <td cdk-cell *cdkCellDef=\"let element; index as rowIndex\"\n [attr.colspan]=\"element?._emptyDisplay && isFirst ? 2 : undefined\"\n [class]=\"element?._emptyDisplay ? undefined : r.cellClass\"\n [class.border-top-0]=\"element?._emptyDisplay && isFirst\"\n [class.d-none]=\"element?._emptyDisplay && !isFirst\"\n [style]=\"$any(r)?.cellTypeConfig?.styles\">\n\n <span [style]=\"$any(r)?.cellTypeConfig?.styles\"></span>\n\n <ng-container *ngIf=\"element?._emptyDisplay && isFirst; else hasDataTpl\">\n No records found\n </ng-container>\n\n <ng-template #hasDataTpl>\n <seam-table-cell-type-selector *ngIf=\"$any(r)?.cellType; else noCellType\"\n [type]=\"$any(r)?.cellType\"\n [value]=\"element[r.prop]\"\n [rowIndex]=\"rowIndex\"\n [row]=\"element\"\n [colData]=\"r\">\n </seam-table-cell-type-selector>\n <ng-template #noCellType>\n <ng-container *ngIf=\"$any(r)?.cellTemplate; else noCellTpl\">\n <ng-template\n [ngTemplateOutlet]=\"$any(r)?.cellTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: element[r.prop], row: element, rowIndex: rowIndex, column: r }\">\n </ng-template>\n </ng-container>\n </ng-template>\n <ng-template #noCellTpl>\n <div class=\"td-text-truncate\" [title]=\"element[r.prop]\">\n {{ element[r.prop] }}\n </div>\n </ng-template>\n </ng-template>\n\n </td>\n </ng-container>\n </ng-container>\n\n <tr cdk-header-row *cdkHeaderRowDef=\"displayedColumns\"></tr>\n <tr cdk-row *cdkRowDef=\"let row; columns: displayedColumns;\"></tr>\n</table>\n","import { CdkTableModule } from '@angular/cdk/table'\nimport { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\n\nimport { TheSeamTableCellTypeModule } from '@theseam/ui-common/table-cell-type'\n\nimport { TableComponent } from './table/table.component'\nimport { TheSeamTableColumnComponent } from './table-column.component'\nimport { TheSeamTableCellTplDirective } from './table-cell-tpl.directive'\nimport { TheSeamTableColumnHeaderTplDirective } from './table-column-header-tpl.directive'\n\n@NgModule({\n declarations: [\n TableComponent\n ],\n imports: [\n CommonModule,\n CdkTableModule,\n TheSeamTableCellTypeModule,\n TheSeamTableColumnComponent,\n TheSeamTableCellTplDirective,\n TheSeamTableColumnHeaderTplDirective,\n ],\n exports: [\n TableComponent,\n TheSeamTableColumnComponent,\n TheSeamTableCellTplDirective,\n TheSeamTableColumnHeaderTplDirective,\n ]\n})\nexport class TheSeamTableModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;MAMa,4BAA4B,CAAA;AAJzC,IAAA,WAAA,GAAA;AAKE,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,EAAC,WAAgB,EAAC,CAAA;AACpC,KAAA;;yHAFY,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;6GAA5B,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAA5B,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAJxC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA,CAAA;;;MCCY,oCAAoC,CAAA;AAJjD,IAAA,WAAA,GAAA;AAKE,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,EAAC,WAAgB,EAAC,CAAA;AACpC,KAAA;;iIAFY,oCAAoC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;qHAApC,oCAAoC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAApC,oCAAoC,EAAA,UAAA,EAAA,CAAA;kBAJhD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,4BAA4B;AACtC,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA,CAAA;;;ACGD;AACA;MAOa,2BAA2B,CAAA;AALxC,IAAA,WAAA,GAAA;QAoBU,IAAc,CAAA,cAAA,GAAG,IAAI,CAAA;AA0BZ,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAQ,CAAA;AAC7C,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAA;AAezD,KAAA;AA/BC,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,kBAAkB,CAAA;KAC1D;AASD,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,oBAAoB,CAAA;KAC9D;;;;AASD,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAA;AAC5B,SAAA;AAAM,aAAA;;AAEL,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAA;AAC1B,SAAA;KACF;;wHAvDU,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4GAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,CAAA,cAAA,EAAA,oBAAA,CAAA,EAAA,oBAAA,EAAA,CAAA,gBAAA,EAAA,sBAAA,CAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAiBxB,4BAA4B,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAM5B,4BAA4B,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAU,WAAW,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAWjD,oCAAoC,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAU,WAAW,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApC7D,CAAE,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;2FAED,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBALvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,CAAE,CAAA;AACb,iBAAA,CAAA;8BAGU,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAEG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAMG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAEG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAIwD,gBAAgB,EAAA,CAAA;sBAA7E,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,4BAA4B,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBAI5D,kBAAkB,EAAA,CAAA;sBADjB,KAAK;uBAAC,cAAc,CAAA;gBAIrB,kBAAkB,EAAA,CAAA;sBADjB,YAAY;uBAAC,4BAA4B,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBAS/E,oBAAoB,EAAA,CAAA;sBADnB,KAAK;uBAAC,gBAAgB,CAAA;gBAIvB,oBAAoB,EAAA,CAAA;sBADnB,YAAY;uBAAC,oCAAoC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;;;ACrBzF,SAAS,yBAAyB,CAAC,OAAkC,EAAE,UAAyC,EAAA;IAC9G,MAAM,OAAO,GAAmB,EAAE,CAAA;AAElC,IAAA,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;AACzB,QAAA,MAAM,MAAM,GAAiB;YAC3B,IAAI,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI;AAC5B,gBAAA,IAAI,EAAE,GAAG;AACT,gBAAA,IAAI,EAAE,GAAG;aACV,GAAG,GAAG,CAAC;SACX,CAAA;AACD,QAAA,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,CAAA;;AAE3D,QAAA,IAAI,MAAM,EAAE;YACV,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE;gBACrD,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,SAAS,CAAA;AACvC,aAAA;YACD,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,IAAI,MAAM,CAAC,YAAY,KAAK,IAAI,EAAE;gBACrE,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,SAAS,CAAA;AACvD,aAAA;YACD,IAAI,MAAM,CAAC,cAAc,KAAK,SAAS,IAAI,MAAM,CAAC,cAAc,KAAK,IAAI,EAAE;gBACzE,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,SAAS,CAAA;AAC3D,aAAA;YACD,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,EAAE;gBAC/D,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,SAAS,CAAA;AACjD,aAAA;YACD,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,IAAI,MAAM,CAAC,WAAW,KAAK,IAAI,EAAE;gBACnE,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,SAAS,CAAA;AACrD,aAAA;AACF,SAAA;AAED,QAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AACrB,KAAA;AAED,IAAA,OAAO,OAAO,CAAA;AAChB,CAAC;MAQY,cAAc,CAAA;IAKzB,IACI,OAAO,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAA,EAAE;IACtC,IAAI,OAAO,CAAC,KAAmD,EAAA;AAC7D,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAA;;AAErB,QAAA,MAAM,IAAI,GAAG,yBAAyB,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,CAAC,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;;AAE5F,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAA;KAC5B;IAGD,IACI,IAAI,KAA6B,OAAO,IAAI,CAAC,KAAK,CAAA,EAAE;IACxD,IAAI,IAAI,CAAC,KAA6B,EAAA;AACpC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,CAAA;AAE5C,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACzB,IAAI,CAAC,cAAc,GAAG;gBACpB,EAAE,aAAa,EAAE,IAAI,EAAS;aAC/B,CAAA;AACF,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAA;AACjC,SAAA;KACF;IAGD,IAAI,aAAa,KAAK,OAAO,IAAI,CAAC,cAAc,CAAA,EAAE;IAiBlD,IACI,gBAAgB,CAAC,KAAyD,EAAA;;AAE5E,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAA;AAC9B,QAAA,IAAI,KAAK,EAAE,OAAO,EAAE,CAAC,MAAM,KAAK,CAAC;YAAE,OAAM;AACzC,QAAA,MAAM,IAAI,GAAG,yBAAyB,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;;AAEnF,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAA;QAE3B,IAAI,IAAI,CAAC,sBAAsB;AAAE,YAAA,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,CAAA;AAC1E,QAAA,MAAM,MAAM,GAAG,KAAK,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,CAAA;AACzD,QAAA,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/B,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,MAAK;AACzD,gBAAA,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;;AAEpF,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAA;AAC9B,aAAC,CAAC,CAAA;AACH,SAAA;KACF;AAID,IAAA,WAAA,CACmB,UAAwB,EAAA;QAAxB,IAAU,CAAA,UAAA,GAAV,UAAU,CAAc;AApE1B,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAAQ,CAAA;QA0B7C,IAAK,CAAA,KAAA,GAA2B,EAAE,CAAA;QAGlC,IAAc,CAAA,cAAA,GAAgC,EAAE,CAAA;QAM/B,IAAS,CAAA,SAAA,GAAG,IAAI,CAAA;AAOtB,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAqE,CAAA;AACrG,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,YAAY,EAAQ,CAAA;AAsB1D,QAAA,IAAA,CAAA,sBAAsB,GAAG,YAAY,CAAC,KAAK,CAAA;KAI9C;IAEL,QAAQ,GAAA;AACN,QAAA,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAA;QACtC,IAAI,CAAC,cAAc,EAAE,CAAA;KACtB;IAED,qBAAqB,GAAA;AACnB,QAAA,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAA;QACnD,IAAI,CAAC,cAAc,EAAE,CAAA;KACtB;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,OAAO,EAAE;YACnB,IAAI,CAAC,cAAc,EAAE,CAAA;AACtB,SAAA;KACF;IAEO,cAAc,GAAA;AACpB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAA;AACpC,QAAA,IAAI,CAAC,eAAe,GAAG,SAAS,CAAA;AAChC,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;AAC1B,SAAA;KACF;;AAGO,IAAA,WAAW,CAAC,IAA+B,EAAA;AACjD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAA;QAClC,MAAM,OAAO,GAAmB,EAAE,CAAA;AAElC,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AACtB,YAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC3B,gBAAA,MAAM,MAAM,GAAiB;AAC3B,oBAAA,IAAI,EAAE,GAAG;AACT,oBAAA,IAAI,EAAE,GAAG;iBACV,CAAA;AACD,gBAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AACrB,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAA;AACnB,gBAAA,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,EAAE;AACvC,oBAAA,IAAI,GAAG,GAAG,CAAC,IAAI,CAAA;AAChB,iBAAA;AACD,gBAAA,MAAM,MAAM,GAAiB;AAC3B,oBAAA,GAAG,GAAG;oBACN,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,IAAI;iBACL,CAAA;AACD,gBAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AACrB,aAAA;AACF,SAAA;AAED,QAAA,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;YACzB,MAAM,IAAI,GAAG,GAAU,CAAA;YACvB,IAAI,IAAI,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;AAC7D,gBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,wBAAwB,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;AAClG,aAAA;AACF,SAAA;AAED,QAAA,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;AAC/B,QAAA,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAA;AAC/B,QAAA,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAA;AAChD,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAA;KAC9D;IAEM,2BAA2B,GAAA;AAChC,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;KAC1C;AAED,IAAA,eAAe,CAAC,CAAM,EAAA;AACpB,QAAA,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAA;KACvB;;2GA/IU,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;+FAAd,cAAc,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,SAAA,EAgDR,2BAA2B,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvH9C,0qFA8DA,EAAA,MAAA,EAAA,CAAA,4EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,cAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,8BAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,KAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;AD+C2B,UAAA,CAAA;AAAf,IAAA,YAAY,EAAE;AAAiB,CAAA,EAAA,cAAA,CAAA,SAAA,EAAA,WAAA,EAAA,KAAA,CAAA,CAAA,CAAA;2FAtC9B,cAAc,EAAA,UAAA,EAAA,CAAA;kBAN1B,SAAS;+BACE,YAAY,EAAA,eAAA,EAGL,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,0qFAAA,EAAA,MAAA,EAAA,CAAA,4EAAA,CAAA,EAAA,CAAA;mGAQ3C,OAAO,EAAA,CAAA;sBADV,KAAK;gBAYF,IAAI,EAAA,CAAA;sBADP,KAAK;gBAkBG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAEmB,SAAS,EAAA,CAAA;sBAAjC,KAAK;gBAOa,aAAa,EAAA,CAAA;sBAA/B,MAAM;gBACY,oBAAoB,EAAA,CAAA;sBAAtC,MAAM;gBAGH,gBAAgB,EAAA,CAAA;sBADnB,eAAe;uBAAC,2BAA2B,CAAA;;;MEzFjC,kBAAkB,CAAA;;+GAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;gHAAlB,kBAAkB,EAAA,YAAA,EAAA,CAjB3B,cAAc,CAAA,EAAA,OAAA,EAAA,CAGd,YAAY;QACZ,cAAc;QACd,0BAA0B;QAC1B,2BAA2B;QAC3B,4BAA4B;AAC5B,QAAA,oCAAoC,aAGpC,cAAc;QACd,2BAA2B;QAC3B,4BAA4B;QAC5B,oCAAoC,CAAA,EAAA,CAAA,CAAA;AAG3B,kBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,YAd3B,YAAY;QACZ,cAAc;QACd,0BAA0B;QAC1B,2BAA2B,CAAA,EAAA,CAAA,CAAA;2FAWlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAnB9B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,cAAc;AACf,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,cAAc;wBACd,0BAA0B;wBAC1B,2BAA2B;wBAC3B,4BAA4B;wBAC5B,oCAAoC;AACrC,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,cAAc;wBACd,2BAA2B;wBAC3B,4BAA4B;wBAC5B,oCAAoC;AACrC,qBAAA;AACF,iBAAA,CAAA;;;AC7BD;;AAEG;;;;"}