@aquera/ngx-smart-table 0.0.17-alpha → 0.0.18-alpha

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 (170) hide show
  1. package/{fesm2020 → fesm2022}/aquera-ngx-smart-table.mjs +1579 -2101
  2. package/fesm2022/aquera-ngx-smart-table.mjs.map +1 -0
  3. package/package.json +8 -16
  4. package/types/aquera-ngx-smart-table.d.ts +5909 -0
  5. package/aquera-ngx-smart-table.d.ts +0 -5
  6. package/esm2020/aquera-ngx-smart-table.mjs +0 -5
  7. package/esm2020/lib/builder/components/builder-preview/builder-preview.component.mjs +0 -63
  8. package/esm2020/lib/builder/components/builder-toolbar/builder-toolbar.component.mjs +0 -115
  9. package/esm2020/lib/builder/components/column-editor/column-editor.component.mjs +0 -206
  10. package/esm2020/lib/builder/components/column-list/column-list.component.mjs +0 -125
  11. package/esm2020/lib/builder/components/definition-builder/definition-builder.component.mjs +0 -105
  12. package/esm2020/lib/builder/components/table-config-editor/table-config-editor.component.mjs +0 -132
  13. package/esm2020/lib/builder/definition-builder.module.mjs +0 -70
  14. package/esm2020/lib/builder/models/builder-state.interface.mjs +0 -5
  15. package/esm2020/lib/builder/services/definition-builder.service.mjs +0 -251
  16. package/esm2020/lib/builder/services/definition-export.service.mjs +0 -167
  17. package/esm2020/lib/builder/services/definition-import.service.mjs +0 -193
  18. package/esm2020/lib/builder/services/sample-data-generator.service.mjs +0 -126
  19. package/esm2020/lib/builder/utils/config-validator.util.mjs +0 -165
  20. package/esm2020/lib/builder/utils/typescript-generator.util.mjs +0 -206
  21. package/esm2020/lib/editors/index.mjs +0 -9
  22. package/esm2020/lib/editors/nile-autocomplete-editor.mjs +0 -228
  23. package/esm2020/lib/editors/nile-calendar-editor.mjs +0 -211
  24. package/esm2020/lib/editors/nile-date-picker-editor.mjs +0 -188
  25. package/esm2020/lib/editors/nile-input-editor.mjs +0 -235
  26. package/esm2020/lib/editors/nile-select-editor.mjs +0 -498
  27. package/esm2020/lib/factories/column-config.factory.mjs +0 -231
  28. package/esm2020/lib/models/autosave-config.interface.mjs +0 -8
  29. package/esm2020/lib/models/base-column-config.class.mjs +0 -253
  30. package/esm2020/lib/models/cell-strategies.interface.mjs +0 -6
  31. package/esm2020/lib/models/cell-types.mjs +0 -147
  32. package/esm2020/lib/models/column-action.interface.mjs +0 -6
  33. package/esm2020/lib/models/column-config.interface.mjs +0 -43
  34. package/esm2020/lib/models/column-config.utils.mjs +0 -101
  35. package/esm2020/lib/models/row-action.interface.mjs +0 -5
  36. package/esm2020/lib/models/row-validator.interface.mjs +0 -2
  37. package/esm2020/lib/models/schema-validation.interface.mjs +0 -2
  38. package/esm2020/lib/models/sheet-action.interface.mjs +0 -5
  39. package/esm2020/lib/models/sheet-config.interface.mjs +0 -5
  40. package/esm2020/lib/models/table-config.interface.mjs +0 -107
  41. package/esm2020/lib/models/table-validator.interface.mjs +0 -2
  42. package/esm2020/lib/models/workbook-action.interface.mjs +0 -5
  43. package/esm2020/lib/models/workbook-config.interface.mjs +0 -5
  44. package/esm2020/lib/renderer/components/st-add-column-button/st-add-column-button.component.mjs +0 -24
  45. package/esm2020/lib/renderer/components/st-cell/st-cell.component.mjs +0 -397
  46. package/esm2020/lib/renderer/components/st-column-editor-modal/st-column-editor-modal.component.mjs +0 -103
  47. package/esm2020/lib/renderer/components/st-column-filter/st-column-filter.component.mjs +0 -383
  48. package/esm2020/lib/renderer/components/st-column-menu/st-column-menu.component.mjs +0 -232
  49. package/esm2020/lib/renderer/components/st-column-visibility/st-column-visibility.component.mjs +0 -97
  50. package/esm2020/lib/renderer/components/st-header/st-header.component.mjs +0 -157
  51. package/esm2020/lib/renderer/components/st-pagination/st-pagination.component.mjs +0 -87
  52. package/esm2020/lib/renderer/components/st-row-actions-dropdown/st-row-actions-dropdown.component.mjs +0 -167
  53. package/esm2020/lib/renderer/components/st-sheet/st-sheet.component.mjs +0 -165
  54. package/esm2020/lib/renderer/components/st-sheet-actions/st-sheet-actions.component.mjs +0 -112
  55. package/esm2020/lib/renderer/components/st-table/st-table.component.mjs +0 -1453
  56. package/esm2020/lib/renderer/components/st-table-actions/st-table-actions.component.mjs +0 -169
  57. package/esm2020/lib/renderer/components/st-workbook/st-workbook.component.mjs +0 -581
  58. package/esm2020/lib/renderer/directives/click-outside.directive.mjs +0 -28
  59. package/esm2020/lib/renderer/directives/st-column-resize.directive.mjs +0 -108
  60. package/esm2020/lib/renderer/directives/st-keyboard-navigation.directive.mjs +0 -83
  61. package/esm2020/lib/renderer/models/cell-state.interface.mjs +0 -66
  62. package/esm2020/lib/renderer/models/cell.class.mjs +0 -389
  63. package/esm2020/lib/renderer/models/row-validation-state.interface.mjs +0 -7
  64. package/esm2020/lib/renderer/models/sheet-state.class.mjs +0 -90
  65. package/esm2020/lib/renderer/models/sheet-state.interface.mjs +0 -5
  66. package/esm2020/lib/renderer/models/table-state.class.mjs +0 -871
  67. package/esm2020/lib/renderer/models/table-state.interface.mjs +0 -5
  68. package/esm2020/lib/renderer/models/table-types.mjs +0 -29
  69. package/esm2020/lib/renderer/models/table-validation-state.interface.mjs +0 -7
  70. package/esm2020/lib/renderer/models/workbook-state.class.mjs +0 -174
  71. package/esm2020/lib/renderer/models/workbook-state.interface.mjs +0 -5
  72. package/esm2020/lib/renderer/models/z-index.enum.mjs +0 -55
  73. package/esm2020/lib/schemas/table-config.schema.mjs +0 -472
  74. package/esm2020/lib/services/autosave.service.mjs +0 -92
  75. package/esm2020/lib/services/custom-validation-rules.util.mjs +0 -124
  76. package/esm2020/lib/services/json-schema-validator.service.mjs +0 -216
  77. package/esm2020/lib/services/row-validation.service.mjs +0 -42
  78. package/esm2020/lib/services/validation-logger.service.mjs +0 -177
  79. package/esm2020/lib/services/virtual-scroll.service.mjs +0 -52
  80. package/esm2020/lib/shared/shared-table-components.module.mjs +0 -35
  81. package/esm2020/lib/smart-table.module.mjs +0 -124
  82. package/esm2020/lib/strategies/default-editors.mjs +0 -433
  83. package/esm2020/lib/strategies/default-formatters.mjs +0 -238
  84. package/esm2020/lib/strategies/default-validators.mjs +0 -327
  85. package/esm2020/public-api.mjs +0 -146
  86. package/fesm2015/aquera-ngx-smart-table.mjs +0 -12347
  87. package/fesm2015/aquera-ngx-smart-table.mjs.map +0 -1
  88. package/fesm2020/aquera-ngx-smart-table.mjs.map +0 -1
  89. package/lib/builder/components/builder-preview/builder-preview.component.d.ts +0 -31
  90. package/lib/builder/components/builder-toolbar/builder-toolbar.component.d.ts +0 -53
  91. package/lib/builder/components/column-editor/column-editor.component.d.ts +0 -69
  92. package/lib/builder/components/column-list/column-list.component.d.ts +0 -65
  93. package/lib/builder/components/definition-builder/definition-builder.component.d.ts +0 -58
  94. package/lib/builder/components/table-config-editor/table-config-editor.component.d.ts +0 -32
  95. package/lib/builder/definition-builder.module.d.ts +0 -15
  96. package/lib/builder/models/builder-state.interface.d.ts +0 -93
  97. package/lib/builder/services/definition-builder.service.d.ts +0 -80
  98. package/lib/builder/services/definition-export.service.d.ts +0 -59
  99. package/lib/builder/services/definition-import.service.d.ts +0 -31
  100. package/lib/builder/services/sample-data-generator.service.d.ts +0 -41
  101. package/lib/builder/utils/config-validator.util.d.ts +0 -32
  102. package/lib/builder/utils/typescript-generator.util.d.ts +0 -29
  103. package/lib/editors/index.d.ts +0 -8
  104. package/lib/editors/nile-autocomplete-editor.d.ts +0 -102
  105. package/lib/editors/nile-calendar-editor.d.ts +0 -88
  106. package/lib/editors/nile-date-picker-editor.d.ts +0 -97
  107. package/lib/editors/nile-input-editor.d.ts +0 -67
  108. package/lib/editors/nile-select-editor.d.ts +0 -113
  109. package/lib/factories/column-config.factory.d.ts +0 -73
  110. package/lib/models/autosave-config.interface.d.ts +0 -23
  111. package/lib/models/base-column-config.class.d.ts +0 -115
  112. package/lib/models/cell-strategies.interface.d.ts +0 -188
  113. package/lib/models/cell-types.d.ts +0 -337
  114. package/lib/models/column-action.interface.d.ts +0 -86
  115. package/lib/models/column-config.interface.d.ts +0 -272
  116. package/lib/models/column-config.utils.d.ts +0 -37
  117. package/lib/models/row-action.interface.d.ts +0 -86
  118. package/lib/models/row-validator.interface.d.ts +0 -37
  119. package/lib/models/schema-validation.interface.d.ts +0 -42
  120. package/lib/models/sheet-action.interface.d.ts +0 -59
  121. package/lib/models/sheet-config.interface.d.ts +0 -41
  122. package/lib/models/table-config.interface.d.ts +0 -251
  123. package/lib/models/table-validator.interface.d.ts +0 -40
  124. package/lib/models/workbook-action.interface.d.ts +0 -95
  125. package/lib/models/workbook-config.interface.d.ts +0 -107
  126. package/lib/renderer/components/st-add-column-button/st-add-column-button.component.d.ts +0 -9
  127. package/lib/renderer/components/st-cell/st-cell.component.d.ts +0 -69
  128. package/lib/renderer/components/st-column-editor-modal/st-column-editor-modal.component.d.ts +0 -39
  129. package/lib/renderer/components/st-column-filter/st-column-filter.component.d.ts +0 -139
  130. package/lib/renderer/components/st-column-menu/st-column-menu.component.d.ts +0 -81
  131. package/lib/renderer/components/st-column-visibility/st-column-visibility.component.d.ts +0 -44
  132. package/lib/renderer/components/st-header/st-header.component.d.ts +0 -93
  133. package/lib/renderer/components/st-pagination/st-pagination.component.d.ts +0 -42
  134. package/lib/renderer/components/st-row-actions-dropdown/st-row-actions-dropdown.component.d.ts +0 -67
  135. package/lib/renderer/components/st-sheet/st-sheet.component.d.ts +0 -98
  136. package/lib/renderer/components/st-sheet-actions/st-sheet-actions.component.d.ts +0 -58
  137. package/lib/renderer/components/st-table/st-table.component.d.ts +0 -380
  138. package/lib/renderer/components/st-table-actions/st-table-actions.component.d.ts +0 -77
  139. package/lib/renderer/components/st-workbook/st-workbook.component.d.ts +0 -275
  140. package/lib/renderer/directives/click-outside.directive.d.ts +0 -10
  141. package/lib/renderer/directives/st-column-resize.directive.d.ts +0 -44
  142. package/lib/renderer/directives/st-keyboard-navigation.directive.d.ts +0 -19
  143. package/lib/renderer/models/cell-state.interface.d.ts +0 -118
  144. package/lib/renderer/models/cell.class.d.ts +0 -174
  145. package/lib/renderer/models/row-validation-state.interface.d.ts +0 -27
  146. package/lib/renderer/models/sheet-state.class.d.ts +0 -67
  147. package/lib/renderer/models/sheet-state.interface.d.ts +0 -55
  148. package/lib/renderer/models/table-state.class.d.ts +0 -320
  149. package/lib/renderer/models/table-state.interface.d.ts +0 -18
  150. package/lib/renderer/models/table-types.d.ts +0 -228
  151. package/lib/renderer/models/table-validation-state.interface.d.ts +0 -34
  152. package/lib/renderer/models/workbook-state.class.d.ts +0 -117
  153. package/lib/renderer/models/workbook-state.interface.d.ts +0 -71
  154. package/lib/renderer/models/z-index.enum.d.ts +0 -44
  155. package/lib/schemas/table-config.schema.d.ts +0 -455
  156. package/lib/services/autosave.service.d.ts +0 -73
  157. package/lib/services/custom-validation-rules.util.d.ts +0 -12
  158. package/lib/services/json-schema-validator.service.d.ts +0 -49
  159. package/lib/services/row-validation.service.d.ts +0 -17
  160. package/lib/services/validation-logger.service.d.ts +0 -87
  161. package/lib/services/virtual-scroll.service.d.ts +0 -44
  162. package/lib/shared/shared-table-components.module.d.ts +0 -9
  163. package/lib/smart-table.module.d.ts +0 -26
  164. package/lib/strategies/default-editors.d.ts +0 -109
  165. package/lib/strategies/default-formatters.d.ts +0 -116
  166. package/lib/strategies/default-validators.d.ts +0 -113
  167. package/public-api.d.ts +0 -70
  168. package/src/lib/builder/README.md +0 -30
  169. package/src/lib/editors/README.md +0 -303
  170. package/src/lib/renderer/components/st-column-filter/README.md +0 -286
