@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,389 @@
1
+ /**
2
+ * Cell class - represents individual cell instances
3
+ * Combines ColumnConfig (Flyweight) with CellState (unique per instance)
4
+ */
5
+ import { createCellState, createMemento, restoreFromMemento, canEdit, isCellValid } from './cell-state.interface';
6
+ import { CellLifecycleState, EditMode } from '../../models/cell-types';
7
+ /**
8
+ * Cell class implementing the Flyweight pattern
9
+ * - References shared ColumnConfig (Flyweight)
10
+ * - Owns unique CellState (Flyweight Context)
11
+ */
12
+ export class Cell {
13
+ constructor(columnConfig, initialValue, rowData, rowIndex) {
14
+ /**
15
+ * History of state mementos for undo/redo
16
+ */
17
+ this.history = [];
18
+ /**
19
+ * Current position in history
20
+ */
21
+ this.historyIndex = -1;
22
+ /**
23
+ * Maximum history size
24
+ */
25
+ this.maxHistorySize = 10;
26
+ this.columnConfig = columnConfig;
27
+ this.state = createCellState(initialValue);
28
+ this.rowData = rowData;
29
+ this.rowIndex = rowIndex;
30
+ // Save initial state to history
31
+ this.saveToHistory();
32
+ }
33
+ /**
34
+ * Get current cell value
35
+ */
36
+ getValue() {
37
+ return this.state.value;
38
+ }
39
+ /**
40
+ * Set cell value
41
+ * @param value New value
42
+ * @param skipValidation Skip validation (useful for programmatic sets)
43
+ */
44
+ setValue(value, skipValidation = false) {
45
+ const previousValue = this.state.value;
46
+ // Call before change hook
47
+ if (this.columnConfig.hooks?.onChange) {
48
+ this.columnConfig.hooks.onChange(this.createEvent(value, previousValue));
49
+ }
50
+ this.state.value = value;
51
+ this.state.isDirty = true;
52
+ this.state.lastModified = new Date();
53
+ // Validate if not skipped
54
+ if (!skipValidation) {
55
+ const validationResult = this.validate();
56
+ if (!validationResult.valid) {
57
+ return false;
58
+ }
59
+ }
60
+ this.saveToHistory();
61
+ return true;
62
+ }
63
+ /**
64
+ * Render cell value as formatted string (delegates to formatter strategy)
65
+ */
66
+ render() {
67
+ if (!this.columnConfig.formatter) {
68
+ return String(this.state.value ?? '');
69
+ }
70
+ if (this.columnConfig.formatter.formatWithContext) {
71
+ return this.columnConfig.formatter.formatWithContext(this.state.value, this.rowData, this.columnConfig.key);
72
+ }
73
+ // Ensure format method exists before calling it
74
+ if (this.columnConfig.formatter.format) {
75
+ return this.columnConfig.formatter.format(this.state.value);
76
+ }
77
+ // Fallback if formatter exists but has no methods
78
+ return String(this.state.value ?? '');
79
+ }
80
+ /**
81
+ * Validate cell value (delegates to validator strategy)
82
+ */
83
+ validate() {
84
+ // Clear previous errors
85
+ this.state.error = undefined;
86
+ this.state.errors = undefined;
87
+ this.state.lastValidated = new Date();
88
+ if (!this.columnConfig.validator) {
89
+ return { valid: true };
90
+ }
91
+ const result = this.columnConfig.validator.validateWithContext
92
+ ? this.columnConfig.validator.validateWithContext(this.state.value, this.rowData, this.columnConfig.key)
93
+ : this.columnConfig.validator.validate(this.state.value);
94
+ if (!result.valid) {
95
+ this.state.error = result.error;
96
+ this.state.errors = result.errors;
97
+ this.state.lifecycleState = CellLifecycleState.ERROR;
98
+ // Call validation error hook
99
+ if (this.columnConfig.hooks?.onValidationError) {
100
+ this.columnConfig.hooks.onValidationError(this.createEvent(this.state.value));
101
+ }
102
+ }
103
+ return result;
104
+ }
105
+ /**
106
+ * Start edit mode
107
+ */
108
+ startEdit() {
109
+ // Check if cell can be edited
110
+ if (!this.canEdit()) {
111
+ return false;
112
+ }
113
+ // Call before edit hook
114
+ if (this.columnConfig.hooks?.beforeEdit) {
115
+ this.columnConfig.hooks.beforeEdit(this.createEvent(this.state.value));
116
+ }
117
+ // Save current value as previous
118
+ this.state.previousValue = this.state.value;
119
+ this.state.isEditing = true;
120
+ this.state.lifecycleState = CellLifecycleState.EDITING;
121
+ // Call on edit hook
122
+ if (this.columnConfig.hooks?.onEdit) {
123
+ this.columnConfig.hooks.onEdit(this.createEvent(this.state.value));
124
+ }
125
+ return true;
126
+ }
127
+ /**
128
+ * Save edited value
129
+ * @param newValue The new value from editor
130
+ */
131
+ saveEdit(newValue) {
132
+ if (!this.state.isEditing) {
133
+ return false;
134
+ }
135
+ // Call before save hook
136
+ if (this.columnConfig.hooks?.beforeSave) {
137
+ this.columnConfig.hooks.beforeSave(this.createEvent(newValue, this.state.previousValue));
138
+ }
139
+ // Parse value if parser is provided
140
+ let parsedValue = newValue;
141
+ if (this.columnConfig.parser) {
142
+ try {
143
+ parsedValue = this.columnConfig.parser.parse(newValue);
144
+ }
145
+ catch (error) {
146
+ this.state.error = `Failed to parse value: ${error}`;
147
+ return false;
148
+ }
149
+ }
150
+ // Validate
151
+ const previousValue = this.state.value;
152
+ this.state.value = parsedValue;
153
+ const validationResult = this.validate();
154
+ if (!validationResult.valid) {
155
+ this.state.value = previousValue; // Revert on validation failure
156
+ return false;
157
+ }
158
+ // Mark as dirty if value changed
159
+ this.state.isDirty = this.state.value !== this.state.originalValue;
160
+ this.state.isEditing = false;
161
+ this.state.lifecycleState = CellLifecycleState.DISPLAY;
162
+ this.state.lastModified = new Date();
163
+ // Save to history
164
+ this.saveToHistory();
165
+ // Call after save hook
166
+ if (this.columnConfig.hooks?.onSave) {
167
+ this.columnConfig.hooks.onSave(this.createEvent(parsedValue, previousValue));
168
+ }
169
+ // Call after edit hook
170
+ if (this.columnConfig.hooks?.afterEdit) {
171
+ this.columnConfig.hooks.afterEdit(this.createEvent(parsedValue));
172
+ }
173
+ return true;
174
+ }
175
+ /**
176
+ * Cancel edit and revert to previous value
177
+ */
178
+ cancelEdit() {
179
+ if (!this.state.isEditing) {
180
+ return;
181
+ }
182
+ // Revert to previous value
183
+ if (this.state.previousValue !== undefined) {
184
+ this.state.value = this.state.previousValue;
185
+ }
186
+ this.state.isEditing = false;
187
+ this.state.lifecycleState = CellLifecycleState.DISPLAY;
188
+ this.state.error = undefined;
189
+ this.state.errors = undefined;
190
+ // Call cancel hook
191
+ if (this.columnConfig.hooks?.onCancel) {
192
+ this.columnConfig.hooks.onCancel(this.createEvent(this.state.value));
193
+ }
194
+ // Call after edit hook
195
+ if (this.columnConfig.hooks?.afterEdit) {
196
+ this.columnConfig.hooks.afterEdit(this.createEvent(this.state.value));
197
+ }
198
+ }
199
+ /**
200
+ * Reset cell to original value
201
+ */
202
+ reset() {
203
+ if (this.state.originalValue !== undefined) {
204
+ this.state.value = this.state.originalValue;
205
+ this.state.isDirty = false;
206
+ this.state.error = undefined;
207
+ this.state.errors = undefined;
208
+ this.state.isEditing = false;
209
+ this.state.lifecycleState = CellLifecycleState.DISPLAY;
210
+ }
211
+ }
212
+ /**
213
+ * Check if cell can be edited
214
+ */
215
+ canEdit() {
216
+ return (this.columnConfig.editable === true &&
217
+ this.columnConfig.editMode !== EditMode.NONE &&
218
+ canEdit(this.state));
219
+ }
220
+ /**
221
+ * Check if cell is valid
222
+ */
223
+ isValid() {
224
+ return isCellValid(this.state);
225
+ }
226
+ /**
227
+ * Check if cell is dirty (modified)
228
+ */
229
+ isDirty() {
230
+ return this.state.isDirty;
231
+ }
232
+ /**
233
+ * Check if cell is in edit mode
234
+ */
235
+ isEditing() {
236
+ return this.state.isEditing;
237
+ }
238
+ /**
239
+ * Set focus state on this cell
240
+ */
241
+ focus() {
242
+ this.state.isFocused = true;
243
+ }
244
+ /**
245
+ * Remove focus from this cell
246
+ */
247
+ blur() {
248
+ this.state.isFocused = false;
249
+ }
250
+ /**
251
+ * Check if this cell is focused
252
+ */
253
+ isFocused() {
254
+ return this.state.isFocused ?? false;
255
+ }
256
+ /**
257
+ * Get current cell state (Memento pattern)
258
+ */
259
+ getState() {
260
+ return { ...this.state };
261
+ }
262
+ /**
263
+ * Restore cell state from snapshot (Memento pattern)
264
+ */
265
+ restoreState(state) {
266
+ this.state = { ...state };
267
+ }
268
+ /**
269
+ * Get column configuration (readonly access)
270
+ */
271
+ getColumnConfig() {
272
+ return this.columnConfig;
273
+ }
274
+ /**
275
+ * Get row data context
276
+ */
277
+ getRowData() {
278
+ return this.rowData;
279
+ }
280
+ /**
281
+ * Get row index
282
+ */
283
+ getRowIndex() {
284
+ return this.rowIndex;
285
+ }
286
+ /**
287
+ * Set loading state
288
+ */
289
+ setLoading(isLoading) {
290
+ this.state.isLoading = isLoading;
291
+ }
292
+ /**
293
+ * Set disabled state
294
+ */
295
+ setDisabled(isDisabled) {
296
+ this.state.isDisabled = isDisabled;
297
+ }
298
+ /**
299
+ * Set readonly state
300
+ */
301
+ setReadonly(isReadonly) {
302
+ this.state.isReadonly = isReadonly;
303
+ }
304
+ /**
305
+ * Save current state to history
306
+ */
307
+ saveToHistory() {
308
+ // Remove any states after current position (for redo invalidation)
309
+ this.history = this.history.slice(0, this.historyIndex + 1);
310
+ // Add current state
311
+ this.history.push(createMemento(this.state));
312
+ this.historyIndex = this.history.length - 1;
313
+ // Limit history size
314
+ if (this.history.length > this.maxHistorySize) {
315
+ this.history.shift();
316
+ this.historyIndex--;
317
+ }
318
+ }
319
+ /**
320
+ * Undo last change
321
+ */
322
+ undo() {
323
+ if (this.historyIndex > 0) {
324
+ this.historyIndex--;
325
+ const memento = this.history[this.historyIndex];
326
+ this.state = restoreFromMemento(this.state, memento);
327
+ return true;
328
+ }
329
+ return false;
330
+ }
331
+ /**
332
+ * Redo last undone change
333
+ */
334
+ redo() {
335
+ if (this.historyIndex < this.history.length - 1) {
336
+ this.historyIndex++;
337
+ const memento = this.history[this.historyIndex];
338
+ this.state = restoreFromMemento(this.state, memento);
339
+ return true;
340
+ }
341
+ return false;
342
+ }
343
+ /**
344
+ * Check if undo is available
345
+ */
346
+ canUndo() {
347
+ return this.historyIndex > 0;
348
+ }
349
+ /**
350
+ * Check if redo is available
351
+ */
352
+ canRedo() {
353
+ return this.historyIndex < this.history.length - 1;
354
+ }
355
+ /**
356
+ * Create cell event for hooks
357
+ */
358
+ createEvent(value, previousValue) {
359
+ return {
360
+ value,
361
+ previousValue: previousValue ?? this.state.previousValue,
362
+ rowData: this.rowData,
363
+ columnKey: this.columnConfig.key,
364
+ rowIndex: this.rowIndex
365
+ };
366
+ }
367
+ /**
368
+ * Get cell metadata
369
+ */
370
+ getMetadata(key) {
371
+ return this.state.metadata?.[key];
372
+ }
373
+ /**
374
+ * Set cell metadata
375
+ */
376
+ setMetadata(key, value) {
377
+ if (!this.state.metadata) {
378
+ this.state.metadata = {};
379
+ }
380
+ this.state.metadata[key] = value;
381
+ }
382
+ /**
383
+ * Clear all metadata
384
+ */
385
+ clearMetadata() {
386
+ this.state.metadata = undefined;
387
+ }
388
+ }
389
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXRhYmxlL3NyYy9saWIvcmVuZGVyZXIvbW9kZWxzL2NlbGwuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBR0gsT0FBTyxFQUFhLGVBQWUsRUFBb0IsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvSSxPQUFPLEVBQW9CLGtCQUFrQixFQUFhLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXBHOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sSUFBSTtJQW9DZixZQUNFLFlBQTZCLEVBQzdCLFlBQWUsRUFDZixPQUFhLEVBQ2IsUUFBaUI7UUFuQm5COztXQUVHO1FBQ0ssWUFBTyxHQUEwQixFQUFFLENBQUM7UUFFNUM7O1dBRUc7UUFDSyxpQkFBWSxHQUFXLENBQUMsQ0FBQyxDQUFDO1FBRWxDOztXQUVHO1FBQ2MsbUJBQWMsR0FBVyxFQUFFLENBQUM7UUFRM0MsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDakMsSUFBSSxDQUFDLEtBQUssR0FBRyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFFekIsZ0NBQWdDO1FBQ2hDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFFBQVEsQ0FBQyxLQUFRLEVBQUUsaUJBQTBCLEtBQUs7UUFDaEQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxL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LENBQUMsWUFBWSxDQUFDLEdBQUc7WUFDaEMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQ3hCLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXLENBQUMsR0FBVztRQUNyQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVyxDQUFDLEdBQVcsRUFBRSxLQUFVO1FBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRTtZQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7U0FDMUI7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDbkMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsYUFBYTtRQUNYLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztJQUNsQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENlbGwgY2xhc3MgLSByZXByZXNlbnRzIGluZGl2aWR1YWwgY2VsbCBpbnN0YW5jZXNcbiAqIENvbWJpbmVzIENvbHVtbkNvbmZpZyAoRmx5d2VpZ2h0KSB3aXRoIENlbGxTdGF0ZSAodW5pcXVlIHBlciBpbnN0YW5jZSlcbiAqL1xuXG5pbXBvcnQgeyBDb2x1bW5Db25maWcgfSBmcm9tICcuLi8uLi9tb2RlbHMvY29sdW1uLWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ2VsbFN0YXRlLCBjcmVhdGVDZWxsU3RhdGUsIENlbGxTdGF0ZU1lbWVudG8sIGNyZWF0ZU1lbWVudG8sIHJlc3RvcmVGcm9tTWVtZW50bywgY2FuRWRpdCwgaXNDZWxsVmFsaWQgfSBmcm9tICcuL2NlbGwtc3RhdGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IFZhbGlkYXRpb25SZXN1bHQsIENlbGxMaWZlY3ljbGVTdGF0ZSwgQ2VsbEV2ZW50LCBFZGl0TW9kZSB9IGZyb20gJy4uLy4uL21vZGVscy9jZWxsLXR5cGVzJztcblxuLyoqXG4gKiBDZWxsIGNsYXNzIGltcGxlbWVudGluZyB0aGUgRmx5d2VpZ2h0IHBhdHRlcm5cbiAqIC0gUmVmZXJlbmNlcyBzaGFyZWQgQ29sdW1uQ29uZmlnIChGbHl3ZWlnaHQpXG4gKiAtIE93bnMgdW5pcXVlIENlbGxTdGF0ZSAoRmx5d2VpZ2h0IENvbnRleHQpXG4gKi9cbmV4cG9ydCBjbGFzcyBDZWxsPFQgPSBhbnk+IHtcbiAgLyoqXG4gICAqIFNoYXJlZCBjb2x1bW4gY29uZmlndXJhdGlvbiAoRmx5d2VpZ2h0IC0gcmVmZXJlbmNlIG9ubHksIG5vdCBvd25lZClcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgY29sdW1uQ29uZmlnOiBDb2x1bW5Db25maWc8VD47XG5cbiAgLyoqXG4gICAqIFVuaXF1ZSBjZWxsIHN0YXRlIChvd25lZCBieSB0aGlzIGluc3RhbmNlKVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0ZTogQ2VsbFN0YXRlPFQ+O1xuXG4gIC8qKlxuICAgKiBSb3cgZGF0YSBjb250ZXh0IChyZWZlcmVuY2UgdG8gcGFyZW50IHJvdyBkYXRhKVxuICAgKi9cbiAgcHJpdmF0ZSByb3dEYXRhPzogYW55O1xuXG4gIC8qKlxuICAgKiBSb3cgaW5kZXggaW4gdGFibGVcbiAgICovXG4gIHByaXZhdGUgcm93SW5kZXg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEhpc3Rvcnkgb2Ygc3RhdGUgbWVtZW50b3MgZm9yIHVuZG8vcmVkb1xuICAgKi9cbiAgcHJpdmF0ZSBoaXN0b3J5OiBDZWxsU3RhdGVNZW1lbnRvPFQ+W10gPSBbXTtcblxuICAvKipcbiAgICogQ3VycmVudCBwb3NpdGlvbiBpbiBoaXN0b3J5XG4gICAqL1xuICBwcml2YXRlIGhpc3RvcnlJbmRleDogbnVtYmVyID0gLTE7XG5cbiAgLyoqXG4gICAqIE1heGltdW0gaGlzdG9yeSBzaXplXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IG1heEhpc3RvcnlTaXplOiBudW1iZXIgPSAxMDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBjb2x1bW5Db25maWc6IENvbHVtbkNvbmZpZzxUPixcbiAgICBpbml0aWFsVmFsdWU6IFQsXG4gICAgcm93RGF0YT86IGFueSxcbiAgICByb3dJbmRleD86IG51bWJlclxuICApIHtcbiAgICB0aGlzLmNvbHVtbkNvbmZpZyA9IGNvbHVtbkNvbmZpZztcbiAgICB0aGlzLnN0YXRlID0gY3JlYXRlQ2VsbFN0YXRlKGluaXRpYWxWYWx1ZSk7XG4gICAgdGhpcy5yb3dEYXRhID0gcm93RGF0YTtcbiAgICB0aGlzLnJvd0luZGV4ID0gcm93SW5kZXg7XG4gICAgXG4gICAgLy8gU2F2ZSBpbml0aWFsIHN0YXRlIHRvIGhpc3RvcnlcbiAgICB0aGlzLnNhdmVUb0hpc3RvcnkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3VycmVudCBjZWxsIHZhbHVlXG4gICAqL1xuICBnZXRWYWx1ZSgpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgY2VsbCB2YWx1ZVxuICAgKiBAcGFyYW0gdmFsdWUgTmV3IHZhbHVlXG4gICAqIEBwYXJhbSBza2lwVmFsaWRhdGlvbiBTa2lwIHZhbGlkYXRpb24gKHVzZWZ1bCBmb3IgcHJvZ3JhbW1hdGljIHNldHMpXG4gICAqL1xuICBzZXRWYWx1ZSh2YWx1ZTogVCwgc2tpcFZhbGlkYXRpb246IGJvb2xlYW4gPSBmYWxzZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHByZXZpb3VzVmFsdWUgPSB0aGlzLnN0YXRlLnZhbHVlO1xuXG4gICAgLy8gQ2FsbCBiZWZvcmUgY2hhbmdlIGhvb2tcbiAgICBpZiAodGhpcy5jb2x1bW5Db25maWcuaG9va3M/Lm9uQ2hhbmdlKSB7XG4gICAgICB0aGlzLmNvbHVtbkNvbmZpZy5ob29rcy5vbkNoYW5nZSh0aGlzLmNyZWF0ZUV2ZW50KHZhbHVlLCBwcmV2aW91c1ZhbHVlKSk7XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZS52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuc3RhdGUuaXNEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5zdGF0ZS5sYXN0TW9kaWZpZWQgPSBuZXcgRGF0ZSgpO1xuXG4gICAgLy8gVmFsaWRhdGUgaWYgbm90IHNraXBwZWRcbiAgICBpZiAoIXNraXBWYWxpZGF0aW9uKSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gdGhpcy52YWxpZGF0ZSgpO1xuICAgICAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0LnZhbGlkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNhdmVUb0hpc3RvcnkoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgY2VsbCB2YWx1ZSBhcyBmb3JtYXR0ZWQgc3RyaW5nIChkZWxlZ2F0ZXMgdG8gZm9ybWF0dGVyIHN0cmF0ZWd5KVxuICAgKi9cbiAgcmVuZGVyKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmNvbHVtbkNvbmZpZy5mb3JtYXR0ZXIpIHtcbiAgICAgIHJldHVybiBTdHJpbmcodGhpcy5zdGF0ZS52YWx1ZSA/PyAnJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29sdW1uQ29uZmlnLmZvcm1hdHRlci5mb3JtYXRXaXRoQ29udGV4dCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29sdW1uQ29uZmlnLmZvcm1hdHRlci5mb3JtYXRXaXRoQ29udGV4dChcbiAgICAgICAgdGhpcy5zdGF0ZS52YWx1ZSxcbiAgICAgICAgdGhpcy5yb3dEYXRhLFxuICAgICAgICB0aGlzLmNvbHVtbkNvbmZpZy5rZXlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRW5zdXJlIGZvcm1hdCBtZXRob2QgZXhpc3RzIGJlZm9yZSBjYWxsaW5nIGl0XG4gICAgaWYgKHRoaXMuY29sdW1uQ29uZmlnLmZvcm1hdHRlci5mb3JtYXQpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbHVtbkNvbmZpZy5mb3JtYXR0ZXIuZm9ybWF0KHRoaXMuc3RhdGUudmFsdWUpO1xuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrIGlmIGZvcm1hdHRlciBleGlzdHMgYnV0IGhhcyBubyBtZXRob2RzXG4gICAgcmV0dXJuIFN0cmluZyh0aGlzLnN0YXRlLnZhbHVlID8/ICcnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBjZWxsIHZhbHVlIChkZWxlZ2F0ZXMgdG8gdmFsaWRhdG9yIHN0cmF0ZWd5KVxuICAgKi9cbiAgdmFsaWRhdGUoKTogVmFsaWRhdGlvblJlc3VsdCB7XG4gICAgLy8gQ2xlYXIgcHJldmlvdXMgZXJyb3JzXG4gICAgdGhpcy5zdGF0ZS5lcnJvciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnN0YXRlLmVycm9ycyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnN0YXRlLmxhc3RWYWxpZGF0ZWQgPSBuZXcgRGF0ZSgpO1xuXG4gICAgaWYgKCF0aGlzLmNvbHVtbkNvbmZpZy52YWxpZGF0b3IpIHtcbiAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlIH07XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jb2x1bW5Db25maWcudmFsaWRhdG9yLnZhbGlkYXRlV2l0aENvbnRleHRcbiAgICAgID8gdGhpcy5jb2x1bW5Db25maWcudmFsaWRhdG9yLnZhbGlkYXRlV2l0aENvbnRleHQoXG4gICAgICAgICAgdGhpcy5zdGF0ZS52YWx1ZSxcbiAgICAgICAgICB0aGlzLnJvd0RhdGEsXG4gICAgICAgICAgdGhpcy5jb2x1bW5Db25maWcua2V5XG4gICAgICAgIClcbiAgICAgIDogdGhpcy5jb2x1bW5Db25maWcudmFsaWRhdG9yLnZhbGlkYXRlKHRoaXMuc3RhdGUudmFsdWUpO1xuXG4gICAgaWYgKCFyZXN1bHQudmFsaWQpIHtcbiAgICAgIHRoaXMuc3RhdGUuZXJyb3IgPSByZXN1bHQuZXJyb3I7XG4gICAgICB0aGlzLnN0YXRlLmVycm9ycyA9IHJlc3VsdC5lcnJvcnM7XG4gICAgICB0aGlzLnN0YXRlLmxpZmVjeWNsZVN0YXRlID0gQ2VsbExpZmVjeWNsZVN0YXRlLkVSUk9SO1xuXG4gICAgICAvLyBDYWxsIHZhbGlkYXRpb24gZXJyb3IgaG9va1xuICAgICAgaWYgKHRoaXMuY29sdW1uQ29uZmlnLmhvb2tzPy5vblZhbGlkYXRpb25FcnJvcikge1xuICAgICAgICB0aGlzLmNvbHVtbkNvbmZpZy5ob29rcy5vblZhbGlkYXRpb25FcnJvcih0aGlzLmNyZWF0ZUV2ZW50KHRoaXMuc3RhdGUudmFsdWUpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGVkaXQgbW9kZVxuICAgKi9cbiAgc3RhcnRFZGl0KCk6IGJvb2xlYW4ge1xuICAgIC8vIENoZWNrIGlmIGNlbGwgY2FuIGJlIGVkaXRlZFxuICAgIGlmICghdGhpcy5jYW5FZGl0KCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBDYWxsIGJlZm9yZSBlZGl0IGhvb2tcbiAgICBpZiAodGhpcy5jb2x1bW5Db25maWcuaG9va3M/LmJlZm9yZUVkaXQpIHtcbiAgICAgIHRoaXMuY29sdW1uQ29uZmlnLmhvb2tzLmJlZm9yZUVkaXQodGhpcy5jcmVhdGVFdmVudCh0aGlzLnN0YXRlLnZhbHVlKSk7XG4gICAgfVxuXG4gICAgLy8gU2F2ZSBjdXJyZW50IHZhbHVlIGFzIHByZXZpb3VzXG4gICAgdGhpcy5zdGF0ZS5wcmV2aW91c1ZhbHVlID0gdGhpcy5zdGF0ZS52YWx1ZTtcbiAgICB0aGlzLnN0YXRlLmlzRWRpdGluZyA9IHRydWU7XG4gICAgdGhpcy5zdGF0ZS5saWZlY3ljbGVTdGF0ZSA9IENlbGxMaWZlY3ljbGVTdGF0ZS5FRElUSU5HO1xuXG4gICAgLy8gQ2FsbCBvbiBlZGl0IGhvb2tcbiAgICBpZiAodGhpcy5jb2x1bW5Db25maWcuaG9va3M/Lm9uRWRpdCkge1xuICAgICAgdGhpcy5jb2x1bW5Db25maWcuaG9va3Mub25FZGl0KHRoaXMuY3JlYXRlRXZlbnQodGhpcy5zdGF0ZS52YWx1ZSkpO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgZWRpdGVkIHZhbHVlXG4gICAqIEBwYXJhbSBuZXdWYWx1ZSBUaGUgbmV3IHZhbHVlIGZyb20gZWRpdG9yXG4gICAqL1xuICBzYXZlRWRpdChuZXdWYWx1ZTogVCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5zdGF0ZS5pc0VkaXRpbmcpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBDYWxsIGJlZm9yZSBzYXZlIGhvb2tcbiAgICBpZiAodGhpcy5jb2x1bW5Db25maWcuaG9va3M/LmJlZm9yZVNhdmUpIHtcbiAgICAgIHRoaXMuY29sdW1uQ29uZmlnLmhvb2tzLmJlZm9yZVNhdmUodGhpcy5jcmVhdGVFdmVudChuZXdWYWx1ZSwgdGhpcy5zdGF0ZS5wcmV2aW91c1ZhbHVlKSk7XG4gICAgfVxuXG4gICAgLy8gUGFyc2UgdmFsdWUgaWYgcGFyc2VyIGlzIHByb3ZpZGVkXG4gICAgbGV0IHBhcnNlZFZhbHVlID0gbmV3VmFsdWU7XG4gICAgaWYgKHRoaXMuY29sdW1uQ29uZmlnLnBhcnNlcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcGFyc2VkVmFsdWUgPSB0aGlzLmNvbHVtbkNvbmZpZy5wYXJzZXIucGFyc2UobmV3VmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5zdGF0ZS5lcnJvciA9IGBGYWlsZWQgdG8gcGFyc2UgdmFsdWU6ICR7ZXJyb3J9YDtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlXG4gICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IHRoaXMuc3RhdGUudmFsdWU7XG4gICAgdGhpcy5zdGF0ZS52YWx1ZSA9IHBhcnNlZFZhbHVlO1xuICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSB0aGlzLnZhbGlkYXRlKCk7XG5cbiAgICBpZiAoIXZhbGlkYXRpb25SZXN1bHQudmFsaWQpIHtcbiAgICAgIHRoaXMuc3RhdGUudmFsdWUgPSBwcmV2aW91c1ZhbHVlOyAvLyBSZXZlcnQgb24gdmFsaWRhdGlvbiBmYWlsdXJlXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gTWFyayBhcyBkaXJ0eSBpZiB2YWx1ZSBjaGFuZ2VkXG4gICAgdGhpcy5zdGF0ZS5pc0RpcnR5ID0gdGhpcy5zdGF0ZS52YWx1ZSAhPT0gdGhpcy5zdGF0ZS5vcmlnaW5hbFZhbHVlO1xuICAgIHRoaXMuc3RhdGUuaXNFZGl0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5zdGF0ZS5saWZlY3ljbGVTdGF0ZSA9IENlbGxMaWZlY3ljbGVTdGF0ZS5ESVNQTEFZO1xuICAgIHRoaXMuc3RhdGUubGFzdE1vZGlmaWVkID0gbmV3IERhdGUoKTtcblxuICAgIC8vIFNhdmUgdG8gaGlzdG9yeVxuICAgIHRoaXMuc2F2ZVRvSGlzdG9yeSgpO1xuXG4gICAgLy8gQ2FsbCBhZnRlciBzYXZlIGhvb2tcbiAgICBpZiAodGhpcy5jb2x1bW5Db25maWcuaG9va3M/Lm9uU2F2ZSkge1xuICAgICAgdGhpcy5jb2x1bW5Db25maWcuaG9va3Mub25TYXZlKHRoaXMuY3JlYXRlRXZlbnQocGFyc2VkVmFsdWUsIHByZXZpb3VzVmFsdWUpKTtcbiAgICB9XG5cbiAgICAvLyBDYWxsIGFmdGVyIGVkaXQgaG9va1xuICAgIGlmICh0aGlzLmNvbHVtbkNvbmZpZy5ob29rcz8uYWZ0ZXJFZGl0KSB7XG4gICAgICB0aGlzLmNvbHVtbkNvbmZpZy5ob29rcy5hZnRlckVkaXQodGhpcy5jcmVhdGVFdmVudChwYXJzZWRWYWx1ZSkpO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbCBlZGl0IGFuZCByZXZlcnQgdG8gcHJldmlvdXMgdmFsdWVcbiAgICovXG4gIGNhbmNlbEVkaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnN0YXRlLmlzRWRpdGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFJldmVydCB0byBwcmV2aW91cyB2YWx1ZVxuICAgIGlmICh0aGlzLnN0YXRlLnByZXZpb3VzVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zdGF0ZS52YWx1ZSA9IHRoaXMuc3RhdGUucHJldmlvdXNWYWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlLmlzRWRpdGluZyA9IGZhbHNlO1xuICAgIHRoaXMuc3RhdGUubGlmZWN5Y2xlU3RhdGUgPSBDZWxsTGlmZWN5Y2xlU3RhdGUuRElTUExBWTtcbiAgICB0aGlzLnN0YXRlLmVycm9yID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuc3RhdGUuZXJyb3JzID0gdW5kZWZpbmVkO1xuXG4gICAgLy8gQ2FsbCBjYW5jZWwgaG9va1xuICAgIGlmICh0aGlzLmNvbHVtbkNvbmZpZy5ob29rcz8ub25DYW5jZWwpIHtcbiAgICAgIHRoaXMuY29sdW1uQ29uZmlnLmhvb2tzLm9uQ2FuY2VsKHRoaXMuY3JlYXRlRXZlbnQodGhpcy5zdGF0ZS52YWx1ZSkpO1xuICAgIH1cblxuICAgIC8vIENhbGwgYWZ0ZXIgZWRpdCBob29rXG4gICAgaWYgKHRoaXMuY29sdW1uQ29uZmlnLmhvb2tzPy5hZnRlckVkaXQpIHtcbiAgICAgIHRoaXMuY29sdW1uQ29uZmlnLmhvb2tzLmFmdGVyRWRpdCh0aGlzLmNyZWF0ZUV2ZW50KHRoaXMuc3RhdGUudmFsdWUpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgY2VsbCB0byBvcmlnaW5hbCB2YWx1ZVxuICAgKi9cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUub3JpZ2luYWxWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnN0YXRlLnZhbHVlID0gdGhpcy5zdGF0ZS5vcmlnaW5hbFZhbHVlO1xuICAgICAgdGhpcy5zdGF0ZS5pc0RpcnR5ID0gZmFsc2U7XG4gICAgICB0aGlzLnN0YXRlLmVycm9yID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5zdGF0ZS5lcnJvcnMgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLnN0YXRlLmlzRWRpdGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5zdGF0ZS5saWZlY3ljbGVTdGF0ZSA9IENlbGxMaWZlY3ljbGVTdGF0ZS5ESVNQTEFZO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBjZWxsIGNhbiBiZSBlZGl0ZWRcbiAgICovXG4gIGNhbkVkaXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY29sdW1uQ29uZmlnLmVkaXRhYmxlID09PSB0cnVlICYmXG4gICAgICB0aGlzLmNvbHVtbkNvbmZpZy5lZGl0TW9kZSAhPT0gRWRpdE1vZGUuTk9ORSAmJlxuICAgICAgY2FuRWRpdCh0aGlzLnN0YXRlKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgY2VsbCBpcyB2YWxpZFxuICAgKi9cbiAgaXNWYWxpZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNDZWxsVmFsaWQodGhpcy5zdGF0ZSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgY2VsbCBpcyBkaXJ0eSAobW9kaWZpZWQpXG4gICAqL1xuICBpc0RpcnR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLmlzRGlydHk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgY2VsbCBpcyBpbiBlZGl0IG1vZGVcbiAgICovXG4gIGlzRWRpdGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5pc0VkaXRpbmc7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGZvY3VzIHN0YXRlIG9uIHRoaXMgY2VsbFxuICAgKi9cbiAgZm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZS5pc0ZvY3VzZWQgPSB0cnVlO1xuICB9XG4gIFxuICAvKipcbiAgICogUmVtb3ZlIGZvY3VzIGZyb20gdGhpcyBjZWxsXG4gICAqL1xuICBibHVyKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUuaXNGb2N1c2VkID0gZmFsc2U7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGlzIGNlbGwgaXMgZm9jdXNlZFxuICAgKi9cbiAgaXNGb2N1c2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLmlzRm9jdXNlZCA/PyBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3VycmVudCBjZWxsIHN0YXRlIChNZW1lbnRvIHBhdHRlcm4pXG4gICAqL1xuICBnZXRTdGF0ZSgpOiBDZWxsU3RhdGU8VD4ge1xuICAgIHJldHVybiB7IC4uLnRoaXMuc3RhdGUgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlIGNlbGwgc3RhdGUgZnJvbSBzbmFwc2hvdCAoTWVtZW50byBwYXR0ZXJuKVxuICAgKi9cbiAgcmVzdG9yZVN0YXRlKHN0YXRlOiBDZWxsU3RhdGU8VD4pOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlID0geyAuLi5zdGF0ZSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjb2x1bW4gY29uZmlndXJhdGlvbiAocmVhZG9ubHkgYWNjZXNzKVxuICAgKi9cbiAgZ2V0Q29sdW1uQ29uZmlnKCk6IFJlYWRvbmx5PENvbHVtbkNvbmZpZzxUPj4ge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbkNvbmZpZztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcm93IGRhdGEgY29udGV4dFxuICAgKi9cbiAgZ2V0Um93RGF0YSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnJvd0RhdGE7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHJvdyBpbmRleFxuICAgKi9cbiAgZ2V0Um93SW5kZXgoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yb3dJbmRleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgbG9hZGluZyBzdGF0ZVxuICAgKi9cbiAgc2V0TG9hZGluZyhpc0xvYWRpbmc6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlLmlzTG9hZGluZyA9IGlzTG9hZGluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgZGlzYWJsZWQgc3RhdGVcbiAgICovXG4gIHNldERpc2FibGVkKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlLmlzRGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCByZWFkb25seSBzdGF0ZVxuICAgKi9cbiAgc2V0UmVhZG9ubHkoaXNSZWFkb25seTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUuaXNSZWFkb25seSA9IGlzUmVhZG9ubHk7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBjdXJyZW50IHN0YXRlIHRvIGhpc3RvcnlcbiAgICovXG4gIHByaXZhdGUgc2F2ZVRvSGlzdG9yeSgpOiB2b2lkIHtcbiAgICAvLyBSZW1vdmUgYW55IHN0YXRlcyBhZnRlciBjdXJyZW50IHBvc2l0aW9uIChmb3IgcmVkbyBpbnZhbGlkYXRpb24pXG4gICAgdGhpcy5oaXN0b3J5ID0gdGhpcy5oaXN0b3J5LnNsaWNlKDAsIHRoaXMuaGlzdG9yeUluZGV4ICsgMSk7XG5cbiAgICAvLyBBZGQgY3VycmVudCBzdGF0ZVxuICAgIHRoaXMuaGlzdG9yeS5wdXNoKGNyZWF0ZU1lbWVudG8odGhpcy5zdGF0ZSkpO1xuICAgIHRoaXMuaGlzdG9yeUluZGV4ID0gdGhpcy5oaXN0b3J5Lmxlbmd0aCAtIDE7XG5cbiAgICAvLyBMaW1pdCBoaXN0b3J5IHNpemVcbiAgICBpZiAodGhpcy5oaXN0b3J5Lmxlbmd0aCA+IHRoaXMubWF4SGlzdG9yeVNpemUpIHtcbiAgICAgIHRoaXMuaGlzdG9yeS5zaGlmdCgpO1xuICAgICAgdGhpcy5oaXN0b3J5SW5kZXgtLTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5kbyBsYXN0IGNoYW5nZVxuICAgKi9cbiAgdW5kbygpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5oaXN0b3J5SW5kZXggPiAwKSB7XG4gICAgICB0aGlzLmhpc3RvcnlJbmRleC0tO1xuICAgICAgY29uc3QgbWVtZW50byA9IHRoaXMuaGlzdG9yeVt0aGlzLmhpc3RvcnlJbmRleF07XG4gICAgICB0aGlzLnN0YXRlID0gcmVzdG9yZUZyb21NZW1lbnRvKHRoaXMuc3RhdGUsIG1lbWVudG8pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWRvIGxhc3QgdW5kb25lIGNoYW5nZVxuICAgKi9cbiAgcmVkbygpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5oaXN0b3J5SW5kZXggPCB0aGlzLmhpc3RvcnkubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5oaXN0b3J5SW5kZXgrKztcbiAgICAgIGNvbnN0IG1lbWVudG8gPSB0aGlzLmhpc3RvcnlbdGhpcy5oaXN0b3J5SW5kZXhdO1xuICAgICAgdGhpcy5zdGF0ZSA9IHJlc3RvcmVGcm9tTWVtZW50byh0aGlzLnN0YXRlLCBtZW1lbnRvKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdW5kbyBpcyBhdmFpbGFibGVcbiAgICovXG4gIGNhblVuZG8oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGlzdG9yeUluZGV4ID4gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiByZWRvIGlzIGF2YWlsYWJsZVxuICAgKi9cbiAgY2FuUmVkbygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oaXN0b3J5SW5kZXggPCB0aGlzLmhpc3RvcnkubGVuZ3RoIC0gMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgY2VsbCBldmVudCBmb3IgaG9va3NcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlRXZlbnQodmFsdWU6IFQsIHByZXZpb3VzVmFsdWU/OiBUKTogQ2VsbEV2ZW50PFQ+IHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWUsXG4gICAgICBwcmV2aW91c1ZhbHVlOiBwcmV2aW91c1ZhbHVlID8/IHRoaXMuc3RhdGUucHJldmlvdXNWYWx1ZSxcbiAgICAgIHJvd0RhdGE6IHRoaXMucm93RGF0YSxcbiAgICAgIGNvbHVtbktleTogdGhpcy5jb2x1bW5Db25maWcua2V5LFxuICAgICAgcm93SW5kZXg6IHRoaXMucm93SW5kZXhcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjZWxsIG1ldGFkYXRhXG4gICAqL1xuICBnZXRNZXRhZGF0YShrZXk6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUubWV0YWRhdGE/LltrZXldO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBjZWxsIG1ldGFkYXRhXG4gICAqL1xuICBzZXRNZXRhZGF0YShrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zdGF0ZS5tZXRhZGF0YSkge1xuICAgICAgdGhpcy5zdGF0ZS5tZXRhZGF0YSA9IHt9O1xuICAgIH1cbiAgICB0aGlzLnN0YXRlLm1ldGFkYXRhW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgbWV0YWRhdGFcbiAgICovXG4gIGNsZWFyTWV0YWRhdGEoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZS5tZXRhZGF0YSA9IHVuZGVmaW5lZDtcbiAgfVxufVxuXG4iXX0=
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Row validation state interface
3
+ * Represents an INVALID row with accumulated cell errors
4
+ * Note: Valid rows are not stored - absence of a row state means the row is valid
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm93LXZhbGlkYXRpb24tc3RhdGUuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtdGFibGUvc3JjL2xpYi9yZW5kZXJlci9tb2RlbHMvcm93LXZhbGlkYXRpb24tc3RhdGUuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJvdyB2YWxpZGF0aW9uIHN0YXRlIGludGVyZmFjZVxuICogUmVwcmVzZW50cyBhbiBJTlZBTElEIHJvdyB3aXRoIGFjY3VtdWxhdGVkIGNlbGwgZXJyb3JzXG4gKiBOb3RlOiBWYWxpZCByb3dzIGFyZSBub3Qgc3RvcmVkIC0gYWJzZW5jZSBvZiBhIHJvdyBzdGF0ZSBtZWFucyB0aGUgcm93IGlzIHZhbGlkXG4gKi9cblxuZXhwb3J0IGludGVyZmFjZSBSb3dWYWxpZGF0aW9uU3RhdGUge1xuICAvKipcbiAgICogSW5kZXggb2YgdGhlIHJvdyBpbiB0aGUgdGFibGVcbiAgICovXG4gIHJvd0luZGV4OiBudW1iZXI7XG4gIFxuICAvKipcbiAgICogQWx3YXlzIGZhbHNlIGZvciBzdG9yZWQgc3RhdGVzIChvbmx5IGludmFsaWQgcm93cyBhcmUgc3RvcmVkKVxuICAgKi9cbiAgaXNWYWxpZDogZmFsc2U7XG4gIFxuICAvKipcbiAgICogTnVtYmVyIG9mIGludmFsaWQgY2VsbHMgaW4gdGhlIHJvd1xuICAgKi9cbiAgaW52YWxpZENlbGxDb3VudDogbnVtYmVyO1xuICBcbiAgLyoqXG4gICAqIE1hcCBvZiBjb2x1bW4ga2V5cyB0byB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzXG4gICAqL1xuICBjZWxsRXJyb3JzOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuICBcbiAgLyoqXG4gICAqIFRpbWVzdGFtcCBvZiB0aGUgbGFzdCB2YWxpZGF0aW9uXG4gICAqL1xuICBsYXN0VmFsaWRhdGVkOiBEYXRlO1xufVxuIl19
@@ -0,0 +1,90 @@
1
+ /**
2
+ * SheetState - Reactive state management for sheet operations
3
+ * Wraps TableState and adds sheet-level state tracking
4
+ */
5
+ import { BehaviorSubject } from 'rxjs';
6
+ import { TableState } from './table-state.class';
7
+ /**
8
+ * SheetState class - Manages sheet-level state and delegates table operations
9
+ */
10
+ export class SheetState {
11
+ /**
12
+ * Constructor
13
+ * @param config Sheet state configuration
14
+ * @param columns Reference to columns array for table state
15
+ * @param tableStateConfig Optional table state configuration
16
+ */
17
+ constructor(config, columns, tableStateConfig) {
18
+ this.id = config.id;
19
+ this.name$ = new BehaviorSubject(config.name);
20
+ // Initialize table state
21
+ this.tableState = new TableState(columns, tableStateConfig);
22
+ // Initialize metadata
23
+ const now = new Date();
24
+ this._metadata$ = new BehaviorSubject({
25
+ createdAt: now,
26
+ lastModified: now,
27
+ lastAccessed: now
28
+ });
29
+ this.metadata$ = this._metadata$.asObservable();
30
+ }
31
+ /**
32
+ * Update sheet name
33
+ * @param name New sheet name
34
+ */
35
+ updateName(name) {
36
+ this.name$.next(name);
37
+ this.updateLastModified();
38
+ }
39
+ /**
40
+ * Get current sheet name
41
+ */
42
+ getName() {
43
+ return this.name$.value;
44
+ }
45
+ /**
46
+ * Get complete state snapshot
47
+ */
48
+ getSnapshot() {
49
+ return {
50
+ id: this.id,
51
+ name: this.name$.value,
52
+ tableStateSnapshot: this.tableState.getState(),
53
+ metadata: this._metadata$.value
54
+ };
55
+ }
56
+ /**
57
+ * Reset sheet state
58
+ */
59
+ reset() {
60
+ this.tableState.reset();
61
+ this.updateLastModified();
62
+ }
63
+ /**
64
+ * Update last accessed timestamp
65
+ */
66
+ updateLastAccessed() {
67
+ const currentMetadata = this._metadata$.value;
68
+ this._metadata$.next({
69
+ ...currentMetadata,
70
+ lastAccessed: new Date()
71
+ });
72
+ }
73
+ /**
74
+ * Update last modified timestamp
75
+ */
76
+ updateLastModified() {
77
+ const currentMetadata = this._metadata$.value;
78
+ this._metadata$.next({
79
+ ...currentMetadata,
80
+ lastModified: new Date()
81
+ });
82
+ }
83
+ /**
84
+ * Get current metadata
85
+ */
86
+ getMetadata() {
87
+ return this._metadata$.value;
88
+ }
89
+ }
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlZXQtc3RhdGUuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC10YWJsZS9zcmMvbGliL3JlbmRlcmVyL21vZGVscy9zaGVldC1zdGF0ZS5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUtqRDs7R0FFRztBQUNILE1BQU0sT0FBTyxVQUFVO0lBc0JyQjs7Ozs7T0FLRztJQUNILFlBQ0UsTUFBd0IsRUFDeEIsT0FBNEIsRUFDNUIsZ0JBQW1DO1FBRW5DLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksZUFBZSxDQUFTLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV0RCx5QkFBeUI7UUFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUU1RCxzQkFBc0I7UUFDdEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksZUFBZSxDQUFnQjtZQUNuRCxTQUFTLEVBQUUsR0FBRztZQUNkLFlBQVksRUFBRSxHQUFHO1lBQ2pCLFlBQVksRUFBRSxHQUFHO1NBQ2xCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNsRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsVUFBVSxDQUFDLElBQVk7UUFDckIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsT0FBTztRQUNMLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVztRQUNULE9BQU87WUFDTCxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDWCxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLO1lBQ3RCLGtCQUFrQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFO1lBQzlDLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUs7U0FDaEMsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUs7UUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRDs7T0FFRztJQUNILGtCQUFrQjtRQUNoQixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztRQUM5QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztZQUNuQixHQUFHLGVBQWU7WUFDbEIsWUFBWSxFQUFFLElBQUksSUFBSSxFQUFFO1NBQ3pCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNLLGtCQUFrQjtRQUN4QixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztRQUM5QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztZQUNuQixHQUFHLGVBQWU7WUFDbEIsWUFBWSxFQUFFLElBQUksSUFBSSxFQUFFO1NBQ3pCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO0lBQy9CLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2hlZXRTdGF0ZSAtIFJlYWN0aXZlIHN0YXRlIG1hbmFnZW1lbnQgZm9yIHNoZWV0IG9wZXJhdGlvbnNcbiAqIFdyYXBzIFRhYmxlU3RhdGUgYW5kIGFkZHMgc2hlZXQtbGV2ZWwgc3RhdGUgdHJhY2tpbmdcbiAqL1xuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRhYmxlU3RhdGUgfSBmcm9tICcuL3RhYmxlLXN0YXRlLmNsYXNzJztcbmltcG9ydCB7IFNoZWV0U3RhdGVDb25maWcsIFNoZWV0TWV0YWRhdGEsIFNoZWV0U3RhdGVTbmFwc2hvdCB9IGZyb20gJy4vc2hlZXQtc3RhdGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IENvbHVtbkNvbmZpZyB9IGZyb20gJy4uLy4uL21vZGVscy9jb2x1bW4tY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBUYWJsZVN0YXRlQ29uZmlnIH0gZnJvbSAnLi90YWJsZS1zdGF0ZS5pbnRlcmZhY2UnO1xuXG4vKipcbiAqIFNoZWV0U3RhdGUgY2xhc3MgLSBNYW5hZ2VzIHNoZWV0LWxldmVsIHN0YXRlIGFuZCBkZWxlZ2F0ZXMgdGFibGUgb3BlcmF0aW9uc1xuICovXG5leHBvcnQgY2xhc3MgU2hlZXRTdGF0ZSB7XG4gIC8qKlxuICAgKiBTaGVldCBpZGVudGl0eVxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSBzaGVldCBuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lJDogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFRhYmxlIHN0YXRlIGluc3RhbmNlIChkZWxlZ2F0ZXMgdGFibGUgb3BlcmF0aW9ucylcbiAgICovXG4gIHJlYWRvbmx5IHRhYmxlU3RhdGU6IFRhYmxlU3RhdGU7XG5cbiAgLyoqXG4gICAqIFNoZWV0IG1ldGFkYXRhXG4gICAqL1xuICBwcml2YXRlIF9tZXRhZGF0YSQ6IEJlaGF2aW9yU3ViamVjdDxTaGVldE1ldGFkYXRhPjtcbiAgcmVhZG9ubHkgbWV0YWRhdGEkOiBPYnNlcnZhYmxlPFNoZWV0TWV0YWRhdGE+O1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0gY29uZmlnIFNoZWV0IHN0YXRlIGNvbmZpZ3VyYXRpb25cbiAgICogQHBhcmFtIGNvbHVtbnMgUmVmZXJlbmNlIHRvIGNvbHVtbnMgYXJyYXkgZm9yIHRhYmxlIHN0YXRlXG4gICAqIEBwYXJhbSB0YWJsZVN0YXRlQ29uZmlnIE9wdGlvbmFsIHRhYmxlIHN0YXRlIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIGNvbmZpZzogU2hlZXRTdGF0ZUNvbmZpZyxcbiAgICBjb2x1bW5zOiBDb2x1bW5Db25maWc8YW55PltdLFxuICAgIHRhYmxlU3RhdGVDb25maWc/OiBUYWJsZVN0YXRlQ29uZmlnXG4gICkge1xuICAgIHRoaXMuaWQgPSBjb25maWcuaWQ7XG4gICAgdGhpcy5uYW1lJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihjb25maWcubmFtZSk7XG5cbiAgICAvLyBJbml0aWFsaXplIHRhYmxlIHN0YXRlXG4gICAgdGhpcy50YWJsZVN0YXRlID0gbmV3IFRhYmxlU3RhdGUoY29sdW1ucywgdGFibGVTdGF0ZUNvbmZpZyk7XG5cbiAgICAvLyBJbml0aWFsaXplIG1ldGFkYXRhXG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICB0aGlzLl9tZXRhZGF0YSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNoZWV0TWV0YWRhdGE+KHtcbiAgICAgIGNyZWF0ZWRBdDogbm93LFxuICAgICAgbGFzdE1vZGlmaWVkOiBub3csXG4gICAgICBsYXN0QWNjZXNzZWQ6IG5vd1xuICAgIH0pO1xuICAgIHRoaXMubWV0YWRhdGEkID0gdGhpcy5fbWV0YWRhdGEkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBzaGVldCBuYW1lXG4gICAqIEBwYXJhbSBuYW1lIE5ldyBzaGVldCBuYW1lXG4gICAqL1xuICB1cGRhdGVOYW1lKG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMubmFtZSQubmV4dChuYW1lKTtcbiAgICB0aGlzLnVwZGF0ZUxhc3RNb2RpZmllZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjdXJyZW50IHNoZWV0IG5hbWVcbiAgICovXG4gIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lJC52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY29tcGxldGUgc3RhdGUgc25hcHNob3RcbiAgICovXG4gIGdldFNuYXBzaG90KCk6IFNoZWV0U3RhdGVTbmFwc2hvdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgbmFtZTogdGhpcy5uYW1lJC52YWx1ZSxcbiAgICAgIHRhYmxlU3RhdGVTbmFwc2hvdDogdGhpcy50YWJsZVN0YXRlLmdldFN0YXRlKCksXG4gICAgICBtZXRhZGF0YTogdGhpcy5fbWV0YWRhdGEkLnZhbHVlXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCBzaGVldCBzdGF0ZVxuICAgKi9cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy50YWJsZVN0YXRlLnJlc2V0KCk7XG4gICAgdGhpcy51cGRhdGVMYXN0TW9kaWZpZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgbGFzdCBhY2Nlc3NlZCB0aW1lc3RhbXBcbiAgICovXG4gIHVwZGF0ZUxhc3RBY2Nlc3NlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50TWV0YWRhdGEgPSB0aGlzLl9tZXRhZGF0YSQudmFsdWU7XG4gICAgdGhpcy5fbWV0YWRhdGEkLm5leHQoe1xuICAgICAgLi4uY3VycmVudE1ldGFkYXRhLFxuICAgICAgbGFzdEFjY2Vzc2VkOiBuZXcgRGF0ZSgpXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGxhc3QgbW9kaWZpZWQgdGltZXN0YW1wXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZUxhc3RNb2RpZmllZCgpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50TWV0YWRhdGEgPSB0aGlzLl9tZXRhZGF0YSQudmFsdWU7XG4gICAgdGhpcy5fbWV0YWRhdGEkLm5leHQoe1xuICAgICAgLi4uY3VycmVudE1ldGFkYXRhLFxuICAgICAgbGFzdE1vZGlmaWVkOiBuZXcgRGF0ZSgpXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGN1cnJlbnQgbWV0YWRhdGFcbiAgICovXG4gIGdldE1ldGFkYXRhKCk6IFNoZWV0TWV0YWRhdGEge1xuICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YSQudmFsdWU7XG4gIH1cbn1cblxuIl19
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Sheet state interfaces for state management
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlZXQtc3RhdGUuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtdGFibGUvc3JjL2xpYi9yZW5kZXJlci9tb2RlbHMvc2hlZXQtc3RhdGUuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTaGVldCBzdGF0ZSBpbnRlcmZhY2VzIGZvciBzdGF0ZSBtYW5hZ2VtZW50XG4gKi9cblxuaW1wb3J0IHsgVGFibGVTdGF0ZVNuYXBzaG90IH0gZnJvbSAnLi90YWJsZS10eXBlcyc7XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBpbml0aWFsaXppbmcgU2hlZXRTdGF0ZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNoZWV0U3RhdGVDb25maWcge1xuICAvKipcbiAgICogU2hlZXQgSURcbiAgICovXG4gIGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluaXRpYWwgc2hlZXQgbmFtZVxuICAgKi9cbiAgbmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNoZWV0IG1ldGFkYXRhIHRyYWNraW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2hlZXRNZXRhZGF0YSB7XG4gIC8qKlxuICAgKiBXaGVuIHRoZSBzaGVldCB3YXMgY3JlYXRlZFxuICAgKi9cbiAgY3JlYXRlZEF0OiBEYXRlO1xuXG4gIC8qKlxuICAgKiBXaGVuIHRoZSBzaGVldCB3YXMgbGFzdCBtb2RpZmllZFxuICAgKi9cbiAgbGFzdE1vZGlmaWVkOiBEYXRlO1xuXG4gIC8qKlxuICAgKiBXaGVuIHRoZSBzaGVldCB3YXMgbGFzdCBhY2Nlc3NlZFxuICAgKi9cbiAgbGFzdEFjY2Vzc2VkOiBEYXRlO1xufVxuXG4vKipcbiAqIENvbXBsZXRlIHNuYXBzaG90IG9mIHNoZWV0IHN0YXRlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2hlZXRTdGF0ZVNuYXBzaG90IHtcbiAgLyoqXG4gICAqIFNoZWV0IElEXG4gICAqL1xuICBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTaGVldCBuYW1lXG4gICAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRhYmxlIHN0YXRlIHNuYXBzaG90XG4gICAqL1xuICB0YWJsZVN0YXRlU25hcHNob3Q6IFRhYmxlU3RhdGVTbmFwc2hvdDtcblxuICAvKipcbiAgICogU2hlZXQgbWV0YWRhdGFcbiAgICovXG4gIG1ldGFkYXRhOiBTaGVldE1ldGFkYXRhO1xufVxuXG4iXX0=