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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/{fesm2020 → fesm2022}/aquera-ngx-smart-table.mjs +1579 -2101
  2. package/fesm2022/aquera-ngx-smart-table.mjs.map +1 -0
  3. package/package.json +8 -16
  4. package/types/aquera-ngx-smart-table.d.ts +5909 -0
  5. package/aquera-ngx-smart-table.d.ts +0 -5
  6. package/esm2020/aquera-ngx-smart-table.mjs +0 -5
  7. package/esm2020/lib/builder/components/builder-preview/builder-preview.component.mjs +0 -63
  8. package/esm2020/lib/builder/components/builder-toolbar/builder-toolbar.component.mjs +0 -115
  9. package/esm2020/lib/builder/components/column-editor/column-editor.component.mjs +0 -206
  10. package/esm2020/lib/builder/components/column-list/column-list.component.mjs +0 -125
  11. package/esm2020/lib/builder/components/definition-builder/definition-builder.component.mjs +0 -105
  12. package/esm2020/lib/builder/components/table-config-editor/table-config-editor.component.mjs +0 -132
  13. package/esm2020/lib/builder/definition-builder.module.mjs +0 -70
  14. package/esm2020/lib/builder/models/builder-state.interface.mjs +0 -5
  15. package/esm2020/lib/builder/services/definition-builder.service.mjs +0 -251
  16. package/esm2020/lib/builder/services/definition-export.service.mjs +0 -167
  17. package/esm2020/lib/builder/services/definition-import.service.mjs +0 -193
  18. package/esm2020/lib/builder/services/sample-data-generator.service.mjs +0 -126
  19. package/esm2020/lib/builder/utils/config-validator.util.mjs +0 -165
  20. package/esm2020/lib/builder/utils/typescript-generator.util.mjs +0 -206
  21. package/esm2020/lib/editors/index.mjs +0 -9
  22. package/esm2020/lib/editors/nile-autocomplete-editor.mjs +0 -228
  23. package/esm2020/lib/editors/nile-calendar-editor.mjs +0 -211
  24. package/esm2020/lib/editors/nile-date-picker-editor.mjs +0 -188
  25. package/esm2020/lib/editors/nile-input-editor.mjs +0 -235
  26. package/esm2020/lib/editors/nile-select-editor.mjs +0 -498
  27. package/esm2020/lib/factories/column-config.factory.mjs +0 -231
  28. package/esm2020/lib/models/autosave-config.interface.mjs +0 -8
  29. package/esm2020/lib/models/base-column-config.class.mjs +0 -253
  30. package/esm2020/lib/models/cell-strategies.interface.mjs +0 -6
  31. package/esm2020/lib/models/cell-types.mjs +0 -147
  32. package/esm2020/lib/models/column-action.interface.mjs +0 -6
  33. package/esm2020/lib/models/column-config.interface.mjs +0 -43
  34. package/esm2020/lib/models/column-config.utils.mjs +0 -101
  35. package/esm2020/lib/models/row-action.interface.mjs +0 -5
  36. package/esm2020/lib/models/row-validator.interface.mjs +0 -2
  37. package/esm2020/lib/models/schema-validation.interface.mjs +0 -2
  38. package/esm2020/lib/models/sheet-action.interface.mjs +0 -5
  39. package/esm2020/lib/models/sheet-config.interface.mjs +0 -5
  40. package/esm2020/lib/models/table-config.interface.mjs +0 -107
  41. package/esm2020/lib/models/table-validator.interface.mjs +0 -2
  42. package/esm2020/lib/models/workbook-action.interface.mjs +0 -5
  43. package/esm2020/lib/models/workbook-config.interface.mjs +0 -5
  44. package/esm2020/lib/renderer/components/st-add-column-button/st-add-column-button.component.mjs +0 -24
  45. package/esm2020/lib/renderer/components/st-cell/st-cell.component.mjs +0 -397
  46. package/esm2020/lib/renderer/components/st-column-editor-modal/st-column-editor-modal.component.mjs +0 -103
  47. package/esm2020/lib/renderer/components/st-column-filter/st-column-filter.component.mjs +0 -383
  48. package/esm2020/lib/renderer/components/st-column-menu/st-column-menu.component.mjs +0 -232
  49. package/esm2020/lib/renderer/components/st-column-visibility/st-column-visibility.component.mjs +0 -97
  50. package/esm2020/lib/renderer/components/st-header/st-header.component.mjs +0 -157
  51. package/esm2020/lib/renderer/components/st-pagination/st-pagination.component.mjs +0 -87
  52. package/esm2020/lib/renderer/components/st-row-actions-dropdown/st-row-actions-dropdown.component.mjs +0 -167
  53. package/esm2020/lib/renderer/components/st-sheet/st-sheet.component.mjs +0 -165
  54. package/esm2020/lib/renderer/components/st-sheet-actions/st-sheet-actions.component.mjs +0 -112
  55. package/esm2020/lib/renderer/components/st-table/st-table.component.mjs +0 -1453
  56. package/esm2020/lib/renderer/components/st-table-actions/st-table-actions.component.mjs +0 -169
  57. package/esm2020/lib/renderer/components/st-workbook/st-workbook.component.mjs +0 -581
  58. package/esm2020/lib/renderer/directives/click-outside.directive.mjs +0 -28
  59. package/esm2020/lib/renderer/directives/st-column-resize.directive.mjs +0 -108
  60. package/esm2020/lib/renderer/directives/st-keyboard-navigation.directive.mjs +0 -83
  61. package/esm2020/lib/renderer/models/cell-state.interface.mjs +0 -66
  62. package/esm2020/lib/renderer/models/cell.class.mjs +0 -389
  63. package/esm2020/lib/renderer/models/row-validation-state.interface.mjs +0 -7
  64. package/esm2020/lib/renderer/models/sheet-state.class.mjs +0 -90
  65. package/esm2020/lib/renderer/models/sheet-state.interface.mjs +0 -5
  66. package/esm2020/lib/renderer/models/table-state.class.mjs +0 -871
  67. package/esm2020/lib/renderer/models/table-state.interface.mjs +0 -5
  68. package/esm2020/lib/renderer/models/table-types.mjs +0 -29
  69. package/esm2020/lib/renderer/models/table-validation-state.interface.mjs +0 -7
  70. package/esm2020/lib/renderer/models/workbook-state.class.mjs +0 -174
  71. package/esm2020/lib/renderer/models/workbook-state.interface.mjs +0 -5
  72. package/esm2020/lib/renderer/models/z-index.enum.mjs +0 -55
  73. package/esm2020/lib/schemas/table-config.schema.mjs +0 -472
  74. package/esm2020/lib/services/autosave.service.mjs +0 -92
  75. package/esm2020/lib/services/custom-validation-rules.util.mjs +0 -124
  76. package/esm2020/lib/services/json-schema-validator.service.mjs +0 -216
  77. package/esm2020/lib/services/row-validation.service.mjs +0 -42
  78. package/esm2020/lib/services/validation-logger.service.mjs +0 -177
  79. package/esm2020/lib/services/virtual-scroll.service.mjs +0 -52
  80. package/esm2020/lib/shared/shared-table-components.module.mjs +0 -35
  81. package/esm2020/lib/smart-table.module.mjs +0 -124
  82. package/esm2020/lib/strategies/default-editors.mjs +0 -433
  83. package/esm2020/lib/strategies/default-formatters.mjs +0 -238
  84. package/esm2020/lib/strategies/default-validators.mjs +0 -327
  85. package/esm2020/public-api.mjs +0 -146
  86. package/fesm2015/aquera-ngx-smart-table.mjs +0 -12347
  87. package/fesm2015/aquera-ngx-smart-table.mjs.map +0 -1
  88. package/fesm2020/aquera-ngx-smart-table.mjs.map +0 -1
  89. package/lib/builder/components/builder-preview/builder-preview.component.d.ts +0 -31
  90. package/lib/builder/components/builder-toolbar/builder-toolbar.component.d.ts +0 -53
  91. package/lib/builder/components/column-editor/column-editor.component.d.ts +0 -69
  92. package/lib/builder/components/column-list/column-list.component.d.ts +0 -65
  93. package/lib/builder/components/definition-builder/definition-builder.component.d.ts +0 -58
  94. package/lib/builder/components/table-config-editor/table-config-editor.component.d.ts +0 -32
  95. package/lib/builder/definition-builder.module.d.ts +0 -15
  96. package/lib/builder/models/builder-state.interface.d.ts +0 -93
  97. package/lib/builder/services/definition-builder.service.d.ts +0 -80
  98. package/lib/builder/services/definition-export.service.d.ts +0 -59
  99. package/lib/builder/services/definition-import.service.d.ts +0 -31
  100. package/lib/builder/services/sample-data-generator.service.d.ts +0 -41
  101. package/lib/builder/utils/config-validator.util.d.ts +0 -32
  102. package/lib/builder/utils/typescript-generator.util.d.ts +0 -29
  103. package/lib/editors/index.d.ts +0 -8
  104. package/lib/editors/nile-autocomplete-editor.d.ts +0 -102
  105. package/lib/editors/nile-calendar-editor.d.ts +0 -88
  106. package/lib/editors/nile-date-picker-editor.d.ts +0 -97
  107. package/lib/editors/nile-input-editor.d.ts +0 -67
  108. package/lib/editors/nile-select-editor.d.ts +0 -113
  109. package/lib/factories/column-config.factory.d.ts +0 -73
  110. package/lib/models/autosave-config.interface.d.ts +0 -23
  111. package/lib/models/base-column-config.class.d.ts +0 -115
  112. package/lib/models/cell-strategies.interface.d.ts +0 -188
  113. package/lib/models/cell-types.d.ts +0 -337
  114. package/lib/models/column-action.interface.d.ts +0 -86
  115. package/lib/models/column-config.interface.d.ts +0 -272
  116. package/lib/models/column-config.utils.d.ts +0 -37
  117. package/lib/models/row-action.interface.d.ts +0 -86
  118. package/lib/models/row-validator.interface.d.ts +0 -37
  119. package/lib/models/schema-validation.interface.d.ts +0 -42
  120. package/lib/models/sheet-action.interface.d.ts +0 -59
  121. package/lib/models/sheet-config.interface.d.ts +0 -41
  122. package/lib/models/table-config.interface.d.ts +0 -251
  123. package/lib/models/table-validator.interface.d.ts +0 -40
  124. package/lib/models/workbook-action.interface.d.ts +0 -95
  125. package/lib/models/workbook-config.interface.d.ts +0 -107
  126. package/lib/renderer/components/st-add-column-button/st-add-column-button.component.d.ts +0 -9
  127. package/lib/renderer/components/st-cell/st-cell.component.d.ts +0 -69
  128. package/lib/renderer/components/st-column-editor-modal/st-column-editor-modal.component.d.ts +0 -39
  129. package/lib/renderer/components/st-column-filter/st-column-filter.component.d.ts +0 -139
  130. package/lib/renderer/components/st-column-menu/st-column-menu.component.d.ts +0 -81
  131. package/lib/renderer/components/st-column-visibility/st-column-visibility.component.d.ts +0 -44
  132. package/lib/renderer/components/st-header/st-header.component.d.ts +0 -93
  133. package/lib/renderer/components/st-pagination/st-pagination.component.d.ts +0 -42
  134. package/lib/renderer/components/st-row-actions-dropdown/st-row-actions-dropdown.component.d.ts +0 -67
  135. package/lib/renderer/components/st-sheet/st-sheet.component.d.ts +0 -98
  136. package/lib/renderer/components/st-sheet-actions/st-sheet-actions.component.d.ts +0 -58
  137. package/lib/renderer/components/st-table/st-table.component.d.ts +0 -380
  138. package/lib/renderer/components/st-table-actions/st-table-actions.component.d.ts +0 -77
  139. package/lib/renderer/components/st-workbook/st-workbook.component.d.ts +0 -275
  140. package/lib/renderer/directives/click-outside.directive.d.ts +0 -10
  141. package/lib/renderer/directives/st-column-resize.directive.d.ts +0 -44
  142. package/lib/renderer/directives/st-keyboard-navigation.directive.d.ts +0 -19
  143. package/lib/renderer/models/cell-state.interface.d.ts +0 -118
  144. package/lib/renderer/models/cell.class.d.ts +0 -174
  145. package/lib/renderer/models/row-validation-state.interface.d.ts +0 -27
  146. package/lib/renderer/models/sheet-state.class.d.ts +0 -67
  147. package/lib/renderer/models/sheet-state.interface.d.ts +0 -55
  148. package/lib/renderer/models/table-state.class.d.ts +0 -320
  149. package/lib/renderer/models/table-state.interface.d.ts +0 -18
  150. package/lib/renderer/models/table-types.d.ts +0 -228
  151. package/lib/renderer/models/table-validation-state.interface.d.ts +0 -34
  152. package/lib/renderer/models/workbook-state.class.d.ts +0 -117
  153. package/lib/renderer/models/workbook-state.interface.d.ts +0 -71
  154. package/lib/renderer/models/z-index.enum.d.ts +0 -44
  155. package/lib/schemas/table-config.schema.d.ts +0 -455
  156. package/lib/services/autosave.service.d.ts +0 -73
  157. package/lib/services/custom-validation-rules.util.d.ts +0 -12
  158. package/lib/services/json-schema-validator.service.d.ts +0 -49
  159. package/lib/services/row-validation.service.d.ts +0 -17
  160. package/lib/services/validation-logger.service.d.ts +0 -87
  161. package/lib/services/virtual-scroll.service.d.ts +0 -44
  162. package/lib/shared/shared-table-components.module.d.ts +0 -9
  163. package/lib/smart-table.module.d.ts +0 -26
  164. package/lib/strategies/default-editors.d.ts +0 -109
  165. package/lib/strategies/default-formatters.d.ts +0 -116
  166. package/lib/strategies/default-validators.d.ts +0 -113
  167. package/public-api.d.ts +0 -70
  168. package/src/lib/builder/README.md +0 -30
  169. package/src/lib/editors/README.md +0 -303
  170. package/src/lib/renderer/components/st-column-filter/README.md +0 -286
