@aquera/ngx-smart-table 0.0.2-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 (169) hide show
  1. package/README.md +152 -0
  2. package/aquera-ngx-smart-table.d.ts +5 -0
  3. package/esm2020/aquera-ngx-smart-table.mjs +5 -0
  4. package/esm2020/lib/builder/components/builder-preview/builder-preview.component.mjs +63 -0
  5. package/esm2020/lib/builder/components/builder-toolbar/builder-toolbar.component.mjs +115 -0
  6. package/esm2020/lib/builder/components/column-editor/column-editor.component.mjs +206 -0
  7. package/esm2020/lib/builder/components/column-list/column-list.component.mjs +125 -0
  8. package/esm2020/lib/builder/components/definition-builder/definition-builder.component.mjs +105 -0
  9. package/esm2020/lib/builder/components/table-config-editor/table-config-editor.component.mjs +132 -0
  10. package/esm2020/lib/builder/definition-builder.module.mjs +70 -0
  11. package/esm2020/lib/builder/models/builder-state.interface.mjs +5 -0
  12. package/esm2020/lib/builder/services/definition-builder.service.mjs +251 -0
  13. package/esm2020/lib/builder/services/definition-export.service.mjs +167 -0
  14. package/esm2020/lib/builder/services/definition-import.service.mjs +193 -0
  15. package/esm2020/lib/builder/services/sample-data-generator.service.mjs +126 -0
  16. package/esm2020/lib/builder/utils/config-validator.util.mjs +165 -0
  17. package/esm2020/lib/builder/utils/typescript-generator.util.mjs +206 -0
  18. package/esm2020/lib/editors/index.mjs +9 -0
  19. package/esm2020/lib/editors/nile-autocomplete-editor.mjs +228 -0
  20. package/esm2020/lib/editors/nile-calendar-editor.mjs +214 -0
  21. package/esm2020/lib/editors/nile-date-picker-editor.mjs +227 -0
  22. package/esm2020/lib/editors/nile-input-editor.mjs +235 -0
  23. package/esm2020/lib/editors/nile-select-editor.mjs +317 -0
  24. package/esm2020/lib/factories/column-config.factory.mjs +231 -0
  25. package/esm2020/lib/models/autosave-config.interface.mjs +8 -0
  26. package/esm2020/lib/models/base-column-config.class.mjs +253 -0
  27. package/esm2020/lib/models/cell-strategies.interface.mjs +6 -0
  28. package/esm2020/lib/models/cell-types.mjs +147 -0
  29. package/esm2020/lib/models/column-action.interface.mjs +6 -0
  30. package/esm2020/lib/models/column-config.interface.mjs +43 -0
  31. package/esm2020/lib/models/column-config.utils.mjs +101 -0
  32. package/esm2020/lib/models/row-action.interface.mjs +5 -0
  33. package/esm2020/lib/models/row-validator.interface.mjs +2 -0
  34. package/esm2020/lib/models/schema-validation.interface.mjs +2 -0
  35. package/esm2020/lib/models/sheet-action.interface.mjs +5 -0
  36. package/esm2020/lib/models/sheet-config.interface.mjs +5 -0
  37. package/esm2020/lib/models/table-config.interface.mjs +106 -0
  38. package/esm2020/lib/models/table-validator.interface.mjs +2 -0
  39. package/esm2020/lib/models/workbook-action.interface.mjs +5 -0
  40. package/esm2020/lib/models/workbook-config.interface.mjs +5 -0
  41. package/esm2020/lib/renderer/components/st-add-column-button/st-add-column-button.component.mjs +24 -0
  42. package/esm2020/lib/renderer/components/st-cell/st-cell.component.mjs +391 -0
  43. package/esm2020/lib/renderer/components/st-column-editor-modal/st-column-editor-modal.component.mjs +103 -0
  44. package/esm2020/lib/renderer/components/st-column-filter/st-column-filter.component.mjs +383 -0
  45. package/esm2020/lib/renderer/components/st-column-menu/st-column-menu.component.mjs +232 -0
  46. package/esm2020/lib/renderer/components/st-column-visibility/st-column-visibility.component.mjs +97 -0
  47. package/esm2020/lib/renderer/components/st-header/st-header.component.mjs +157 -0
  48. package/esm2020/lib/renderer/components/st-pagination/st-pagination.component.mjs +87 -0
  49. package/esm2020/lib/renderer/components/st-row-actions-dropdown/st-row-actions-dropdown.component.mjs +167 -0
  50. package/esm2020/lib/renderer/components/st-sheet/st-sheet.component.mjs +165 -0
  51. package/esm2020/lib/renderer/components/st-sheet-actions/st-sheet-actions.component.mjs +112 -0
  52. package/esm2020/lib/renderer/components/st-table/st-table.component.mjs +1246 -0
  53. package/esm2020/lib/renderer/components/st-table-actions/st-table-actions.component.mjs +171 -0
  54. package/esm2020/lib/renderer/components/st-workbook/st-workbook.component.mjs +489 -0
  55. package/esm2020/lib/renderer/directives/click-outside.directive.mjs +28 -0
  56. package/esm2020/lib/renderer/directives/st-column-resize.directive.mjs +108 -0
  57. package/esm2020/lib/renderer/directives/st-keyboard-navigation.directive.mjs +73 -0
  58. package/esm2020/lib/renderer/models/cell-state.interface.mjs +66 -0
  59. package/esm2020/lib/renderer/models/cell.class.mjs +389 -0
  60. package/esm2020/lib/renderer/models/row-validation-state.interface.mjs +7 -0
  61. package/esm2020/lib/renderer/models/sheet-state.class.mjs +90 -0
  62. package/esm2020/lib/renderer/models/sheet-state.interface.mjs +5 -0
  63. package/esm2020/lib/renderer/models/table-state.class.mjs +841 -0
  64. package/esm2020/lib/renderer/models/table-state.interface.mjs +5 -0
  65. package/esm2020/lib/renderer/models/table-types.mjs +29 -0
  66. package/esm2020/lib/renderer/models/table-validation-state.interface.mjs +7 -0
  67. package/esm2020/lib/renderer/models/workbook-state.class.mjs +174 -0
  68. package/esm2020/lib/renderer/models/workbook-state.interface.mjs +5 -0
  69. package/esm2020/lib/renderer/models/z-index.enum.mjs +55 -0
  70. package/esm2020/lib/schemas/table-config.schema.mjs +472 -0
  71. package/esm2020/lib/services/autosave.service.mjs +92 -0
  72. package/esm2020/lib/services/custom-validation-rules.util.mjs +124 -0
  73. package/esm2020/lib/services/json-schema-validator.service.mjs +216 -0
  74. package/esm2020/lib/services/row-validation.service.mjs +42 -0
  75. package/esm2020/lib/services/validation-logger.service.mjs +177 -0
  76. package/esm2020/lib/services/virtual-scroll.service.mjs +52 -0
  77. package/esm2020/lib/shared/shared-table-components.module.mjs +35 -0
  78. package/esm2020/lib/smart-table.module.mjs +124 -0
  79. package/esm2020/lib/strategies/default-editors.mjs +433 -0
  80. package/esm2020/lib/strategies/default-formatters.mjs +238 -0
  81. package/esm2020/lib/strategies/default-validators.mjs +327 -0
  82. package/esm2020/public-api.mjs +146 -0
  83. package/fesm2015/aquera-ngx-smart-table.mjs +11860 -0
  84. package/fesm2015/aquera-ngx-smart-table.mjs.map +1 -0
  85. package/fesm2020/aquera-ngx-smart-table.mjs +11897 -0
  86. package/fesm2020/aquera-ngx-smart-table.mjs.map +1 -0
  87. package/lib/builder/components/builder-preview/builder-preview.component.d.ts +31 -0
  88. package/lib/builder/components/builder-toolbar/builder-toolbar.component.d.ts +53 -0
  89. package/lib/builder/components/column-editor/column-editor.component.d.ts +69 -0
  90. package/lib/builder/components/column-list/column-list.component.d.ts +65 -0
  91. package/lib/builder/components/definition-builder/definition-builder.component.d.ts +58 -0
  92. package/lib/builder/components/table-config-editor/table-config-editor.component.d.ts +32 -0
  93. package/lib/builder/definition-builder.module.d.ts +15 -0
  94. package/lib/builder/models/builder-state.interface.d.ts +93 -0
  95. package/lib/builder/services/definition-builder.service.d.ts +80 -0
  96. package/lib/builder/services/definition-export.service.d.ts +59 -0
  97. package/lib/builder/services/definition-import.service.d.ts +31 -0
  98. package/lib/builder/services/sample-data-generator.service.d.ts +41 -0
  99. package/lib/builder/utils/config-validator.util.d.ts +32 -0
  100. package/lib/builder/utils/typescript-generator.util.d.ts +29 -0
  101. package/lib/editors/index.d.ts +8 -0
  102. package/lib/editors/nile-autocomplete-editor.d.ts +102 -0
  103. package/lib/editors/nile-calendar-editor.d.ts +89 -0
  104. package/lib/editors/nile-date-picker-editor.d.ts +95 -0
  105. package/lib/editors/nile-input-editor.d.ts +67 -0
  106. package/lib/editors/nile-select-editor.d.ts +109 -0
  107. package/lib/factories/column-config.factory.d.ts +73 -0
  108. package/lib/models/autosave-config.interface.d.ts +23 -0
  109. package/lib/models/base-column-config.class.d.ts +115 -0
  110. package/lib/models/cell-strategies.interface.d.ts +181 -0
  111. package/lib/models/cell-types.d.ts +337 -0
  112. package/lib/models/column-action.interface.d.ts +86 -0
  113. package/lib/models/column-config.interface.d.ts +272 -0
  114. package/lib/models/column-config.utils.d.ts +37 -0
  115. package/lib/models/row-action.interface.d.ts +86 -0
  116. package/lib/models/row-validator.interface.d.ts +37 -0
  117. package/lib/models/schema-validation.interface.d.ts +42 -0
  118. package/lib/models/sheet-action.interface.d.ts +59 -0
  119. package/lib/models/sheet-config.interface.d.ts +41 -0
  120. package/lib/models/table-config.interface.d.ts +245 -0
  121. package/lib/models/table-validator.interface.d.ts +40 -0
  122. package/lib/models/workbook-action.interface.d.ts +90 -0
  123. package/lib/models/workbook-config.interface.d.ts +107 -0
  124. package/lib/renderer/components/st-add-column-button/st-add-column-button.component.d.ts +9 -0
  125. package/lib/renderer/components/st-cell/st-cell.component.d.ts +69 -0
  126. package/lib/renderer/components/st-column-editor-modal/st-column-editor-modal.component.d.ts +39 -0
  127. package/lib/renderer/components/st-column-filter/st-column-filter.component.d.ts +139 -0
  128. package/lib/renderer/components/st-column-menu/st-column-menu.component.d.ts +81 -0
  129. package/lib/renderer/components/st-column-visibility/st-column-visibility.component.d.ts +44 -0
  130. package/lib/renderer/components/st-header/st-header.component.d.ts +93 -0
  131. package/lib/renderer/components/st-pagination/st-pagination.component.d.ts +42 -0
  132. package/lib/renderer/components/st-row-actions-dropdown/st-row-actions-dropdown.component.d.ts +67 -0
  133. package/lib/renderer/components/st-sheet/st-sheet.component.d.ts +98 -0
  134. package/lib/renderer/components/st-sheet-actions/st-sheet-actions.component.d.ts +58 -0
  135. package/lib/renderer/components/st-table/st-table.component.d.ts +349 -0
  136. package/lib/renderer/components/st-table-actions/st-table-actions.component.d.ts +77 -0
  137. package/lib/renderer/components/st-workbook/st-workbook.component.d.ts +235 -0
  138. package/lib/renderer/directives/click-outside.directive.d.ts +10 -0
  139. package/lib/renderer/directives/st-column-resize.directive.d.ts +44 -0
  140. package/lib/renderer/directives/st-keyboard-navigation.directive.d.ts +15 -0
  141. package/lib/renderer/models/cell-state.interface.d.ts +118 -0
  142. package/lib/renderer/models/cell.class.d.ts +174 -0
  143. package/lib/renderer/models/row-validation-state.interface.d.ts +27 -0
  144. package/lib/renderer/models/sheet-state.class.d.ts +67 -0
  145. package/lib/renderer/models/sheet-state.interface.d.ts +55 -0
  146. package/lib/renderer/models/table-state.class.d.ts +313 -0
  147. package/lib/renderer/models/table-state.interface.d.ts +18 -0
  148. package/lib/renderer/models/table-types.d.ts +228 -0
  149. package/lib/renderer/models/table-validation-state.interface.d.ts +34 -0
  150. package/lib/renderer/models/workbook-state.class.d.ts +117 -0
  151. package/lib/renderer/models/workbook-state.interface.d.ts +71 -0
  152. package/lib/renderer/models/z-index.enum.d.ts +44 -0
  153. package/lib/schemas/table-config.schema.d.ts +455 -0
  154. package/lib/services/autosave.service.d.ts +73 -0
  155. package/lib/services/custom-validation-rules.util.d.ts +12 -0
  156. package/lib/services/json-schema-validator.service.d.ts +49 -0
  157. package/lib/services/row-validation.service.d.ts +17 -0
  158. package/lib/services/validation-logger.service.d.ts +87 -0
  159. package/lib/services/virtual-scroll.service.d.ts +44 -0
  160. package/lib/shared/shared-table-components.module.d.ts +9 -0
  161. package/lib/smart-table.module.d.ts +26 -0
  162. package/lib/strategies/default-editors.d.ts +109 -0
  163. package/lib/strategies/default-formatters.d.ts +116 -0
  164. package/lib/strategies/default-validators.d.ts +113 -0
  165. package/package.json +42 -0
  166. package/public-api.d.ts +70 -0
  167. package/src/lib/builder/README.md +30 -0
  168. package/src/lib/editors/README.md +303 -0
  169. package/src/lib/renderer/components/st-column-filter/README.md +286 -0