@@ -1,125 +0,0 @@
1
- /**
2
- * Column List Component
3
- * Displays and manages columns
4
- */
5
- import { Component, Input, Output, EventEmitter } from '@angular/core';
6
- import { CellDataType } from '../../../models/cell-types';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "../../../renderer/directives/click-outside.directive";
9
- import * as i2 from "@angular/common";
10
- export class ColumnListComponent {
11
- constructor() {
12
- this.columns = [];
13
- this.selectedIndex = null;
14
- this.columnSelected = new EventEmitter();
15
- this.columnAdded = new EventEmitter();
16
- this.columnDeleted = new EventEmitter();
17
- this.columnReordered = new EventEmitter();
18
- this.showAddMenu = false;
19
- this.draggedIndex = null;
20
- this.dragOverIndex = null;
21
- this.dataTypes = [
22
- { value: CellDataType.STRING, label: 'Text' },
23
- { value: CellDataType.NUMBER, label: 'Number' },
24
- { value: CellDataType.DATE, label: 'Date' },
25
- { value: CellDataType.BOOLEAN, label: 'Boolean' }
26
- ];
27
- }
28
- /**
29
- * Handle column click
30
- */
31
- onColumnClick(index) {
32
- this.columnSelected.emit(index);
33
- }
34
- /**
35
- * Handle delete button click
36
- */
37
- onDelete(index, event) {
38
- event.stopPropagation();
39
- if (confirm(`Are you sure you want to delete column "${this.columns[index].header || this.columns[index].key}"?`)) {
40
- this.columnDeleted.emit(index);
41
- }
42
- }
43
- /**
44
- * Handle add column button click
45
- */
46
- onAddColumn(type) {
47
- this.showAddMenu = false;
48
- this.columnAdded.emit(type);
49
- }
50
- closeMenu() {
51
- this.showAddMenu = false;
52
- }
53
- /**
54
- * Handle drag start
55
- */
56
- onDragStart(event, index) {
57
- this.draggedIndex = index;
58
- if (event.dataTransfer) {
59
- event.dataTransfer.effectAllowed = 'move';
60
- event.dataTransfer.setData('text/html', '');
61
- }
62
- }
63
- /**
64
- * Handle drag over
65
- */
66
- onDragOver(event, index) {
67
- event.preventDefault();
68
- if (event.dataTransfer) {
69
- event.dataTransfer.dropEffect = 'move';
70
- }
71
- this.dragOverIndex = index;
72
- }
73
- /**
74
- * Handle drop
75
- */
76
- onDrop(event, dropIndex) {
77
- event.preventDefault();
78
- if (this.draggedIndex !== null && this.draggedIndex !== dropIndex) {
79
- this.columnReordered.emit({
80
- fromIndex: this.draggedIndex,
81
- toIndex: dropIndex
82
- });
83
- }
84
- this.draggedIndex = null;
85
- }
86
- /**
87
- * Handle drag end
88
- */
89
- onDragEnd(event) {
90
- this.draggedIndex = null;
91
- this.dragOverIndex = null;
92
- }
93
- /**
94
- * Get display name for column
95
- */
96
- getColumnDisplayName(column) {
97
- return column.header || column.key;
98
- }
99
- /**
100
- * Get data type label
101
- */
102
- getDataTypeLabel(column) {
103
- const type = this.dataTypes.find(dt => dt.value === column.dataType);
104
- return type?.label || 'Text';
105
- }
106
- }
107
- ColumnListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ColumnListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
108
- ColumnListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ColumnListComponent, selector: "st-column-list", inputs: { columns: "columns", selectedIndex: "selectedIndex" }, outputs: { columnSelected: "columnSelected", columnAdded: "columnAdded", columnDeleted: "columnDeleted", columnReordered: "columnReordered" }, ngImport: i0, template: "<div class=\"column-list\" (clickOutside)=\"closeMenu()\">\n <div class=\"column-list-header\">\n <h3>Columns</h3>\n <div class=\"add-column-menu\" [class.open]=\"showAddMenu\">\n <button class=\"add-btn\" (click)=\"showAddMenu = !showAddMenu\" title=\"Add Column\">\n <span>+ Add Column</span>\n </button>\n <div class=\"add-menu\" *ngIf=\"showAddMenu\">\n <button\n *ngFor=\"let type of dataTypes\"\n class=\"menu-item\"\n (click)=\"onAddColumn(type.value)\">\n {{ type.label }}\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"column-items\">\n <div\n *ngFor=\"let column of columns; let i = index\"\n class=\"column-item\"\n [class.selected]=\"selectedIndex === i\"\n [class.dragging]=\"draggedIndex === i\"\n [class.drag-over]=\"dragOverIndex === i\"\n (click)=\"onColumnClick(i)\"\n draggable=\"true\"\n (dragstart)=\"onDragStart($event, i)\"\n (dragover)=\"onDragOver($event, i)\"\n (drop)=\"onDrop($event, i)\"\n (dragend)=\"onDragEnd($event)\"\n (dragleave)=\"dragOverIndex = null\">\n <div class=\"drag-handle\">\n <span>\u2630</span>\n </div>\n <div class=\"column-info\">\n <div class=\"column-name\">{{ getColumnDisplayName(column) }}</div>\n <div class=\"column-meta\">\n <span class=\"column-type\">{{ getDataTypeLabel(column) }}</span>\n <span class=\"column-key\">{{ column.key }}</span>\n </div>\n </div>\n <button\n class=\"delete-btn\"\n (click)=\"onDelete(i, $event)\"\n title=\"Delete Column\">\n \u00D7\n </button>\n </div>\n\n <div *ngIf=\"columns.length === 0\" class=\"empty-state\">\n <p>No columns yet. Click \"Add Column\" to get started.</p>\n </div>\n </div>\n</div>\n\n", styles: [".column-list{display:flex;flex-direction:column;background-color:#fff;border-radius:4px;box-shadow:0 2px 4px #0000001a;overflow:hidden}.column-list-header{display:flex;justify-content:space-between;align-items:center;padding:1rem;border-bottom:1px solid #e0e0e0;background-color:#f8f8f8}.column-list-header h3{margin:0;font-size:1rem;font-weight:600;color:#333}.add-column-menu{position:relative}.add-column-menu.open .add-btn{background-color:#e3f2fd;border-color:#2196f3}.add-btn{padding:.5rem 1rem;border:1px solid #d0d0d0;border-radius:4px;background-color:#fff;color:#333;cursor:pointer;font-size:.875rem;transition:all .2s}.add-btn:hover{background-color:#f5f5f5}.add-menu{position:absolute;top:100%;right:0;margin-top:.25rem;background-color:#fff;border:1px solid #d0d0d0;border-radius:4px;box-shadow:0 4px 8px #0000001a;z-index:100;min-width:150px}.menu-item{display:block;width:100%;padding:.75rem 1rem;border:none;background:none;text-align:left;cursor:pointer;font-size:.875rem;color:#333;transition:background-color .2s}.menu-item:hover{background-color:#f5f5f5}.menu-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.menu-item:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px}.column-items{max-height:400px;overflow-y:auto;padding:.5rem}.column-item{display:flex;align-items:center;gap:.5rem;padding:.75rem;margin-bottom:.5rem;border:1px solid #e0e0e0;border-radius:4px;background-color:#fff;cursor:pointer;transition:all .2s}.column-item:hover{border-color:#b0b0b0;background-color:#f8f8f8}.column-item.selected{border-color:#2196f3;background-color:#e3f2fd}.column-item.cdk-drag-preview{box-shadow:0 8px 16px #0003;opacity:.9}.column-item.cdk-drag-placeholder{opacity:.3}.drag-handle{cursor:move;color:#999;font-size:1.25rem;padding:.25rem;display:flex;align-items:center}.drag-handle:hover{color:#666}.column-info{flex:1;min-width:0}.column-name{font-weight:500;color:#333;margin-bottom:.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.column-meta{display:flex;gap:.5rem;font-size:.75rem;color:#666}.column-type{padding:.125rem .5rem;background-color:#e8e8e8;border-radius:3px}.column-key{font-family:monospace;color:#999}.delete-btn{padding:.25rem .5rem;border:none;background:none;color:#999;cursor:pointer;font-size:1.5rem;line-height:1;transition:color .2s}.delete-btn:hover{color:#f44336}.empty-state{padding:2rem;text-align:center;color:#999;font-size:.875rem}.column-item.dragging{opacity:.5}.column-item.drag-over{border-color:#2196f3}\n"], directives: [{ type: i1.ClickOutsideDirective, selector: "[clickOutside]", outputs: ["clickOutside"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
109
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ColumnListComponent, decorators: [{
110
- type: Component,
111
- args: [{ selector: 'st-column-list', template: "<div class=\"column-list\" (clickOutside)=\"closeMenu()\">\n <div class=\"column-list-header\">\n <h3>Columns</h3>\n <div class=\"add-column-menu\" [class.open]=\"showAddMenu\">\n <button class=\"add-btn\" (click)=\"showAddMenu = !showAddMenu\" title=\"Add Column\">\n <span>+ Add Column</span>\n </button>\n <div class=\"add-menu\" *ngIf=\"showAddMenu\">\n <button\n *ngFor=\"let type of dataTypes\"\n class=\"menu-item\"\n (click)=\"onAddColumn(type.value)\">\n {{ type.label }}\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"column-items\">\n <div\n *ngFor=\"let column of columns; let i = index\"\n class=\"column-item\"\n [class.selected]=\"selectedIndex === i\"\n [class.dragging]=\"draggedIndex === i\"\n [class.drag-over]=\"dragOverIndex === i\"\n (click)=\"onColumnClick(i)\"\n draggable=\"true\"\n (dragstart)=\"onDragStart($event, i)\"\n (dragover)=\"onDragOver($event, i)\"\n (drop)=\"onDrop($event, i)\"\n (dragend)=\"onDragEnd($event)\"\n (dragleave)=\"dragOverIndex = null\">\n <div class=\"drag-handle\">\n <span>\u2630</span>\n </div>\n <div class=\"column-info\">\n <div class=\"column-name\">{{ getColumnDisplayName(column) }}</div>\n <div class=\"column-meta\">\n <span class=\"column-type\">{{ getDataTypeLabel(column) }}</span>\n <span class=\"column-key\">{{ column.key }}</span>\n </div>\n </div>\n <button\n class=\"delete-btn\"\n (click)=\"onDelete(i, $event)\"\n title=\"Delete Column\">\n \u00D7\n </button>\n </div>\n\n <div *ngIf=\"columns.length === 0\" class=\"empty-state\">\n <p>No columns yet. Click \"Add Column\" to get started.</p>\n </div>\n </div>\n</div>\n\n", styles: [".column-list{display:flex;flex-direction:column;background-color:#fff;border-radius:4px;box-shadow:0 2px 4px #0000001a;overflow:hidden}.column-list-header{display:flex;justify-content:space-between;align-items:center;padding:1rem;border-bottom:1px solid #e0e0e0;background-color:#f8f8f8}.column-list-header h3{margin:0;font-size:1rem;font-weight:600;color:#333}.add-column-menu{position:relative}.add-column-menu.open .add-btn{background-color:#e3f2fd;border-color:#2196f3}.add-btn{padding:.5rem 1rem;border:1px solid #d0d0d0;border-radius:4px;background-color:#fff;color:#333;cursor:pointer;font-size:.875rem;transition:all .2s}.add-btn:hover{background-color:#f5f5f5}.add-menu{position:absolute;top:100%;right:0;margin-top:.25rem;background-color:#fff;border:1px solid #d0d0d0;border-radius:4px;box-shadow:0 4px 8px #0000001a;z-index:100;min-width:150px}.menu-item{display:block;width:100%;padding:.75rem 1rem;border:none;background:none;text-align:left;cursor:pointer;font-size:.875rem;color:#333;transition:background-color .2s}.menu-item:hover{background-color:#f5f5f5}.menu-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.menu-item:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px}.column-items{max-height:400px;overflow-y:auto;padding:.5rem}.column-item{display:flex;align-items:center;gap:.5rem;padding:.75rem;margin-bottom:.5rem;border:1px solid #e0e0e0;border-radius:4px;background-color:#fff;cursor:pointer;transition:all .2s}.column-item:hover{border-color:#b0b0b0;background-color:#f8f8f8}.column-item.selected{border-color:#2196f3;background-color:#e3f2fd}.column-item.cdk-drag-preview{box-shadow:0 8px 16px #0003;opacity:.9}.column-item.cdk-drag-placeholder{opacity:.3}.drag-handle{cursor:move;color:#999;font-size:1.25rem;padding:.25rem;display:flex;align-items:center}.drag-handle:hover{color:#666}.column-info{flex:1;min-width:0}.column-name{font-weight:500;color:#333;margin-bottom:.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.column-meta{display:flex;gap:.5rem;font-size:.75rem;color:#666}.column-type{padding:.125rem .5rem;background-color:#e8e8e8;border-radius:3px}.column-key{font-family:monospace;color:#999}.delete-btn{padding:.25rem .5rem;border:none;background:none;color:#999;cursor:pointer;font-size:1.5rem;line-height:1;transition:color .2s}.delete-btn:hover{color:#f44336}.empty-state{padding:2rem;text-align:center;color:#999;font-size:.875rem}.column-item.dragging{opacity:.5}.column-item.drag-over{border-color:#2196f3}\n"] }]
112
- }], propDecorators: { columns: [{
113
- type: Input
114
- }], selectedIndex: [{
115
- type: Input
116
- }], columnSelected: [{
117
- type: Output
118
- }], columnAdded: [{
119
- type: Output
120
- }], columnDeleted: [{
121
- type: Output
122
- }], columnReordered: [{
123
- type: Output
124
- }] } });
125
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtdGFibGUvc3JjL2xpYi9idWlsZGVyL2NvbXBvbmVudHMvY29sdW1uLWxpc3QvY29sdW1uLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtdGFibGUvc3JjL2xpYi9idWlsZGVyL2NvbXBvbmVudHMvY29sdW1uLWxpc3QvY29sdW1uLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7QUFhMUQsTUFBTSxPQUFPLG1CQUFtQjtJQUxoQztRQU1XLFlBQU8sR0FBbUIsRUFBRSxDQUFDO1FBQzdCLGtCQUFhLEdBQWtCLElBQUksQ0FBQztRQUVuQyxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDNUMsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ3pDLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUMzQyxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUEwQyxDQUFDO1FBRXZGLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLGlCQUFZLEdBQWtCLElBQUksQ0FBQztRQUNuQyxrQkFBYSxHQUFrQixJQUFJLENBQUM7UUFDM0IsY0FBUyxHQUFHO1lBQ25CLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtZQUM3QyxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7WUFD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LEtBQUssSUFBSSxNQUFNLENBQUM7SUFDL0IsQ0FBQzs7Z0hBekdVLG1CQUFtQjtvR0FBbkIsbUJBQW1CLHFRQ3BCaEMseTFEQXdEQTsyRkRwQ2EsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGdCQUFnQjs4QkFLakIsT0FBTztzQkFBZixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUksY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29sdW1uIExpc3QgQ29tcG9uZW50XG4gKiBEaXNwbGF5cyBhbmQgbWFuYWdlcyBjb2x1bW5zXG4gKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbHVtbkNvbmZpZyB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9jb2x1bW4tY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDZWxsRGF0YVR5cGUgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvY2VsbC10eXBlcyc7XG5cbi8vIERyYWctZHJvcCBpbnRlcmZhY2UgKG1ha2luZyBDREsgb3B0aW9uYWwpXG5pbnRlcmZhY2UgRHJhZ0Ryb3BFdmVudCB7XG4gIHByZXZpb3VzSW5kZXg6IG51bWJlcjtcbiAgY3VycmVudEluZGV4OiBudW1iZXI7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N0LWNvbHVtbi1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbHVtbi1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY29sdW1uLWxpc3QuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBDb2x1bW5MaXN0Q29tcG9uZW50IHtcbiAgQElucHV0KCkgY29sdW1uczogQ29sdW1uQ29uZmlnW10gPSBbXTtcbiAgQElucHV0KCkgc2VsZWN0ZWRJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgQE91dHB1dCgpIGNvbHVtblNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSBjb2x1bW5BZGRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgY29sdW1uRGVsZXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICBAT3V0cHV0KCkgY29sdW1uUmVvcmRlcmVkID0gbmV3IEV2ZW50RW1pdHRlcjx7IGZyb21JbmRleDogbnVtYmVyOyB0b0luZGV4OiBudW1iZXIgfT4oKTtcblxuICBzaG93QWRkTWVudSA9IGZhbHNlO1xuICBkcmFnZ2VkSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBkcmFnT3ZlckluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgcmVhZG9ubHkgZGF0YVR5cGVzID0gW1xuICAgIHsgdmFsdWU6IENlbGxEYXRhVHlwZS5TVFJJTkcsIGxhYmVsOiAnVGV4dCcgfSxcbiAgICB7IHZhbHVlOiBDZWxsRGF0YVR5cGUuTlVNQkVSLCBsYWJlbDogJ051bWJlcicgfSxcbiAgICB7IHZhbHVlOiBDZWxsRGF0YVR5cGUuREFURSwgbGFiZWw6ICdEYXRlJyB9LFxuICAgIHsgdmFsdWU6IENlbGxEYXRhVHlwZS5CT09MRUFOLCBsYWJlbDogJ0Jvb2xlYW4nIH1cbiAgXTtcblxuICAvKipcbiAgICogSGFuZGxlIGNvbHVtbiBjbGlja1xuICAgKi9cbiAgb25Db2x1bW5DbGljayhpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5jb2x1bW5TZWxlY3RlZC5lbWl0KGluZGV4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgZGVsZXRlIGJ1dHRvbiBjbGlja1xuICAgKi9cbiAgb25EZWxldGUoaW5kZXg6IG51bWJlciwgZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKGNvbmZpcm0oYEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgY29sdW1uIFwiJHt0aGlzLmNvbHVtbnNbaW5kZXhdLmhlYWRlciB8fCB0aGlzLmNvbHVtbnNbaW5kZXhdLmtleX1cIj9gKSkge1xuICAgICAgdGhpcy5jb2x1bW5EZWxldGVkLmVtaXQoaW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYWRkIGNvbHVtbiBidXR0b24gY2xpY2tcbiAgICovXG4gIG9uQWRkQ29sdW1uKHR5cGU6IENlbGxEYXRhVHlwZSk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0FkZE1lbnUgPSBmYWxzZTtcbiAgICB0aGlzLmNvbHVtbkFkZGVkLmVtaXQodHlwZSk7XG4gIH1cblxuICBjbG9zZU1lbnUoKTogdm9pZHtcbiAgICB0aGlzLnNob3dBZGRNZW51ID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGRyYWcgc3RhcnRcbiAgICovXG4gIG9uRHJhZ1N0YXJ0KGV2ZW50OiBEcmFnRXZlbnQsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmRyYWdnZWRJbmRleCA9IGluZGV4O1xuICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkID0gJ21vdmUnO1xuICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLnNldERhdGEoJ3RleHQvaHRtbCcsICcnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGRyYWcgb3ZlclxuICAgKi9cbiAgb25EcmFnT3ZlcihldmVudDogRHJhZ0V2ZW50LCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgICBldmVudC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdtb3ZlJztcbiAgICB9XG4gICAgdGhpcy5kcmFnT3ZlckluZGV4ID0gaW5kZXg7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGRyb3BcbiAgICovXG4gIG9uRHJvcChldmVudDogRHJhZ0V2ZW50LCBkcm9wSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKHRoaXMuZHJhZ2dlZEluZGV4ICE9PSBudWxsICYmIHRoaXMuZHJhZ2dlZEluZGV4ICE9PSBkcm9wSW5kZXgpIHtcbiAgICAgIHRoaXMuY29sdW1uUmVvcmRlcmVkLmVtaXQoe1xuICAgICAgICBmcm9tSW5kZXg6IHRoaXMuZHJhZ2dlZEluZGV4LFxuICAgICAgICB0b0luZGV4OiBkcm9wSW5kZXhcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmRyYWdnZWRJbmRleCA9IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGRyYWcgZW5kXG4gICAqL1xuICBvbkRyYWdFbmQoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuZHJhZ2dlZEluZGV4ID0gbnVsbDtcbiAgICB0aGlzLmRyYWdPdmVySW5kZXggPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBkaXNwbGF5IG5hbWUgZm9yIGNvbHVtblxuICAgKi9cbiAgZ2V0Q29sdW1uRGlzcGxheU5hbWUoY29sdW1uOiBDb2x1bW5Db25maWcpOiBzdHJpbmcge1xuICAgIHJldHVybiBjb2x1bW4uaGVhZGVyIHx8IGNvbHVtbi5rZXk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRhdGEgdHlwZSBsYWJlbFxuICAgKi9cbiAgZ2V0RGF0YVR5cGVMYWJlbChjb2x1bW46IENvbHVtbkNvbmZpZyk6IHN0cmluZyB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZGF0YVR5cGVzLmZpbmQoZHQgPT4gZHQudmFsdWUgPT09IGNvbHVtbi5kYXRhVHlwZSk7XG4gICAgcmV0dXJuIHR5cGU/LmxhYmVsIHx8ICdUZXh0JztcbiAgfVxufVxuXG4iLCI8ZGl2IGNsYXNzPVwiY29sdW1uLWxpc3RcIiAoY2xpY2tPdXRzaWRlKT1cImNsb3NlTWVudSgpXCI+XG4gIDxkaXYgY2xhc3M9XCJjb2x1bW4tbGlzdC1oZWFkZXJcIj5cbiAgICA8aDM+Q29sdW1uczwvaDM+XG4gICAgPGRpdiBjbGFzcz1cImFkZC1jb2x1bW4tbWVudVwiIFtjbGFzcy5vcGVuXT1cInNob3dBZGRNZW51XCI+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYWRkLWJ0blwiIChjbGljayk9XCJzaG93QWRkTWVudSA9ICFzaG93QWRkTWVudVwiIHRpdGxlPVwiQWRkIENvbHVtblwiPlxuICAgICAgICA8c3Bhbj4rIEFkZCBDb2x1bW48L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJhZGQtbWVudVwiICpuZ0lmPVwic2hvd0FkZE1lbnVcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICpuZ0Zvcj1cImxldCB0eXBlIG9mIGRhdGFUeXBlc1wiXG4gICAgICAgICAgY2xhc3M9XCJtZW51LWl0ZW1cIlxuICAgICAgICAgIChjbGljayk9XCJvbkFkZENvbHVtbih0eXBlLnZhbHVlKVwiPlxuICAgICAgICAgIHt7IHR5cGUubGFiZWwgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImNvbHVtbi1pdGVtc1wiPlxuICAgIDxkaXZcbiAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICBjbGFzcz1cImNvbHVtbi1pdGVtXCJcbiAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJzZWxlY3RlZEluZGV4ID09PSBpXCJcbiAgICAgIFtjbGFzcy5kcmFnZ2luZ109XCJkcmFnZ2VkSW5kZXggPT09IGlcIlxuICAgICAgW2NsYXNzLmRyYWctb3Zlcl09XCJkcmFnT3ZlckluZGV4ID09PSBpXCJcbiAgICAgIChjbGljayk9XCJvbkNvbHVtbkNsaWNrKGkpXCJcbiAgICAgIGRyYWdnYWJsZT1cInRydWVcIlxuICAgICAgKGRyYWdzdGFydCk9XCJvbkRyYWdTdGFydCgkZXZlbnQsIGkpXCJcbiAgICAgIChkcmFnb3Zlcik9XCJvbkRyYWdPdmVyKCRldmVudCwgaSlcIlxuICAgICAgKGRyb3ApPVwib25Ecm9wKCRldmVudCwgaSlcIlxuICAgICAgKGRyYWdlbmQpPVwib25EcmFnRW5kKCRldmVudClcIlxuICAgICAgKGRyYWdsZWF2ZSk9XCJkcmFnT3ZlckluZGV4ID0gbnVsbFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImRyYWctaGFuZGxlXCI+XG4gICAgICAgIDxzcGFuPuKYsDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbi1pbmZvXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4tbmFtZVwiPnt7IGdldENvbHVtbkRpc3BsYXlOYW1lKGNvbHVtbikgfX08L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbi1tZXRhXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2x1bW4tdHlwZVwiPnt7IGdldERhdGFUeXBlTGFiZWwoY29sdW1uKSB9fTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbHVtbi1rZXlcIj57eyBjb2x1bW4ua2V5IH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImRlbGV0ZS1idG5cIlxuICAgICAgICAoY2xpY2spPVwib25EZWxldGUoaSwgJGV2ZW50KVwiXG4gICAgICAgIHRpdGxlPVwiRGVsZXRlIENvbHVtblwiPlxuICAgICAgICDDl1xuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwiY29sdW1ucy5sZW5ndGggPT09IDBcIiBjbGFzcz1cImVtcHR5LXN0YXRlXCI+XG4gICAgICA8cD5ObyBjb2x1bW5zIHlldC4gQ2xpY2sgXCJBZGQgQ29sdW1uXCIgdG8gZ2V0IHN0YXJ0ZWQuPC9wPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG4iXX0=
@@ -1,105 +0,0 @@
1
- /**
2
- * Definition Builder Component
3
- * Main container component that orchestrates all builder sub-components
4
- */
5
- import { Component } from '@angular/core';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "../../services/definition-builder.service";
8
- import * as i2 from "../builder-toolbar/builder-toolbar.component";
9
- import * as i3 from "../column-list/column-list.component";
10
- import * as i4 from "../table-config-editor/table-config-editor.component";
11
- import * as i5 from "../column-editor/column-editor.component";
12
- import * as i6 from "../builder-preview/builder-preview.component";
13
- import * as i7 from "@angular/common";
14
- export class DefinitionBuilderComponent {
15
- constructor(builderService) {
16
- this.builderService = builderService;
17
- this.state = this.builderService.getState();
18
- }
19
- ngOnInit() {
20
- // Subscribe to state changes
21
- this.stateSubscription = this.builderService.state$.subscribe(state => {
22
- this.state = state;
23
- });
24
- }
25
- ngOnDestroy() {
26
- this.stateSubscription?.unsubscribe();
27
- }
28
- /**
29
- * Handle new definition action
30
- */
31
- onNewDefinition() {
32
- if (this.state.hasUnsavedChanges) {
33
- if (!confirm('You have unsaved changes. Are you sure you want to create a new definition?')) {
34
- return;
35
- }
36
- }
37
- this.builderService.newDefinition();
38
- }
39
- /**
40
- * Handle column selection
41
- */
42
- onColumnSelected(index) {
43
- this.builderService.selectColumn(index);
44
- }
45
- /**
46
- * Handle column deletion
47
- */
48
- onColumnDeleted(index) {
49
- this.builderService.deleteColumn(index);
50
- }
51
- /**
52
- * Handle column reorder
53
- */
54
- onColumnReordered(fromIndex, toIndex) {
55
- this.builderService.reorderColumns(fromIndex, toIndex);
56
- }
57
- /**
58
- * Handle column add
59
- */
60
- onColumnAdded(type) {
61
- // Convert string type to CellDataType enum if provided
62
- let dataType = undefined;
63
- if (type) {
64
- dataType = type; // Type is already a CellDataType string value
65
- }
66
- this.builderService.addColumn(dataType);
67
- }
68
- /**
69
- * Handle column update
70
- */
71
- onColumnUpdated(index, updates) {
72
- this.builderService.updateColumn(index, updates);
73
- }
74
- /**
75
- * Handle table config update
76
- */
77
- onTableConfigUpdated(updates) {
78
- this.builderService.updateTableSettings(updates);
79
- }
80
- /**
81
- * Handle preview toggle
82
- */
83
- onPreviewToggled() {
84
- this.builderService.togglePreview();
85
- }
86
- /**
87
- * Handle save action
88
- */
89
- onSaved() {
90
- this.builderService.markAsSaved();
91
- }
92
- /**
93
- * Handle column cancel
94
- */
95
- onColumnCancel() {
96
- this.builderService.clearSelection();
97
- }
98
- }
99
- DefinitionBuilderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DefinitionBuilderComponent, deps: [{ token: i1.DefinitionBuilderService }], target: i0.ɵɵFactoryTarget.Component });
100
- DefinitionBuilderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: DefinitionBuilderComponent, selector: "st-definition-builder", ngImport: i0, template: "<div class=\"definition-builder\">\n <!-- Toolbar -->\n <st-builder-toolbar\n [hasUnsavedChanges]=\"state.hasUnsavedChanges\"\n (newDefinition)=\"onNewDefinition()\"\n (saved)=\"onSaved()\"\n (previewToggled)=\"onPreviewToggled()\">\n </st-builder-toolbar>\n\n <div class=\"builder-content\">\n <!-- Left Panel: Column List and Table Config -->\n <div class=\"left-panel\">\n <!-- Column List -->\n <st-column-list\n [columns]=\"state.tableConfig.columns\"\n [selectedIndex]=\"state.selectedColumnIndex\"\n (columnSelected)=\"onColumnSelected($event)\"\n (columnAdded)=\"onColumnAdded($event)\"\n (columnDeleted)=\"onColumnDeleted($event)\"\n (columnReordered)=\"onColumnReordered($event.fromIndex, $event.toIndex)\">\n </st-column-list>\n\n <!-- Table Config Editor -->\n <st-table-config-editor\n [config]=\"state.tableConfig\"\n (configUpdated)=\"onTableConfigUpdated($event)\">\n </st-table-config-editor>\n </div>\n\n <!-- Middle Panel: Column Editor -->\n <div class=\"middle-panel\" *ngIf=\"state.selectedColumn\">\n <st-column-editor\n [column]=\"state.selectedColumn\"\n [columnIndex]=\"state.selectedColumnIndex!\"\n (columnUpdated)=\"onColumnUpdated(state.selectedColumnIndex!, $event)\"\n (cancel)=\"onColumnCancel()\">\n </st-column-editor>\n </div>\n\n <!-- Right Panel: Preview -->\n <div class=\"right-panel\" *ngIf=\"state.previewVisible\">\n <st-builder-preview\n [tableConfig]=\"state.tableConfig\">\n </st-builder-preview>\n </div>\n </div>\n</div>\n\n", styles: [".definition-builder{display:flex;flex-direction:column;height:100%;width:100%;background-color:#f5f5f5}.builder-content{display:flex;flex:1;overflow:hidden;gap:1rem;padding:1rem}.left-panel{display:flex;flex-direction:column;width:300px;min-width:250px;gap:1rem;overflow-y:auto}.middle-panel{flex:1;min-width:400px;overflow-y:auto;background-color:#fff;border-radius:4px;padding:1rem;box-shadow:0 2px 4px #0000001a}.right-panel{min-width:400px;overflow-y:auto;background-color:#fff;border-radius:4px;padding:1rem;box-shadow:0 2px 4px #0000001a}@media (max-width: 1200px){.right-panel{display:none}}@media (max-width: 800px){.builder-content{flex-direction:column}.left-panel,.middle-panel,.right-panel{width:100%;min-width:unset}}\n"], components: [{ type: i2.BuilderToolbarComponent, selector: "st-builder-toolbar", inputs: ["hasUnsavedChanges"], outputs: ["newDefinition", "saved", "previewToggled"] }, { type: i3.ColumnListComponent, selector: "st-column-list", inputs: ["columns", "selectedIndex"], outputs: ["columnSelected", "columnAdded", "columnDeleted", "columnReordered"] }, { type: i4.TableConfigEditorComponent, selector: "st-table-config-editor", inputs: ["config"], outputs: ["configUpdated"] }, { type: i5.ColumnEditorComponent, selector: "st-column-editor", inputs: ["column", "columnIndex"], outputs: ["columnUpdated", "cancel"] }, { type: i6.BuilderPreviewComponent, selector: "st-builder-preview", inputs: ["tableConfig"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
101
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DefinitionBuilderComponent, decorators: [{
102
- type: Component,
103
- args: [{ selector: 'st-definition-builder', template: "<div class=\"definition-builder\">\n <!-- Toolbar -->\n <st-builder-toolbar\n [hasUnsavedChanges]=\"state.hasUnsavedChanges\"\n (newDefinition)=\"onNewDefinition()\"\n (saved)=\"onSaved()\"\n (previewToggled)=\"onPreviewToggled()\">\n </st-builder-toolbar>\n\n <div class=\"builder-content\">\n <!-- Left Panel: Column List and Table Config -->\n <div class=\"left-panel\">\n <!-- Column List -->\n <st-column-list\n [columns]=\"state.tableConfig.columns\"\n [selectedIndex]=\"state.selectedColumnIndex\"\n (columnSelected)=\"onColumnSelected($event)\"\n (columnAdded)=\"onColumnAdded($event)\"\n (columnDeleted)=\"onColumnDeleted($event)\"\n (columnReordered)=\"onColumnReordered($event.fromIndex, $event.toIndex)\">\n </st-column-list>\n\n <!-- Table Config Editor -->\n <st-table-config-editor\n [config]=\"state.tableConfig\"\n (configUpdated)=\"onTableConfigUpdated($event)\">\n </st-table-config-editor>\n </div>\n\n <!-- Middle Panel: Column Editor -->\n <div class=\"middle-panel\" *ngIf=\"state.selectedColumn\">\n <st-column-editor\n [column]=\"state.selectedColumn\"\n [columnIndex]=\"state.selectedColumnIndex!\"\n (columnUpdated)=\"onColumnUpdated(state.selectedColumnIndex!, $event)\"\n (cancel)=\"onColumnCancel()\">\n </st-column-editor>\n </div>\n\n <!-- Right Panel: Preview -->\n <div class=\"right-panel\" *ngIf=\"state.previewVisible\">\n <st-builder-preview\n [tableConfig]=\"state.tableConfig\">\n </st-builder-preview>\n </div>\n </div>\n</div>\n\n", styles: [".definition-builder{display:flex;flex-direction:column;height:100%;width:100%;background-color:#f5f5f5}.builder-content{display:flex;flex:1;overflow:hidden;gap:1rem;padding:1rem}.left-panel{display:flex;flex-direction:column;width:300px;min-width:250px;gap:1rem;overflow-y:auto}.middle-panel{flex:1;min-width:400px;overflow-y:auto;background-color:#fff;border-radius:4px;padding:1rem;box-shadow:0 2px 4px #0000001a}.right-panel{min-width:400px;overflow-y:auto;background-color:#fff;border-radius:4px;padding:1rem;box-shadow:0 2px 4px #0000001a}@media (max-width: 1200px){.right-panel{display:none}}@media (max-width: 800px){.builder-content{flex-direction:column}.left-panel,.middle-panel,.right-panel{width:100%;min-width:unset}}\n"] }]
104
- }], ctorParameters: function () { return [{ type: i1.DefinitionBuilderService }]; } });
105
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmaW5pdGlvbi1idWlsZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXRhYmxlL3NyYy9saWIvYnVpbGRlci9jb21wb25lbnRzL2RlZmluaXRpb24tYnVpbGRlci9kZWZpbml0aW9uLWJ1aWxkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtdGFibGUvc3JjL2xpYi9idWlsZGVyL2NvbXBvbmVudHMvZGVmaW5pdGlvbi1idWlsZGVyL2RlZmluaXRpb24tYnVpbGRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7O0FBVTdELE1BQU0sT0FBTywwQkFBMEI7SUFJckMsWUFBb0IsY0FBd0M7UUFBeEMsbUJBQWMsR0FBZCxjQUFjLENBQTBCO1FBQzFELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsUUFBUTtRQUNOLDZCQUE2QjtRQUM3QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3BFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtZQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLDZFQUE2RSxDQUFDLEVBQUU7Z0JBQzNGLE9BQU87YUFDUjtTQUNGO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxnQkFBZ0IsQ0FBQyxLQUFhO1FBQzVCLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7T0FFRztJQUNILGVBQWUsQ0FBQyxLQUFhO1FBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7T0FFRztJQUNILGlCQUFpQixDQUFDLFNBQWlCLEVBQUUsT0FBZTtRQUNsRCxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsYUFBYSxDQUFDLElBQWE7UUFDekIsdURBQXVEO1FBQ3ZELElBQUksUUFBUSxHQUFRLFNBQVMsQ0FBQztRQUM5QixJQUFJLElBQUksRUFBRTtZQUNSLFFBQVEsR0FBRyxJQUFXLENBQUMsQ0FBQyw4Q0FBOEM7U0FDdkU7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxlQUFlLENBQUMsS0FBYSxFQUFFLE9BQVk7UUFDekMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRDs7T0FFRztJQUNILG9CQUFvQixDQUFDLE9BQVk7UUFDL0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNILE9BQU87UUFDTCxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7T0FFRztJQUNILGNBQWM7UUFDWixJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7O3VIQWpHVSwwQkFBMEI7MkdBQTFCLDBCQUEwQiw2RENmdkMsMm5EQWdEQTsyRkRqQ2EsMEJBQTBCO2tCQUx0QyxTQUFTOytCQUNFLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRGVmaW5pdGlvbiBCdWlsZGVyIENvbXBvbmVudFxuICogTWFpbiBjb250YWluZXIgY29tcG9uZW50IHRoYXQgb3JjaGVzdHJhdGVzIGFsbCBidWlsZGVyIHN1Yi1jb21wb25lbnRzXG4gKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEZWZpbml0aW9uQnVpbGRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kZWZpbml0aW9uLWJ1aWxkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBCdWlsZGVyU3RhdGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvYnVpbGRlci1zdGF0ZS5pbnRlcmZhY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdC1kZWZpbml0aW9uLWJ1aWxkZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZGVmaW5pdGlvbi1idWlsZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGVmaW5pdGlvbi1idWlsZGVyLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgRGVmaW5pdGlvbkJ1aWxkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHN0YXRlOiBCdWlsZGVyU3RhdGU7XG4gIHByaXZhdGUgc3RhdGVTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBidWlsZGVyU2VydmljZTogRGVmaW5pdGlvbkJ1aWxkZXJTZXJ2aWNlKSB7XG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMuYnVpbGRlclNlcnZpY2UuZ2V0U3RhdGUoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIFN1YnNjcmliZSB0byBzdGF0ZSBjaGFuZ2VzXG4gICAgdGhpcy5zdGF0ZVN1YnNjcmlwdGlvbiA9IHRoaXMuYnVpbGRlclNlcnZpY2Uuc3RhdGUkLnN1YnNjcmliZShzdGF0ZSA9PiB7XG4gICAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBuZXcgZGVmaW5pdGlvbiBhY3Rpb25cbiAgICovXG4gIG9uTmV3RGVmaW5pdGlvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5oYXNVbnNhdmVkQ2hhbmdlcykge1xuICAgICAgaWYgKCFjb25maXJtKCdZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjcmVhdGUgYSBuZXcgZGVmaW5pdGlvbj8nKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuYnVpbGRlclNlcnZpY2UubmV3RGVmaW5pdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBjb2x1bW4gc2VsZWN0aW9uXG4gICAqL1xuICBvbkNvbHVtblNlbGVjdGVkKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmJ1aWxkZXJTZXJ2aWNlLnNlbGVjdENvbHVtbihpbmRleCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGNvbHVtbiBkZWxldGlvblxuICAgKi9cbiAgb25Db2x1bW5EZWxldGVkKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmJ1aWxkZXJTZXJ2aWNlLmRlbGV0ZUNvbHVtbihpbmRleCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGNvbHVtbiByZW9yZGVyXG4gICAqL1xuICBvbkNvbHVtblJlb3JkZXJlZChmcm9tSW5kZXg6IG51bWJlciwgdG9JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5idWlsZGVyU2VydmljZS5yZW9yZGVyQ29sdW1ucyhmcm9tSW5kZXgsIHRvSW5kZXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBjb2x1bW4gYWRkXG4gICAqL1xuICBvbkNvbHVtbkFkZGVkKHR5cGU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBDb252ZXJ0IHN0cmluZyB0eXBlIHRvIENlbGxEYXRhVHlwZSBlbnVtIGlmIHByb3ZpZGVkXG4gICAgbGV0IGRhdGFUeXBlOiBhbnkgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHR5cGUpIHtcbiAgICAgIGRhdGFUeXBlID0gdHlwZSBhcyBhbnk7IC8vIFR5cGUgaXMgYWxyZWFkeSBhIENlbGxEYXRhVHlwZSBzdHJpbmcgdmFsdWVcbiAgICB9XG4gICAgdGhpcy5idWlsZGVyU2VydmljZS5hZGRDb2x1bW4oZGF0YVR5cGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBjb2x1bW4gdXBkYXRlXG4gICAqL1xuICBvbkNvbHVtblVwZGF0ZWQoaW5kZXg6IG51bWJlciwgdXBkYXRlczogYW55KTogdm9pZCB7XG4gICAgdGhpcy5idWlsZGVyU2VydmljZS51cGRhdGVDb2x1bW4oaW5kZXgsIHVwZGF0ZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSB0YWJsZSBjb25maWcgdXBkYXRlXG4gICAqL1xuICBvblRhYmxlQ29uZmlnVXBkYXRlZCh1cGRhdGVzOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmJ1aWxkZXJTZXJ2aWNlLnVwZGF0ZVRhYmxlU2V0dGluZ3ModXBkYXRlcyk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHByZXZpZXcgdG9nZ2xlXG4gICAqL1xuICBvblByZXZpZXdUb2dnbGVkKCk6IHZvaWQge1xuICAgIHRoaXMuYnVpbGRlclNlcnZpY2UudG9nZ2xlUHJldmlldygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBzYXZlIGFjdGlvblxuICAgKi9cbiAgb25TYXZlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmJ1aWxkZXJTZXJ2aWNlLm1hcmtBc1NhdmVkKCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGNvbHVtbiBjYW5jZWxcbiAgICovXG4gIG9uQ29sdW1uQ2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMuYnVpbGRlclNlcnZpY2UuY2xlYXJTZWxlY3Rpb24oKTtcbiAgfVxufVxuXG4iLCI8ZGl2IGNsYXNzPVwiZGVmaW5pdGlvbi1idWlsZGVyXCI+XG4gIDwhLS0gVG9vbGJhciAtLT5cbiAgPHN0LWJ1aWxkZXItdG9vbGJhclxuICAgIFtoYXNVbnNhdmVkQ2hhbmdlc109XCJzdGF0ZS5oYXNVbnNhdmVkQ2hhbmdlc1wiXG4gICAgKG5ld0RlZmluaXRpb24pPVwib25OZXdEZWZpbml0aW9uKClcIlxuICAgIChzYXZlZCk9XCJvblNhdmVkKClcIlxuICAgIChwcmV2aWV3VG9nZ2xlZCk9XCJvblByZXZpZXdUb2dnbGVkKClcIj5cbiAgPC9zdC1idWlsZGVyLXRvb2xiYXI+XG5cbiAgPGRpdiBjbGFzcz1cImJ1aWxkZXItY29udGVudFwiPlxuICAgIDwhLS0gTGVmdCBQYW5lbDogQ29sdW1uIExpc3QgYW5kIFRhYmxlIENvbmZpZyAtLT5cbiAgICA8ZGl2IGNsYXNzPVwibGVmdC1wYW5lbFwiPlxuICAgICAgPCEtLSBDb2x1bW4gTGlzdCAtLT5cbiAgICAgIDxzdC1jb2x1bW4tbGlzdFxuICAgICAgICBbY29sdW1uc109XCJzdGF0ZS50YWJsZUNvbmZpZy5jb2x1bW5zXCJcbiAgICAgICAgW3NlbGVjdGVkSW5kZXhdPVwic3RhdGUuc2VsZWN0ZWRDb2x1bW5JbmRleFwiXG4gICAgICAgIChjb2x1bW5TZWxlY3RlZCk9XCJvbkNvbHVtblNlbGVjdGVkKCRldmVudClcIlxuICAgICAgICAoY29sdW1uQWRkZWQpPVwib25Db2x1bW5BZGRlZCgkZXZlbnQpXCJcbiAgICAgICAgKGNvbHVtbkRlbGV0ZWQpPVwib25Db2x1bW5EZWxldGVkKCRldmVudClcIlxuICAgICAgICAoY29sdW1uUmVvcmRlcmVkKT1cIm9uQ29sdW1uUmVvcmRlcmVkKCRldmVudC5mcm9tSW5kZXgsICRldmVudC50b0luZGV4KVwiPlxuICAgICAgPC9zdC1jb2x1bW4tbGlzdD5cblxuICAgICAgPCEtLSBUYWJsZSBDb25maWcgRWRpdG9yIC0tPlxuICAgICAgPHN0LXRhYmxlLWNvbmZpZy1lZGl0b3JcbiAgICAgICAgW2NvbmZpZ109XCJzdGF0ZS50YWJsZUNvbmZpZ1wiXG4gICAgICAgIChjb25maWdVcGRhdGVkKT1cIm9uVGFibGVDb25maWdVcGRhdGVkKCRldmVudClcIj5cbiAgICAgIDwvc3QtdGFibGUtY29uZmlnLWVkaXRvcj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gTWlkZGxlIFBhbmVsOiBDb2x1bW4gRWRpdG9yIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJtaWRkbGUtcGFuZWxcIiAqbmdJZj1cInN0YXRlLnNlbGVjdGVkQ29sdW1uXCI+XG4gICAgICA8c3QtY29sdW1uLWVkaXRvclxuICAgICAgICBbY29sdW1uXT1cInN0YXRlLnNlbGVjdGVkQ29sdW1uXCJcbiAgICAgICAgW2NvbHVtbkluZGV4XT1cInN0YXRlLnNlbGVjdGVkQ29sdW1uSW5kZXghXCJcbiAgICAgICAgKGNvbHVtblVwZGF0ZWQpPVwib25Db2x1bW5VcGRhdGVkKHN0YXRlLnNlbGVjdGVkQ29sdW1uSW5kZXghLCAkZXZlbnQpXCJcbiAgICAgICAgKGNhbmNlbCk9XCJvbkNvbHVtbkNhbmNlbCgpXCI+XG4gICAgICA8L3N0LWNvbHVtbi1lZGl0b3I+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFJpZ2h0IFBhbmVsOiBQcmV2aWV3IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJyaWdodC1wYW5lbFwiICpuZ0lmPVwic3RhdGUucHJldmlld1Zpc2libGVcIj5cbiAgICAgIDxzdC1idWlsZGVyLXByZXZpZXdcbiAgICAgICAgW3RhYmxlQ29uZmlnXT1cInN0YXRlLnRhYmxlQ29uZmlnXCI+XG4gICAgICA8L3N0LWJ1aWxkZXItcHJldmlldz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuIl19
@@ -1,132 +0,0 @@
1
- /**
2
- * Table Config Editor Component
3
- * Form for table-level configuration
4
- */
5
- import { Component, Input, Output, EventEmitter } from '@angular/core';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@angular/forms";
8
- import * as i2 from "@angular/common";
9
- export class TableConfigEditorComponent {
10
- constructor(fb) {
11
- this.fb = fb;
12
- this.configUpdated = new EventEmitter();
13
- this.pageSizeOptions = [10, 25, 50, 100, 200];
14
- }
15
- ngOnInit() {
16
- this.buildForm();
17
- }
18
- ngOnChanges(changes) {
19
- if (changes['config'] && !changes['config'].firstChange && this.form) {
20
- this.updateForm();
21
- }
22
- }
23
- /**
24
- * Build the reactive form
25
- */
26
- buildForm() {
27
- this.form = this.fb.group({
28
- pagination: this.fb.group({
29
- enabled: [this.config.pagination?.enabled !== false],
30
- pageSize: [this.config.pagination?.pageSize || 25],
31
- showTopControls: [this.config.pagination?.showTopControls || false],
32
- showBottomControls: [this.config.pagination?.showBottomControls !== false],
33
- variant: [this.config.pagination?.variant || 'fluid']
34
- }),
35
- sorting: this.fb.group({
36
- enabled: [this.config.sorting?.enabled !== false],
37
- multiColumn: [this.config.sorting?.multiColumn || false],
38
- mode: [this.config.sorting?.mode || 'server']
39
- }),
40
- filtering: this.fb.group({
41
- enabled: [this.config.filtering?.enabled || false],
42
- mode: [this.config.filtering?.mode || 'server']
43
- }),
44
- display: this.fb.group({
45
- stickyHeader: [this.config.display?.stickyHeader !== false],
46
- maxHeight: [this.config.display?.maxHeight || null],
47
- virtualScroll: this.fb.group({
48
- enabled: [this.config.display?.virtualScroll?.enabled || false],
49
- itemSize: [this.config.display?.virtualScroll?.itemSize || 48],
50
- bufferSize: [this.config.display?.virtualScroll?.bufferSize || 5],
51
- viewportHeight: [this.config.display?.virtualScroll?.viewportHeight || 600]
52
- })
53
- }),
54
- keyboardNavigation: this.fb.group({
55
- enabled: [this.config.features?.keyboardNavigation?.enabled || false]
56
- })
57
- });
58
- // Emit changes when form values change
59
- this.form.valueChanges.subscribe(() => {
60
- this.onFormChange();
61
- });
62
- this.updateForm();
63
- }
64
- /**
65
- * Update form values from config
66
- */
67
- updateForm() {
68
- if (!this.form || !this.config)
69
- return;
70
- this.form.patchValue({
71
- pagination: {
72
- enabled: this.config.pagination?.enabled !== false,
73
- pageSize: this.config.pagination?.pageSize || 25,
74
- showTopControls: this.config.pagination?.showTopControls || false,
75
- showBottomControls: this.config.pagination?.showBottomControls !== false,
76
- variant: this.config.pagination?.variant || 'fluid'
77
- },
78
- sorting: {
79
- enabled: this.config.sorting?.enabled !== false,
80
- multiColumn: this.config.sorting?.multiColumn || false,
81
- mode: this.config.sorting?.mode || 'server'
82
- },
83
- filtering: {
84
- enabled: this.config.filtering?.enabled || false,
85
- mode: this.config.filtering?.mode || 'server'
86
- },
87
- display: {
88
- stickyHeader: this.config.display?.stickyHeader !== false,
89
- maxHeight: this.config.display?.maxHeight || null,
90
- virtualScroll: {
91
- enabled: this.config.display?.virtualScroll?.enabled || false,
92
- itemSize: this.config.display?.virtualScroll?.itemSize || 48,
93
- bufferSize: this.config.display?.virtualScroll?.bufferSize || 5,
94
- viewportHeight: this.config.display?.virtualScroll?.viewportHeight || 600
95
- }
96
- },
97
- keyboardNavigation: {
98
- enabled: this.config.features?.keyboardNavigation?.enabled || false
99
- }
100
- }, { emitEvent: false });
101
- }
102
- /**
103
- * Handle form changes
104
- */
105
- onFormChange() {
106
- if (this.form.valid) {
107
- const formValue = this.form.value;
108
- // Transform to match TableConfig structure
109
- const updates = {
110
- pagination: formValue.pagination,
111
- sorting: formValue.sorting,
112
- filtering: formValue.filtering,
113
- display: formValue.display,
114
- features: {
115
- keyboardNavigation: formValue.keyboardNavigation
116
- }
117
- };
118
- this.configUpdated.emit(updates);
119
- }
120
- }
121
- }
122
- TableConfigEditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TableConfigEditorComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
123
- TableConfigEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: TableConfigEditorComponent, selector: "st-table-config-editor", inputs: { config: "config" }, outputs: { configUpdated: "configUpdated" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"table-config-editor\">\n <h3>Table Configuration</h3>\n\n <form [formGroup]=\"form\" class=\"config-form\">\n <!-- Pagination -->\n <div class=\"config-section\">\n <h4>Pagination</h4>\n <div formGroupName=\"pagination\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" formControlName=\"enabled\">\n <span>Enabled</span>\n </label>\n <div class=\"form-group\" *ngIf=\"form.get('pagination.enabled')?.value\">\n <label>Page Size</label>\n <select formControlName=\"pageSize\" class=\"form-control\">\n <option *ngFor=\"let size of pageSizeOptions\" [value]=\"size\">\n {{ size }}\n </option>\n </select>\n </div>\n <label class=\"checkbox-label\" *ngIf=\"form.get('pagination.enabled')?.value\">\n <input type=\"checkbox\" formControlName=\"showTopControls\">\n <span>Show Top Controls</span>\n </label>\n <label class=\"checkbox-label\" *ngIf=\"form.get('pagination.enabled')?.value\">\n <input type=\"checkbox\" formControlName=\"showBottomControls\">\n <span>Show Bottom Controls</span>\n </label>\n <div class=\"form-group\" *ngIf=\"form.get('pagination.enabled')?.value\">\n <label>Variant</label>\n <select formControlName=\"variant\" class=\"form-control\">\n <option value=\"fluid\">Fluid</option>\n <option value=\"compact\">Compact</option>\n </select>\n </div>\n </div>\n </div>\n\n <!-- Sorting -->\n <div class=\"config-section\">\n <h4>Sorting</h4>\n <div formGroupName=\"sorting\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" formControlName=\"enabled\">\n <span>Enabled</span>\n </label>\n <label class=\"checkbox-label\" *ngIf=\"form.get('sorting.enabled')?.value\">\n <input type=\"checkbox\" formControlName=\"multiColumn\">\n <span>Multi-column</span>\n </label>\n <div class=\"form-group\" *ngIf=\"form.get('sorting.enabled')?.value\">\n <label>Mode</label>\n <select formControlName=\"mode\" class=\"form-control\">\n <option value=\"local\">Local</option>\n <option value=\"server\">Server</option>\n </select>\n </div>\n </div>\n </div>\n\n <!-- Filtering -->\n <div class=\"config-section\">\n <h4>Filtering</h4>\n <div formGroupName=\"filtering\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" formControlName=\"enabled\">\n <span>Enabled</span>\n </label>\n <div class=\"form-group\" *ngIf=\"form.get('filtering.enabled')?.value\">\n <label>Mode</label>\n <select formControlName=\"mode\" class=\"form-control\">\n <option value=\"local\">Local</option>\n <option value=\"server\">Server</option>\n </select>\n </div>\n </div>\n </div>\n\n <!-- Display -->\n <div class=\"config-section\">\n <h4>Display</h4>\n <div formGroupName=\"display\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" formControlName=\"stickyHeader\">\n <span>Sticky Header</span>\n </label>\n \n <!-- Virtual Scroll Configuration -->\n <div class=\"subsection\" formGroupName=\"virtualScroll\">\n <h5>Virtual Scroll</h5>\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" formControlName=\"enabled\">\n <span>Enable Virtual Scrolling (for large datasets)</span>\n </label>\n \n <div *ngIf=\"form.get('display.virtualScroll.enabled')?.value\" class=\"virtual-scroll-options\">\n <div class=\"form-group\">\n <label>Row Height (px)</label>\n <input type=\"number\" formControlName=\"itemSize\" class=\"form-control\" min=\"20\" max=\"200\">\n <small class=\"help-text\">Must be consistent for all rows</small>\n </div>\n \n <div class=\"form-group\">\n <label>Buffer Size (rows)</label>\n <input type=\"number\" formControlName=\"bufferSize\" class=\"form-control\" min=\"0\" max=\"20\">\n <small class=\"help-text\">Rows rendered above/below viewport</small>\n </div>\n \n <div class=\"form-group\">\n <label>Viewport Height (px)</label>\n <input type=\"number\" formControlName=\"viewportHeight\" class=\"form-control\" min=\"200\" max=\"2000\">\n <small class=\"help-text\">Height of scrollable container</small>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Keyboard Navigation -->\n <div class=\"config-section\">\n <h4>Keyboard Navigation</h4>\n <div formGroupName=\"keyboardNavigation\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" formControlName=\"enabled\">\n <span>Enable Excel-like Navigation</span>\n </label>\n </div>\n </div>\n </form>\n</div>\n\n", styles: [".table-config-editor{background-color:#fff;border-radius:4px;box-shadow:0 2px 4px #0000001a;padding:1rem;overflow-y:auto;max-height:500px}.table-config-editor h3{margin:0 0 1rem;font-size:1rem;font-weight:600;color:#333}.config-form{display:flex;flex-direction:column;gap:1.5rem}.config-section h4{margin:0 0 .75rem;font-size:.875rem;font-weight:600;color:#666;text-transform:uppercase;letter-spacing:.5px}.checkbox-label{display:flex;align-items:center;gap:.5rem;margin-bottom:.5rem;cursor:pointer;font-size:.875rem;color:#333}.checkbox-label input[type=checkbox]{width:18px;height:18px;cursor:pointer}.form-group{margin-top:.75rem}.form-group label{display:block;margin-bottom:.5rem;font-size:.875rem;font-weight:500;color:#333}.form-control{width:100%;padding:.5rem;border:1px solid #d0d0d0;border-radius:4px;font-size:.875rem}.form-control:focus{outline:none;border-color:#2196f3}.subsection{margin-top:1rem;padding:.75rem;background-color:#f9f9f9;border-radius:4px;border-left:3px solid #2196f3}.subsection h5{margin:0 0 .75rem;font-size:.8rem;font-weight:600;color:#555;text-transform:uppercase;letter-spacing:.5px}.virtual-scroll-options{margin-top:.75rem;padding-left:.5rem}.help-text{display:block;margin-top:.25rem;font-size:.75rem;color:#666;font-style:italic}\n"], directives: [{ type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { type: i1.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { type: i1.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }] });
124
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TableConfigEditorComponent, decorators: [{
125
- type: Component,
126
- args: [{ selector: 'st-table-config-editor', template: "<div class=\"table-config-editor\">\n <h3>Table Configuration</h3>\n\n <form [formGroup]=\"form\" class=\"config-form\">\n <!-- Pagination -->\n <div class=\"config-section\">\n <h4>Pagination</h4>\n <div formGroupName=\"pagination\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" formControlName=\"enabled\">\n <span>Enabled</span>\n </label>\n <div class=\"form-group\" *ngIf=\"form.get('pagination.enabled')?.value\">\n <label>Page Size</label>\n <select formControlName=\"pageSize\" class=\"form-control\">\n <option *ngFor=\"let size of pageSizeOptions\" [value]=\"size\">\n {{ size }}\n </option>\n </select>\n </div>\n <label class=\"checkbox-label\" *ngIf=\"form.get('pagination.enabled')?.value\">\n <input type=\"checkbox\" formControlName=\"showTopControls\">\n <span>Show Top Controls</span>\n </label>\n <label class=\"checkbox-label\" *ngIf=\"form.get('pagination.enabled')?.value\">\n <input type=\"checkbox\" formControlName=\"showBottomControls\">\n <span>Show Bottom Controls</span>\n </label>\n <div class=\"form-group\" *ngIf=\"form.get('pagination.enabled')?.value\">\n <label>Variant</label>\n <select formControlName=\"variant\" class=\"form-control\">\n <option value=\"fluid\">Fluid</option>\n <option value=\"compact\">Compact</option>\n </select>\n </div>\n </div>\n </div>\n\n <!-- Sorting -->\n <div class=\"config-section\">\n <h4>Sorting</h4>\n <div formGroupName=\"sorting\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" formControlName=\"enabled\">\n <span>Enabled</span>\n </label>\n <label class=\"checkbox-label\" *ngIf=\"form.get('sorting.enabled')?.value\">\n <input type=\"checkbox\" formControlName=\"multiColumn\">\n <span>Multi-column</span>\n </label>\n <div class=\"form-group\" *ngIf=\"form.get('sorting.enabled')?.value\">\n <label>Mode</label>\n <select formControlName=\"mode\" class=\"form-control\">\n <option value=\"local\">Local</option>\n <option value=\"server\">Server</option>\n </select>\n </div>\n </div>\n </div>\n\n <!-- Filtering -->\n <div class=\"config-section\">\n <h4>Filtering</h4>\n <div formGroupName=\"filtering\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" formControlName=\"enabled\">\n <span>Enabled</span>\n </label>\n <div class=\"form-group\" *ngIf=\"form.get('filtering.enabled')?.value\">\n <label>Mode</label>\n <select formControlName=\"mode\" class=\"form-control\">\n <option value=\"local\">Local</option>\n <option value=\"server\">Server</option>\n </select>\n </div>\n </div>\n </div>\n\n <!-- Display -->\n <div class=\"config-section\">\n <h4>Display</h4>\n <div formGroupName=\"display\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" formControlName=\"stickyHeader\">\n <span>Sticky Header</span>\n </label>\n \n <!-- Virtual Scroll Configuration -->\n <div class=\"subsection\" formGroupName=\"virtualScroll\">\n <h5>Virtual Scroll</h5>\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" formControlName=\"enabled\">\n <span>Enable Virtual Scrolling (for large datasets)</span>\n </label>\n \n <div *ngIf=\"form.get('display.virtualScroll.enabled')?.value\" class=\"virtual-scroll-options\">\n <div class=\"form-group\">\n <label>Row Height (px)</label>\n <input type=\"number\" formControlName=\"itemSize\" class=\"form-control\" min=\"20\" max=\"200\">\n <small class=\"help-text\">Must be consistent for all rows</small>\n </div>\n \n <div class=\"form-group\">\n <label>Buffer Size (rows)</label>\n <input type=\"number\" formControlName=\"bufferSize\" class=\"form-control\" min=\"0\" max=\"20\">\n <small class=\"help-text\">Rows rendered above/below viewport</small>\n </div>\n \n <div class=\"form-group\">\n <label>Viewport Height (px)</label>\n <input type=\"number\" formControlName=\"viewportHeight\" class=\"form-control\" min=\"200\" max=\"2000\">\n <small class=\"help-text\">Height of scrollable container</small>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Keyboard Navigation -->\n <div class=\"config-section\">\n <h4>Keyboard Navigation</h4>\n <div formGroupName=\"keyboardNavigation\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" formControlName=\"enabled\">\n <span>Enable Excel-like Navigation</span>\n </label>\n </div>\n </div>\n </form>\n</div>\n\n", styles: [".table-config-editor{background-color:#fff;border-radius:4px;box-shadow:0 2px 4px #0000001a;padding:1rem;overflow-y:auto;max-height:500px}.table-config-editor h3{margin:0 0 1rem;font-size:1rem;font-weight:600;color:#333}.config-form{display:flex;flex-direction:column;gap:1.5rem}.config-section h4{margin:0 0 .75rem;font-size:.875rem;font-weight:600;color:#666;text-transform:uppercase;letter-spacing:.5px}.checkbox-label{display:flex;align-items:center;gap:.5rem;margin-bottom:.5rem;cursor:pointer;font-size:.875rem;color:#333}.checkbox-label input[type=checkbox]{width:18px;height:18px;cursor:pointer}.form-group{margin-top:.75rem}.form-group label{display:block;margin-bottom:.5rem;font-size:.875rem;font-weight:500;color:#333}.form-control{width:100%;padding:.5rem;border:1px solid #d0d0d0;border-radius:4px;font-size:.875rem}.form-control:focus{outline:none;border-color:#2196f3}.subsection{margin-top:1rem;padding:.75rem;background-color:#f9f9f9;border-radius:4px;border-left:3px solid #2196f3}.subsection h5{margin:0 0 .75rem;font-size:.8rem;font-weight:600;color:#555;text-transform:uppercase;letter-spacing:.5px}.virtual-scroll-options{margin-top:.75rem;padding-left:.5rem}.help-text{display:block;margin-top:.25rem;font-size:.75rem;color:#666;font-style:italic}\n"] }]
127
- }], ctorParameters: function () { return [{ type: i1.FormBuilder }]; }, propDecorators: { config: [{
128
- type: Input
129
- }], configUpdated: [{
130
- type: Output
131
- }] } });
132
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29uZmlnLWVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC10YWJsZS9zcmMvbGliL2J1aWxkZXIvY29tcG9uZW50cy90YWJsZS1jb25maWctZWRpdG9yL3RhYmxlLWNvbmZpZy1lZGl0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtdGFibGUvc3JjL2xpYi9idWlsZGVyL2NvbXBvbmVudHMvdGFibGUtY29uZmlnLWVkaXRvci90YWJsZS1jb25maWctZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQW9DLE1BQU0sZUFBZSxDQUFDOzs7O0FBU3pHLE1BQU0sT0FBTywwQkFBMEI7SUFRckMsWUFBb0IsRUFBZTtRQUFmLE9BQUUsR0FBRixFQUFFLENBQWE7UUFOekIsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBd0IsQ0FBQztRQUkxRCxvQkFBZSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRVosQ0FBQztJQUV2QyxRQUFRO1FBQ04sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDcEUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQ25CO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssU0FBUztRQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxD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LENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ2xDO0lBQ0gsQ0FBQzs7dUhBM0hVLDBCQUEwQjsyR0FBMUIsMEJBQTBCLDhKQ2R2Qyw0bUtBbUlBOzJGRHJIYSwwQkFBMEI7a0JBTHRDLFNBQVM7K0JBQ0Usd0JBQXdCO2tHQUt6QixNQUFNO3NCQUFkLEtBQUs7Z0JBQ0ksYUFBYTtzQkFBdEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGFibGUgQ29uZmlnIEVkaXRvciBDb21wb25lbnRcbiAqIEZvcm0gZm9yIHRhYmxlLWxldmVsIGNvbmZpZ3VyYXRpb25cbiAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25Jbml0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUYWJsZUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uL21vZGVscy90YWJsZS1jb25maWcuaW50ZXJmYWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3QtdGFibGUtY29uZmlnLWVkaXRvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1jb25maWctZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUtY29uZmlnLWVkaXRvci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29uZmlnRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBjb25maWchOiBUYWJsZUNvbmZpZztcbiAgQE91dHB1dCgpIGNvbmZpZ1VwZGF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFBhcnRpYWw8VGFibGVDb25maWc+PigpO1xuXG4gIGZvcm0hOiBGb3JtR3JvdXA7XG5cbiAgcmVhZG9ubHkgcGFnZVNpemVPcHRpb25zID0gWzEwLCAyNSwgNTAsIDEwMCwgMjAwXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBGb3JtQnVpbGRlcikge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmJ1aWxkRm9ybSgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydjb25maWcnXSAmJiAhY2hhbmdlc1snY29uZmlnJ10uZmlyc3RDaGFuZ2UgJiYgdGhpcy5mb3JtKSB7XG4gICAgICB0aGlzLnVwZGF0ZUZvcm0oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgdGhlIHJlYWN0aXZlIGZvcm1cbiAgICovXG4gIHByaXZhdGUgYnVpbGRGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgcGFnaW5hdGlvbjogdGhpcy5mYi5ncm91cCh7XG4gICAgICAgIGVuYWJsZWQ6IFt0aGlzLmNvbmZpZy5wYWdpbmF0aW9uPy5lbmFibGVkICE9PSBmYWxzZV0sXG4gICAgICAgIHBhZ2VTaXplOiBbdGhpcy5jb25maWcucGFnaW5hdGlvbj8ucGFnZVNpemUgfHwgMjVdLFxuICAgICAgICBzaG93VG9wQ29udHJvbHM6IFt0aGlzLmNvbmZpZy5wYWdpbmF0aW9uPy5zaG93VG9wQ29udHJvbHMgfHwgZmFsc2VdLFxuICAgICAgICBzaG93Qm90dG9tQ29udHJvbHM6IFt0aGlzLmNvbmZpZy5wYWdpbmF0aW9uPy5zaG93Qm90dG9tQ29udHJvbHMgIT09IGZhbHNlXSxcbiAgICAgICAgdmFyaWFudDogW3RoaXMuY29uZmlnLnBhZ2luYXRpb24/LnZhcmlhbnQgfHwgJ2ZsdWlkJ11cbiAgICAgIH0pLFxuICAgICAgc29ydGluZzogdGhpcy5mYi5ncm91cCh7XG4gICAgICAgIGVuYWJsZWQ6IFt0aGlzLmNvbmZpZy5zb3J0aW5nPy5lbmFibGVkICE9PSBmYWxzZV0sXG4gICAgICAgIG11bHRpQ29sdW1uOiBbdGhpcy5jb25maWcuc29ydGluZz8ubXVsdGlDb2x1bW4gfHwgZmFsc2VdLFxuICAgICAgICBtb2RlOiBbdGhpcy5jb25maWcuc29ydGluZz8ubW9kZSB8fCAnc2VydmVyJ11cbiAgICAgIH0pLFxuICAgICAgZmlsdGVyaW5nOiB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgZW5hYmxlZDogW3RoaXMuY29uZmlnLmZpbHRlcmluZz8uZW5hYmxlZCB8fCBmYWxzZV0sXG4gICAgICAgIG1vZGU6IFt0aGlzLmNvbmZpZy5maWx0ZXJpbmc/Lm1vZGUgfHwgJ3NlcnZlciddXG4gICAgICB9KSxcbiAgICAgIGRpc3BsYXk6IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICBzdGlja3lIZWFkZXI6IFt0aGlzLmNvbmZpZy5kaXNwbGF5Py5zdGlja3lIZWFkZXIgIT09IGZhbHNlXSxcbiAgICAgICAgbWF4SGVpZ2h0OiBbdGhpcy5jb25maWcuZGlzcGxheT8ubWF4SGVpZ2h0IHx8IG51bGxdLFxuICAgICAgICB2aXJ0dWFsU2Nyb2xsOiB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgICBlbmFibGVkOiBbdGhpcy5jb25maWcuZGlzcGxheT8udmlydHVhbFNjcm9sbD8uZW5hYmxlZCB8fCBmYWxzZV0sXG4gICAgICAgICAgaXRlbVNpemU6IFt0aGlzLmNvbmZpZy5kaXNwbGF5Py52aXJ0dWFsU2Nyb2xsPy5pdGVtU2l6ZSB8fCA0OF0sXG4gICAgICAgICAgYnVmZmVyU2l6ZTogW3RoaXMuY29uZmlnLmRpc3BsYXk/LnZpcnR1YWxTY3JvbGw/LmJ1ZmZlclNpemUgfHwgNV0sXG4gICAgICAgICAgdmlld3BvcnRIZWlnaHQ6IFt0aGlzLmNvbmZpZy5kaXNwbGF5Py52aXJ0dWFsU2Nyb2xsPy52aWV3cG9ydEhlaWdodCB8fCA2MDBdXG4gICAgICAgIH0pXG4gICAgICB9KSxcbiAgICAgIGtleWJvYXJkTmF2aWdhdGlvbjogdGhpcy5mYi5ncm91cCh7XG4gICAgICAgIGVuYWJsZWQ6IFt0aGlzLmNvbmZpZy5mZWF0dXJlcz8ua2V5Ym9hcmROYXZpZ2F0aW9uPy5lbmFibGVkIHx8IGZhbHNlXVxuICAgICAgfSlcbiAgICB9KTtcblxuICAgIC8vIEVtaXQgY2hhbmdlcyB3aGVuIGZvcm0gdmFsdWVzIGNoYW5nZVxuICAgIHRoaXMuZm9ybS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMub25Gb3JtQ2hhbmdlKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnVwZGF0ZUZvcm0oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgZm9ybSB2YWx1ZXMgZnJvbSBjb25maWdcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlRm9ybSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZm9ybSB8fCAhdGhpcy5jb25maWcpIHJldHVybjtcblxuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgZW5hYmxlZDogdGhpcy5jb25maWcucGFnaW5hdGlvbj8uZW5hYmxlZCAhPT0gZmFsc2UsXG4gICAgICAgIHBhZ2VTaXplOiB0aGlzLmNvbmZpZy5wYWdpbmF0aW9uPy5wYWdlU2l6ZSB8fCAyNSxcbiAgICAgICAgc2hvd1RvcENvbnRyb2xzOiB0aGlzLmNvbmZpZy5wYWdpbmF0aW9uPy5zaG93VG9wQ29udHJvbHMgfHwgZmFsc2UsXG4gICAgICAgIHNob3dCb3R0b21Db250cm9sczogdGhpcy5jb25maWcucGFnaW5hdGlvbj8uc2hvd0JvdHRvbUNvbnRyb2xzICE9PSBmYWxzZSxcbiAgICAgICAgdmFyaWFudDogdGhpcy5jb25maWcucGFnaW5hdGlvbj8udmFyaWFudCB8fCAnZmx1aWQnXG4gICAgICB9LFxuICAgICAgc29ydGluZzoge1xuICAgICAgICBlbmFibGVkOiB0aGlzLmNvbmZpZy5zb3J0aW5nPy5lbmFibGVkICE9PSBmYWxzZSxcbiAgICAgICAgbXVsdGlDb2x1bW46IHRoaXMuY29uZmlnLnNvcnRpbmc/Lm11bHRpQ29sdW1uIHx8IGZhbHNlLFxuICAgICAgICBtb2RlOiB0aGlzLmNvbmZpZy5zb3J0aW5nPy5tb2RlIHx8ICdzZXJ2ZXInXG4gICAgICB9LFxuICAgICAgZmlsdGVyaW5nOiB7XG4gICAgICAgIGVuYWJsZWQ6IHRoaXMuY29uZmlnLmZpbHRlcmluZz8uZW5hYmxlZCB8fCBmYWxzZSxcbiAgICAgICAgbW9kZTogdGhpcy5jb25maWcuZmlsdGVyaW5nPy5tb2RlIHx8ICdzZXJ2ZXInXG4gICAgICB9LFxuICAgICAgZGlzcGxheToge1xuICAgICAgICBzdGlja3lIZWFkZXI6IHRoaXMuY29uZmlnLmRpc3BsYXk/LnN0aWNreUhlYWRlciAhPT0gZmFsc2UsXG4gICAgICAgIG1heEhlaWdodDogdGhpcy5jb25maWcuZGlzcGxheT8ubWF4SGVpZ2h0IHx8IG51bGwsXG4gICAgICAgIHZpcnR1YWxTY3JvbGw6IHtcbiAgICAgICAgICBlbmFibGVkOiB0aGlzLmNvbmZpZy5kaXNwbGF5Py52aXJ0dWFsU2Nyb2xsPy5lbmFibGVkIHx8IGZhbHNlLFxuICAgICAgICAgIGl0ZW1TaXplOiB0aGlzLmNvbmZpZy5kaXNwbGF5Py52aXJ0dWFsU2Nyb2xsPy5pdGVtU2l6ZSB8fCA0OCxcbiAgICAgICAgICBidWZmZXJTaXplOiB0aGlzLmNvbmZpZy5kaXNwbGF5Py52aXJ0dWFsU2Nyb2xsPy5idWZmZXJTaXplIHx8IDUsXG4gICAgICAgICAgdmlld3BvcnRIZWlnaHQ6IHRoaXMuY29uZmlnLmRpc3BsYXk/LnZpcnR1YWxTY3JvbGw/LnZpZXdwb3J0SGVpZ2h0IHx8IDYwMFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAga2V5Ym9hcmROYXZpZ2F0aW9uOiB7XG4gICAgICAgIGVuYWJsZWQ6IHRoaXMuY29uZmlnLmZlYXR1cmVzPy5rZXlib2FyZE5hdmlnYXRpb24/LmVuYWJsZWQgfHwgZmFsc2VcbiAgICAgIH1cbiAgICB9LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGZvcm0gY2hhbmdlc1xuICAgKi9cbiAgcHJpdmF0ZSBvbkZvcm1DaGFuZ2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZm9ybS52YWxpZCkge1xuICAgICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5mb3JtLnZhbHVlO1xuICAgICAgXG4gICAgICAvLyBUcmFuc2Zvcm0gdG8gbWF0Y2ggVGFibGVDb25maWcgc3RydWN0dXJlXG4gICAgICBjb25zdCB1cGRhdGVzOiBQYXJ0aWFsPFRhYmxlQ29uZmlnPiA9IHtcbiAgICAgICAgcGFnaW5hdGlvbjogZm9ybVZhbHVlLnBhZ2luYXRpb24sXG4gICAgICAgIHNvcnRpbmc6IGZvcm1WYWx1ZS5zb3J0aW5nLFxuICAgICAgICBmaWx0ZXJpbmc6IGZvcm1WYWx1ZS5maWx0ZXJpbmcsXG4gICAgICAgIGRpc3BsYXk6IGZvcm1WYWx1ZS5kaXNwbGF5LFxuICAgICAgICBmZWF0dXJlczoge1xuICAgICAgICAgIGtleWJvYXJkTmF2aWdhdGlvbjogZm9ybVZhbHVlLmtleWJvYXJkTmF2aWdhdGlvblxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgXG4gICAgICB0aGlzLmNvbmZpZ1VwZGF0ZWQuZW1pdCh1cGRhdGVzKTtcbiAgICB9XG4gIH1cbn1cblxuIiwiPGRpdiBjbGFzcz1cInRhYmxlLWNvbmZpZy1lZGl0b3JcIj5cbiAgPGgzPlRhYmxlIENvbmZpZ3VyYXRpb248L2gzPlxuXG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwiY29uZmlnLWZvcm1cIj5cbiAgICA8IS0tIFBhZ2luYXRpb24gLS0+XG4gICAgPGRpdiBjbGFzcz1cImNvbmZpZy1zZWN0aW9uXCI+XG4gICAgICA8aDQ+UGFnaW5hdGlvbjwvaDQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9XCJwYWdpbmF0aW9uXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImNoZWNrYm94LWxhYmVsXCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGZvcm1Db250cm9sTmFtZT1cImVuYWJsZWRcIj5cbiAgICAgICAgICA8c3Bhbj5FbmFibGVkPC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiICpuZ0lmPVwiZm9ybS5nZXQoJ3BhZ2luYXRpb24uZW5hYmxlZCcpPy52YWx1ZVwiPlxuICAgICAgICAgIDxsYWJlbD5QYWdlIFNpemU8L2xhYmVsPlxuICAgICAgICAgIDxzZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwicGFnZVNpemVcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgc2l6ZSBvZiBwYWdlU2l6ZU9wdGlvbnNcIiBbdmFsdWVdPVwic2l6ZVwiPlxuICAgICAgICAgICAgICB7eyBzaXplIH19XG4gICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImNoZWNrYm94LWxhYmVsXCIgKm5nSWY9XCJmb3JtLmdldCgncGFnaW5hdGlvbi5lbmFibGVkJyk/LnZhbHVlXCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGZvcm1Db250cm9sTmFtZT1cInNob3dUb3BDb250cm9sc1wiPlxuICAgICAgICAgIDxzcGFuPlNob3cgVG9wIENvbnRyb2xzPC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJjaGVja2JveC1sYWJlbFwiICpuZ0lmPVwiZm9ybS5nZXQoJ3BhZ2luYXRpb24uZW5hYmxlZCcpPy52YWx1ZVwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBmb3JtQ29udHJvbE5hbWU9XCJzaG93Qm90dG9tQ29udHJvbHNcIj5cbiAgICAgICAgICA8c3Bhbj5TaG93IEJvdHRvbSBDb250cm9sczwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiAqbmdJZj1cImZvcm0uZ2V0KCdwYWdpbmF0aW9uLmVuYWJsZWQnKT8udmFsdWVcIj5cbiAgICAgICAgICA8bGFiZWw+VmFyaWFudDwvbGFiZWw+XG4gICAgICAgICAgPHNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJ2YXJpYW50XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJmbHVpZFwiPkZsdWlkPC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiY29tcGFjdFwiPkNvbXBhY3Q8L29wdGlvbj5cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gU29ydGluZyAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY29uZmlnLXNlY3Rpb25cIj5cbiAgICAgIDxoND5Tb3J0aW5nPC9oND5cbiAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT1cInNvcnRpbmdcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiY2hlY2tib3gtbGFiZWxcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZm9ybUNvbnRyb2xOYW1lPVwiZW5hYmxlZFwiPlxuICAgICAgICAgIDxzcGFuPkVuYWJsZWQ8L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImNoZWNrYm94LWxhYmVsXCIgKm5nSWY9XCJmb3JtLmdldCgnc29ydGluZy5lbmFibGVkJyk/LnZhbHVlXCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGZvcm1Db250cm9sTmFtZT1cIm11bHRpQ29sdW1uXCI+XG4gICAgICAgICAgPHNwYW4+TXVsdGktY29sdW1uPC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiICpuZ0lmPVwiZm9ybS5nZXQoJ3NvcnRpbmcuZW5hYmxlZCcpPy52YWx1ZVwiPlxuICAgICAgICAgIDxsYWJlbD5Nb2RlPC9sYWJlbD5cbiAgICAgICAgICA8c2VsZWN0IGZvcm1Db250cm9sTmFtZT1cIm1vZGVcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImxvY2FsXCI+TG9jYWw8L29wdGlvbj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJzZXJ2ZXJcIj5TZXJ2ZXI8L29wdGlvbj5cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRmlsdGVyaW5nIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjb25maWctc2VjdGlvblwiPlxuICAgICAgPGg0PkZpbHRlcmluZzwvaDQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9XCJmaWx0ZXJpbmdcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiY2hlY2tib3gtbGFiZWxcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZm9ybUNvbnRyb2xOYW1lPVwiZW5hYmxlZFwiPlxuICAgICAgICAgIDxzcGFuPkVuYWJsZWQ8L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgKm5nSWY9XCJmb3JtLmdldCgnZmlsdGVyaW5nLmVuYWJsZWQnKT8udmFsdWVcIj5cbiAgICAgICAgICA8bGFiZWw+TW9kZTwvbGFiZWw+XG4gICAgICAgICAgPHNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJtb2RlXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJsb2NhbFwiPkxvY2FsPC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwic2VydmVyXCI+U2VydmVyPC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIERpc3BsYXkgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNvbmZpZy1zZWN0aW9uXCI+XG4gICAgICA8aDQ+RGlzcGxheTwvaDQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9XCJkaXNwbGF5XCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImNoZWNrYm94LWxhYmVsXCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGZvcm1Db250cm9sTmFtZT1cInN0aWNreUhlYWRlclwiPlxuICAgICAgICAgIDxzcGFuPlN0aWNreSBIZWFkZXI8L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIFxuICAgICAgICA8IS0tIFZpcnR1YWwgU2Nyb2xsIENvbmZpZ3VyYXRpb24gLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdWJzZWN0aW9uXCIgZm9ybUdyb3VwTmFtZT1cInZpcnR1YWxTY3JvbGxcIj5cbiAgICAgICAgICA8aDU+VmlydHVhbCBTY3JvbGw8L2g1PlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNoZWNrYm94LWxhYmVsXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZm9ybUNvbnRyb2xOYW1lPVwiZW5hYmxlZFwiPlxuICAgICAgICAgICAgPHNwYW4+RW5hYmxlIFZpcnR1YWwgU2Nyb2xsaW5nIChmb3IgbGFyZ2UgZGF0YXNldHMpPC9zcGFuPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgXG4gICAgICAgICAgPGRpdiAqbmdJZj1cImZvcm0uZ2V0KCdkaXNwbGF5LnZpcnR1YWxTY3JvbGwuZW5hYmxlZCcpPy52YWx1ZVwiIGNsYXNzPVwidmlydHVhbC1zY3JvbGwtb3B0aW9uc1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgPGxhYmVsPlJvdyBIZWlnaHQgKHB4KTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgZm9ybUNvbnRyb2xOYW1lPVwiaXRlbVNpemVcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIG1pbj1cIjIwXCIgbWF4PVwiMjAwXCI+XG4gICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImhlbHAtdGV4dFwiPk11c3QgYmUgY29uc2lzdGVudCBmb3IgYWxsIHJvd3M8L3NtYWxsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgIDxsYWJlbD5CdWZmZXIgU2l6ZSAocm93cyk8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGZvcm1Db250cm9sTmFtZT1cImJ1ZmZlclNpemVcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIG1pbj1cIjBcIiBtYXg9XCIyMFwiPlxuICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJoZWxwLXRleHRcIj5Sb3dzIHJlbmRlcmVkIGFib3ZlL2JlbG93IHZpZXdwb3J0PC9zbWFsbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICA8bGFiZWw+Vmlld3BvcnQgSGVpZ2h0IChweCk8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGZvcm1Db250cm9sTmFtZT1cInZpZXdwb3J0SGVpZ2h0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBtaW49XCIyMDBcIiBtYXg9XCIyMDAwXCI+XG4gICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImhlbHAtdGV4dFwiPkhlaWdodCBvZiBzY3JvbGxhYmxlIGNvbnRhaW5lcjwvc21hbGw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gS2V5Ym9hcmQgTmF2aWdhdGlvbiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY29uZmlnLXNlY3Rpb25cIj5cbiAgICAgIDxoND5LZXlib2FyZCBOYXZpZ2F0aW9uPC9oND5cbiAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT1cImtleWJvYXJkTmF2aWdhdGlvblwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJjaGVja2JveC1sYWJlbFwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBmb3JtQ29udHJvbE5hbWU9XCJlbmFibGVkXCI+XG4gICAgICAgICAgPHNwYW4+RW5hYmxlIEV4Y2VsLWxpa2UgTmF2aWdhdGlvbjwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Zvcm0+XG48L2Rpdj5cblxuIl19
@@ -1,70 +0,0 @@
1
- /**
2
- * Definition Builder Module
3
- * Module for the Visual UI Builder components
4
- */
5
- import { NgModule } from '@angular/core';
6
- import { CommonModule } from '@angular/common';
7
- import { ReactiveFormsModule } from '@angular/forms';
8
- // Builder Components
9
- import { DefinitionBuilderComponent } from './components/definition-builder/definition-builder.component';
10
- import { BuilderToolbarComponent } from './components/builder-toolbar/builder-toolbar.component';
11
- import { ColumnListComponent } from './components/column-list/column-list.component';
12
- import { TableConfigEditorComponent } from './components/table-config-editor/table-config-editor.component';
13
- import { BuilderPreviewComponent } from './components/builder-preview/builder-preview.component';
14
- import { SmartTableModule } from '../smart-table.module';
15
- import { SharedTableComponentsModule } from '../shared/shared-table-components.module';
16
- import * as i0 from "@angular/core";
17
- export class DefinitionBuilderModule {
18
- }
19
- DefinitionBuilderModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DefinitionBuilderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
20
- DefinitionBuilderModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DefinitionBuilderModule, declarations: [DefinitionBuilderComponent,
21
- BuilderToolbarComponent,
22
- ColumnListComponent,
23
- // ColumnEditorComponent moved to SharedTableComponentsModule
24
- TableConfigEditorComponent,
25
- BuilderPreviewComponent], imports: [CommonModule,
26
- ReactiveFormsModule,
27
- SmartTableModule,
28
- SharedTableComponentsModule // Import shared module for ColumnEditorComponent
29
- ], exports: [DefinitionBuilderComponent,
30
- BuilderToolbarComponent,
31
- ColumnListComponent,
32
- TableConfigEditorComponent,
33
- BuilderPreviewComponent,
34
- SharedTableComponentsModule // Re-export so consumers get ColumnEditorComponent
35
- ] });
36
- DefinitionBuilderModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DefinitionBuilderModule, imports: [[
37
- CommonModule,
38
- ReactiveFormsModule,
39
- SmartTableModule,
40
- SharedTableComponentsModule // Import shared module for ColumnEditorComponent
41
- ], SharedTableComponentsModule // Re-export so consumers get ColumnEditorComponent
42
- ] });
43
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DefinitionBuilderModule, decorators: [{
44
- type: NgModule,
45
- args: [{
46
- declarations: [
47
- DefinitionBuilderComponent,
48
- BuilderToolbarComponent,
49
- ColumnListComponent,
50
- // ColumnEditorComponent moved to SharedTableComponentsModule
51
- TableConfigEditorComponent,
52
- BuilderPreviewComponent,
53
- ],
54
- imports: [
55
- CommonModule,
56
- ReactiveFormsModule,
57
- SmartTableModule,
58
- SharedTableComponentsModule // Import shared module for ColumnEditorComponent
59
- ],
60
- exports: [
61
- DefinitionBuilderComponent,
62
- BuilderToolbarComponent,
63
- ColumnListComponent,
64
- TableConfigEditorComponent,
65
- BuilderPreviewComponent,
66
- SharedTableComponentsModule // Re-export so consumers get ColumnEditorComponent
67
- ]
68
- }]
69
- }] });
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmaW5pdGlvbi1idWlsZGVyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXRhYmxlL3NyYy9saWIvYnVpbGRlci9kZWZpbml0aW9uLWJ1aWxkZXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJELHFCQUFxQjtBQUNyQixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUMxRyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUNqRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNyRixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUM1RyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUNqRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7QUEwQnZGLE1BQU0sT0FBTyx1QkFBdUI7O29IQUF2Qix1QkFBdUI7cUhBQXZCLHVCQUF1QixpQkF0QmhDLDBCQUEwQjtRQUMxQix1QkFBdUI7UUFDdkIsbUJBQW1CO1FBQ25CLDZEQUE2RDtRQUM3RCwwQkFBMEI7UUFDMUIsdUJBQXVCLGFBR3ZCLFlBQVk7UUFDWixtQkFBbUI7UUFDbkIsZ0JBQWdCO1FBQ2hCLDJCQUEyQixDQUFFLGlEQUFpRDtpQkFHOUUsMEJBQTBCO1FBQzFCLHVCQUF1QjtRQUN2QixtQkFBbUI7UUFDbkIsMEJBQTBCO1FBQzFCLHVCQUF1QjtRQUN2QiwyQkFBMkIsQ0FBRSxtREFBbUQ7O3FIQUd2RSx1QkFBdUIsWUFmekI7WUFDUCxZQUFZO1lBQ1osbUJBQW1CO1lBQ25CLGdCQUFnQjtZQUNoQiwyQkFBMkIsQ0FBRSxpREFBaUQ7U0FDL0UsRUFPQywyQkFBMkIsQ0FBRSxtREFBbUQ7OzJGQUd2RSx1QkFBdUI7a0JBeEJuQyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRTt3QkFDWiwwQkFBMEI7d0JBQzFCLHVCQUF1Qjt3QkFDdkIsbUJBQW1CO3dCQUNuQiw2REFBNkQ7d0JBQzdELDBCQUEwQjt3QkFDMUIsdUJBQXVCO3FCQUN4QjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLGdCQUFnQjt3QkFDaEIsMkJBQTJCLENBQUUsaURBQWlEO3FCQUMvRTtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsMEJBQTBCO3dCQUMxQix1QkFBdUI7d0JBQ3ZCLG1CQUFtQjt3QkFDbkIsMEJBQTBCO3dCQUMxQix1QkFBdUI7d0JBQ3ZCLDJCQUEyQixDQUFFLG1EQUFtRDtxQkFDakY7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERlZmluaXRpb24gQnVpbGRlciBNb2R1bGVcbiAqIE1vZHVsZSBmb3IgdGhlIFZpc3VhbCBVSSBCdWlsZGVyIGNvbXBvbmVudHNcbiAqL1xuXG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbi8vIEJ1aWxkZXIgQ29tcG9uZW50c1xuaW1wb3J0IHsgRGVmaW5pdGlvbkJ1aWxkZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZGVmaW5pdGlvbi1idWlsZGVyL2RlZmluaXRpb24tYnVpbGRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnVpbGRlclRvb2xiYXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvYnVpbGRlci10b29sYmFyL2J1aWxkZXItdG9vbGJhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29sdW1uTGlzdENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jb2x1bW4tbGlzdC9jb2x1bW4tbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFibGVDb25maWdFZGl0b3JDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtY29uZmlnLWVkaXRvci90YWJsZS1jb25maWctZWRpdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCdWlsZGVyUHJldmlld0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9idWlsZGVyLXByZXZpZXcvYnVpbGRlci1wcmV2aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTbWFydFRhYmxlTW9kdWxlIH0gZnJvbSAnLi4vc21hcnQtdGFibGUubW9kdWxlJztcbmltcG9ydCB7IFNoYXJlZFRhYmxlQ29tcG9uZW50c01vZHVsZSB9IGZyb20gJy4uL3NoYXJlZC9zaGFyZWQtdGFibGUtY29tcG9uZW50cy5tb2R1bGUnO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBEZWZpbml0aW9uQnVpbGRlckNvbXBvbmVudCxcbiAgICBCdWlsZGVyVG9vbGJhckNvbXBvbmVudCxcbiAgICBDb2x1bW5MaXN0Q29tcG9uZW50LFxuICAgIC8vIENvbHVtbkVkaXRvckNvbXBvbmVudCBtb3ZlZCB0byBTaGFyZWRUYWJsZUNvbXBvbmVudHNNb2R1bGVcbiAgICBUYWJsZUNvbmZpZ0VkaXRvckNvbXBvbmVudCxcbiAgICBCdWlsZGVyUHJldmlld0NvbXBvbmVudCxcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIFNtYXJ0VGFibGVNb2R1bGUsXG4gICAgU2hhcmVkVGFibGVDb21wb25lbnRzTW9kdWxlICAvLyBJbXBvcnQgc2hhcmVkIG1vZHVsZSBmb3IgQ29sdW1uRWRpdG9yQ29tcG9uZW50XG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBEZWZpbml0aW9uQnVpbGRlckNvbXBvbmVudCxcbiAgICBCdWlsZGVyVG9vbGJhckNvbXBvbmVudCxcbiAgICBDb2x1bW5MaXN0Q29tcG9uZW50LFxuICAgIFRhYmxlQ29uZmlnRWRpdG9yQ29tcG9uZW50LFxuICAgIEJ1aWxkZXJQcmV2aWV3Q29tcG9uZW50LFxuICAgIFNoYXJlZFRhYmxlQ29tcG9uZW50c01vZHVsZSAgLy8gUmUtZXhwb3J0IHNvIGNvbnN1bWVycyBnZXQgQ29sdW1uRWRpdG9yQ29tcG9uZW50XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRGVmaW5pdGlvbkJ1aWxkZXJNb2R1bGUgeyB9XG5cbiJdfQ==
@@ -1,5 +0,0 @@
1
- /**
2
- * Builder state interface - tracks the current state of the definition builder
3
- */
4
- export {};
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci1zdGF0ZS5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC10YWJsZS9zcmMvbGliL2J1aWxkZXIvbW9kZWxzL2J1aWxkZXItc3RhdGUuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBCdWlsZGVyIHN0YXRlIGludGVyZmFjZSAtIHRyYWNrcyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgZGVmaW5pdGlvbiBidWlsZGVyXG4gKi9cblxuaW1wb3J0IHsgVGFibGVDb25maWcgfSBmcm9tICcuLi8uLi9tb2RlbHMvdGFibGUtY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDb2x1bW5Db25maWcgfSBmcm9tICcuLi8uLi9tb2RlbHMvY29sdW1uLWNvbmZpZy5pbnRlcmZhY2UnO1xuXG4vKipcbiAqIEN1cnJlbnQgc3RhdGUgb2YgdGhlIGRlZmluaXRpb24gYnVpbGRlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkZXJTdGF0ZSB7XG4gIC8qKlxuICAgKiBDdXJyZW50IHRhYmxlIGNvbmZpZ3VyYXRpb24gYmVpbmcgZWRpdGVkXG4gICAqL1xuICB0YWJsZUNvbmZpZzogVGFibGVDb25maWc7XG5cbiAgLyoqXG4gICAqIEN1cnJlbnRseSBzZWxlY3RlZCBjb2x1bW4gZm9yIGVkaXRpbmcgKG51bGwgaWYgbm9uZSBzZWxlY3RlZClcbiAgICovXG4gIHNlbGVjdGVkQ29sdW1uOiBDb2x1bW5Db25maWcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBJbmRleCBvZiBzZWxlY3RlZCBjb2x1bW4gaW4gY29sdW1ucyBhcnJheVxuICAgKi9cbiAgc2VsZWN0ZWRDb2x1bW5JbmRleDogbnVtYmVyIHwgbnVsbDtcblxuICAvKipcbiAgICogV2hldGhlciBwcmV2aWV3IGlzIHZpc2libGVcbiAgICovXG4gIHByZXZpZXdWaXNpYmxlOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZXJlIGFyZSB1bnNhdmVkIGNoYW5nZXNcbiAgICovXG4gIGhhc1Vuc2F2ZWRDaGFuZ2VzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMYXN0IHNhdmVkIGNvbmZpZ3VyYXRpb24gKGZvciBjb21wYXJpc29uKVxuICAgKi9cbiAgbGFzdFNhdmVkQ29uZmlnPzogVGFibGVDb25maWc7XG59XG5cbi8qKlxuICogRXhwb3J0IGZvcm1hdCBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhwb3J0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBFeHBvcnQgZm9ybWF0IHR5cGVcbiAgICovXG4gIGZvcm1hdDogJ2pzb24nIHwgJ3R5cGVzY3JpcHQnO1xuXG4gIC8qKlxuICAgKiBJbmNsdWRlIGNvbW1lbnRzIGluIFR5cGVTY3JpcHQgZXhwb3J0XG4gICAqL1xuICBpbmNsdWRlQ29tbWVudHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBWYXJpYWJsZSBuYW1lIGZvciBUeXBlU2NyaXB0IGV4cG9ydFxuICAgKi9cbiAgdmFyaWFibGVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGaWxlIG5hbWUgKHdpdGhvdXQgZXh0ZW5zaW9uKVxuICAgKi9cbiAgZmlsZU5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogSW1wb3J0IHJlc3VsdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEltcG9ydFJlc3VsdCB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIGltcG9ydCB3YXMgc3VjY2Vzc2Z1bFxuICAgKi9cbiAgc3VjY2VzczogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW1wb3J0ZWQgdGFibGUgY29uZmlndXJhdGlvbiAoaWYgc3VjY2Vzc2Z1bClcbiAgICovXG4gIHRhYmxlQ29uZmlnPzogVGFibGVDb25maWc7XG5cbiAgLyoqXG4gICAqIEVycm9yIG1lc3NhZ2UgKGlmIGZhaWxlZClcbiAgICovXG4gIGVycm9yPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0aW9uIGVycm9ycyAoaWYgYW55KVxuICAgKi9cbiAgdmFsaWRhdGlvbkVycm9ycz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFZhbGlkYXRpb24gZXJyb3IgZm9yIGZvcm0gZmllbGRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGlvbkVycm9yIHtcbiAgLyoqXG4gICAqIEZpZWxkIHBhdGggKGUuZy4sICdjb2x1bW5zWzBdLmtleScpXG4gICAqL1xuICBmaWVsZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFcnJvciBtZXNzYWdlXG4gICAqL1xuICBtZXNzYWdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEVycm9yIGNvZGVcbiAgICovXG4gIGNvZGU/OiBzdHJpbmc7XG59XG5cbiJdfQ==