@@ -1,28 +0,0 @@
1
- import { Directive, EventEmitter, HostListener, Output } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class ClickOutsideDirective {
4
- constructor(el) {
5
- this.el = el;
6
- this.clickOutside = new EventEmitter();
7
- }
8
- onClick(target) {
9
- const clickedInside = this.el.nativeElement.contains(target);
10
- if (!clickedInside) {
11
- this.clickOutside.emit();
12
- }
13
- }
14
- }
15
- ClickOutsideDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ClickOutsideDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
16
- ClickOutsideDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.4.0", type: ClickOutsideDirective, selector: "[clickOutside]", outputs: { clickOutside: "clickOutside" }, host: { listeners: { "document:click": "onClick($event.target)" } }, ngImport: i0 });
17
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ClickOutsideDirective, decorators: [{
18
- type: Directive,
19
- args: [{
20
- selector: '[clickOutside]'
21
- }]
22
- }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { clickOutside: [{
23
- type: Output
24
- }], onClick: [{
25
- type: HostListener,
26
- args: ['document:click', ['$event.target']]
27
- }] } });
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpY2stb3V0c2lkZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC10YWJsZS9zcmMvbGliL3JlbmRlcmVyL2RpcmVjdGl2ZXMvY2xpY2stb3V0c2lkZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLMUYsTUFBTSxPQUFPLHFCQUFxQjtJQUdoQyxZQUFvQixFQUFjO1FBQWQsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUZ4QixpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFFYixDQUFDO0lBR3RDLE9BQU8sQ0FBQyxNQUFtQjtRQUN6QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNsQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQzFCO0lBQ0gsQ0FBQzs7a0hBWFUscUJBQXFCO3NHQUFyQixxQkFBcUI7MkZBQXJCLHFCQUFxQjtrQkFIakMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO2lCQUMzQjtpR0FFVyxZQUFZO3NCQUFyQixNQUFNO2dCQUtQLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbY2xpY2tPdXRzaWRlXSdcbn0pXG5leHBvcnQgY2xhc3MgQ2xpY2tPdXRzaWRlRGlyZWN0aXZlIHtcbiAgQE91dHB1dCgpIGNsaWNrT3V0c2lkZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWw6IEVsZW1lbnRSZWYpIHt9XG4gIFxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50LnRhcmdldCddKVxuICBvbkNsaWNrKHRhcmdldDogSFRNTEVsZW1lbnQpIHtcbiAgICBjb25zdCBjbGlja2VkSW5zaWRlID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHRhcmdldCk7XG4gICAgaWYgKCFjbGlja2VkSW5zaWRlKSB7XG4gICAgICB0aGlzLmNsaWNrT3V0c2lkZS5lbWl0KCk7XG4gICAgfVxuICB9XG59XG5cbiJdfQ==
@@ -1,108 +0,0 @@
1
- /**
2
- * Column Resize Directive
3
- * Handles column resizing when applied to th/td elements
4
- */
5
- import { Directive, HostListener, Input, Output, EventEmitter } from '@angular/core';
6
- import * as i0 from "@angular/core";
7
- export class StColumnResizeDirective {
8
- constructor(el) {
9
- this.el = el;
10
- /**
11
- * Emits when column is resized
12
- */
13
- this.columnResized = new EventEmitter();
14
- /**
15
- * Resize state
16
- */
17
- this.isResizing = false;
18
- this.startX = 0;
19
- this.startWidth = 0;
20
- /**
21
- * Track mouse movement during resize
22
- */
23
- this.onResizeMove = (event) => {
24
- if (!this.isResizing) {
25
- return;
26
- }
27
- const deltaX = event.pageX - this.startX;
28
- let newWidth = this.startWidth + deltaX;
29
- // Apply constraints
30
- const minWidth = this.column.minWidth ?? 50;
31
- const maxWidth = this.column.maxWidth;
32
- newWidth = Math.max(minWidth, newWidth);
33
- if (maxWidth) {
34
- newWidth = Math.min(maxWidth, newWidth);
35
- }
36
- // Update column width (mutate Flyweight config)
37
- this.column.width = newWidth;
38
- // Update element width immediately for visual feedback
39
- // this.el.nativeElement.style.width = `${newWidth}px`;
40
- };
41
- /**
42
- * End resize on mouseup
43
- */
44
- this.onResizeEnd = () => {
45
- if (!this.isResizing) {
46
- return;
47
- }
48
- this.isResizing = false;
49
- // Emit event with old and new width
50
- const resizeEvent = {
51
- columnKey: this.column.key,
52
- oldWidth: this.startWidth,
53
- newWidth: this.column.width,
54
- column: this.column
55
- };
56
- this.columnResized.emit(resizeEvent);
57
- // Remove global listeners
58
- document.removeEventListener('mousemove', this.onResizeMove);
59
- document.removeEventListener('mouseup', this.onResizeEnd);
60
- };
61
- }
62
- /**
63
- * Start resize on mousedown
64
- */
65
- onResizeStart(event) {
66
- // Check if click is on the resize handle span element
67
- const target = event.target;
68
- const isResizeHandle = target.classList.contains('resize-handle') ||
69
- target.closest('.resize-handle') !== null;
70
- if (!isResizeHandle) {
71
- return;
72
- }
73
- if (this.column.resizable === false) {
74
- return;
75
- }
76
- event.preventDefault();
77
- event.stopPropagation();
78
- this.isResizing = true;
79
- this.startX = event.pageX;
80
- this.startWidth = this.column.width || 100;
81
- // Attach global listeners
82
- document.addEventListener('mousemove', this.onResizeMove);
83
- document.addEventListener('mouseup', this.onResizeEnd);
84
- }
85
- /**
86
- * Cleanup on destroy
87
- */
88
- ngOnDestroy() {
89
- document.removeEventListener('mousemove', this.onResizeMove);
90
- document.removeEventListener('mouseup', this.onResizeEnd);
91
- }
92
- }
93
- StColumnResizeDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StColumnResizeDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
94
- StColumnResizeDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.4.0", type: StColumnResizeDirective, selector: "[stColumnResize]", inputs: { column: "column" }, outputs: { columnResized: "columnResized" }, host: { listeners: { "mousedown": "onResizeStart($event)" } }, ngImport: i0 });
95
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StColumnResizeDirective, decorators: [{
96
- type: Directive,
97
- args: [{
98
- selector: '[stColumnResize]'
99
- }]
100
- }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { column: [{
101
- type: Input
102
- }], columnResized: [{
103
- type: Output
104
- }], onResizeStart: [{
105
- type: HostListener,
106
- args: ['mousedown', ['$event']]
107
- }] } });
108
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3QtY29sdW1uLXJlc2l6ZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC10YWJsZS9zcmMvbGliL3JlbmRlcmVyL2RpcmVjdGl2ZXMvc3QtY29sdW1uLXJlc2l6ZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQWEsTUFBTSxlQUFlLENBQUM7O0FBTzVHLE1BQU0sT0FBTyx1QkFBdUI7SUFrQmxDLFlBQW9CLEVBQTJCO1FBQTNCLE9BQUUsR0FBRixFQUFFLENBQXlCO1FBWi9DOztXQUVHO1FBQ08sa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBcUIsQ0FBQztRQUVoRTs7V0FFRztRQUNLLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsV0FBTSxHQUFHLENBQUMsQ0FBQztRQUNYLGVBQVUsR0FBRyxDQUFDLENBQUM7UUFrQ3ZCOztXQUVHO1FBQ0ssaUJBQVksR0FBRyxDQUFDLEtBQWlCLEVBQVEsRUFBRTtZQUNqRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDcEIsT0FBTzthQUNSO1lBRUQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ3pDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO1lBRXhDLG9CQUFvQjtZQUNwQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDNUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7WUFFdEMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFD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YW5kbGVzIGNvbHVtbiByZXNpemluZyB3aGVuIGFwcGxpZWQgdG8gdGgvdGQgZWxlbWVudHNcbiAqL1xuXG5pbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbHVtbkNvbmZpZyB9IGZyb20gJy4uLy4uL21vZGVscy9jb2x1bW4tY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDb2x1bW5SZXNpemVFdmVudCB9IGZyb20gJy4uL21vZGVscy90YWJsZS10eXBlcyc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tzdENvbHVtblJlc2l6ZV0nXG59KVxuZXhwb3J0IGNsYXNzIFN0Q29sdW1uUmVzaXplRGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIENvbHVtbiBjb25maWd1cmF0aW9uXG4gICAqL1xuICBASW5wdXQoKSBjb2x1bW4hOiBDb2x1bW5Db25maWc8YW55PjtcblxuICAvKipcbiAgICogRW1pdHMgd2hlbiBjb2x1bW4gaXMgcmVzaXplZFxuICAgKi9cbiAgQE91dHB1dCgpIGNvbHVtblJlc2l6ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPENvbHVtblJlc2l6ZUV2ZW50PigpO1xuXG4gIC8qKlxuICAgKiBSZXNpemUgc3RhdGVcbiAgICovXG4gIHByaXZhdGUgaXNSZXNpemluZyA9IGZhbHNlO1xuICBwcml2YXRlIHN0YXJ0WCA9IDA7XG4gIHByaXZhdGUgc3RhcnRXaWR0aCA9IDA7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pIHt9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHJlc2l6ZSBvbiBtb3VzZWRvd25cbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlZG93bicsIFsnJGV2ZW50J10pXG4gIG9uUmVzaXplU3RhcnQoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBDaGVjayBpZiBjbGljayBpcyBvbiB0aGUgcmVzaXplIGhhbmRsZSBzcGFuIGVsZW1lbnRcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgY29uc3QgaXNSZXNpemVIYW5kbGUgPSB0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdyZXNpemUtaGFuZGxlJykgfHwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQuY2xvc2VzdCgnLnJlc2l6ZS1oYW5kbGUnKSAhPT0gbnVsbDtcblxuICAgIGlmICghaXNSZXNpemVIYW5kbGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb2x1bW4ucmVzaXphYmxlID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICB0aGlzLmlzUmVzaXppbmcgPSB0cnVlO1xuICAgIHRoaXMuc3RhcnRYID0gZXZlbnQucGFnZVg7XG4gICAgdGhpcy5zdGFydFdpZHRoID0gKHRoaXMuY29sdW1uLndpZHRoIGFzIG51bWJlcikgfHwgMTAwO1xuXG4gICAgLy8gQXR0YWNoIGdsb2JhbCBsaXN0ZW5lcnNcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uUmVzaXplTW92ZSk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMub25SZXNpemVFbmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYWNrIG1vdXNlIG1vdmVtZW50IGR1cmluZyByZXNpemVcbiAgICovXG4gIHByaXZhdGUgb25SZXNpemVNb3ZlID0gKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCA9PiB7XG4gICAgaWYgKCF0aGlzLmlzUmVzaXppbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkZWx0YVggPSBldmVudC5wYWdlWCAtIHRoaXMuc3RhcnRYO1xuICAgIGxldCBuZXdXaWR0aCA9IHRoaXMuc3RhcnRXaWR0aCArIGRlbHRhWDtcblxuICAgIC8vIEFwcGx5IGNvbnN0cmFpbnRzXG4gICAgY29uc3QgbWluV2lkdGggPSB0aGlzLmNvbHVtbi5taW5XaWR0aCA/PyA1MDtcbiAgICBjb25zdCBtYXhXaWR0aCA9IHRoaXMuY29sdW1uLm1heFdpZHRoO1xuXG4gICAgbmV3V2lkdGggPSBNYXRoLm1heChtaW5XaWR0aCwgbmV3V2lkdGgpO1xuICAgIGlmIChtYXhXaWR0aCkge1xuICAgICAgbmV3V2lkdGggPSBNYXRoLm1pbihtYXhXaWR0aCwgbmV3V2lkdGgpO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBjb2x1bW4gd2lkdGggKG11dGF0ZSBGbHl3ZWlnaHQgY29uZmlnKVxuICAgICh0aGlzLmNvbHVtbiBhcyBhbnkpLndpZHRoID0gbmV3V2lkdGg7XG4gICAgXG4gICAgLy8gVXBkYXRlIGVsZW1lbnQgd2lkdGggaW1tZWRpYXRlbHkgZm9yIHZpc3VhbCBmZWVkYmFja1xuICAgIC8vIHRoaXMuZWwubmF0aXZlRWxlbWVudC5zdHlsZS53aWR0aCA9IGAke25ld1dpZHRofXB4YDtcbiAgfTtcblxuICAvKipcbiAgICogRW5kIHJlc2l6ZSBvbiBtb3VzZXVwXG4gICAqL1xuICBwcml2YXRlIG9uUmVzaXplRW5kID0gKCk6IHZvaWQgPT4ge1xuICAgIGlmICghdGhpcy5pc1Jlc2l6aW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5pc1Jlc2l6aW5nID0gZmFsc2U7XG5cbiAgICAvLyBFbWl0IGV2ZW50IHdpdGggb2xkIGFuZCBuZXcgd2lkdGhcbiAgICBjb25zdCByZXNpemVFdmVudDogQ29sdW1uUmVzaXplRXZlbnQgPSB7XG4gICAgICBjb2x1bW5LZXk6IHRoaXMuY29sdW1uLmtleSxcbiAgICAgIG9sZFdpZHRoOiB0aGlzLnN0YXJ0V2lkdGgsXG4gICAgICBuZXdXaWR0aDogKHRoaXMuY29sdW1uLndpZHRoIGFzIG51bWJlcikhLFxuICAgICAgY29sdW1uOiB0aGlzLmNvbHVtblxuICAgIH07XG4gICAgdGhpcy5jb2x1bW5SZXNpemVkLmVtaXQocmVzaXplRXZlbnQpO1xuXG4gICAgLy8gUmVtb3ZlIGdsb2JhbCBsaXN0ZW5lcnNcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uUmVzaXplTW92ZSk7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMub25SZXNpemVFbmQpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDbGVhbnVwIG9uIGRlc3Ryb3lcbiAgICovXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMub25SZXNpemVNb3ZlKTtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vblJlc2l6ZUVuZCk7XG4gIH1cbn1cblxuIl19
@@ -1,83 +0,0 @@
1
- import { Directive, HostListener, Input } from '@angular/core';
2
- import { NavigationKey, NavigationDirection } from '../../models/cell-types';
3
- import * as i0 from "@angular/core";
4
- /**
5
- * Directive to handle keyboard navigation in table cells
6
- */
7
- export class StKeyboardNavigationDirective {
8
- constructor() {
9
- /**
10
- * When enabled, pressing arrow down at the last row will emit requestAddRow event
11
- */
12
- this.addRowOnNavigatePastEnd = false;
13
- }
14
- onKeyDown(event) {
15
- if (!this.tableState.isNavigationActive()) {
16
- return;
17
- }
18
- const isEditing = this.tableState.isAnyCellEditing();
19
- // Use NavigationKey enum for type-safe key checking
20
- switch (event.key) {
21
- case NavigationKey.ARROW_UP:
22
- case NavigationKey.ARROW_DOWN:
23
- case NavigationKey.ARROW_LEFT:
24
- case NavigationKey.ARROW_RIGHT:
25
- // Allow navigation when NOT editing
26
- if (isEditing)
27
- return;
28
- event.preventDefault();
29
- const direction = this.getDirection(event.key);
30
- if (direction) {
31
- // Pass addRowOnNavigatePastEnd only for DOWN direction
32
- const addRowEnabled = direction === NavigationDirection.DOWN && this.addRowOnNavigatePastEnd;
33
- this.tableState.moveFocus(direction, addRowEnabled);
34
- }
35
- break;
36
- case NavigationKey.ENTER:
37
- // Navigate down when NOT editing (Excel-like behavior)
38
- if (isEditing)
39
- return; // Let cell component handle save
40
- event.preventDefault();
41
- this.tableState.moveFocus(NavigationDirection.DOWN, this.addRowOnNavigatePastEnd);
42
- break;
43
- case NavigationKey.TAB:
44
- // Navigate left/right when NOT editing (Excel-like behavior)
45
- if (isEditing)
46
- return; // Let cell component handle save
47
- event.preventDefault();
48
- this.tableState.moveFocus(event.shiftKey ? NavigationDirection.LEFT : NavigationDirection.RIGHT);
49
- break;
50
- }
51
- }
52
- /**
53
- * Convert navigation key to direction using enums
54
- */
55
- getDirection(key) {
56
- const map = {
57
- [NavigationKey.ARROW_UP]: NavigationDirection.UP,
58
- [NavigationKey.ARROW_DOWN]: NavigationDirection.DOWN,
59
- [NavigationKey.ARROW_LEFT]: NavigationDirection.LEFT,
60
- [NavigationKey.ARROW_RIGHT]: NavigationDirection.RIGHT,
61
- [NavigationKey.TAB]: null,
62
- [NavigationKey.ENTER]: null,
63
- [NavigationKey.ESCAPE]: null
64
- };
65
- return map[key];
66
- }
67
- }
68
- StKeyboardNavigationDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StKeyboardNavigationDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
69
- StKeyboardNavigationDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.4.0", type: StKeyboardNavigationDirective, selector: "[stKeyboardNavigation]", inputs: { tableState: "tableState", addRowOnNavigatePastEnd: "addRowOnNavigatePastEnd" }, host: { listeners: { "keydown": "onKeyDown($event)" } }, ngImport: i0 });
70
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StKeyboardNavigationDirective, decorators: [{
71
- type: Directive,
72
- args: [{
73
- selector: '[stKeyboardNavigation]'
74
- }]
75
- }], propDecorators: { tableState: [{
76
- type: Input
77
- }], addRowOnNavigatePastEnd: [{
78
- type: Input
79
- }], onKeyDown: [{
80
- type: HostListener,
81
- args: ['keydown', ['$event']]
82
- }] } });
83
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Qta2V5Ym9hcmQtbmF2aWdhdGlvbi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC10YWJsZS9zcmMvbGliL3JlbmRlcmVyL2RpcmVjdGl2ZXMvc3Qta2V5Ym9hcmQtbmF2aWdhdGlvbi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9ELE9BQU8sRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7QUFFN0U7O0dBRUc7QUFJSCxNQUFNLE9BQU8sNkJBQTZCO0lBSDFDO1FBTUU7O1dBRUc7UUFDTSw0QkFBdUIsR0FBWSxLQUFLLENBQUM7S0ErRG5EO0lBNURDLFNBQVMsQ0FBQyxLQUFvQjtRQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFO1lBQ3pDLE9BQU87U0FDUjtRQUVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUVyRCxvREFBb0Q7UUFDcEQsUUFBUSxLQUFLLENBQUMsR0FBb0IsRUFBRTtZQUNsQyxLQUFLLGFBQWEsQ0FBQyxRQUFRLENBQUM7WUFDNUIsS0FBSyxhQUFhLENBQUMsVUFBVSxDQUFDO1lBQzlCLEtBQUssYUFBYSxDQUFDLFVBQVUsQ0FBQztZQUM5QixLQUFLLGFBQWEsQ0FBQyxXQUFXO2dCQUM1QixvQ0FBb0M7Z0JBQ3BDLElBQUksU0FBUztvQkFBRSxPQUFPO2dCQUV0QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQW9CLENBQUMsQ0FBQztnQkFDaEUsSUFBSSxTQUFTLEVBQUU7b0JBQ2IsdURBQXVEO29CQUN2RCxNQUFNLGFBQWEsR0FBRyxTQUFTLEtBQUssbUJBQW1CLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztvQkFDN0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDO2lCQUNyRDtnQkFDRCxNQUFNO1lBRVIsS0FBSyxhQUFhLENBQUMsS0FBSztnQkFDdEIsdURBQXVEO2dCQUN2RCxJQUFJLFNBQVM7b0JBQUUsT0FBTyxDQUFDLGlDQUFpQztnQkFFeEQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7Z0JBQ2xGLE1BQU07WUFFUixLQUFLLGFBQWEsQ0FBQyxHQUFHO2dCQUNwQiw2REFBNkQ7Z0JBQzdELElBQUksU0FBUztvQkFBRSxPQUFPLENBQUMsaUNBQWlDO2dCQUV4RCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUN2QixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FDdEUsQ0FBQztnQkFDRixNQUFNO1NBQ1Q7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxZQUFZLENBQUMsR0FBa0I7UUFDckMsTUFBTSxHQUFHLEdBQXNEO1lBQzdELENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLEVBQUU7WUFDaEQsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLEVBQUUsbUJBQW1CLENBQUMsSUFBSTtZQUNwRCxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxJQUFJO1lBQ3BELENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLEtBQUs7WUFDdEQsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSTtZQUN6QixDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJO1lBQzNCLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUk7U0FDN0IsQ0FBQztRQUNGLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7OzBIQXBFVSw2QkFBNkI7OEdBQTdCLDZCQUE2QjsyRkFBN0IsNkJBQTZCO2tCQUh6QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx3QkFBd0I7aUJBQ25DOzhCQUVVLFVBQVU7c0JBQWxCLEtBQUs7Z0JBS0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUdOLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEhvc3RMaXN0ZW5lciwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRhYmxlU3RhdGUgfSBmcm9tICcuLi9tb2RlbHMvdGFibGUtc3RhdGUuY2xhc3MnO1xuaW1wb3J0IHsgTmF2aWdhdGlvbktleSwgTmF2aWdhdGlvbkRpcmVjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9jZWxsLXR5cGVzJztcblxuLyoqXG4gKiBEaXJlY3RpdmUgdG8gaGFuZGxlIGtleWJvYXJkIG5hdmlnYXRpb24gaW4gdGFibGUgY2VsbHNcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3N0S2V5Ym9hcmROYXZpZ2F0aW9uXSdcbn0pXG5leHBvcnQgY2xhc3MgU3RLZXlib2FyZE5hdmlnYXRpb25EaXJlY3RpdmUge1xuICBASW5wdXQoKSB0YWJsZVN0YXRlITogVGFibGVTdGF0ZTtcbiAgXG4gIC8qKlxuICAgKiBXaGVuIGVuYWJsZWQsIHByZXNzaW5nIGFycm93IGRvd24gYXQgdGhlIGxhc3Qgcm93IHdpbGwgZW1pdCByZXF1ZXN0QWRkUm93IGV2ZW50XG4gICAqL1xuICBASW5wdXQoKSBhZGRSb3dPbk5hdmlnYXRlUGFzdEVuZDogYm9vbGVhbiA9IGZhbHNlO1xuICBcbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy50YWJsZVN0YXRlLmlzTmF2aWdhdGlvbkFjdGl2ZSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGlzRWRpdGluZyA9IHRoaXMudGFibGVTdGF0ZS5pc0FueUNlbGxFZGl0aW5nKCk7XG4gICAgXG4gICAgLy8gVXNlIE5hdmlnYXRpb25LZXkgZW51bSBmb3IgdHlwZS1zYWZlIGtleSBjaGVja2luZ1xuICAgIHN3aXRjaCAoZXZlbnQua2V5IGFzIE5hdmlnYXRpb25LZXkpIHtcbiAgICAgIGNhc2UgTmF2aWdhdGlvbktleS5BUlJPV19VUDpcbiAgICAgIGNhc2UgTmF2aWdhdGlvbktleS5BUlJPV19ET1dOOlxuICAgICAgY2FzZSBOYXZpZ2F0aW9uS2V5LkFSUk9XX0xFRlQ6XG4gICAgICBjYXNlIE5hdmlnYXRpb25LZXkuQVJST1dfUklHSFQ6XG4gICAgICAgIC8vIEFsbG93IG5hdmlnYXRpb24gd2hlbiBOT1QgZWRpdGluZ1xuICAgICAgICBpZiAoaXNFZGl0aW5nKSByZXR1cm47XG4gICAgICAgIFxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSB0aGlzLmdldERpcmVjdGlvbihldmVudC5rZXkgYXMgTmF2aWdhdGlvbktleSk7XG4gICAgICAgIGlmIChkaXJlY3Rpb24pIHtcbiAgICAgICAgICAvLyBQYXNzIGFkZFJvd09uTmF2aWdhdGVQYXN0RW5kIG9ubHkgZm9yIERPV04gZGlyZWN0aW9uXG4gICAgICAgICAgY29uc3QgYWRkUm93RW5hYmxlZCA9IGRpcmVjdGlvbiA9PT0gTmF2aWdhdGlvbkRpcmVjdGlvbi5ET1dOICYmIHRoaXMuYWRkUm93T25OYXZpZ2F0ZVBhc3RFbmQ7XG4gICAgICAgICAgdGhpcy50YWJsZVN0YXRlLm1vdmVGb2N1cyhkaXJlY3Rpb24sIGFkZFJvd0VuYWJsZWQpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgICBcbiAgICAgIGNhc2UgTmF2aWdhdGlvbktleS5FTlRFUjpcbiAgICAgICAgLy8gTmF2aWdhdGUgZG93biB3aGVuIE5PVCBlZGl0aW5nIChFeGNlbC1saWtlIGJlaGF2aW9yKVxuICAgICAgICBpZiAoaXNFZGl0aW5nKSByZXR1cm47IC8vIExldCBjZWxsIGNvbXBvbmVudCBoYW5kbGUgc2F2ZVxuICAgICAgICBcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy50YWJsZVN0YXRlLm1vdmVGb2N1cyhOYXZpZ2F0aW9uRGlyZWN0aW9uLkRPV04sIHRoaXMuYWRkUm93T25OYXZpZ2F0ZVBhc3RFbmQpO1xuICAgICAgICBicmVhaztcbiAgICAgICAgXG4gICAgICBjYXNlIE5hdmlnYXRpb25LZXkuVEFCOlxuICAgICAgICAvLyBOYXZpZ2F0ZSBsZWZ0L3JpZ2h0IHdoZW4gTk9UIGVkaXRpbmcgKEV4Y2VsLWxpa2UgYmVoYXZpb3IpXG4gICAgICAgIGlmIChpc0VkaXRpbmcpIHJldHVybjsgLy8gTGV0IGNlbGwgY29tcG9uZW50IGhhbmRsZSBzYXZlXG4gICAgICAgIFxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnRhYmxlU3RhdGUubW92ZUZvY3VzKFxuICAgICAgICAgIGV2ZW50LnNoaWZ0S2V5ID8gTmF2aWdhdGlvbkRpcmVjdGlvbi5MRUZUIDogTmF2aWdhdGlvbkRpcmVjdGlvbi5SSUdIVFxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDb252ZXJ0IG5hdmlnYXRpb24ga2V5IHRvIGRpcmVjdGlvbiB1c2luZyBlbnVtc1xuICAgKi9cbiAgcHJpdmF0ZSBnZXREaXJlY3Rpb24oa2V5OiBOYXZpZ2F0aW9uS2V5KTogTmF2aWdhdGlvbkRpcmVjdGlvbiB8IG51bGwge1xuICAgIGNvbnN0IG1hcDogUmVjb3JkPE5hdmlnYXRpb25LZXksIE5hdmlnYXRpb25EaXJlY3Rpb24gfCBudWxsPiA9IHtcbiAgICAgIFtOYXZpZ2F0aW9uS2V5LkFSUk9XX1VQXTogTmF2aWdhdGlvbkRpcmVjdGlvbi5VUCxcbiAgICAgIFtOYXZpZ2F0aW9uS2V5LkFSUk9XX0RPV05dOiBOYXZpZ2F0aW9uRGlyZWN0aW9uLkRPV04sXG4gICAgICBbTmF2aWdhdGlvbktleS5BUlJPV19MRUZUXTogTmF2aWdhdGlvbkRpcmVjdGlvbi5MRUZULFxuICAgICAgW05hdmlnYXRpb25LZXkuQVJST1dfUklHSFRdOiBOYXZpZ2F0aW9uRGlyZWN0aW9uLlJJR0hULFxuICAgICAgW05hdmlnYXRpb25LZXkuVEFCXTogbnVsbCxcbiAgICAgIFtOYXZpZ2F0aW9uS2V5LkVOVEVSXTogbnVsbCxcbiAgICAgIFtOYXZpZ2F0aW9uS2V5LkVTQ0FQRV06IG51bGxcbiAgICB9O1xuICAgIHJldHVybiBtYXBba2V5XTtcbiAgfVxufVxuIl19
@@ -1,66 +0,0 @@
1
- /**
2
- * Cell state interface - represents unique state per cell instance
3
- * This is the "Context" in the Flyweight pattern
4
- */
5
- import { CellLifecycleState } from '../../models/cell-types';
6
- /**
7
- * Factory function to create initial cell state with defaults
8
- */
9
- export function createCellState(value, overrides) {
10
- return {
11
- value,
12
- isEditing: false,
13
- isDirty: false,
14
- isFocused: false,
15
- previousValue: value,
16
- originalValue: value,
17
- lifecycleState: CellLifecycleState.DISPLAY,
18
- ...overrides
19
- };
20
- }
21
- /**
22
- * Create a memento snapshot of cell state
23
- */
24
- export function createMemento(state) {
25
- return {
26
- value: state.value,
27
- isDirty: state.isDirty,
28
- error: state.error,
29
- metadata: state.metadata ? { ...state.metadata } : undefined,
30
- timestamp: new Date()
31
- };
32
- }
33
- /**
34
- * Restore cell state from memento
35
- */
36
- export function restoreFromMemento(currentState, memento) {
37
- return {
38
- ...currentState,
39
- value: memento.value,
40
- isDirty: memento.isDirty,
41
- error: memento.error,
42
- metadata: memento.metadata ? { ...memento.metadata } : currentState.metadata
43
- };
44
- }
45
- /**
46
- * Helper to check if cell is in valid state
47
- */
48
- export function isCellValid(state) {
49
- return !state.error && (!state.errors || Object.keys(state.errors).length === 0);
50
- }
51
- /**
52
- * Helper to check if cell can be edited
53
- */
54
- export function canEdit(state) {
55
- return !state.isDisabled &&
56
- !state.isReadonly &&
57
- !state.isLoading &&
58
- state.lifecycleState !== CellLifecycleState.SAVING;
59
- }
60
- /**
61
- * Helper to check if cell is in display mode
62
- */
63
- export function isDisplayMode(state) {
64
- return state.lifecycleState === CellLifecycleState.DISPLAY && !state.isEditing;
65
- }
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1zdGF0ZS5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC10YWJsZS9zcmMvbGliL3JlbmRlcmVyL21vZGVscy9jZWxsLXN0YXRlLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQWtHN0Q7O0dBRUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFJLEtBQVEsRUFBRSxTQUFpQztJQUM1RSxPQUFPO1FBQ0wsS0FBSztRQUNMLFNBQVMsRUFBRSxLQUFLO1FBQ2hCLE9BQU8sRUFBRSxLQUFLO1FBQ2QsU0FBUyxFQUFFLEtBQUs7UUFDaEIsYUFBYSxFQUFFLEtBQUs7UUFDcEIsYUFBYSxFQUFFLEtBQUs7UUFDcEIsY0FBYyxFQUFFLGtCQUFrQixDQUFDLE9BQU87UUFDMUMsR0FBRyxTQUFTO0tBQ2IsQ0FBQztBQUNKLENBQUM7QUFjRDs7R0FFRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQUksS0FBbUI7SUFDbEQsT0FBTztRQUNMLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztRQUNsQixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87UUFDdEIsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO1FBQ2xCLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTO1FBQzVELFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRTtLQUN0QixDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUNoQyxZQUEwQixFQUMxQixPQUE0QjtJQUU1QixPQUFPO1FBQ0wsR0FBRyxZQUFZO1FBQ2YsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO1FBQ3BCLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztRQUN4QixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7UUFDcEIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxRQUFRO0tBQzdFLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFJLEtBQW1CO0lBQ2hELE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNuRixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsT0FBTyxDQUFJLEtBQW1CO0lBQzVDLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVTtRQUNqQixDQUFDLEtBQUssQ0FBQyxVQUFVO1FBQ2pCLENBQUMsS0FBSyxDQUFDLFNBQVM7UUFDaEIsS0FBSyxDQUFDLGNBQWMsS0FBSyxrQkFBa0IsQ0FBQyxNQUFNLENBQUM7QUFDNUQsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBSSxLQUFtQjtJQUNsRCxPQUFPLEtBQUssQ0FBQyxjQUFjLEtBQUssa0JBQWtCLENBQUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztBQUNqRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDZWxsIHN0YXRlIGludGVyZmFjZSAtIHJlcHJlc2VudHMgdW5pcXVlIHN0YXRlIHBlciBjZWxsIGluc3RhbmNlXG4gKiBUaGlzIGlzIHRoZSBcIkNvbnRleHRcIiBpbiB0aGUgRmx5d2VpZ2h0IHBhdHRlcm5cbiAqL1xuXG5pbXBvcnQgeyBDZWxsTGlmZWN5Y2xlU3RhdGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvY2VsbC10eXBlcyc7XG5cbi8qKlxuICogQ2VsbCBzdGF0ZSBjb250YWluaW5nIGFsbCB1bmlxdWUgc3RhdGUgcGVyIGNlbGwgaW5zdGFuY2VcbiAqIFRoaXMgaXMgc3RvcmVkIGluZGl2aWR1YWxseSBwZXIgY2VsbCwgd2hpbGUgQ29sdW1uQ29uZmlnIGlzIHNoYXJlZCAoRmx5d2VpZ2h0KVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENlbGxTdGF0ZTxUID0gYW55PiB7XG4gIC8qKlxuICAgKiBDdXJyZW50IGNlbGwgdmFsdWVcbiAgICovXG4gIHZhbHVlOiBUO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBjZWxsIGlzIGN1cnJlbnRseSBpbiBlZGl0IG1vZGVcbiAgICovXG4gIGlzRWRpdGluZzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgY2VsbCB2YWx1ZSBoYXMgYmVlbiBtb2RpZmllZFxuICAgKi9cbiAgaXNEaXJ0eTogYm9vbGVhbjtcblxuICAvKipcbiAgICogUHJldmlvdXMgdmFsdWUgYmVmb3JlIGN1cnJlbnQgZWRpdCAoZm9yIHVuZG8vY2FuY2VsKVxuICAgKi9cbiAgcHJldmlvdXNWYWx1ZT86IFQ7XG5cbiAgLyoqXG4gICAqIE9yaWdpbmFsIHZhbHVlIHdoZW4gY2VsbCB3YXMgaW5pdGlhbGl6ZWQgKGZvciByZXNldClcbiAgICovXG4gIG9yaWdpbmFsVmFsdWU/OiBUO1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0aW9uIGVycm9yIG1lc3NhZ2UgaWYgdmFsaWRhdGlvbiBmYWlsZWRcbiAgICovXG4gIGVycm9yPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNdWx0aXBsZSB2YWxpZGF0aW9uIGVycm9ycyAoZmllbGQtc3BlY2lmaWMpXG4gICAqL1xuICBlcnJvcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBXYXJuaW5nIG1lc3NhZ2VzIChub24tYmxvY2tpbmcpXG4gICAqL1xuICB3YXJuaW5ncz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBDdXJyZW50IGxpZmVjeWNsZSBzdGF0ZSBvZiB0aGUgY2VsbFxuICAgKi9cbiAgbGlmZWN5Y2xlU3RhdGU6IENlbGxMaWZlY3ljbGVTdGF0ZTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgY2VsbCBpcyBjdXJyZW50bHkgbG9hZGluZyAoYXN5bmMgb3BlcmF0aW9ucylcbiAgICovXG4gIGlzTG9hZGluZz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNlbGwgaXMgZGlzYWJsZWRcbiAgICovXG4gIGlzRGlzYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBjZWxsIGlzIHJlYWRvbmx5XG4gICAqL1xuICBpc1JlYWRvbmx5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgY2VsbCBpcyBzZWxlY3RlZFxuICAgKi9cbiAgaXNTZWxlY3RlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNlbGwgaXMgZm9jdXNlZFxuICAgKi9cbiAgaXNGb2N1c2VkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgY2VsbCBpcyBob3ZlcmVkXG4gICAqL1xuICBpc0hvdmVyZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gbWV0YWRhdGEgZm9yIGNlbGwtc3BlY2lmaWMgZGF0YVxuICAgKi9cbiAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG4gIC8qKlxuICAgKiBUaW1lc3RhbXAgb2YgbGFzdCBtb2RpZmljYXRpb25cbiAgICovXG4gIGxhc3RNb2RpZmllZD86IERhdGU7XG5cbiAgLyoqXG4gICAqIFRpbWVzdGFtcCBvZiBsYXN0IHZhbGlkYXRpb25cbiAgICovXG4gIGxhc3RWYWxpZGF0ZWQ/OiBEYXRlO1xufVxuXG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGluaXRpYWwgY2VsbCBzdGF0ZSB3aXRoIGRlZmF1bHRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDZWxsU3RhdGU8VD4odmFsdWU6IFQsIG92ZXJyaWRlcz86IFBhcnRpYWw8Q2VsbFN0YXRlPFQ+Pik6IENlbGxTdGF0ZTxUPiB7XG4gIHJldHVybiB7XG4gICAgdmFsdWUsXG4gICAgaXNFZGl0aW5nOiBmYWxzZSxcbiAgICBpc0RpcnR5OiBmYWxzZSxcbiAgICBpc0ZvY3VzZWQ6IGZhbHNlLFxuICAgIHByZXZpb3VzVmFsdWU6IHZhbHVlLFxuICAgIG9yaWdpbmFsVmFsdWU6IHZhbHVlLFxuICAgIGxpZmVjeWNsZVN0YXRlOiBDZWxsTGlmZWN5Y2xlU3RhdGUuRElTUExBWSxcbiAgICAuLi5vdmVycmlkZXNcbiAgfTtcbn1cblxuLyoqXG4gKiBDZWxsIHN0YXRlIG1lbWVudG8gZm9yIHNhdmUvcmVzdG9yZSBvcGVyYXRpb25zIChNZW1lbnRvIHBhdHRlcm4pXG4gKiBDb250YWlucyBtaW5pbWFsIHN0YXRlIG5lZWRlZCBmb3IgdW5kby9yZWRvXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2VsbFN0YXRlTWVtZW50bzxUID0gYW55PiB7XG4gIHZhbHVlOiBUO1xuICBpc0RpcnR5OiBib29sZWFuO1xuICBlcnJvcj86IHN0cmluZztcbiAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICB0aW1lc3RhbXA6IERhdGU7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgbWVtZW50byBzbmFwc2hvdCBvZiBjZWxsIHN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNZW1lbnRvPFQ+KHN0YXRlOiBDZWxsU3RhdGU8VD4pOiBDZWxsU3RhdGVNZW1lbnRvPFQ+IHtcbiAgcmV0dXJuIHtcbiAgICB2YWx1ZTogc3RhdGUudmFsdWUsXG4gICAgaXNEaXJ0eTogc3RhdGUuaXNEaXJ0eSxcbiAgICBlcnJvcjogc3RhdGUuZXJyb3IsXG4gICAgbWV0YWRhdGE6IHN0YXRlLm1ldGFkYXRhID8geyAuLi5zdGF0ZS5tZXRhZGF0YSB9IDogdW5kZWZpbmVkLFxuICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKVxuICB9O1xufVxuXG4vKipcbiAqIFJlc3RvcmUgY2VsbCBzdGF0ZSBmcm9tIG1lbWVudG9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc3RvcmVGcm9tTWVtZW50bzxUPihcbiAgY3VycmVudFN0YXRlOiBDZWxsU3RhdGU8VD4sXG4gIG1lbWVudG86IENlbGxTdGF0ZU1lbWVudG88VD5cbik6IENlbGxTdGF0ZTxUPiB7XG4gIHJldHVybiB7XG4gICAgLi4uY3VycmVudFN0YXRlLFxuICAgIHZhbHVlOiBtZW1lbnRvLnZhbHVlLFxuICAgIGlzRGlydHk6IG1lbWVudG8uaXNEaXJ0eSxcbiAgICBlcnJvcjogbWVtZW50by5lcnJvcixcbiAgICBtZXRhZGF0YTogbWVtZW50by5tZXRhZGF0YSA/IHsgLi4ubWVtZW50by5tZXRhZGF0YSB9IDogY3VycmVudFN0YXRlLm1ldGFkYXRhXG4gIH07XG59XG5cbi8qKlxuICogSGVscGVyIHRvIGNoZWNrIGlmIGNlbGwgaXMgaW4gdmFsaWQgc3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2VsbFZhbGlkPFQ+KHN0YXRlOiBDZWxsU3RhdGU8VD4pOiBib29sZWFuIHtcbiAgcmV0dXJuICFzdGF0ZS5lcnJvciAmJiAoIXN0YXRlLmVycm9ycyB8fCBPYmplY3Qua2V5cyhzdGF0ZS5lcnJvcnMpLmxlbmd0aCA9PT0gMCk7XG59XG5cbi8qKlxuICogSGVscGVyIHRvIGNoZWNrIGlmIGNlbGwgY2FuIGJlIGVkaXRlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FuRWRpdDxUPihzdGF0ZTogQ2VsbFN0YXRlPFQ+KTogYm9vbGVhbiB7XG4gIHJldHVybiAhc3RhdGUuaXNEaXNhYmxlZCAmJiBcbiAgICAgICAgICFzdGF0ZS5pc1JlYWRvbmx5ICYmIFxuICAgICAgICAgIXN0YXRlLmlzTG9hZGluZyAmJlxuICAgICAgICAgc3RhdGUubGlmZWN5Y2xlU3RhdGUgIT09IENlbGxMaWZlY3ljbGVTdGF0ZS5TQVZJTkc7XG59XG5cbi8qKlxuICogSGVscGVyIHRvIGNoZWNrIGlmIGNlbGwgaXMgaW4gZGlzcGxheSBtb2RlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Rpc3BsYXlNb2RlPFQ+KHN0YXRlOiBDZWxsU3RhdGU8VD4pOiBib29sZWFuIHtcbiAgcmV0dXJuIHN0YXRlLmxpZmVjeWNsZVN0YXRlID09PSBDZWxsTGlmZWN5Y2xlU3RhdGUuRElTUExBWSAmJiAhc3RhdGUuaXNFZGl0aW5nO1xufVxuXG4iXX0=