@@ -0,0 +1,165 @@
1
+ /**
2
+ * Configuration validator utility
3
+ * Validates TableConfig and ColumnConfig objects
4
+ */
5
+ /**
6
+ * Validate a TableConfig
7
+ * @param config Table configuration to validate
8
+ * @returns Array of validation errors (empty if valid)
9
+ */
10
+ export function validateTableConfig(config) {
11
+ const errors = [];
12
+ // Check if columns array exists and is not empty
13
+ if (!config.columns || !Array.isArray(config.columns)) {
14
+ errors.push({
15
+ field: 'columns',
16
+ message: 'Columns array is required',
17
+ code: 'REQUIRED'
18
+ });
19
+ return errors; // Can't continue validation without columns
20
+ }
21
+ if (config.columns.length === 0) {
22
+ errors.push({
23
+ field: 'columns',
24
+ message: 'At least one column is required',
25
+ code: 'MIN_LENGTH'
26
+ });
27
+ }
28
+ // Validate each column
29
+ config.columns.forEach((column, index) => {
30
+ const columnErrors = validateColumnConfig(column, index);
31
+ errors.push(...columnErrors);
32
+ });
33
+ // Check for duplicate column keys
34
+ const keys = config.columns.map(col => col.key);
35
+ const duplicateKeys = keys.filter((key, index) => keys.indexOf(key) !== index);
36
+ if (duplicateKeys.length > 0) {
37
+ duplicateKeys.forEach(key => {
38
+ errors.push({
39
+ field: `columns[].key`,
40
+ message: `Duplicate column key: ${key}`,
41
+ code: 'DUPLICATE_KEY'
42
+ });
43
+ });
44
+ }
45
+ // Validate pagination config if provided
46
+ if (config.pagination) {
47
+ if (config.pagination.pageSize !== undefined && config.pagination.pageSize <= 0) {
48
+ errors.push({
49
+ field: 'pagination.pageSize',
50
+ message: 'Page size must be greater than 0',
51
+ code: 'INVALID_VALUE'
52
+ });
53
+ }
54
+ if (config.pagination.pageSizeOptions) {
55
+ const invalidSizes = config.pagination.pageSizeOptions.filter(size => size <= 0);
56
+ if (invalidSizes.length > 0) {
57
+ errors.push({
58
+ field: 'pagination.pageSizeOptions',
59
+ message: 'All page size options must be greater than 0',
60
+ code: 'INVALID_VALUE'
61
+ });
62
+ }
63
+ }
64
+ }
65
+ return errors;
66
+ }
67
+ /**
68
+ * Validate a ColumnConfig
69
+ * @param column Column configuration to validate
70
+ * @param index Column index (for error messages)
71
+ * @returns Array of validation errors (empty if valid)
72
+ */
73
+ export function validateColumnConfig(column, index = 0) {
74
+ const errors = [];
75
+ const prefix = `columns[${index}]`;
76
+ // Key is required
77
+ if (!column.key || typeof column.key !== 'string' || column.key.trim() === '') {
78
+ errors.push({
79
+ field: `${prefix}.key`,
80
+ message: 'Column key is required and must be a non-empty string',
81
+ code: 'REQUIRED'
82
+ });
83
+ }
84
+ else {
85
+ // Key must be a valid identifier
86
+ if (!/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(column.key)) {
87
+ errors.push({
88
+ field: `${prefix}.key`,
89
+ message: 'Column key must be a valid identifier (letters, numbers, underscore, dollar sign)',
90
+ code: 'INVALID_FORMAT'
91
+ });
92
+ }
93
+ }
94
+ // Width constraints
95
+ if (column.width !== undefined) {
96
+ if (typeof column.width === 'number' && column.width <= 0) {
97
+ errors.push({
98
+ field: `${prefix}.width`,
99
+ message: 'Column width must be greater than 0',
100
+ code: 'INVALID_VALUE'
101
+ });
102
+ }
103
+ }
104
+ if (column.minWidth !== undefined && column.minWidth <= 0) {
105
+ errors.push({
106
+ field: `${prefix}.minWidth`,
107
+ message: 'Minimum width must be greater than 0',
108
+ code: 'INVALID_VALUE'
109
+ });
110
+ }
111
+ if (column.maxWidth !== undefined && column.maxWidth <= 0) {
112
+ errors.push({
113
+ field: `${prefix}.maxWidth`,
114
+ message: 'Maximum width must be greater than 0',
115
+ code: 'INVALID_VALUE'
116
+ });
117
+ }
118
+ // Width constraints: minWidth <= width <= maxWidth
119
+ if (typeof column.width === 'number' &&
120
+ column.minWidth !== undefined &&
121
+ column.width < column.minWidth) {
122
+ errors.push({
123
+ field: `${prefix}.width`,
124
+ message: `Width (${column.width}) must be greater than or equal to minWidth (${column.minWidth})`,
125
+ code: 'CONSTRAINT_VIOLATION'
126
+ });
127
+ }
128
+ if (typeof column.width === 'number' &&
129
+ column.maxWidth !== undefined &&
130
+ column.width > column.maxWidth) {
131
+ errors.push({
132
+ field: `${prefix}.width`,
133
+ message: `Width (${column.width}) must be less than or equal to maxWidth (${column.maxWidth})`,
134
+ code: 'CONSTRAINT_VIOLATION'
135
+ });
136
+ }
137
+ // Sticky columns must have defined width
138
+ if (column.sticky && (column.sticky === 'left' || column.sticky === 'right')) {
139
+ if (column.width === undefined || column.width === 'auto') {
140
+ errors.push({
141
+ field: `${prefix}.width`,
142
+ message: 'Sticky columns must have a defined width (not auto)',
143
+ code: 'CONSTRAINT_VIOLATION'
144
+ });
145
+ }
146
+ }
147
+ return errors;
148
+ }
149
+ /**
150
+ * Check if a TableConfig is valid
151
+ * @param config Table configuration to check
152
+ * @returns True if valid, false otherwise
153
+ */
154
+ export function isValidTableConfig(config) {
155
+ return validateTableConfig(config).length === 0;
156
+ }
157
+ /**
158
+ * Check if a ColumnConfig is valid
159
+ * @param column Column configuration to check
160
+ * @returns True if valid, false otherwise
161
+ */
162
+ export function isValidColumnConfig(column) {
163
+ return validateColumnConfig(column).length === 0;
164
+ }
165
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLXZhbGlkYXRvci51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtdGFibGUvc3JjL2xpYi9idWlsZGVyL3V0aWxzL2NvbmZpZy12YWxpZGF0b3IudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFNSDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUFDLE1BQW1CO0lBQ3JELE1BQU0sTUFBTSxHQUFzQixFQUFFLENBQUM7SUFFckMsaURBQWlEO0lBQ2pELElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDckQsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNWLEtBQUssRUFBRSxTQUFTO1lBQ2hCLE9BQU8sRUFBRSwyQkFBMkI7WUFDcEMsSUFBSSxFQUFFLFVBQVU7U0FDakIsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxNQUFNLENBQUMsQ0FBQyw0Q0FBNEM7S0FDNUQ7SUFFRCxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUMvQixNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ1YsS0FBSyxFQUFFLFNBQVM7WUFDaEIsT0FBTyxFQUFFLGlDQUFpQztZQUMxQyxJQUFJLEVBQUUsWUFBWTtTQUNuQixDQUFDLENBQUM7S0FDSjtJQUVELHVCQUF1QjtJQUN2QixNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUN2QyxNQUFNLFlBQVksR0FBRyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDekQsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDO0lBQy9CLENBQUMsQ0FBQyxDQUFDO0lBRUgsa0NBQWtDO0lBQ2xD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QyxJQUFJLENBQUM7WUFDVixLQUFLLEVBQUUsR0FBRyxNQUFNLFFBQVE7WUFDeEIsT0FBTyxFQUFFLFVBQVUsTUFBTSxDQUFDLEtBQUssNkNBQTZDLE1BQU0sQ0FBQyxRQUFRLEdBQUc7WUFDOUYsSUFBSSxFQUFFLHNCQUFzQjtTQUM3QixDQUFDLENBQUM7S0FDSjtJQUVELHlDQUF5QztJQUN6QyxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLE9BQU8sQ0FBQyxFQUFFO1FBQzVFLElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxNQUFNLEVBQUU7WUFDekQsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDVixLQUFLLEVBQUUsR0FBRyxNQUFNLFFBQVE7Z0JBQ3hCLE9BQU8sRUFBRSxxREFBcUQ7Z0JBQzlELElBQUksRUFBRSxzQkFBc0I7YUFDN0IsQ0FBQyxDQUFDO1NBQ0o7S0FDRjtJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE1BQW1CO0lBQ3BELE9BQU8sbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxNQUFvQjtJQUN0RCxPQUFPLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7QUFDbkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29uZmlndXJhdGlvbiB2YWxpZGF0b3IgdXRpbGl0eVxuICogVmFsaWRhdGVzIFRhYmxlQ29uZmlnIGFuZCBDb2x1bW5Db25maWcgb2JqZWN0c1xuICovXG5cbmltcG9ydCB7IFRhYmxlQ29uZmlnIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RhYmxlLWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ29sdW1uQ29uZmlnIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NvbHVtbi1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IFZhbGlkYXRpb25FcnJvciB9IGZyb20gJy4uL21vZGVscy9idWlsZGVyLXN0YXRlLmludGVyZmFjZSc7XG5cbi8qKlxuICogVmFsaWRhdGUgYSBUYWJsZUNvbmZpZ1xuICogQHBhcmFtIGNvbmZpZyBUYWJsZSBjb25maWd1cmF0aW9uIHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9ycyAoZW1wdHkgaWYgdmFsaWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVRhYmxlQ29uZmlnKGNvbmZpZzogVGFibGVDb25maWcpOiBWYWxpZGF0aW9uRXJyb3JbXSB7XG4gIGNvbnN0IGVycm9yczogVmFsaWRhdGlvbkVycm9yW10gPSBbXTtcblxuICAvLyBDaGVjayBpZiBjb2x1bW5zIGFycmF5IGV4aXN0cyBhbmQgaXMgbm90IGVtcHR5XG4gIGlmICghY29uZmlnLmNvbHVtbnMgfHwgIUFycmF5LmlzQXJyYXkoY29uZmlnLmNvbHVtbnMpKSB7XG4gICAgZXJyb3JzLnB1c2goe1xuICAgICAgZmllbGQ6ICdjb2x1bW5zJyxcbiAgICAgIG1lc3NhZ2U6ICdDb2x1bW5zIGFycmF5IGlzIHJlcXVpcmVkJyxcbiAgICAgIGNvZGU6ICdSRVFVSVJFRCdcbiAgICB9KTtcbiAgICByZXR1cm4gZXJyb3JzOyAvLyBDYW4ndCBjb250aW51ZSB2YWxpZGF0aW9uIHdpdGhvdXQgY29sdW1uc1xuICB9XG5cbiAgaWYgKGNvbmZpZy5jb2x1bW5zLmxlbmd0aCA9PT0gMCkge1xuICAgIGVycm9ycy5wdXNoKHtcbiAgICAgIGZpZWxkOiAnY29sdW1ucycsXG4gICAgICBtZXNzYWdlOiAnQXQgbGVhc3Qgb25lIGNvbHVtbiBpcyByZXF1aXJlZCcsXG4gICAgICBjb2RlOiAnTUlOX0xFTkdUSCdcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIGVhY2ggY29sdW1uXG4gIGNvbmZpZy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbiwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBjb2x1bW5FcnJvcnMgPSB2YWxpZGF0ZUNvbHVtbkNvbmZpZyhjb2x1bW4sIGluZGV4KTtcbiAgICBlcnJvcnMucHVzaCguLi5jb2x1bW5FcnJvcnMpO1xuICB9KTtcblxuICAvLyBDaGVjayBmb3IgZHVwbGljYXRlIGNvbHVtbiBrZXlzXG4gIGNvbnN0IGtleXMgPSBjb25maWcuY29sdW1ucy5tYXAoY29sID0+IGNvbC5rZXkpO1xuICBjb25zdCBkdXBsaWNhdGVLZXlzID0ga2V5cy5maWx0ZXIoKGtleSwgaW5kZXgpID0+IGtleXMuaW5kZXhPZihrZXkpICE9PSBpbmRleCk7XG4gIGlmIChkdXBsaWNhdGVLZXlzLmxlbmd0aCA+IDApIHtcbiAgICBkdXBsaWNhdGVLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGVycm9ycy5wdXNoKHtcbiAgICAgICAgZmllbGQ6IGBjb2x1bW5zW10ua2V5YCxcbiAgICAgICAgbWVzc2FnZTogYER1cGxpY2F0ZSBjb2x1bW4ga2V5OiAke2tleX1gLFxuICAgICAgICBjb2RlOiAnRFVQTElDQVRFX0tFWSdcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgcGFnaW5hdGlvbiBjb25maWcgaWYgcHJvdmlkZWRcbiAgaWYgKGNvbmZpZy5wYWdpbmF0aW9uKSB7XG4gICAgaWYgKGNvbmZpZy5wYWdpbmF0aW9uLnBhZ2VTaXplICE9PSB1bmRlZmluZWQgJiYgY29uZmlnLnBhZ2luYXRpb24ucGFnZVNpemUgPD0gMCkge1xuICAgICAgZXJyb3JzLnB1c2goe1xuICAgICAgICBmaWVsZDogJ3BhZ2luYXRpb24ucGFnZVNpemUnLFxuICAgICAgICBtZXNzYWdlOiAnUGFnZSBzaXplIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAnLFxuICAgICAgICBjb2RlOiAnSU5WQUxJRF9WQUxVRSdcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChjb25maWcucGFnaW5hdGlvbi5wYWdlU2l6ZU9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGludmFsaWRTaXplcyA9IGNvbmZpZy5wYWdpbmF0aW9uLnBhZ2VTaXplT3B0aW9ucy5maWx0ZXIoc2l6ZSA9PiBzaXplIDw9IDApO1xuICAgICAgaWYgKGludmFsaWRTaXplcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKHtcbiAgICAgICAgICBmaWVsZDogJ3BhZ2luYXRpb24ucGFnZVNpemVPcHRpb25zJyxcbiAgICAgICAgICBtZXNzYWdlOiAnQWxsIHBhZ2Ugc2l6ZSBvcHRpb25zIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAnLFxuICAgICAgICAgIGNvZGU6ICdJTlZBTElEX1ZBTFVFJ1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXJyb3JzO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIGEgQ29sdW1uQ29uZmlnXG4gKiBAcGFyYW0gY29sdW1uIENvbHVtbiBjb25maWd1cmF0aW9uIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gaW5kZXggQ29sdW1uIGluZGV4IChmb3IgZXJyb3IgbWVzc2FnZXMpXG4gKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9ycyAoZW1wdHkgaWYgdmFsaWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUNvbHVtbkNvbmZpZyhjb2x1bW46IENvbHVtbkNvbmZpZywgaW5kZXg6IG51bWJlciA9IDApOiBWYWxpZGF0aW9uRXJyb3JbXSB7XG4gIGNvbnN0IGVycm9yczogVmFsaWRhdGlvbkVycm9yW10gPSBbXTtcbiAgY29uc3QgcHJlZml4ID0gYGNvbHVtbnNbJHtpbmRleH1dYDtcblxuICAvLyBLZXkgaXMgcmVxdWlyZWRcbiAgaWYgKCFjb2x1bW4ua2V5IHx8IHR5cGVvZiBjb2x1bW4ua2V5ICE9PSAnc3RyaW5nJyB8fCBjb2x1bW4ua2V5LnRyaW0oKSA9PT0gJycpIHtcbiAgICBlcnJvcnMucHVzaCh7XG4gICAgICBmaWVsZDogYCR7cHJlZml4fS5rZXlgLFxuICAgICAgbWVzc2FnZTogJ0NvbHVtbiBrZXkgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJyxcbiAgICAgIGNvZGU6ICdSRVFVSVJFRCdcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBLZXkgbXVzdCBiZSBhIHZhbGlkIGlkZW50aWZpZXJcbiAgICBpZiAoIS9eW2EtekEtWl8kXVthLXpBLVowLTlfJF0qJC8udGVzdChjb2x1bW4ua2V5KSkge1xuICAgICAgZXJyb3JzLnB1c2goe1xuICAgICAgICBmaWVsZDogYCR7cHJlZml4fS5rZXlgLFxuICAgICAgICBtZXNzYWdlOiAnQ29sdW1uIGtleSBtdXN0IGJlIGEgdmFsaWQgaWRlbnRpZmllciAobGV0dGVycywgbnVtYmVycywgdW5kZXJzY29yZSwgZG9sbGFyIHNpZ24pJyxcbiAgICAgICAgY29kZTogJ0lOVkFMSURfRk9STUFUJ1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gV2lkdGggY29uc3RyYWludHNcbiAgaWYgKGNvbHVtbi53aWR0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBjb2x1bW4ud2lkdGggPT09ICdudW1iZXInICYmIGNvbHVtbi53aWR0aCA8PSAwKSB7XG4gICAgICBlcnJvcnMucHVzaCh7XG4gICAgICAgIGZpZWxkOiBgJHtwcmVmaXh9LndpZHRoYCxcbiAgICAgICAgbWVzc2FnZTogJ0NvbHVtbiB3aWR0aCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwJyxcbiAgICAgICAgY29kZTogJ0lOVkFMSURfVkFMVUUnXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBpZiAoY29sdW1uLm1pbldpZHRoICE9PSB1bmRlZmluZWQgJiYgY29sdW1uLm1pbldpZHRoIDw9IDApIHtcbiAgICBlcnJvcnMucHVzaCh7XG4gICAgICBmaWVsZDogYCR7cHJlZml4fS5taW5XaWR0aGAsXG4gICAgICBtZXNzYWdlOiAnTWluaW11bSB3aWR0aCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwJyxcbiAgICAgIGNvZGU6ICdJTlZBTElEX1ZBTFVFJ1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKGNvbHVtbi5tYXhXaWR0aCAhPT0gdW5kZWZpbmVkICYmIGNvbHVtbi5tYXhXaWR0aCA8PSAwKSB7XG4gICAgZXJyb3JzLnB1c2goe1xuICAgICAgZmllbGQ6IGAke3ByZWZpeH0ubWF4V2lkdGhgLFxuICAgICAgbWVzc2FnZTogJ01heGltdW0gd2lkdGggbXVzdCBiZSBncmVhdGVyIHRoYW4gMCcsXG4gICAgICBjb2RlOiAnSU5WQUxJRF9WQUxVRSdcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFdpZHRoIGNvbnN0cmFpbnRzOiBtaW5XaWR0aCA8PSB3aWR0aCA8PSBtYXhXaWR0aFxuICBpZiAoXG4gICAgdHlwZW9mIGNvbHVtbi53aWR0aCA9PT0gJ251bWJlcicgJiZcbiAgICBjb2x1bW4ubWluV2lkdGggIT09IHVuZGVmaW5lZCAmJlxuICAgIGNvbHVtbi53aWR0aCA8IGNvbHVtbi5taW5XaWR0aFxuICApIHtcbiAgICBlcnJvcnMucHVzaCh7XG4gICAgICBmaWVsZDogYCR7cHJlZml4fS53aWR0aGAsXG4gICAgICBtZXNzYWdlOiBgV2lkdGggKCR7Y29sdW1uLndpZHRofSkgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gbWluV2lkdGggKCR7Y29sdW1uLm1pbldpZHRofSlgLFxuICAgICAgY29kZTogJ0NPTlNUUkFJTlRfVklPTEFUSU9OJ1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKFxuICAgIHR5cGVvZiBjb2x1bW4ud2lkdGggPT09ICdudW1iZXInICYmXG4gICAgY29sdW1uLm1heFdpZHRoICE9PSB1bmRlZmluZWQgJiZcbiAgICBjb2x1bW4ud2lkdGggPiBjb2x1bW4ubWF4V2lkdGhcbiAgKSB7XG4gICAgZXJyb3JzLnB1c2goe1xuICAgICAgZmllbGQ6IGAke3ByZWZpeH0ud2lkdGhgLFxuICAgICAgbWVzc2FnZTogYFdpZHRoICgke2NvbHVtbi53aWR0aH0pIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIG1heFdpZHRoICgke2NvbHVtbi5tYXhXaWR0aH0pYCxcbiAgICAgIGNvZGU6ICdDT05TVFJBSU5UX1ZJT0xBVElPTidcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFN0aWNreSBjb2x1bW5zIG11c3QgaGF2ZSBkZWZpbmVkIHdpZHRoXG4gIGlmIChjb2x1bW4uc3RpY2t5ICYmIChjb2x1bW4uc3RpY2t5ID09PSAnbGVmdCcgfHwgY29sdW1uLnN0aWNreSA9PT0gJ3JpZ2h0JykpIHtcbiAgICBpZiAoY29sdW1uLndpZHRoID09PSB1bmRlZmluZWQgfHwgY29sdW1uLndpZHRoID09PSAnYXV0bycpIHtcbiAgICAgIGVycm9ycy5wdXNoKHtcbiAgICAgICAgZmllbGQ6IGAke3ByZWZpeH0ud2lkdGhgLFxuICAgICAgICBtZXNzYWdlOiAnU3RpY2t5IGNvbHVtbnMgbXVzdCBoYXZlIGEgZGVmaW5lZCB3aWR0aCAobm90IGF1dG8pJyxcbiAgICAgICAgY29kZTogJ0NPTlNUUkFJTlRfVklPTEFUSU9OJ1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIFRhYmxlQ29uZmlnIGlzIHZhbGlkXG4gKiBAcGFyYW0gY29uZmlnIFRhYmxlIGNvbmZpZ3VyYXRpb24gdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRydWUgaWYgdmFsaWQsIGZhbHNlIG90aGVyd2lzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFRhYmxlQ29uZmlnKGNvbmZpZzogVGFibGVDb25maWcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHZhbGlkYXRlVGFibGVDb25maWcoY29uZmlnKS5sZW5ndGggPT09IDA7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBDb2x1bW5Db25maWcgaXMgdmFsaWRcbiAqIEBwYXJhbSBjb2x1bW4gQ29sdW1uIGNvbmZpZ3VyYXRpb24gdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRydWUgaWYgdmFsaWQsIGZhbHNlIG90aGVyd2lzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZENvbHVtbkNvbmZpZyhjb2x1bW46IENvbHVtbkNvbmZpZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gdmFsaWRhdGVDb2x1bW5Db25maWcoY29sdW1uKS5sZW5ndGggPT09IDA7XG59XG5cbiJdfQ==
@@ -0,0 +1,206 @@
1
+ /**
2
+ * TypeScript code generator utility
3
+ * Converts TableConfig to TypeScript code using ColumnConfigFactory
4
+ */
5
+ import { CellDataType } from '../../models/cell-types';
6
+ /**
7
+ * Generate TypeScript code from TableConfig
8
+ * @param config Table configuration
9
+ * @param options Generation options
10
+ * @returns TypeScript code string
11
+ */
12
+ export function generateTypeScriptCode(config, options = {}) {
13
+ const { variableName = 'tableConfig', includeComments = true, indent = ' ' } = options;
14
+ const lines = [];
15
+ // Add imports
16
+ lines.push("import { ColumnConfigFactory, TableConfig } from 'ngx-smart-table';");
17
+ lines.push('');
18
+ // Add comment if requested
19
+ if (includeComments) {
20
+ lines.push('/**');
21
+ lines.push(' * Table configuration generated by Smart Table Builder');
22
+ lines.push(' * @generated');
23
+ lines.push(' */');
24
+ }
25
+ // Start config object
26
+ lines.push(`export const ${variableName}: TableConfig = {`);
27
+ // Generate columns array
28
+ lines.push(`${indent}columns: [`);
29
+ config.columns.forEach((column, index) => {
30
+ const columnCode = generateColumnCode(column, indent + indent, includeComments);
31
+ const isLast = index === config.columns.length - 1;
32
+ lines.push(`${indent}${indent}${columnCode}${isLast ? '' : ','}`);
33
+ });
34
+ lines.push(`${indent}],`);
35
+ // Generate pagination config
36
+ if (config.pagination) {
37
+ lines.push(`${indent}pagination: {`);
38
+ if (config.pagination.enabled !== undefined) {
39
+ lines.push(`${indent}${indent}enabled: ${config.pagination.enabled},`);
40
+ }
41
+ if (config.pagination.pageSize !== undefined) {
42
+ lines.push(`${indent}${indent}pageSize: ${config.pagination.pageSize},`);
43
+ }
44
+ if (config.pagination.pageSizeOptions) {
45
+ lines.push(`${indent}${indent}pageSizeOptions: [${config.pagination.pageSizeOptions.join(', ')}],`);
46
+ }
47
+ if (config.pagination.showTopControls !== undefined) {
48
+ lines.push(`${indent}${indent}showTopControls: ${config.pagination.showTopControls},`);
49
+ }
50
+ if (config.pagination.showBottomControls !== undefined) {
51
+ lines.push(`${indent}${indent}showBottomControls: ${config.pagination.showBottomControls},`);
52
+ }
53
+ if (config.pagination.totalItems !== undefined) {
54
+ lines.push(`${indent}${indent}totalItems: ${config.pagination.totalItems},`);
55
+ }
56
+ if (config.pagination.variant !== undefined) {
57
+ lines.push(`${indent}${indent}variant: '${config.pagination.variant}',`);
58
+ }
59
+ lines.push(`${indent}},`);
60
+ }
61
+ // Generate sorting config
62
+ if (config.sorting) {
63
+ lines.push(`${indent}sorting: {`);
64
+ if (config.sorting.enabled !== undefined) {
65
+ lines.push(`${indent}${indent}enabled: ${config.sorting.enabled},`);
66
+ }
67
+ if (config.sorting.multiColumn !== undefined) {
68
+ lines.push(`${indent}${indent}multiColumn: ${config.sorting.multiColumn},`);
69
+ }
70
+ if (config.sorting.mode) {
71
+ lines.push(`${indent}${indent}mode: '${config.sorting.mode}',`);
72
+ }
73
+ lines.push(`${indent}},`);
74
+ }
75
+ // Generate filtering config
76
+ if (config.filtering) {
77
+ lines.push(`${indent}filtering: {`);
78
+ if (config.filtering.enabled !== undefined) {
79
+ lines.push(`${indent}${indent}enabled: ${config.filtering.enabled},`);
80
+ }
81
+ if (config.filtering.mode) {
82
+ lines.push(`${indent}${indent}mode: '${config.filtering.mode}',`);
83
+ }
84
+ lines.push(`${indent}},`);
85
+ }
86
+ // Generate display config
87
+ if (config.display) {
88
+ lines.push(`${indent}display: {`);
89
+ if (config.display.stickyHeader !== undefined) {
90
+ lines.push(`${indent}${indent}stickyHeader: ${config.display.stickyHeader},`);
91
+ }
92
+ if (config.display.maxHeight !== undefined) {
93
+ lines.push(`${indent}${indent}maxHeight: ${config.display.maxHeight},`);
94
+ }
95
+ lines.push(`${indent}},`);
96
+ }
97
+ // Close config object
98
+ lines.push('};');
99
+ return lines.join('\n');
100
+ }
101
+ /**
102
+ * Generate TypeScript code for a single column
103
+ * @param column Column configuration
104
+ * @param indent Indentation string
105
+ * @param includeComments Whether to include comments
106
+ * @returns TypeScript code string
107
+ */
108
+ function generateColumnCode(column, indent, includeComments) {
109
+ const factoryMethod = getFactoryMethod(column);
110
+ const options = generateColumnOptions(column, indent);
111
+ if (options) {
112
+ return `ColumnConfigFactory.${factoryMethod}('${column.key}', ${options})`;
113
+ }
114
+ else {
115
+ return `ColumnConfigFactory.${factoryMethod}('${column.key}')`;
116
+ }
117
+ }
118
+ /**
119
+ * Get the appropriate factory method name for a column
120
+ * @param column Column configuration
121
+ * @returns Factory method name
122
+ */
123
+ function getFactoryMethod(column) {
124
+ // Check if readonly
125
+ if (column.editable === false) {
126
+ return 'readonly';
127
+ }
128
+ // Check dataType
129
+ switch (column.dataType) {
130
+ case CellDataType.STRING:
131
+ // Check if email validator exists
132
+ if (column.validator && column.validator.toString().includes('email')) {
133
+ return 'email';
134
+ }
135
+ return 'text';
136
+ case CellDataType.NUMBER:
137
+ // Check if currency formatter exists
138
+ if (column.formatter && column.formatter.toString().includes('Currency')) {
139
+ return 'currency';
140
+ }
141
+ return 'number';
142
+ case CellDataType.DATE:
143
+ return 'date';
144
+ case CellDataType.BOOLEAN:
145
+ return 'boolean';
146
+ default:
147
+ return 'custom';
148
+ }
149
+ }
150
+ /**
151
+ * Generate options object for column factory method
152
+ * @param column Column configuration
153
+ * @param indent Indentation string
154
+ * @returns Options object string or null
155
+ */
156
+ function generateColumnOptions(column, indent) {
157
+ const options = [];
158
+ if (column.header && column.header !== column.key) {
159
+ options.push(`header: '${escapeString(column.header)}'`);
160
+ }
161
+ if (column.width !== undefined) {
162
+ if (typeof column.width === 'number') {
163
+ options.push(`width: ${column.width}`);
164
+ }
165
+ else {
166
+ options.push(`width: '${column.width}'`);
167
+ }
168
+ }
169
+ if (column.minWidth !== undefined) {
170
+ options.push(`minWidth: ${column.minWidth}`);
171
+ }
172
+ if (column.maxWidth !== undefined) {
173
+ options.push(`maxWidth: ${column.maxWidth}`);
174
+ }
175
+ if (column.sticky) {
176
+ options.push(`sticky: '${column.sticky}'`);
177
+ }
178
+ if (column.editable !== undefined) {
179
+ options.push(`editable: ${column.editable}`);
180
+ }
181
+ if (column.sortable !== undefined) {
182
+ options.push(`sortable: ${column.sortable}`);
183
+ }
184
+ if (column.filterable !== undefined) {
185
+ options.push(`filterable: ${column.filterable}`);
186
+ }
187
+ if (column.resizable !== undefined) {
188
+ options.push(`resizable: ${column.resizable}`);
189
+ }
190
+ // For custom columns, we'd need to include more complex options
191
+ // This is a simplified version - full implementation would handle
192
+ // formatters, validators, editors, etc.
193
+ if (options.length === 0) {
194
+ return null;
195
+ }
196
+ return `{\n${indent}${indent}${options.join(`,\n${indent}${indent}`)}\n${indent}}`;
197
+ }
198
+ /**
199
+ * Escape string for use in TypeScript code
200
+ * @param str String to escape
201
+ * @returns Escaped string
202
+ */
203
+ function escapeString(str) {
204
+ return str.replace(/'/g, "\\'").replace(/\n/g, '\\n');
205
+ }
206
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXNjcmlwdC1nZW5lcmF0b3IudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXRhYmxlL3NyYy9saWIvYnVpbGRlci91dGlscy90eXBlc2NyaXB0LWdlbmVyYXRvci51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUlILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQXNCdkQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQ3BDLE1BQW1CLEVBQ25CLFVBQXNDLEVBQUU7SUFFeEMsTUFBTSxFQUNKLFlBQVksR0FBRyxhQUFhLEVBQzVCLGVBQWUsR0FBRyxJQUFJLEVBQ3RCLE1BQU0sR0FBRyxJQUFJLEVBQ2QsR0FBRyxPQUFPLENBQUM7SUFFWixNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7SUFFM0IsY0FBYztJQUNkLEtBQUssQ0FBQyxJQUFJLENBQUMscUVBQXFFLENBQUMsQ0FBQztJQUNsRixLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRWYsMkJBQTJCO0lBQzNCLElBQUksZUFBZSxFQUFFO1FBQ25CLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEIsS0FBSyxDQUFDLElBQUksQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO1FBQ3RFLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDNUIsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNuQjtJQUVELHNCQUFzQjtJQUN0QixLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixZQUFZLG1CQUFtQixDQUFDLENBQUM7SUFFNUQseUJBQXlCO0lBQ3pCLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLFlBQVksQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxD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LE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3hCLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFFRCxPQUFPLE1BQU0sTUFBTSxHQUFHLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEtBQUssTUFBTSxHQUFHLENBQUM7QUFDckYsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLFlBQVksQ0FBQyxHQUFXO0lBQy9CLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN4RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUeXBlU2NyaXB0IGNvZGUgZ2VuZXJhdG9yIHV0aWxpdHlcbiAqIENvbnZlcnRzIFRhYmxlQ29uZmlnIHRvIFR5cGVTY3JpcHQgY29kZSB1c2luZyBDb2x1bW5Db25maWdGYWN0b3J5XG4gKi9cblxuaW1wb3J0IHsgVGFibGVDb25maWcgfSBmcm9tICcuLi8uLi9tb2RlbHMvdGFibGUtY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDb2x1bW5Db25maWcgfSBmcm9tICcuLi8uLi9tb2RlbHMvY29sdW1uLWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ2VsbERhdGFUeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NlbGwtdHlwZXMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIFR5cGVTY3JpcHQgY29kZSBnZW5lcmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZVNjcmlwdEdlbmVyYXRvck9wdGlvbnMge1xuICAvKipcbiAgICogVmFyaWFibGUgbmFtZSBmb3IgdGhlIGV4cG9ydGVkIGNvbmZpZ1xuICAgKi9cbiAgdmFyaWFibGVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbmNsdWRlIGNvbW1lbnRzIGluIGdlbmVyYXRlZCBjb2RlXG4gICAqL1xuICBpbmNsdWRlQ29tbWVudHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbmRlbnRhdGlvbiBzdHJpbmcgKGRlZmF1bHQ6IDIgc3BhY2VzKVxuICAgKi9cbiAgaW5kZW50Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIFR5cGVTY3JpcHQgY29kZSBmcm9tIFRhYmxlQ29uZmlnXG4gKiBAcGFyYW0gY29uZmlnIFRhYmxlIGNvbmZpZ3VyYXRpb25cbiAqIEBwYXJhbSBvcHRpb25zIEdlbmVyYXRpb24gb3B0aW9uc1xuICogQHJldHVybnMgVHlwZVNjcmlwdCBjb2RlIHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVUeXBlU2NyaXB0Q29kZShcbiAgY29uZmlnOiBUYWJsZUNvbmZpZyxcbiAgb3B0aW9uczogVHlwZVNjcmlwdEdlbmVyYXRvck9wdGlvbnMgPSB7fVxuKTogc3RyaW5nIHtcbiAgY29uc3Qge1xuICAgIHZhcmlhYmxlTmFtZSA9ICd0YWJsZUNvbmZpZycsXG4gICAgaW5jbHVkZUNvbW1lbnRzID0gdHJ1ZSxcbiAgICBpbmRlbnQgPSAnICAnXG4gIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8vIEFkZCBpbXBvcnRzXG4gIGxpbmVzLnB1c2goXCJpbXBvcnQgeyBDb2x1bW5Db25maWdGYWN0b3J5LCBUYWJsZUNvbmZpZyB9IGZyb20gJ25neC1zbWFydC10YWJsZSc7XCIpO1xuICBsaW5lcy5wdXNoKCcnKTtcblxuICAvLyBBZGQgY29tbWVudCBpZiByZXF1ZXN0ZWRcbiAgaWYgKGluY2x1ZGVDb21tZW50cykge1xuICAgIGxpbmVzLnB1c2goJy8qKicpO1xuICAgIGxpbmVzLnB1c2goJyAqIFRhYmxlIGNvbmZpZ3VyYXRpb24gZ2VuZXJhdGVkIGJ5IFNtYXJ0IFRhYmxlIEJ1aWxkZXInKTtcbiAgICBsaW5lcy5wdXNoKCcgKiBAZ2VuZXJhdGVkJyk7XG4gICAgbGluZXMucHVzaCgnICovJyk7XG4gIH1cblxuICAvLyBTdGFydCBjb25maWcgb2JqZWN0XG4gIGxpbmVzLnB1c2goYGV4cG9ydCBjb25zdCAke3ZhcmlhYmxlTmFtZX06IFRhYmxlQ29uZmlnID0ge2ApO1xuXG4gIC8vIEdlbmVyYXRlIGNvbHVtbnMgYXJyYXlcbiAgbGluZXMucHVzaChgJHtpbmRlbnR9Y29sdW1uczogW2ApO1xuICBjb25maWcuY29sdW1ucy5mb3JFYWNoKChjb2x1bW4sIGluZGV4KSA9PiB7XG4gICAgY29uc3QgY29sdW1uQ29kZSA9IGdlbmVyYXRlQ29sdW1uQ29kZShjb2x1bW4sIGluZGVudCArIGluZGVudCwgaW5jbHVkZUNvbW1lbnRzKTtcbiAgICBjb25zdCBpc0xhc3QgPSBpbmRleCA9PT0gY29uZmlnLmNvbHVtbnMubGVuZ3RoIC0gMTtcbiAgICBsaW5lcy5wdXNoKGAke2luZGVudH0ke2luZGVudH0ke2NvbHVtbkNvZGV9JHtpc0xhc3QgPyAnJyA6ICcsJ31gKTtcbiAgfSk7XG4gIGxpbmVzLnB1c2goYCR7aW5kZW50fV0sYCk7XG5cbiAgLy8gR2VuZXJhdGUgcGFnaW5hdGlvbiBjb25maWdcbiAgaWYgKGNvbmZpZy5wYWdpbmF0aW9uKSB7XG4gICAgbGluZXMucHVzaChgJHtpbmRlbnR9cGFnaW5hdGlvbjoge2ApO1xuICAgIGlmIChjb25maWcucGFnaW5hdGlvbi5lbmFibGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGxpbmVzLnB1c2goYCR7aW5kZW50fSR7aW5kZW50fWVuYWJsZWQ6ICR7Y29uZmlnLnBhZ2luYXRpb24uZW5hYmxlZH0sYCk7XG4gICAgfVxuICAgIGlmIChjb25maWcucGFnaW5hdGlvbi5wYWdlU2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsaW5lcy5wdXNoKGAke2luZGVudH0ke2luZGVudH1wYWdlU2l6ZTogJHtjb25maWcucGFnaW5hdGlvbi5wYWdlU2l6ZX0sYCk7XG4gICAgfVxuICAgIGlmIChjb25maWcucGFnaW5hdGlvbi5wYWdlU2l6ZU9wdGlvbnMpIHtcbiAgICAgIGxpbmVzLnB1c2goYCR7aW5kZW50fSR7aW5kZW50fXBhZ2VTaXplT3B0aW9uczogWyR7Y29uZmlnLnBhZ2luYXRpb24ucGFnZVNpemVPcHRpb25zLmpvaW4oJywgJyl9XSxgKTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5wYWdpbmF0aW9uLnNob3dUb3BDb250cm9scyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsaW5lcy5wdXNoKGAke2luZGVudH0ke2luZGVudH1zaG93VG9wQ29udHJvbHM6ICR7Y29uZmlnLnBhZ2luYXRpb24uc2hvd1RvcENvbnRyb2xzfSxgKTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5wYWdpbmF0aW9uLnNob3dCb3R0b21Db250cm9scyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsaW5lcy5wdXNoKGAke2luZGVudH0ke2luZGVudH1zaG93Qm90dG9tQ29udHJvbHM6ICR7Y29uZmlnLnBhZ2luYXRpb24uc2hvd0JvdHRvbUNvbnRyb2xzfSxgKTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5wYWdpbmF0aW9uLnRvdGFsSXRlbXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbGluZXMucHVzaChgJHtpbmRlbnR9JHtpbmRlbnR9dG90YWxJdGVtczogJHtjb25maWcucGFnaW5hdGlvbi50b3RhbEl0ZW1zfSxgKTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5wYWdpbmF0aW9uLnZhcmlhbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbGluZXMucHVzaChgJHtpbmRlbnR9JHtpbmRlbnR9dmFyaWFudDogJyR7Y29uZmlnLnBhZ2luYXRpb24udmFyaWFudH0nLGApO1xuICAgIH1cbiAgICBsaW5lcy5wdXNoKGAke2luZGVudH19LGApO1xuICB9XG5cbiAgLy8gR2VuZXJhdGUgc29ydGluZyBjb25maWdcbiAgaWYgKGNvbmZpZy5zb3J0aW5nKSB7XG4gICAgbGluZXMucHVzaChgJHtpbmRlbnR9c29ydGluZzoge2ApO1xuICAgIGlmIChjb25maWcuc29ydGluZy5lbmFibGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGxpbmVzLnB1c2goYCR7aW5kZW50fSR7aW5kZW50fWVuYWJsZWQ6ICR7Y29uZmlnLnNvcnRpbmcuZW5hYmxlZH0sYCk7XG4gICAgfVxuICAgIGlmIChjb25maWcuc29ydGluZy5tdWx0aUNvbHVtbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsaW5lcy5wdXNoKGAke2luZGVudH0ke2luZGVudH1tdWx0aUNvbHVtbjogJHtjb25maWcuc29ydGluZy5tdWx0aUNvbHVtbn0sYCk7XG4gICAgfVxuICAgIGlmIChjb25maWcuc29ydGluZy5tb2RlKSB7XG4gICAgICBsaW5lcy5wdXNoKGAke2luZGVudH0ke2luZGVudH1tb2RlOiAnJHtjb25maWcuc29ydGluZy5tb2RlfScsYCk7XG4gICAgfVxuICAgIGxpbmVzLnB1c2goYCR7aW5kZW50fX0sYCk7XG4gIH1cblxuICAvLyBHZW5lcmF0ZSBmaWx0ZXJpbmcgY29uZmlnXG4gIGlmIChjb25maWcuZmlsdGVyaW5nKSB7XG4gICAgbGluZXMucHVzaChgJHtpbmRlbnR9ZmlsdGVyaW5nOiB7YCk7XG4gICAgaWYgKGNvbmZpZy5maWx0ZXJpbmcuZW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsaW5lcy5wdXNoKGAke2luZGVudH0ke2luZGVudH1lbmFibGVkOiAke2NvbmZpZy5maWx0ZXJpbmcuZW5hYmxlZH0sYCk7XG4gICAgfVxuICAgIGlmIChjb25maWcuZmlsdGVyaW5nLm1vZGUpIHtcbiAgICAgIGxpbmVzLnB1c2goYCR7aW5kZW50fSR7aW5kZW50fW1vZGU6ICcke2NvbmZpZy5maWx0ZXJpbmcubW9kZX0nLGApO1xuICAgIH1cbiAgICBsaW5lcy5wdXNoKGAke2luZGVudH19LGApO1xuICB9XG5cbiAgLy8gR2VuZXJhdGUgZGlzcGxheSBjb25maWdcbiAgaWYgKGNvbmZpZy5kaXNwbGF5KSB7XG4gICAgbGluZXMucHVzaChgJHtpbmRlbnR9ZGlzcGxheToge2ApO1xuICAgIGlmIChjb25maWcuZGlzcGxheS5zdGlja3lIZWFkZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbGluZXMucHVzaChgJHtpbmRlbnR9JHtpbmRlbnR9c3RpY2t5SGVhZGVyOiAke2NvbmZpZy5kaXNwbGF5LnN0aWNreUhlYWRlcn0sYCk7XG4gICAgfVxuICAgIGlmIChjb25maWcuZGlzcGxheS5tYXhIZWlnaHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbGluZXMucHVzaChgJHtpbmRlbnR9JHtpbmRlbnR9bWF4SGVpZ2h0OiAke2NvbmZpZy5kaXNwbGF5Lm1heEhlaWdodH0sYCk7XG4gICAgfVxuICAgIGxpbmVzLnB1c2goYCR7aW5kZW50fX0sYCk7XG4gIH1cblxuICAvLyBDbG9zZSBjb25maWcgb2JqZWN0XG4gIGxpbmVzLnB1c2goJ307Jyk7XG5cbiAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIFR5cGVTY3JpcHQgY29kZSBmb3IgYSBzaW5nbGUgY29sdW1uXG4gKiBAcGFyYW0gY29sdW1uIENvbHVtbiBjb25maWd1cmF0aW9uXG4gKiBAcGFyYW0gaW5kZW50IEluZGVudGF0aW9uIHN0cmluZ1xuICogQHBhcmFtIGluY2x1ZGVDb21tZW50cyBXaGV0aGVyIHRvIGluY2x1ZGUgY29tbWVudHNcbiAqIEByZXR1cm5zIFR5cGVTY3JpcHQgY29kZSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVDb2x1bW5Db2RlKFxuICBjb2x1bW46IENvbHVtbkNvbmZpZyxcbiAgaW5kZW50OiBzdHJpbmcsXG4gIGluY2x1ZGVDb21tZW50czogYm9vbGVhblxuKTogc3RyaW5nIHtcbiAgY29uc3QgZmFjdG9yeU1ldGhvZCA9IGdldEZhY3RvcnlNZXRob2QoY29sdW1uKTtcbiAgY29uc3Qgb3B0aW9ucyA9IGdlbmVyYXRlQ29sdW1uT3B0aW9ucyhjb2x1bW4sIGluZGVudCk7XG5cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gYENvbHVtbkNvbmZpZ0ZhY3RvcnkuJHtmYWN0b3J5TWV0aG9kfSgnJHtjb2x1bW4ua2V5fScsICR7b3B0aW9uc30pYDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYENvbHVtbkNvbmZpZ0ZhY3RvcnkuJHtmYWN0b3J5TWV0aG9kfSgnJHtjb2x1bW4ua2V5fScpYDtcbiAgfVxufVxuXG4vKipcbiAqIEdldCB0aGUgYXBwcm9wcmlhdGUgZmFjdG9yeSBtZXRob2QgbmFtZSBmb3IgYSBjb2x1bW5cbiAqIEBwYXJhbSBjb2x1bW4gQ29sdW1uIGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zIEZhY3RvcnkgbWV0aG9kIG5hbWVcbiAqL1xuZnVuY3Rpb24gZ2V0RmFjdG9yeU1ldGhvZChjb2x1bW46IENvbHVtbkNvbmZpZyk6IHN0cmluZyB7XG4gIC8vIENoZWNrIGlmIHJlYWRvbmx5XG4gIGlmIChjb2x1bW4uZWRpdGFibGUgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuICdyZWFkb25seSc7XG4gIH1cblxuICAvLyBDaGVjayBkYXRhVHlwZVxuICBzd2l0Y2ggKGNvbHVtbi5kYXRhVHlwZSkge1xuICAgIGNhc2UgQ2VsbERhdGFUeXBlLlNUUklORzpcbiAgICAgIC8vIENoZWNrIGlmIGVtYWlsIHZhbGlkYXRvciBleGlzdHNcbiAgICAgIGlmIChjb2x1bW4udmFsaWRhdG9yICYmIGNvbHVtbi52YWxpZGF0b3IudG9TdHJpbmcoKS5pbmNsdWRlcygnZW1haWwnKSkge1xuICAgICAgICByZXR1cm4gJ2VtYWlsJztcbiAgICAgIH1cbiAgICAgIHJldHVybiAndGV4dCc7XG4gICAgY2FzZSBDZWxsRGF0YVR5cGUuTlVNQkVSOlxuICAgICAgLy8gQ2hlY2sgaWYgY3VycmVuY3kgZm9ybWF0dGVyIGV4aXN0c1xuICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgJiYgY29sdW1uLmZvcm1hdHRlci50b1N0cmluZygpLmluY2x1ZGVzKCdDdXJyZW5jeScpKSB7XG4gICAgICAgIHJldHVybiAnY3VycmVuY3knO1xuICAgICAgfVxuICAgICAgcmV0dXJuICdudW1iZXInO1xuICAgIGNhc2UgQ2VsbERhdGFUeXBlLkRBVEU6XG4gICAgICByZXR1cm4gJ2RhdGUnO1xuICAgIGNhc2UgQ2VsbERhdGFUeXBlLkJPT0xFQU46XG4gICAgICByZXR1cm4gJ2Jvb2xlYW4nO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJ2N1c3RvbSc7XG4gIH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBvcHRpb25zIG9iamVjdCBmb3IgY29sdW1uIGZhY3RvcnkgbWV0aG9kXG4gKiBAcGFyYW0gY29sdW1uIENvbHVtbiBjb25maWd1cmF0aW9uXG4gKiBAcGFyYW0gaW5kZW50IEluZGVudGF0aW9uIHN0cmluZ1xuICogQHJldHVybnMgT3B0aW9ucyBvYmplY3Qgc3RyaW5nIG9yIG51bGxcbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVDb2x1bW5PcHRpb25zKGNvbHVtbjogQ29sdW1uQ29uZmlnLCBpbmRlbnQ6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBvcHRpb25zOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChjb2x1bW4uaGVhZGVyICYmIGNvbHVtbi5oZWFkZXIgIT09IGNvbHVtbi5rZXkpIHtcbiAgICBvcHRpb25zLnB1c2goYGhlYWRlcjogJyR7ZXNjYXBlU3RyaW5nKGNvbHVtbi5oZWFkZXIpfSdgKTtcbiAgfVxuXG4gIGlmIChjb2x1bW4ud2lkdGggIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2YgY29sdW1uLndpZHRoID09PSAnbnVtYmVyJykge1xuICAgICAgb3B0aW9ucy5wdXNoKGB3aWR0aDogJHtjb2x1bW4ud2lkdGh9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMucHVzaChgd2lkdGg6ICcke2NvbHVtbi53aWR0aH0nYCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNvbHVtbi5taW5XaWR0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgb3B0aW9ucy5wdXNoKGBtaW5XaWR0aDogJHtjb2x1bW4ubWluV2lkdGh9YCk7XG4gIH1cblxuICBpZiAoY29sdW1uLm1heFdpZHRoICE9PSB1bmRlZmluZWQpIHtcbiAgICBvcHRpb25zLnB1c2goYG1heFdpZHRoOiAke2NvbHVtbi5tYXhXaWR0aH1gKTtcbiAgfVxuXG4gIGlmIChjb2x1bW4uc3RpY2t5KSB7XG4gICAgb3B0aW9ucy5wdXNoKGBzdGlja3k6ICcke2NvbHVtbi5zdGlja3l9J2ApO1xuICB9XG5cbiAgaWYgKGNvbHVtbi5lZGl0YWJsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgb3B0aW9ucy5wdXNoKGBlZGl0YWJsZTogJHtjb2x1bW4uZWRpdGFibGV9YCk7XG4gIH1cblxuICBpZiAoY29sdW1uLnNvcnRhYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICBvcHRpb25zLnB1c2goYHNvcnRhYmxlOiAke2NvbHVtbi5zb3J0YWJsZX1gKTtcbiAgfVxuXG4gIGlmIChjb2x1bW4uZmlsdGVyYWJsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgb3B0aW9ucy5wdXNoKGBmaWx0ZXJhYmxlOiAke2NvbHVtbi5maWx0ZXJhYmxlfWApO1xuICB9XG5cbiAgaWYgKGNvbHVtbi5yZXNpemFibGUgIT09IHVuZGVmaW5lZCkge1xuICAgIG9wdGlvbnMucHVzaChgcmVzaXphYmxlOiAke2NvbHVtbi5yZXNpemFibGV9YCk7XG4gIH1cblxuICAvLyBGb3IgY3VzdG9tIGNvbHVtbnMsIHdlJ2QgbmVlZCB0byBpbmNsdWRlIG1vcmUgY29tcGxleCBvcHRpb25zXG4gIC8vIFRoaXMgaXMgYSBzaW1wbGlmaWVkIHZlcnNpb24gLSBmdWxsIGltcGxlbWVudGF0aW9uIHdvdWxkIGhhbmRsZVxuICAvLyBmb3JtYXR0ZXJzLCB2YWxpZGF0b3JzLCBlZGl0b3JzLCBldGMuXG5cbiAgaWYgKG9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gYHtcXG4ke2luZGVudH0ke2luZGVudH0ke29wdGlvbnMuam9pbihgLFxcbiR7aW5kZW50fSR7aW5kZW50fWApfVxcbiR7aW5kZW50fX1gO1xufVxuXG4vKipcbiAqIEVzY2FwZSBzdHJpbmcgZm9yIHVzZSBpbiBUeXBlU2NyaXB0IGNvZGVcbiAqIEBwYXJhbSBzdHIgU3RyaW5nIHRvIGVzY2FwZVxuICogQHJldHVybnMgRXNjYXBlZCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZXNjYXBlU3RyaW5nKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIikucmVwbGFjZSgvXFxuL2csICdcXFxcbicpO1xufVxuXG4iXX0=
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Custom cell editors for ngx-smart-table
3
+ */
4
+ export { NileInputEditor } from './nile-input-editor';
5
+ export { NileSelectEditor } from './nile-select-editor';
6
+ export { NileAutoCompleteEditor } from './nile-autocomplete-editor';
7
+ export { NileCalendarEditor } from './nile-calendar-editor';
8
+ export { NileDatePickerEditor } from './nile-date-picker-editor';
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC10YWJsZS9zcmMvbGliL2VkaXRvcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEVBQUUsZUFBZSxFQUEwQixNQUFNLHFCQUFxQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBeUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRixPQUFPLEVBQUUsc0JBQXNCLEVBQXFELE1BQU0sNEJBQTRCLENBQUM7QUFDdkgsT0FBTyxFQUFFLGtCQUFrQixFQUFnRCxNQUFNLHdCQUF3QixDQUFDO0FBQzFHLE9BQU8sRUFBRSxvQkFBb0IsRUFBMEMsTUFBTSwyQkFBMkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ3VzdG9tIGNlbGwgZWRpdG9ycyBmb3Igbmd4LXNtYXJ0LXRhYmxlXG4gKi9cblxuZXhwb3J0IHsgTmlsZUlucHV0RWRpdG9yLCBOaWxlSW5wdXRFZGl0b3JPcHRpb25zIH0gZnJvbSAnLi9uaWxlLWlucHV0LWVkaXRvcic7XG5leHBvcnQgeyBOaWxlU2VsZWN0RWRpdG9yLCBOaWxlU2VsZWN0RWRpdG9yT3B0aW9ucywgU2VsZWN0T3B0aW9uIH0gZnJvbSAnLi9uaWxlLXNlbGVjdC1lZGl0b3InO1xuZXhwb3J0IHsgTmlsZUF1dG9Db21wbGV0ZUVkaXRvciwgTmlsZUF1dG9Db21wbGV0ZUVkaXRvck9wdGlvbnMsIEF1dG9Db21wbGV0ZU9wdGlvbiB9IGZyb20gJy4vbmlsZS1hdXRvY29tcGxldGUtZWRpdG9yJztcbmV4cG9ydCB7IE5pbGVDYWxlbmRhckVkaXRvciwgTmlsZUNhbGVuZGFyRWRpdG9yT3B0aW9ucywgQWxsb3dlZERhdGVzUmFuZ2UgfSBmcm9tICcuL25pbGUtY2FsZW5kYXItZWRpdG9yJztcbmV4cG9ydCB7IE5pbGVEYXRlUGlja2VyRWRpdG9yLCBOaWxlRGF0ZVBpY2tlckVkaXRvck9wdGlvbnMsIERhdGVSYW5nZSB9IGZyb20gJy4vbmlsZS1kYXRlLXBpY2tlci1lZGl0b3InO1xuIl19